#define BUFFER1_SIZE (countof(Tx1Buffer)-1) #define BUFFER2_SIZE (countof(Tx2Buffer)-1) #define EEPROM_READ_ADDR1 ((uint16_t)0x001F) #define EEPROM_WRITE_ADDR1 ((uint16_t)0x001F) #define EEPROM_READ_ADDR2 ((uint16_t)0x1F3F) #define EEPROM_WRITE_ADDR2 ((uint16_t)0x1F3F) /* Private macro -------------------------------------------------------------*/ #define countof(a) (sizeof(a) / sizeof(*(a))) /* Private variables ---------------------------------------------------------*/ const uint8_t Tx1Buffer[] = "ABC"; const uint8_t Tx2Buffer[] = "DEFG"; uint8_t Rx1Buffer[BUFFER1_SIZE]; uint8_t Rx2Buffer[BUFFER2_SIZE]; /* Private functions ---------------------------------------------------------*/ static TestStatus Buffercmp(uint8_t* pBuffer1, uint8_t* pBuffer2, uint32_t BufferLength); void initEEPROM(void) { /*------------- Initialize sEE_DevStructure -------------*/ sEE_DevStructure.sEEAddress = EEPROM_ADDRESS; sEE_DevStructure.sEEPageSize = EEPROM_PAGE_SIZE; sEE_DevStructure.sEEMemoryAddrMode = sEE_OPT_16BIT_REG; /*-------------- Initialize sEE peripheral -------------*/ sEE_StructInit(&sEE_DevStructure); sEE_Init(&sEE_DevStructure); } void testEEPROM(void) { initEEPROM(); // Phase1 : Write data from Tx1_Buffer // then Read data in Rx1_Buffer // Write Data in EEPROM sEE_WriteBuffer(&sEE_DevStructure, (uint8_t*)Tx1Buffer, EEPROM_WRITE_ADDR1, BUFFER1_SIZE); // Wait until communication is complete while((sEE_GetEepromState(&sEE_DevStructure) != sEE_STATE_IDLE) && (sEE_GetEepromState(&sEE_DevStructure) != sEE_STATE_ERROR)) { // Application may perform other tasks while CPAL write operation is ongoing } // Read Data from EEPROM sEE_ReadBuffer(&sEE_DevStructure, Rx1Buffer, EEPROM_READ_ADDR1, BUFFER1_SIZE); // Wail until communication is complete while((sEE_GetEepromState(&sEE_DevStructure) != sEE_STATE_IDLE) && (sEE_GetEepromState(&sEE_DevStructure) != sEE_STATE_ERROR)) { // Application may perform other tasks while CPAL read operation is ongoing } // if Error Occurred reset sEE state if (sEE_DevStructure.sEEState == sEE_STATE_ERROR) { sEE_DevStructure.sEEState = sEE_STATE_IDLE; } // Phase2 : Write data from Tx2_Buffer // then Read data in Rx2_Buffer // Write Data in EEPROM sEE_WriteBuffer(&sEE_DevStructure, (uint8_t*)Tx2Buffer, EEPROM_WRITE_ADDR2, BUFFER2_SIZE); // Wail until communication is complete while((sEE_GetEepromState(&sEE_DevStructure) != sEE_STATE_IDLE) && (sEE_GetEepromState(&sEE_DevStructure) != sEE_STATE_ERROR)) { // Application may perform other tasks while CPAL write operation is ongoing } // Read Data from EEPROM sEE_ReadBuffer(&sEE_DevStructure, Rx2Buffer, EEPROM_READ_ADDR2, BUFFER2_SIZE); // Wail until communication is complete while((sEE_GetEepromState(&sEE_DevStructure) != sEE_STATE_IDLE) && (sEE_GetEepromState(&sEE_DevStructure) != sEE_STATE_ERROR)) { // Application may perform other tasks while CPAL read operation is ongoing } // if Error Occurred reset sEE state if (sEE_DevStructure.sEEState == sEE_STATE_ERROR) { sEE_DevStructure.sEEState = sEE_STATE_IDLE; } // Turn all leds off testLED_off(TESTLED1); testLED_off(TESTLED2); testLED_off(TESTLED3); // Test transfer phase 1 if (Buffercmp ((uint8_t*)Tx1Buffer,Rx1Buffer,BUFFER1_SIZE) == PASSED ) { // Turn on LED if Transfer1 Passed testLED_on(TESTLED1); } else { // Turn on LED if Transfer1 Failed testLED_on(TESTLED3); } // Test transfer phase 2 if (Buffercmp ((uint8_t*)Tx2Buffer,Rx2Buffer,BUFFER2_SIZE) == PASSED ) { // Turn on LED if Transfer2 Passed testLED_on(TESTLED2); } else { // Turn on LED6 if Transfer2 Failed testLED_on(TESTLED3); } // Deinitialize peripheral sEE_DeInit(&sEE_DevStructure); }