TI中文支持网
TI专业的中文技术问题搜集分享网站

CAN接收中断

请教:

正常流程:CAN设置成中断接收方式,通过CAN调试助手,发送一帧数据,产生一个CAN接收中断,并进行数据处理;

异常流程:如果我发送CAN数据的速度足够快,使得在CAN接收中断处理函数中,还没处理完,新的一帧数据又发送完成,此时,DSP底层会怎么样?下次等新的数据再来的时候,还会再正常进入CAN接收中断吗?

    

user151383853:

不知道是什么型号, 28069 手册上有段话说明了这个问题:

RMP[n] (RMP.31-0) has to be reset by the CPU after reading the data. If a second message has been received for this mailbox and the receive-message-pending bit is already set, the corresponding message-lost bit (RML[n] (RML.31-0)) is set. In this case, the stored message is overwritten with the new data if the overwrite-protection bit OPC[n] (OPC.31-0) is cleared; otherwise, the next mailboxes are checked.

请教:

正常流程:CAN设置成中断接收方式,通过CAN调试助手,发送一帧数据,产生一个CAN接收中断,并进行数据处理;

异常流程:如果我发送CAN数据的速度足够快,使得在CAN接收中断处理函数中,还没处理完,新的一帧数据又发送完成,此时,DSP底层会怎么样?下次等新的数据再来的时候,还会再正常进入CAN接收中断吗?

    

kevin huang1:

回复 user151383853:

DSP型号为TMS320F28335;

我们碰到过一个问题,在某种情况下,即使往DSP发送数据,但该DSP就是无法进入CAN接收中断,这种情况下,只要将该中断邮箱对应的RMP标志位清零,就可以正常进入CAN接收中断了;

所以,我想了解一下,当处于CAN接收中断处理函数中时,如果新的一帧数据又接收成功(仅仅使能了发送中断和接收中断),会不会导致上述的问题?

请教:

正常流程:CAN设置成中断接收方式,通过CAN调试助手,发送一帧数据,产生一个CAN接收中断,并进行数据处理;

异常流程:如果我发送CAN数据的速度足够快,使得在CAN接收中断处理函数中,还没处理完,新的一帧数据又发送完成,此时,DSP底层会怎么样?下次等新的数据再来的时候,还会再正常进入CAN接收中断吗?

    

Hank Zhao:

回复 kevin huang1:

如果新的数据帧的优先级高的话,发生中断嵌套,否则新的中断pending,在中断处理函数的结尾清除RMP位,然后CPU开始处理等待中的中断。

请教:

正常流程:CAN设置成中断接收方式,通过CAN调试助手,发送一帧数据,产生一个CAN接收中断,并进行数据处理;

异常流程:如果我发送CAN数据的速度足够快,使得在CAN接收中断处理函数中,还没处理完,新的一帧数据又发送完成,此时,DSP底层会怎么样?下次等新的数据再来的时候,还会再正常进入CAN接收中断吗?

    

kevin huang1:

回复 Hank Zhao:

感谢HankZhao的耐心解答,我对问题补充如下:

1、同样的数据,优先级一样,按照HankZhao的说法,此时应该处于中断Pending状态;

2、如果没有在中断函数的结尾处清除RMP位,此时会怎样?我怀疑如果没有清除RMP位的话,就会导致新的数据进来,也无法触发接收中断;

3、我的中断处理函数结构如下:

     接收到一帧数据,进中断;

       interupt void CAN_Receive()

     {

            (1)清除邮箱消息挂起标志位,即RMP[n];

            (2)中断接收函数具体处理程序;

             (3)清除GIF0标志位,清除PIEACK标志位;

    }

    出中断,等待接收新的数据;

    类似的问题,在上述的中断处理函数中,极端情况下,如果第二步(2)中断接收函数具体处理程序的处理时间非常长,假设为200us,这样就超出了一帧CAN数据的传送时间(8个字节的为120us左右),此时,就会出现即使接收到CAN数据也无法进入CAN接收中断的现象,查询此时的标志位,发现消息接收挂起标志RMP一直是1,但就是无法进入中断;

    不知道这样,我的问题描述是否清楚,谢谢大家。

   

请教:

正常流程:CAN设置成中断接收方式,通过CAN调试助手,发送一帧数据,产生一个CAN接收中断,并进行数据处理;

异常流程:如果我发送CAN数据的速度足够快,使得在CAN接收中断处理函数中,还没处理完,新的一帧数据又发送完成,此时,DSP底层会怎么样?下次等新的数据再来的时候,还会再正常进入CAN接收中断吗?

    

Hank Zhao:

回复 kevin huang1:

1,是的,如果优先级一样,新的中断也会处于pending状态。

2,是的,如果没有清除RMP位,无法触发新的中断,置位RMP位在清除RMP位的同时也会清除GIF标志位。

3,中断处理函数不宜过长。步骤(1)已经清除过一次GIF0标志位,步骤(3)就不需要再清除了。

请教:

正常流程:CAN设置成中断接收方式,通过CAN调试助手,发送一帧数据,产生一个CAN接收中断,并进行数据处理;

异常流程:如果我发送CAN数据的速度足够快,使得在CAN接收中断处理函数中,还没处理完,新的一帧数据又发送完成,此时,DSP底层会怎么样?下次等新的数据再来的时候,还会再正常进入CAN接收中断吗?

    

kevin huang1:

回复 Hank Zhao:

我最终解释一下,请HankZhao看一下是否正确。

28335的CAN接收中断的产生必须得有GIFn有一个从0到1的电平跳变过程,当DSP芯片底层CAN电路捕捉到该上升沿跳变过程时,就会产生一个中断;

而GIFn这个标志位是由消息挂起寄存器即RMPn决定的,当RMP为0时,GIF也为0;当RMP为1时,GIF也为1,所以,对于RMP的清零或者置1都会相应地引起GIF相同的变化;

在这个问题中,由于中断嵌套或者通讯机制不太合理,并且RMP的清零是在CAN接收中断函数起始处就进行的,因此,如果在CAN接收中断函数处理程序中,如果又接收到新的数据,那么RMP又置1,并且相应的GIF也置1,因此当退出CAN接收中断时,当接收到新的数据时,由于RMP和GIF始终为1,即高电平,DSP无法捕捉到上升沿电平的跳变,所以,没办法再次进入中断;

为了防止上述问题的发生,我们在每次退出CAN接收中断函数之前,得再次检查RMP是否被再次复位。

赞(0)
未经允许不得转载:TI中文支持网 » CAN接收中断
分享到: 更多 (0)