imx6q flexcan初始化流程

imx6 flexcan的初始化流程

复位

flexcan有两种复位模式:

1.包括芯片在内的硬复位,这时候会异步的清空所有映射的寄存器

2.MCR寄存器中的soft_rst位,该寄存器会同步的重置一部分映射的寄存器

软复位是需要时间的,在软复位期间,SOFT_RST该位会挂起,所以可以通过poll该位来判断软复位是否结束,注意的是在时钟模块没有开启的时候,不能进行软复位,在低功耗模式下,必须先恢复时钟,再进行软复位。

MDIS清零之后,flexcan会自动的进入的free模式,在freeze模式下,flexcan与can总线并不保持同步,MCR寄存器中的HALT和FRZ位置1,内部状态机被禁止,MCR寄存器中的FRZ_ACK和NOT_RDY位置1, Tx引脚处于隐性状态,FLEXCAN不会启动CAN帧的任何传输或接收

另外,消息缓冲区和rx的自己的掩码寄存器是不会被复位影响的,因此它们并不会被自动的初始化。

flexcan要求在进行任何改变和初始化的时候,需要进入freeze模式。

以下为具体的初始化过程:

1.初始化模块配置寄存器(Module Configuration Register)

    •设置IRMQ位,启用individual filtering per MB和接收队列特性

    •设置WRN_EN位置1使能警告中断


    •将SRX_DIS位置1来禁用帧自接收,如果有需要的话


    •通过将RFEN位置1使能FIFO


    •通过将AEN位置1来使能中止机制


    •通过将LPRIO_EN位置1使能本地优先级功能

 

2.初始化控制寄存器(Control Register )

    •确定传输速率的时钟参数:PROPSEG,PSEG1,PSEG2,RJW


    •确定传输速率的分频系数PRESDIV字段


    •确定内部仲裁模式(LBUF位)

 

3.初始化消息缓存

    •必须初始化所有消息缓冲区的控制和状态字


    •如果启用了FIFO,则必须初始化8-enrty的ID表


    •应根据需要初始化每个消息缓冲区中的其他条目

 

4.初始化rx mask寄存器(Rx Individual Mask Registers )

 

5.在IMASK寄存器中设置所需的中断屏蔽位(对于所有MB中断),在

CTRL寄存器(用于总线关闭和错误中断)和MCR寄存器用于唤醒
打断功能

 

6.对MCR中的HALT位清零

 

初始化流程over

你可能感兴趣的:(BSP_Driver)