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
大家好。
我需要有关 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;
}
}