#include "i2c.h" #include "eeprom.h" #include "error.h" //--------------definicje-----------------// //24C02 #define DATA_PAGE_ADDR 0x00 #ifdef USE_RTOS #include "FreeRTOS.h" #include "task.h" #define TICK xTaskGetTickCount() #else extern uint32_t tick; // z systick.c #define TICK tick #endif //-----------------funkcje------------------- int8_t eeprom_Initialize(void) { return I2C_Initialize(I2C1); } int8_t eeprom_ReadData(void *data, uint32_t size) { uint8_t tmp,addr,*ptr; int8_t k; uint32_t i; addr=DATA_PAGE_ADDR; ptr=(uint8_t*)data; k=I2C_ReadIadr(I2C1, EEPROM_ADDR, addr, (uint8_t *)data, size); return k; } int8_t eeprom_WriteData(void *data, uint32_t size) { uint8_t *ptr,addr; int8_t k; uint32_t i,tmp; addr=DATA_PAGE_ADDR; ptr=(uint8_t*)data; for(i = 0; i < size; i++) { tmp=TICK; while(1) { k=I2C_WriteIadr(I2C1,EEPROM_ADDR,addr,ptr,1); if( (k==-I2C_BUS_ERROR) || (k==-TIMEOUT) ) { return k; } else if (k==-I2C_SLAVE_NACK) { if( (TICK-tmp) >= 50 ) //czekamy max 50ms return k; else continue; } else break; } ptr++; addr++; } return 0; }