工具/软件:Code Composer Studio
尊敬的 TI 团队:
我作为同事的问题:
AT24C08 A0、A1、A2、WP 的引 脚连接 GND
#define EEPROM_SLAVE_ADDR (0xA0 >> 1)(__LW_AT__p0 P1=00:块0的默认通信)
空 Init_I2C (空)
{
GpioCtrlRegs.GPBPUD.bit.GPIO32 = 0; //启用 GPIO32的上拉电阻(SDAA)
GpioCtrlRegs.GPBPUD.bit.GPIO33 = 0; //启用 GPIO33的上拉电阻器(SCLA)
GpioCtrlRegs.GPBQSEL1.bit.GPIO32 = 3; //异步输入 GPIO32 (SDAA)
GpioCtrlRegs.GPBQSEL1.bit.GPIO33 = 3; //异步输入 GPIO33 (SCLA)
GpioCtrlRegs.GPBMUX1.bit.GPIO32=1; //将 GPIO32配置为 SDAA 操作
GpioCtrlRegs.GPBMUX1.bit.GPIO33 = 1; //为 SCLA 操作配置 GPIO33
//初始化 I2C
I2caRegs.I2CMDR.ALL = 0;//I2C 复位
I2caRegs.I2CPSC.all = 5; //预分频器-在模块时需要7-12MHz clk 60MHz/(5+1)=10MHz 系统时钟为60M,、使用内部振荡器1
//clk=100kHz
I2caRegs.I2CCLKL = 50; //注意:必须为非零
I2caRegs.I2CCLKH = 40; //注意:必须为非零
// I2caRegs.I2CIER.All = 0x24; //启用 SCD 和 ARDY __interrupts
I2caRegs.I2CIER.ALL = 0x00; //无__interrupts
I2caRegs.I2CMDR.bit.IRS = 1;//I2C 使能 SCL 的引脚是否能够在 设置 IRS 后检测方器件? 如果 不是 、SCL 何时可以检测到方器件???
I2caRegs.I2CMDR.bit.FREE = 1;//中断
I2caRegs.I2CFFTX.ALL = 0x6040; //启用 FIFO 模式和 TXFIFO
I2caRegs.I2CFFRX.ALL = 0x2044; //启用 RXFIFO、清除 RXFFINT、
}
CURR_Msg.MsgStatus = I2C_MSGSTAT_SEND_WITHSTOP;
CURR_Msg.SlaveAddress = EEPROM_SLAVE_ADDR;
// CURR_Msg.MemoryHighAddr = paramData[1];
CURR_Msg.MemoryLowAddr = paramData[2];
CURR_Msg.NumOfBytes =1;
CURR_Msg.MsgBuffer[0]= paramData[4];
I2CA_WriteData (&CURR_Msg);//使用同函数?
uint16 I2CA_WriteData (struct I2CMSG* msg)
{
uint16 i;
//等待直到 STP 位从任何先前的主设备通信中清零。
//模块清除该位的操作被延迟到 SCD 位之后
//设置。 如果在启动新消息之前未选中此位
// I2C 可能会被混淆。
IF (I2caRegs.I2CMDR.bit.STP==1)
{
返回 I2C_STP_NOT _READY_ERROR;
}
//设置从地址
I2caRegs.I2CSAR = msg->SlaveAddress;
//检查总线是否占线
IF (I2cRegs.I2CSTR.bit.BB = 1)
{
返回 I2C_BUS_BUS_BUSY_ERROR;
}
//设置要发送的字节数
// MsgBuffer +地址
I2caRegs.I2CCNT = msg->NumOfBytes+1;
// I2caRegs.I2CDXR = msg->MemoryHighAddr;
//设置要发送的数据
I2caRegs.I2CDXR = msg->MemoryLowAddr;
对于(i=0;i NumOfBytes;i++)
{
I2caRegs.I2CDXR =*(msg->MsgBuffer+I);
}
I2caRegs.I2CFFTX.bit.TXFFINTCLR =1;
/*
* 清除标志位
*
//将 START 作为主发送器发送
I2caRegs.I2CMDR.ALL = 0x6E20;//软件运行此操作,SCL 和 SDA 的引脚 无法检测 软件,为什么? I2CFFTX.bit.TXFFST =I2CCNT,为什么???
while (I2caRegs.I2CFFTX.bit.TXFFST!=0){//procedure stop this???????
系列上调试过的没有什么问题,只是更改了一个EEPROM内部写入的地址,望指点 μ s
if (I2cRegs.I2CSTR.bit.SCD = 1)
I2caRegs.I2CSTR.bit.SCD = 1;
/*
* SCD=1清楚SCD 和NACK位
*
返回 I2C_Success;
}
上面的过程 已经在 TMS320F28377控制 AT24C64上进行了测试、并且 RESUALT 是正常的。但是在这种情况下不起作用、
提前感谢您!
此致!