DCAN发送
这个模块和我以前接触的stm32和SPC以及飞思卡尔的can模块不同,它没有发送邮箱mailbox,只有一个TXbuf和一个RXbuf。没有办法直接将不同ID的报文放入不同邮箱里发送。并且所有的ID以及报文数据全部存在txbuf里。要发送/接收的消息存储在发送/接收缓冲区中。 发送缓冲区一次可以保存一条消息。存储器地址不能直接获得, 这些只能通过 TXBUFn 和 RXBUFn 寄存器间接使用。
发送缓冲寄存器用于写入要通过 CAN 网络发送的 CAN 帧。 该寄存器映射到从双字对齐地址开始的四个连续字节位置,以方便字和双字复制操作。
TXBUF 是只写寄存器。 写入该寄存器执行内部写指针的自动递增。 该指针是传输内存的实际地址。 自动增量在 8、16 和 32 位总线宽度中的行为不同。 在 8 位模式下,仅当访问位置 TXBUF3 时执行自动递增,在 16 位模式下仅当访问位置 TXBUF2 时执行,而在 32 位模式下仅当访问位置 TXBUF0 时执行。 通过在中断应答寄存器中写入适当的位,可以将写指针复位到发送存储器地址 0h。
我使用的是32位芯片,所以需要访问位置TXBUF0.
如果要发送不同报文,需要将指针复位到发送存储器地址 0h。可以将TI为置1复位指针。
发送两报文方法如下图所示,分别发送ID为0x4BA和0x92的两种报文。
if (CAN->STATUS.TBS == 0x1) {