|
最近用LPC1114做了个电路,直接用硬件I2C驱动AT24C64,现在出现的问题是同一器件,统一个写入函数,在某些地址写不进去。程序如下:
/*********************************************************************************************************
宏定义
*********************************************************************************************************/
#define ADR_EP_BYTES 32 /* 24c64每页字节数 */
#define ADR_EP_PROSN 0*ADR_EP_BYTES /* 产品编号写入地址 */
#define ADR_EP_PROSNCT 9*ADR_EP_BYTES /* 产品编号写入地址 */
#define ADR_EP_RANGE 3*ADR_EP_BYTES /* 传感器量程写入地址 */
#define ADR_EP_RANGEADC 7*ADR_EP_BYTES /* 量程ADC写入地址 */
#define ADR_EP_CEFFCO 5*ADR_EP_BYTES /* 曲线方程系数写入地址*/
/*********************************************************************************************************
** Function name:
** Descriptions: 变量初始化
** input parameters:
** output parameters:
** Returned value:
*********************************************************************************************************/
void StructInit(void)
{
RangeDef *pRangeDef=RangeDefTrans();
ParameterDef *pParameterDef=ParaTrans();
ProductInf *pProductInf=ProductInfTrans();
RangeAdc *pRangeAdc = RangeAdcStructTrans();
Ceffco *pCeffco =CeffcoStructTrans();
I2C_ReadNByte(FM24C64, TWO_BYTE_SUBA, ADR_EP_PROSN, (unsigned char*)pProductInf,32);
I2C_ReadNByte(FM24C64, TWO_BYTE_SUBA, ADR_EP_PROSNCT, (unsigned char*)&pProductInf->MacAddress,2);
I2C_ReadNByte(FM24C64, TWO_BYTE_SUBA, ADR_EP_RANGE, (unsigned char*)pRangeDef, sizeof(RangeDef));
I2C_ReadNByte(FM24C64, TWO_BYTE_SUBA, ADR_EP_RANGEADC,(unsigned char*)pRangeAdc, sizeof(RangeAdc));
I2C_ReadNByte(FM24C64, TWO_BYTE_SUBA, ADR_EP_CEFFCO, (unsigned char*)pCeffco, sizeof(Ceffco));
if((pRangeDef->PressLRV==0)&&(pRangeDef->PressURV==0))
{
pRangeDef->PressLRV=-50;
pRangeDef->PressURV=50;
pProductInf->MacAddress=2;
pRangeAdc->PressLRV=838870;
pRangeAdc->PressURV=1114650;
pCeffco->A = 0;
pCeffco->B = 0;
pCeffco->C = 0;
pCeffco->D = 1;
pCeffco->E = 0;
I2C_WriteNByte(FM24C64, TWO_BYTE_SUBA, ADR_EP_PROSN, (unsigned char*)pProductInf,32);
I2C_WriteNByte(FM24C64, TWO_BYTE_SUBA, ADR_EP_PROSNCT, (unsigned char*)&pProductInf->MacAddress,32);
I2C_WriteNByte(FM24C64, TWO_BYTE_SUBA, ADR_EP_RANGE, (unsigned char*)pRangeDef, 32);
I2C_WriteNByte(FM24C64, TWO_BYTE_SUBA, ADR_EP_RANGEADC,(unsigned char*)pRangeAdc, 32);
I2C_WriteNByte(FM24C64, TWO_BYTE_SUBA, ADR_EP_CEFFCO, (unsigned char*)pCeffco, 32);
}
}
现在现象是 ADR_EP_RANGE,ADR_EP_CEFFCO这两个地址写入的数据读取后是正常的,ADR_EP_RANGEADC,ADR_EP_PROSN,ADR_EP_PROSNCT这三个地址无法写入。
求各路大神指教!谢谢! |
阿莫论坛20周年了!感谢大家的支持与爱护!!
一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。
|