工具/软件:Code Composer Studio
尊敬的先生:
我正在尝试在 tms320f28377、GPIO91和 GPIO92 (I2C A)上使用 I2C。 但这不起作用。 这是我的代码。 此引脚上没有时钟或输出、因此请帮助我找出问题所在。
/* 初始化,我采用 控制套件中提供的示例代码*/
空 I2CA_Init (空)
{
GpioCtrlRegs.GPCMUX2.bit.GPIO91=6;
GpioCtrlRegs.GPCMUX2.bit.GPIO92=6;
//GPIO_SetupPinMux (91、GPIO_MUX_CPU2、6);
//GPIO_SetupPinMux (92、GPIO_MUX_CPU2、6);
I2caRegs.I2CSAR.ALL = 0x00A0;//从器件地址-写入模式中的 EEPROM
I2caRegs.I2CPSC.all = 6;//预分频器-模块时需要7-12MHz
I2caRegs.I2CCLKL = 10;//注意:必须为非零
I2caRegs.I2CCLKH = 5;//注意:必须为非零
I2caRegs.I2CIER.ALL = 0x24;//启用 SCD 和 ARDY __interrupts
I2caRegs.I2CMDR.ALL = 0x0020;//使 I2C 退出复位
//挂起时停止 I2C
I2caRegs.I2CFFTX.ALL = 0x6000;//启用 FIFO 模式和 TXFIFO
I2caRegs.I2CFFRX.ALL = 0x2040;//启用 RXFIFO、清除 RXFFINT、
返回;
}
空 I2CA_WriteData (空)
{
unsigned char i;
//
//等待直到 STP 位从任何先前的主设备通信中清零。
//模块清除该位的操作被延迟到 SCD 位之后
//设置。 如果在启动新消息之前未选中此位
// I2C 可能会被混淆。
//
检查1:
if (I2caRegs.I2CMDR.bit.STP==1)
{
转至校验1;
//返回 I2C_STP_NOT _READY_ERROR;
}
//
//设置从地址
//
I2caRegs.I2CSAR.ALL = 0xA0; //EEPROM 地址。
//
//检查总线是否占线
//
if (I2cRegs.I2CSTR.bit.BB = 1)
{
//返回 I2C_BUS_BUS_BUSY_ERROR;
转至校验1;
}
//
//设置要发送的字节数
// MsgBuffer +地址
//
I2caRegs.I2CCNT = 2;
//
//设置要发送的数据
//
// I2caRegs.I2CDXR.all = 0x00;
I2caRegs.I2CDXR.ALL = 0xAA;
//
//将 START 作为主发送器发送
//
I2caRegs.I2CMDR.ALL = 0x6E20;
返回;
}