1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- // ----------------------------------------------------------------------------
- // FRAM.h -
- // ----------------------------------------------------------------------------
- // Beschreibung: FRAM (FM25V02) Defines und Prototypen
- // HW: BMS-Master, IPE 362-02-02R0
- // Revision: 12. Mai 2012 T. Blank, IPE : neu,
- // 16.Juli 2012 T.Maurer, IPE : FSMs,IF
- // ----------------------------------------------------------------------------
- #ifndef _FRAM_H_
- #define _FRAM_H_
- //SPI-Konfiguration
- //extern const DSPI_config_t FRAM_SPI_Config;
- #define WREN_OPC 0b00000110 // Set Write Enable Latch
- #define WRDI_OPC 0b00000100 // Write Disable
- #define RDSR_OPC 0b00000101 // Read Status Register
- #define WRSR_OPC 0b00000001 // Write Status Register
- #define READ_OPC 0b00000011 // Read Memory Data
- #define FSTRD_OPC 0b00001011 // Fast Read Memora Data
- #define WRITE_OPC 0b00000010 // Write Memory Data
- #define SLEEP_OPC 0b10111001 // Enter Sleep Mode
- #define RDID_OPC 0b10011111 // Read Device ID
- #define SNR_OPC 0b11000011 // Read S/N
- typedef struct {
- enum {Fram_Idle=0,Fram_Write_1,Fram_Write_2,Fram_Write_3,Fram_Read_1,Fram_Read_2,Fram_Read_3} FsmState;
- enum {NoTask,RamWrite,RamRead,RamTest} TaskTrigger;
- uint8_t FramTest_state;
- uint16_t Addr;
- vuint8_t *datastart;
- uint8_t num_data;
- uint8_t n_RxDummies;
- union {
- uint8_t R;
- struct {
- uint8_t JobFinished:1;
- uint8_t FSM_TO:1;
- uint8_t rsvd:6;
- } B;
- } Flags;
- } FramStatus_t;
- //====================================================================
- // API
- extern int8_t FRAM_init(void);
- //init des SPI-Moduls, der IO-Steuer-Pins und des Status
- extern int8_t FRAM_update(uint8_t tick);
- //ruft FRAM_FSM_update auf.
- //Der Param. "tick" triggert den TimeOut-Zaehler
- // -> (tick=1 jede 1ms, tick=0 sonst)
- //bei einem TimeOut-Event wird FRAM_init aufgerufen und das TO-Flag gesetzt
- //Die FSM kann dadurch im polling-Betrieb aufgerufen werden, also auch ungetaktet.
- extern int8_t FRAM_trigger_write(const vuint16_t Addr, vuint8_t *const data, const vuint8_t num_data);
- //triggert ein Schreiben in den Speicher.
- //Param: Addr = Startadresse; num_data = Anzahl Bytes; *data = DatenArray
- //return -1 wenn num_data < 1
- //return -2 wenn FSM nicht im Leerlauf
- //return -3 wenn Test-Routine läuft
- //return 0 wenn Trigger-Erfolg
- extern int8_t FRAM_trigger_read(const vuint16_t Addr, vuint8_t *const data, vuint8_t num_data);
- //triggert ein Lesen aus dem Speicher.
- //Param: Addr = Startadresse; num_data = Anzahl Bytes; *data = Ziel-DatenArray
- //return -1 wenn num_data < 1
- //return -2 wenn FSM nicht im Leerlauf
- //return -3 wenn Test-Routine läuft
- //return 0 wenn Trigger-Erfolg
- //-----------------------------------------------
- //Test-Modus des RAMs. Waehrend des Tests werden FRAM_trigger_write()
- //und FRAM_trigger_read() blockiert.
- extern int8_t FRAM_trigger_Test(void);
- //Startet eine (den Prozessor nicht blockierende) Test-Routine.
- extern int8_t FRAM_Test_update(void);
- //Fsm der Testroutine.
- #endif /* ifndef*/
|