您好!
当 IF1/IF2寄存器与 CAN 中断一起使用时 、会检查 CANREG1->INT 寄存 器的值是否为0x8000U。
相反、当带有 DMA 中断的 IF3寄存器为 uDES 时、如何正确检查错误。 我只有 IF3MSK、IF3ARB、IF3MCTL 和 IF3DATx 寄存器中的值由 DMA 存储。
此致、Eduard
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我必须将消息 ID 或错误传输到更高级别的软件。 我想使用 DMA 而不是 CAN 中断的原因是接收报文的顺序有问题。 如此处所述: e2e.ti.com/.../dcan-fifo-reading-while-receiving
"消息顺序问题"是什么意思? RM48L952是一款小端字节序器件、不存在字节序问题。
我看不到将 FIFO 模式用于 IF3x 接口的优势。 如前所述、当一个报文对象在接收到一个 CAN 报文后被更新时、IF3x 可以自动接收来自报文 RAM 的控制数据和用户数据、并且自动产生 DMA 请求来将数据从设置为 SRAM 中缓冲区的 IF3x 寄存器传输到该缓冲区。 CPU 不需要启动从消息 RAM 到 IF3寄存器组的传输。
对于 FIFO 模式、CPU 必须启动从消息 RAM 中的 FIFO 到 IF3寄存器组的传输、并手动触发 DMA 以将数据从 IF3x 寄存器传输到 SRAM 中的缓冲区。
关于 FIFO 模式、让我添加更多注释:
FIFO 可用于 RX 数据帧和 TX 数据帧。 由于远程帧不包含数据字段、因此 FIFO 不用于远程帧、但用于远程帧的接收对象可以使用 FIFO 缓冲区。
FIFO 模式允许您接收一组 ID 相同(或在过滤后 ID 相同)的帧、并且仅在最后一个帧进入时向 CPU 生成中断。 设置具有相同标识符和掩码的邮箱块。 例如、如果在此组中需要接收的最大字节为64、则使用相同的标识符和掩码配置8个邮箱。 例如、让我们使用邮箱1-8。 前7个(1-7)将 EOB (缓冲区末尾)设置为0、并将 RxIE (接收中断使能)设置为0。 在第八个邮箱中、将 EOB 设置为1、将 RxIE 设置为1。
现在、假设其中一个节点需要发送24个字节。 它发送前两个帧 EOB=0、第三个帧 EOB=1。 前两个帧结束在邮箱1和2中、第三个帧结束在邮箱8中并生成一个中断。 在邮箱8的中断例程中、由于您知道它是 FIFO 的末尾、因此您开始从邮箱1读取。 在读取每个邮箱时、必须检查 NewDat 位。 当您单击邮箱3时、NewDat = 0、因此您现在可以跳到邮箱8并从组中读取最后一个帧。
我认为您正在使用 FIFO 进行传输。
如前所述 、FIFO 模式允许您接收一组具有相同 ID 的帧、并且仅在最后一个帧进入时向 CPU 生成中断。 FIFO 或报文对象不接受具有不同报文 ID 的帧。