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.

[参考译文] CCS/TMS320F28377D:28377D i2c

Guru**** 2039500 points
Other Parts Discussed in Thread: C2000WARE
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/588727/ccs-tms320f28377d-28377d-i2c

器件型号:TMS320F28377D
Thread 中讨论的其他器件:controlSUITEC2000WARE

工具/软件:Code Composer Studio

大家好。

我需要有关 MPU6500传感器 I2C 通信的帮助。

我在网上搜索了很多信息、但尚未完成。

我不知道传感器为什么不工作。

已附加我的 main.c 代码。

void main (void)

InitSysCtrl();

InitGpio();

EALLOW;

GpioCtrlRegs.GPCPUD.bit.GPIO91 = 0;
GpioCtrlRegs.GPCPUD.bit.GPIO92 = 0;

GpioCtrlRegs.GPCQSEL2.bit.GPIO91 = 3;
GpioCtrlRegs.GPCQSEL2.bit.GPIO92 = 3;

GpioCtrlRegs.GPCGMUX2.bit.GPIO91=1;
GpioCtrlRegs.GPCMUX2.bit.GPIO91 = 2;


GpioCtrlRegs.GPCGMUX2.bit.GPIO92=1;
GpioCtrlRegs.GPCMUX2.bit.GPIO92 = 2;

EDIS;

Dint;

InitPieCtrl();

IER = 0x0000;
IFR = 0x0000;

InitPieVectTable();

EALLOW;

PieVectTable.I2CA_INT =&i2c_int1a_ISR;

EDIS;

I2CA_Init();

PieCtrlRegs.PIEIER8.bit.INTx1 = 1;

IER |= M_INT8;
EINT;

I2CA_WriteData (0x68、0x6B、0x00);
DELAY_US (100);
CHECK_FLAG++;

I2CA_WriteData (0x68、0x6C、0x00);
DELAY_US (100);
CHECK_FLAG++;

for (;;)

I2CA_ReadData (0x68、0x75、1、1);
transmitted 标志++;
DELAY_US (50000);

空 I2CA_Init (空)


I2caRegs.I2CMDR.bit.IRS = 0;
I2caRegs.I2CPSC.all = 19;//预分频器-模块时需要7-12MHz
I2caRegs.I2CCLKL = 60;//注意:必须为非零
I2caRegs.I2CCLKH = 30;//注意:必须为非零
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、
I2caRegs.I2CMDR.bit.IRS = 1;

空 I2CA_WriteData (UINT16 Dev_Addr、UINT16 Rer_Addr、UINT16数据)

while (I2caRegs.I2CMDR.bit.STP==1);
while (I2cRegs.I2CSTR.bit.BB = 1);

I2caRegs.I2CSAR.All = Dev_Addr;
I2caRegs.I2CCNT = 2;
I2caRegs.I2CDXR = Reg_Addr;
I2caRegs.I2CDXR =数据;

I2caRegs.I2CMDR.ALL = 0x2E20;


空 I2CA_ReadData (uint16 Dev_Addr、uint16 Rer_Addr、uint16 len、uint16 return_len)

while (I2caRegs.I2CMDR.bit.STP==1)
while (I2cRegs.I2CSTR.bit.BB = 1)

I2caRegs.I2CSAR.All = Dev_Addr;
I2caRegs.I2CCNT = len;
I2caRegs.I2CDXR = Reg_Addr;
I2caRegs.I2CMDR.ALL = 0x2620;//发送数据到设置 EEPROM 地址

DELAY_US (2);

I2caRegs.I2CCNT = return_len;
I2caRegs.I2CMDR.ALL = 0x2C20;//发送数据到设置 EEPROM 地址


_interrupt void i2c_int1a_isr (void)


IntSource = I2caRegs.I2CISRC.ALL;
I2C_NUMBYTES = I2caRegs.I2CFFRX.bit.RXFFST;

if (IntSource = I2C_SCD_ISRC)

RX_buff = I2cRegs.I2CDRR.all;

Received_flag++;

否则、IF (IntSource = I2C_ARDY_ISRC)

if (I2caRegs.I2CSTR.bit.nack = 1)

I2caRegs.I2CMDR.bit.STP= 1;
I2caRegs.I2CSTR.All = I2C_CLR_Nack_bit;

PieCtrlRegs.PIEACX.ALL = PIEACK_group8;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    大家好!

    我们很高兴澄清模块的任何位/寄存器/功能的行为。 controlSUIT/C2000Ware 中提供了所有外设的示例。 您可能需要将代码与示例进行比较、以查看问题所在的位置。 请继续调试您的代码并使用论坛提出具体问题。

    传感器如何"不工作"? 您是否未收到任何数据? 您能否使用示波器验证您是否正在传输任何数据? 如果您提供有关您正在执行的操作以及到目前为止已执行的调试的更多信息、我们将为您提供更好的帮助。