70 lines
1.2 KiB
C
70 lines
1.2 KiB
C
#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;
|
|
} |