在线时间132 小时
UID3065001
注册时间2014-10-4
NXP金币0
TA的每日心情 | 开心 2018-8-30 16:02 |
---|
签到天数: 5 天 连续签到: 1 天 [LV.2]偶尔看看I
金牌会员
 
- 积分
- 1851
- 最后登录
- 2019-11-19
|
我用的PE10.4.2+MDK环境,K60设的内核频率为120M ,PLL提供,总线频率等都设为最高。
I2C用的是中断方式,更PE提供的例程没多大差别,代码如下:
- main.c中
- byte n=0;
- Error = AccI2C_SelectSlaveDevice(AccI2CPtr,LDD_I2C_ADDRTYPE_7BITS,0x1c);
- if(Error==ERR_OK)
- {
- AccI2C_MasterSendBlock(AccI2CPtr,AccSendBlock,1U,LDD_I2C_NO_SEND_STOP);
- while(!DataTransmittedFlag){}
- DataTransmittedFlag = FALSE;
- AccI2C_MasterReceiveBlock(AccI2CPtr,&n,1U,LDD_I2C_SEND_STOP);
- while(!DataReceivedFlag){}
- DataReceivedFlag = FALSE;
- Error = AccI2C_MasterSendBlock(AccI2CPtr,AccSendBlock,2U,LDD_I2C_SEND_STOP);
- while(!DataTransmittedFlag){}
- DataTransmittedFlag = FALSE;
- }
- event.c中(中断)
- void AccI2C_OnMasterBlockSent(LDD_TUserData *UserDataPtr)
- {
- /* Write your code here ... */
- DataTransmittedFlag = TRUE;
- }
- void AccI2C_OnMasterBlockReceived(LDD_TUserData *UserDataPtr)
- {
- /* Write your code here ... */
- DataReceivedFlag = TRUE;
- }
复制代码 问题:如果直接运行,代码就卡在第三个while循环里,也就是最后一次发送后不进中断。
但是如果单步运行就不会卡住。
试过在最后一次发送前重新初始化K60的I2C模块,问题没解决。
查看最后一次发送函数的返回值Error=0x08,查找ERR说明,提示说Device is busy.
是时钟太快了吗?这个device指的是K60的I2C模块还是指的是外接的I2C设备?
如果是外部的I2C设备,都已经接收到数据付给n了,又怎么会busy呢?
不知道怎么解决,特来求助。
|
|