在线时间12 小时
UID3398380
注册时间2017-6-28
NXP金币0
该用户从未签到
注册会员

- 积分
- 63
- 最后登录
- 2018-12-18
|
所用平台:k64芯片 MQX4.1
问题描述:采用MQX提供的can通信的example,即采用中断模式接收数据,具体中断服务程序为下面的代码
void MY_FLEXCAN_ISR
(
/* [IN] FlexCAN base address */
void *can_ptr
)
{
volatile CAN_MemMapPtr can_reg_ptr;
volatile uint32_t tmp_reg;
volatile uint32_t temp;
can_reg_ptr = (CAN_MemMapPtr)can_ptr;
/* get the interrupt flag */
tmp_reg = (can_reg_ptr->IFLAG1 & CAN_IMASK1_BUFLM_MASK);
// check Tx/Rx interrupt flag and clear the interrupt
if(tmp_reg){
/* clear the interrupt and unlock message buffer */
/* Start CR# 1751 */
_lwevent_set(&event, tmp_reg);
can_reg_ptr->IFLAG1 |= tmp_reg;
/* End CR# 1751 */
temp = can_reg_ptr->TIMER;
}/* Endif */
// Clear all other interrupts in ERRSTAT register (Error, Busoff, Wakeup)
tmp_reg = can_reg_ptr->ESR1;
if(tmp_reg & FLEXCAN_ALL_INT){
/* Start CR# 1751 */
can_reg_ptr->ESR1 |= (tmp_reg & FLEXCAN_ALL_INT);
/* End CR# 1751 */
} /* Endif */
return;
}
在接收任务中就不断的判断相应的事件,如果相应的event为1就要读出相应邮箱中的数据,这在2个can帧在10ms以上的数据接收中是没有问题的!但是在10ms以下且接收大量的数据帧时就会出现丢帧现象!且读邮箱有时会出现0x10205的错误,也就是FLEXCAN_NO_MESSAGE!这个问题一直没有分析出原因了,困惑了好久,希望行家们指点一二!!
|
|