void IIC_send_str(U8 deviceaddr,U16 wordaddr, void *dataddr,U16 size)
{
U8 i;
unsigned char *paddr;
//
paddr = dataddr;
WP_EEP = 0;
StartIIC();
WriteByte(deviceaddr);
ACK_IIC();
if(deviceaddr != RTC_ADDR){
WriteByte(wordaddr >> 8);
ACK_IIC();
}
WriteByte(wordaddr);
ACK_IIC();
for (i=0; i<size; i++)
{
WriteByte(*paddr);
paddr++;
ACK_IIC();
}
StopIIC();
WP_EEP = 1;
}
void IIC_seqreceive_str(U8 deviceaddr,U16 wordaddr, void *rcvaddr,U16 size)
{
U8 i;
unsigned char *pdr;
pdr = rcvaddr;
StartIIC();
WriteByte(deviceaddr); //发送器件地址,即DEVICE ADDRESS。
ACK_IIC();
if(deviceaddr != RTC_ADDR){
WriteByte(wordaddr >> 8); //发送字地址hige,即WORD ADDRESS。
ACK_IIC();
}
WriteByte(wordaddr); //发送字地址low,即WORD ADDRESS。
ACK_IIC();
StartIIC(); //重新启动总线。
WriteByte(deviceaddr + 1); //发送读命令和器件地址DEVICE ADDRESS。
ACK_IIC();
for (i=0; i<size-1; i++)
{
*pdr = Readbyte();
pdr ++;
ACK_IIC();
SDA_IIC=1;
}
*pdr = Readbyte();
NOACK_IIC();
StopIIC();
}
void WriEpStorageInf(U8 mode)
{
U8 i,leng=0;
for (i=0; i<STORAGE_NUM; i++)
{
if(mode==S_ALL){
IIC_send_str(EEP1_ADDR,(STORAGE_PAGE+i)*32,
&STORAGE[i],sizeof(STORAGE[i]));
}
}
}
void RdEpStorageInf(void)
{
U8 i;
U8 bbf[32]={0};
for (i=0; i<128; i++)
{
IIC_seqreceive_str(EEP1_ADDR,(STORAGE_PAGE+i)*32,
&STORAGE[i],sizeof(STORAGE[i])); }
}
自己顶!!!!!!!!!!!!!附上自己的代码~供大伙拍砖@@@
感觉思路没问题!不过实际调试出现若干数据有误!纳闷~~~~~~~~~
不知是否指针访问的方式有漏洞还是~~~~~~
|