📄 24cxx.bak
字号:
//******************************************************
// Filename : 24CXX.c
// Abstract : This file implements main function.
//
// Device : uPD78F0396
// CreateTime: 2006/11/
// ModifyTime:
// Author :
//******************************************************
#include "UsrComm.h"
#include "AllSerial.h"
#include "24CXX.h"+-
//#define 24CXX_ACK_WAIT 100
//=======================================================
MD_STATUS E24CXX_ReadMultData( unsigned short wAddr,unsigned short wLength ,unsigned char *pBuf)
{
unsigned short i;
unsigned short wWait;
SetIORBit(IICC0, 0x80); // IICE0 = 1
SetIORBit(IICC0, 0x02); // generate start condition
IIC0 = IIC_24C64ADDR_W;
if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
IIC0 = (unsigned char)((wAddr>>8) & 0x00ff);
if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
IIC0 = (unsigned char)(wAddr & 0x00ff);
if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
SetIORBit(IICC0, 0x02); // generate start condition
IIC0 = IIC_24C64ADDR_R;
if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
ACKE0 = 1; //Enable acknowledgment
for (i = 0; i < wLength; i++)
{
WREL0 = 1; // start receive (write WREL0 = 1 OR IIC0 = 0xff for send 9 clock )
while((IICIF0 == 1)&& (wWait > 0)){wWait--;}
*pBuf++ = IIC0;
}
ClrIORBit(IICC0, 0x04); // ACK STOP
SetIORBit(IICC0, 0x01); // generate stop condition and the IIC bus release;
return MD_OK ;
}
//===============================================================================
MD_STATUS E24CXX_WriteSingleByte(unsigned wAddr,unsigned char ucData)
{
SetIORBit(IICC0, 0x80); // IICE0 = 1
SetIORBit(IICC0, 0x02); // generate start condition
WTIM0 = 1;
IIC0 = IIC_24C64ADDR_W;
if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
IIC0 = (unsigned char)((wAddr>>8) & 0x00ff);
if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
IIC0 = (unsigned char)(wAddr & 0x00ff);
if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
IIC0 = ucData;
if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
SetIORBit(IICC0, 0x01); // generate stop condition and the IIC bus release;
return MD_OK;
}
//===============================================================================
MD_STATUS E24CXX_WritePage(unsigned short wAddr, unsigned char *pBuf)
{
unsigned short i;
SetIORBit(IICC0, 0x80); // IICE0 = 1
SetIORBit(IICC0, 0x02); // generate start condition
IIC0 = IIC_24C64ADDR_W;
if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
IIC0 = (unsigned char)((wAddr>>8) & 0x00ff);
if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
IIC0 = (unsigned char)(wAddr & 0x00ff);
if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
for( i = 0; i < E24C64_PAGESIZE; i++)
{
IIC0 = *pBuf;
if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
}
SetIORBit(IICC0, 0x01); // generate stop condition and the IIC bus release;
return MD_OK;
}
//===============================================================================
unsigned int E24CXX_WriteMultData( unsigned int wAddr,unsigned int wLength ,unsigned char *pBuf)
{
unsigned int i;
SetIORBit(IICC0, 0x80); // IICE0 = 1
SetIORBit(IICC0, 0x02); // generate start condition
IIC0 = IIC_24C64ADDR_W;
if(IIC0_CheckACK() == MD_NACK) return MD_NACK;
IIC0 = (unsigned char)((wAddr>>8) & 0x00ff);
if(IIC0_CheckACK() == MD_NACK) return MD_NACK;
IIC0 = (unsigned char)(wAddr & 0x00ff);
if(IIC0_CheckACK() == MD_NACK) return MD_NACK;
SetIORBit(IICC0, 0x02); // generate start condition
//IIC0 = IIC_24C64ADDR_R;
//if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
for (i = 0; i < wLength; i++)
{
SetIORBit(IICC0, 0x20); // start receive (write WREL0 = 1 OR IIC0 = 0xff for send 9 clock )
*pBuf++ = IIC0;
}
ClrIORBit(IICC0, 0x04); // ACK Disanble
SetIORBit(IICC0, 0x01); // generate stop condition and the IIC bus release;
return MD_OK ;
}
//************************************************************************************
MD_STATUS RX8025_ReadMultData( unsigned char ucAddr,unsigned char ucLength, unsigned char *pBuf )
{
unsigned int wWait;
unsigned char i;
wWait = IIC_WAIT;
IICE0 = 1; // IIC operation Enable
WTIM0 = 1; // INT request is generated at the ninth clock's falling edge
STT0 = 1; // generate start condition
IIC0 = IIC_RTC8025ADDR_W;
if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
IIC0 = (unsigned char)(ucAddr<<4);
if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
STT0 = 1; // generate start condition
IIC0 = IIC_RTC8025ADDR_R ;
if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
WTIM0 = 0; //INT request is generated at the eighth clock's falling edge
ACKE0 = 1;
for (i = 0; i < ucLength; i++)
{
WREL0 = 1; // start receive (write WREL0 = 1 OR IIC0 = 0xff for send 9 clock )
while((IICIF0 == 1)&& (wWait > 0)){wWait--;}
//while(((IICC0 &0xf7)==0xf7) && (wWait >0)){wWait--};
*pBuf++ = IIC0;
}
ACKE0 = 0; // ACK STOP
SPT0 = 1;// generate stop condition and the IIC bus release;
return MD_OK ;
}
//===============================================================================
MD_STATUS RX8025_WriteSingleData( unsigned char ucAddr,unsigned char ucData )
{
unsigned int wWait;
unsigned char i;
wWait = IIC_WAIT;
IICE0 = 1; // IIC operation Enable
WTIM0 = 1; // INT request is generated at the ninth clock's falling edge
STT0 = 1; // generate start condition
IIC0 = IIC_RTC8025ADDR_W;
if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
IIC0 = (unsigned char)(ucAddr<<4);
if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
STT0 = 1; // generate start condition
IIC0 = IIC_RTC8025ADDR_R ;
if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
IIC0 = ucData;
if(IIC0_CheckACK() == MD_NACK)return MD_NACK;
ACKE0 = 0; // ACK STOP
SPT0 = 1;// generate stop condition and the IIC bus release;
return MD_OK ;
}
//===============================================================================
MD_STATUS RX8025_WriteMultData( unsigned char ucAddr,unsigned char ucLength, unsigned char *pBuf)
{
unsigned char i;
for(i = 0; i < ucLength; i++)
{
if (RX8025_WriteSingleData(ucAddr,pBuf[i]));
return MD_ERROR;
}
return MD_OK;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -