在线时间2 小时
UID3098260
注册时间2015-2-2
NXP金币0
该用户从未签到
新手上路

- 积分
- 9
- 最后登录
- 2018-6-18
|
如题。最近在尝试I2C通信的时候遇到了一些问题,在PE下配置的I2C无法和MMA8451Q传感器正常传输数据,求问哪里出问题了?
附部分代码:
volatile word OnReceiveDataNum = 0;
volatile word OnTransmitDataNum = 0;
volatile word OnByteTransferNum = 0;
volatile word OnArbitLostNum = 0;
volatile word OnNACKNum = 0;
volatile word OnSendRecvDataNum = 0;
volatile word OnErrorNum = 0;
void MMA8451Q_init(void);
int MMA8451Q_getX(void);
volatile byte Err;
void main(void)
{
/* Write your local variable definition here */
byte CTRL_REG1[2] = {0x2A,0x07};
byte CTRL_REG2[2] = {0x2B,0x00};
byte XYZ_DATA_CFG[2] = {0x0E,0x01};
byte X_Lsb[1] = {0x01};
byte X_Msb[1] = {0x02};
byte X_dataH[1], X_dataL[1];
word rcv;
bool Error = FALSE;
/*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
PE_low_level_init();
__DI();
DRV_PWM_Init();
ADC12_Init();
OLEDInit();OLEDUpdate(0,0);
CamInitSystem();
__EI(0);
//COP_CTRL&=~(0x2);//cop disable or close watch dog
/*** End of Processor Expert internal initialization. ***/
/* Write your code here */
DRV_MEN_PutVal(1);
Cpu_Delay100US(1);
I2C1_SelectSlave(0x1C);
while ((OnSendRecvDataNum == 0) && (OnErrorNum == 0)) {}
while (I2C1_CheckBus() == I2C1_BUSOFF) {}
OnErrorNum = 0;
OnSendRecvDataNum = 0;
Err = I2C1_SendBlock(&CTRL_REG1[0],2,&rcv);
if ((Err) || (rcv != 11)) {
Error = TRUE;
}
while ((OnSendRecvDataNum == 0) && (OnErrorNum == 0)) {}
while (I2C1_CheckBus() == I2C1_BUSOFF) {}
OnErrorNum = 0;
OnSendRecvDataNum = 0;
Cpu_Delay100US(100);
//--------------------------------------------------------
调试中程序在 while ((OnSendRecvDataNum == 0) && (OnErrorNum == 0)) {}处死循环。
I2C1_SelectSlave函数(如下)完全由PE生成:
byte I2C1_SelectSlave(byte Slv)
{
if (getRegBit(I2C1_C1,MST) != 0x00U) { /* Is the device in the active state? */
return ERR_BUSY; /* If yes then error */
}
I2C1_SlaveAddr = (byte)(Slv << 1); /* Set slave address */
return ERR_OK; /* OK */
}
附PE配置:
完全不知道问题出在哪里,求解,谢谢!
|
|