工具/软件: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);
}
请告诉我出错的地方