This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
工具/软件:Code Composer Studio
现在、我使用的是 tms320f28069、我 想通过 i2c 与从设备进行通信、无需 fifo 寄存器。
我 要使用的代码是
初始化 i2c
无效
InitI2C (空)
{
I2caRegs.I2CSAR = 0x0068;//从器件地址- EEPROM 控制代码
I2caRegs.I2CPSC.all = 0x08;//预分频器-模块时需要7-12MHz
I2caRegs.I2CCLKL = 10;//155->50kHz// 60-100kzh // 10;400kHz //注意:必须为非零
I2caRegs.I2CCLKH = 05;//65->50Kzh//30-100kHz//5;400kHz //注意:必须为非零
I2caRegs.I2CIER.ALL = 0x24;//启用 SCD 和 ARDY 中断
I2caRegs.I2CMDR.ALL = 0x0020;
// I2caRegs.I2CFFTX.ALL = 0x6000;//启用 FIFO 模式和 TXFIFO
//I2caRegs.I2CMDR.All=0x6E20;
// I2caRegs.I2CFFRX.ALL = 0x2040;//启用 RXFIFO、清除 RXFFINT、2040
I2caRegs.I2CMDR.bit.IRS=1;
}
写入 i2c
空 I2CA_WriteData_1 (无符号短整型寄存器、无符号短整型数据)
{
while (I2cRegs.I2CSTR.bit.BB = 1);
I2caRegs.I2CCNT = 2;//设置要发送的字节数
I2caRegs.I2CDXR = reg;
I2caRegs.I2CMDR.ALL = 0x6620;
I2caRegs.I2CDXR =数据;
I2caRegs.I2CMDR.ALL = 0x6E20;
while (I2cRegs.I2CSTR.bit.SCD=0);
}
读取 i2c\
void I2CA_ReadData5 (uint16 reg,uint16 ReadCount,uint8 *缓冲区)
{
uint16 i;
// delay_loop ();
// I2CA_WriteData_1 (0x68、0x04);
delay_loop();
I2CA_WriteData_1 (0x6A、0x45);
while (I2cRegs.I2CSTR.bit.BB = 1);
I2caRegs.I2CCNT = 1;//设置要发送的字节数
I2caRegs.I2CDXR = reg;
I2caRegs.I2CMDR.ALL = 0x6620;
// I2caRegs.I2CDXR=数据;
// I2caRegs.I2CMDR.All=0x6E20;
// while (I2caRegs.I2CSTR.bit.BB = 1);
while (I2caRegs.I2CMDR.bit.STP!=0);
delay_loop();
// I2caRegs.I2CCNT = 4;//设置要发送的字节数
// buffer=I2caRegs.I2CDRR;
// I2caRegs.I2CMDR.All=0x6C20;
// while (I2cRegs.I2CSTR.bit.SCD = 0);
I2caRegs.I2CCNT = 4;//只读取一个字节数据
// while (!I2caRegs.I2CSTR.bit.ARDY);
if (I2cRegs.I2CSTR.bit.nack = 1)
{
I2caRegs.I2CSTR.All = I2C_CLR_Nack_bit;// 0x0002
}
I2caRegs.I2CMDR.bit.STP= 0;// CNT=0时停止位
while (!I2caRegs.I2CSTR.bit.SCD);//是否检测到停止位?
对于(I = 0;I < 4;I++)
{
Buffer[i]= I2caRegs.I2CDRR;//读取一个字节数据
}
I2caRegs.I2CMDR.ALL = 0x6C20;
while (I2cRegs.I2CSTR.bit.SCD = 0);
}
请告诉我出错的地方
感谢您的回应!
我的程序正在被写入函数定义--> BB 位中的结构化。 然后、我在 i2c 中检查时钟、在传输后它将变为低电平(最初它仅由于上拉而为高电平)
写入函数在您第一次调用 BB 时是否卡在该环路上、或者您是否说它进行了传输、但之后时钟信号不会再次变为高电平、因此您无法再次完成写入?
写入函数结束时、I2cRegs.I2CSTR.bit.SCD = 0、而不是等待 I2caRegs.I2CMDR.bit.STP = 1。
惠特尼