请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F280049C 大家好、
我正在处理一个项目、在这个项目中、我需要轮询加速计以获取运动数据、但是、当我尝试将 DriverLib 文档中提供的示例代码调整为我的问题时、我遇到了困难。 当我将开发板连接到振荡器时、我注意到以下行为:
C2000:将 MPU 地址写入 I2C 总线
MPU:无 ACK
下面的代码正在尝试请求和读回 MPU-6050的单个寄存器地址。 如果您想查看、我随附了下面的文档 pdf。 有关协议见第34页。
#include "driverlib.h"
#include
#include
#define WHO _AM_I 0x75
#define MPU_ADDRESS 0x68
void initI2C();
__interrupt void i2cFIFOISR();
uint16_t MPU_data;
uint16_t status;
void main (){
//* Setup C2000 */
Device_init ();
Device_initGPIO ();
/*为 I2C 设置 GPIO */
GPIO_setPinConfig (GPIO_35_SDAA);
GPIO_setPadConfig (35U、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (35U、GPIO_QUAL_异 步);
GPIO_setPinConfig (GPIO_37_SCLA);
GPIO_setPadConfig (37U、GPIO_PIN_TYPE_PULLUP);
GPIO_setQualificationMode (37U、GPIO_QUAL_异 步);
/*设置中断*/
Interrupt_initModule();
Interrupt_initVectorTable();
interrupt_register (INT_I2CA、&i2cFIFOISR);
/*调用 i2c 设置函数*/
initI2C();
/*在系统范围内启用中断*/
INTERRUPT_ENABLE (INT_I2CA);
EINT;
ERTM;
I2C_setDataCount (I2CA_BASE、1);
while (1){
while (I2C_isBusBusy (I2CA_BASE)){}
// I2C_putData (I2CA_BASE、WHO_AM_I);
I2C_setConfig (I2CA_BASE、I2C_MASTER_SEND_MODE);
I2C_sendStartCondition (I2CA_BASE);
状态= I2C_getStatus (I2CA_BASE);
}
}
void initI2C(){I2C_disableModule(I2CA_BASE)
;
/*为具有50%占空比的400kHz 时钟配置*/
I2C_initMaster (I2CA_BASE、DEVICE_SYSCLK_FREQ、100000、I2C_DUTYCYCLE_33);
I2C_setBitCount (I2CA_BASE、I2C_BITCOUNT_8);
I2C_setSlaveAddress (I2CA_BASE、MPU_ADDRESS);
I2C_setEmulationMode (I2CA_BASE、I2C_emulation_free_run);
I2C_enableInterrupt (I2CA_BASE、I2C_INT_REG_ACCESS_RDY | I2C_INT_STOP_Condition);
I2C_enableFIFO (I2CA_BASE);
I2C_clearInterruptStatus (I2CA_BASE、I2C_INT_RXFF | I2C_INT_TXFF);
I2C_enableModule (I2CA_BASE);
}
__interrupt void i2cFIFOISR (){
I2C_InterruptSource 源;
Source = I2C_getInterruptSource (I2CA_BASE);
开关(源极){
I2C_INTSRC_REG_ACCESS_RDY 案例:
if ((I2C_getStatus (I2CA_BASE)& I2C_STS_NO_ACK)!= 0){
I2C_sendStopCondition (I2CA_BASE);
I2C_clearStatus (I2CA_BASE、I2C_STS_NO_ACK);
}
I2C_setConfig (I2CA_BASE、I2C_MASTER_Receive_MODE);
I2C_putData (I2CA_BASE、WHO_AM_I);
I2C_sendStartCondition (I2CA_BASE);
MPU_DATA = I2C_getData (I2CA_BASE);
I2C_sendStopCondition (I2CA_BASE);
I2C_setConfig (I2CA_BASE、I2C_MASTER_SEND_MODE);
中断;
情况 I2C_INTSRC_STOP_Condition:
I2C_sendStopCondition (I2CA_BASE);
MPU_DATA = I2C_getData (I2CA_BASE);
中断;
默认值:
MPU_DATA = I2C_getData (I2CA_BASE);
I2C_sendNACK (I2CA_BASE);
中断;
}
interrupt_clearACKGroup (interrupt_ack_group8);
}
非常感谢!e2e.ti.com/.../MPU_2D00_6050_5F00_DataSheet_5F00_V3-4.pdf