Hi Wei,
您好。STM32中使用的是ST的bxCAN模块吧?
如果是这样的话,bxCAN是个比较基础的控制器,它规定了3个发送buffer和2个接收FIFO。
但是TI的DCAN是相对高级的控制器,提供32个和16个buffer,您可以选择每个buffer是发送还是接收。
也就是说,bxCAN有5个buffer,但不能选择发送还是接收。
DCAN有32(16)个。
在这种相对复杂的结构下,配置每个message buffer(message object)是比较繁琐的过程,尤其对IC硬件本身来说。因此,TMS470MF系列中,提供了3组CAN Interface寄存器,就是手册上看到的 DCAN IF1CMD, IF1MSK, IF1ARB等等。
32 个message object没有给用户提供直接的接口进行访问,用户只能通过Interface寄存器来操作这些object. 但是object还是映射在内存空间中的,也就是说,调试的时候,你也可以直接到object的地址来查看他们的内容,具体信息在Datasheet中可以找到。
用IF寄存器组操作Msg obj时,最后一步一般是IFxCMD的Message Number位,就是将目标Msg obj的编号写入IFxCMD寄存器。这个动作之后,IF寄存器组中的所有配置就开始向真正的msg obj进行传递了,这个过程需要几个时钟周期来完成。
因此,一般不连续操作一个IF寄存器组,用完了IF1就用IF2,切换使用。
建议您下载TI的HALCoGen驱动代码生成工具,用它生成一个CAN的代码,就一目了然了。