S32K144入门笔记(二十五):FlexCAN初始化序列
文章目录
- 初始化模块典型过程
初始化模块典型过程
对于配置、改变或者初始化FlexCAN模块来说,必须在冻结模式下操作。且在每次复位后,FlexCAN模块必须被重新初始化。
一个典型的初始化过程大致如下:
-
配置MCR寄存器
a. 通过设置 IRMQ 启用每个 MB 和接收队列的单独过滤功能。
b. 通过设置 WRNEN 启用警告中断。
c. 如果需要,通过设置 SRXDIS 禁用帧自接收。
d. 通过设置 RFEN 启用 Rx FIFO。
e. 如果启用了 Rx FIFO 且需要 DMA,则设置 DMA。
f. 如果需要伪装网络模式,则设置 PNET_EN。
g. 通过设置 AEN 启用中止机制。
h. 通过设置 LPRIOEN 启用本地优先级功能。 -
初始化控制 1 寄存器(CTRL1),并可选择初始化 CAN 位定时寄存器(CBT)。同时初始化 CAN FD CAN 位定时寄存器(FDCBT)。
a. 确定位定时参数:PROPSEG、PSEG1、PSEG2 和 RJW。
b. 可选择确定位定时参数:EPROPSEG、EPSEG1、EPSEG2 和 ERJW。
c. 确定 CAN FD 位定时参数:FPROPSEG、FPSEG1、FPSEG2 和 FRJW。
d. 通过对 PRESDIV 字段进行编程来确定位速率,并可选择对 EPRESDIV 字段进行编程。
e. 通过对 FPRESDIV 字段进行编程来确定 CAN FD 位速率。
f. 确定内部仲裁模式(LBUF)。 -
初始化消息邮箱
a. 必须初始化所有消息缓冲区的控制和状态字。
b. 如果启用了 Rx FIFO,则必须初始化 ID 过滤器表。
c. 应根据需要初始化每个消息缓冲区中的其他条目。 -
初始化Rx独立掩码寄存器(RXIMRn)
-
设置中断屏蔽位
– IMASK寄存器
–CTRL1/CTRL2寄存器 -
如果虚拟网络模式使能,配置选择性唤醒需要的寄存器
-
清除MCR中的HALT位