void EepBufWrTask()
{
if(GetUserTimer(TIMER_ID_PAGE_WR))
{
if(eepBufWrCtrl.queLen > 0)
{
if(eepPageWrCtrl.bPageWr == 0)
{
eepPageWrCtrl.len = eepBufWrCtrl.wrLen[eepBufWrCtrl.tail];
eepPageWrCtrl.addr = eepBufWrCtrl.chipAddr[eepBufWrCtrl.tail];
eepPageWrCtrl.pBuf = &eepBufWrCtrl.buf[eepBufWrCtrl.tail][0];
eepPageWrCtrl.bPageWr = 1;
eepPageWrCtrl.wrCnt = 0;
eepPageWrCtrl.remainByteNum = eepPageWrCtrl.len;
eepPageWrCtrl.pageBoundary = 0;
while(eepPageWrCtrl.pageBoundary <= eepPageWrCtrl.addr)
eepPageWrCtrl.pageBoundary += PAGE_SZIE;
}
EepPageWrTask();
if(eepPageWrCtrl.bPageWr == 0)
{
eepBufWrCtrl.queLen --;
eepBufWrCtrl.tail ++;
if(eepBufWrCtrl.tail == 3)
eepBufWrCtrl.tail = 0;
}
}
SetUserTimer(TIMER_ID_PAGE_WR,2);
}
}
void EepPageWrTask()
{
unsigned char temp;
short temp1;
unsigned char tempLen;
unsigned short *pTemp;
if(eepPageWrCtrl.remainByteNum > 0)
{
temp = eepPageWrCtrl.pageBoundary - eepPageWrCtrl.addr;
temp1 = eepPageWrCtrl.remainByteNum - temp;
if(temp1 > 0)
{
tempLen = temp;
eepPageWrCtrl.pageBoundary += PAGE_SZIE;
}
else
{
tempLen = eepPageWrCtrl.remainByteNum;
eepPageWrCtrl.bPageWr = 0;
}
pTemp = eepPageWrCtrl.pBuf + eepPageWrCtrl.wrCnt;
WriteI2C_Eep_polling(eepPageWrCtrl.addr,tempLen,pTemp);
eepPageWrCtrl.remainByteNum -= tempLen;
eepPageWrCtrl.addr += tempLen;
eepPageWrCtrl.wrCnt += tempLen;
}
}
unsigned char StartupEepBufWr(unsigned char *pBuf,unsigned char len,unsigned char addr)
{
int i;
unsigned char rt;
if(eepBufWrCtrl.queLen < 3)
{
eepBufWrCtrl.chipAddr[eepBufWrCtrl.head] = addr;
eepBufWrCtrl.wrLen[eepBufWrCtrl.head] = len;
for(i = 0; i < len; i++)
eepBufWrCtrl.buf[eepBufWrCtrl.head][i] = *(pBuf +i);
eepBufWrCtrl.queLen ++;
eepBufWrCtrl.head ++;
if(eepBufWrCtrl.head == 3)
eepBufWrCtrl.head = 0;
rt = 1;
}
else
rt = 0;
return rt;
}
#define EEP_BUF_SIZE 32
typedef struct __EEP_PAGE_WR_CTRL
{
unsigned char remainByteNum;
unsigned char bPageWr;
unsigned short pageBoundary;
unsigned short addr;
unsigned char len;
unsigned char *pBuf;
unsigned char wrCnt;
} _EEP_PAGE_WR_CTRL;
typedef struct __EEP_BUF_WR_QUE_CTRL
{
unsigned char queLen;
unsigned char head;
unsigned char tail;
unsigned char buf[3][EEP_BUF_SIZE];
unsigned char wrLen[3];
unsigned char chipAddr[3];
} _EEP_BUF_WR_QUE_CTRL;
_EEP_PAGE_WR_CTRL eepPageWrCtrl = {.remainByteNum = 0,.bPageWr = 0,};
_EEP_BUF_WR_QUE_CTRL eepBufWrCtrl = {.queLen = 0,.head = 0,.tail = 0};