FRAM.h 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. // ----------------------------------------------------------------------------
  2. // FRAM.h -
  3. // ----------------------------------------------------------------------------
  4. // Beschreibung: FRAM (FM25V02) Defines und Prototypen
  5. // HW: BMS-Master, IPE 362-02-02R0
  6. // Revision: 12. Mai 2012 T. Blank, IPE : neu,
  7. // 16.Juli 2012 T.Maurer, IPE : FSMs,IF
  8. // ----------------------------------------------------------------------------
  9. #ifndef _FRAM_H_
  10. #define _FRAM_H_
  11. //SPI-Konfiguration
  12. //extern const DSPI_config_t FRAM_SPI_Config;
  13. #define WREN_OPC 0b00000110 // Set Write Enable Latch
  14. #define WRDI_OPC 0b00000100 // Write Disable
  15. #define RDSR_OPC 0b00000101 // Read Status Register
  16. #define WRSR_OPC 0b00000001 // Write Status Register
  17. #define READ_OPC 0b00000011 // Read Memory Data
  18. #define FSTRD_OPC 0b00001011 // Fast Read Memora Data
  19. #define WRITE_OPC 0b00000010 // Write Memory Data
  20. #define SLEEP_OPC 0b10111001 // Enter Sleep Mode
  21. #define RDID_OPC 0b10011111 // Read Device ID
  22. #define SNR_OPC 0b11000011 // Read S/N
  23. typedef struct {
  24. enum {Fram_Idle=0,Fram_Write_1,Fram_Write_2,Fram_Write_3,Fram_Read_1,Fram_Read_2,Fram_Read_3} FsmState;
  25. enum {NoTask,RamWrite,RamRead,RamTest} TaskTrigger;
  26. uint8_t FramTest_state;
  27. uint16_t Addr;
  28. vuint8_t *datastart;
  29. uint8_t num_data;
  30. uint8_t n_RxDummies;
  31. union {
  32. uint8_t R;
  33. struct {
  34. uint8_t JobFinished:1;
  35. uint8_t FSM_TO:1;
  36. uint8_t rsvd:6;
  37. } B;
  38. } Flags;
  39. } FramStatus_t;
  40. //====================================================================
  41. // API
  42. extern int8_t FRAM_init(void);
  43. //init des SPI-Moduls, der IO-Steuer-Pins und des Status
  44. extern int8_t FRAM_update(uint8_t tick);
  45. //ruft FRAM_FSM_update auf.
  46. //Der Param. "tick" triggert den TimeOut-Zaehler
  47. // -> (tick=1 jede 1ms, tick=0 sonst)
  48. //bei einem TimeOut-Event wird FRAM_init aufgerufen und das TO-Flag gesetzt
  49. //Die FSM kann dadurch im polling-Betrieb aufgerufen werden, also auch ungetaktet.
  50. extern int8_t FRAM_trigger_write(const vuint16_t Addr, vuint8_t *const data, const vuint8_t num_data);
  51. //triggert ein Schreiben in den Speicher.
  52. //Param: Addr = Startadresse; num_data = Anzahl Bytes; *data = DatenArray
  53. //return -1 wenn num_data < 1
  54. //return -2 wenn FSM nicht im Leerlauf
  55. //return -3 wenn Test-Routine läuft
  56. //return 0 wenn Trigger-Erfolg
  57. extern int8_t FRAM_trigger_read(const vuint16_t Addr, vuint8_t *const data, vuint8_t num_data);
  58. //triggert ein Lesen aus dem Speicher.
  59. //Param: Addr = Startadresse; num_data = Anzahl Bytes; *data = Ziel-DatenArray
  60. //return -1 wenn num_data < 1
  61. //return -2 wenn FSM nicht im Leerlauf
  62. //return -3 wenn Test-Routine läuft
  63. //return 0 wenn Trigger-Erfolg
  64. //-----------------------------------------------
  65. //Test-Modus des RAMs. Waehrend des Tests werden FRAM_trigger_write()
  66. //und FRAM_trigger_read() blockiert.
  67. extern int8_t FRAM_trigger_Test(void);
  68. //Startet eine (den Prozessor nicht blockierende) Test-Routine.
  69. extern int8_t FRAM_Test_update(void);
  70. //Fsm der Testroutine.
  71. #endif /* ifndef*/