Thread 中讨论的其他器件:controlSUITE
我尝试使用 C28的 i2c 端口向 DAC 芯片发送数据、但失败了、我可以使用 controlSUITE 中提供的示例通过 M3发送 i2c 数据。 但 controlSUITE 中的 F28m36x 没有带 C28的 I2C 示例。 因此、我使用了类似控制器系列的示例 i2c_EEPROM 代码作为参考。
但我无法使用 i2c 发送任何数据、我可以在示波器上看到从器件地址字节、之后时钟信号一直保持低电平、并且在该字节之后看不到数据。(无论连接或断开外部硬件(DAC)、都会发生这种情况)
TI 是否有任何来源可以找到 F28m36x C28内核的 I2C 示例代码? 即使 F28M36x_I2C.c 库代码看起来也不完整。
注意:外部上拉用于 GPIO32、33 I2C 引脚、因为 C28中的软件没有可用的上拉配置。
我将使用以下配置发送数据。 我使用(http://e2e.ti.com/support/microcontrollers/c2000/f/171/t/268548?I2C-Nothing)作为时钟设置的参考。
空 InitI2CGpio()
{
EALLOW;
/*为所选引脚启用内部上拉*/
//用户可以启用或禁用上拉。
//这将启用指定引脚的上拉电阻。
//注释掉其他不需要的行。
//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)
/*使用 GPIO 寄存器配置 I2C 引脚*/
//这指定哪些可能的 GPIO 引脚将是 I2C 功能引脚。
//注释掉其他不需要的行。
GpioCtrlRegs.GPBMUX1.bit.GPIO32=1;//为 SDAA 配置 GPIO32
//操作
GpioCtrlRegs.GPBMUX1.bit.GPIO33=1;//为 SCLA 配置 GPIO33
//操作
EDIS;
}
空 I2CA_Init (空)
{
I2caRegs.I2CSAR = 0x60;// DAC 的从器件地址
I2caRegs.I2CPSC.all = 14;//对于 CPU_FRQ_150MHz、SYSCLK/(I2CPSC+1)
I2caRegs.I2CCLKL = 76;//注意:必须为非零
I2caRegs.I2CCLKH = 38;//注:必须为非零
I2caRegs.I2CIER.ALL = 0x0;//启用 SCD 和 ARDY 中断
I2caRegs.I2CMDR.ALL = 0x0020;//使 I2C 退出复位
I2caRegs.I2CFFTX.ALL = 0x6000;//启用 FIFO 模式和 TXFIFO
返回;
}
void I2C_write_new()
{
uint16 i = 0;
//设置从地址
I2caRegs.I2CSAR = 0x60;
while (I2cRegs.I2CSTR.bit.BB = 1)
{
I = 1;
}
I2caRegs.I2CCNT = 3;
I2caRegs.I2CDXR = 0x60;
I2caRegs.I2CDXR = 0x66;
I2caRegs.I2CDXR = 0x60;
I2caRegs.I2CMDR.bit.TRX = 1;//设置为发送模式
I2caRegs.I2CMDR.bit.STP= 1;//一旦 Tx 完成,即 I2CCNT =0,主器件必须释放总线
I2caRegs.I2CMDR.bit.MST = 1;//设置为主模式
I2caRegs.I2CMDR.bit.FREE = 1;//调试器不会在断点上停止总线
I2caRegs.I2CMDR.bit.STT = 1;//发送起始位、传输将跟随
//将 START 作为主发送器发送
// I2caRegs.I2CMDR.ALL = 0x6E20;
}
在发送 i2c 数据之前和之后、我连接了 I2CMDR 寄存器设置。