FlexCAN简单介绍

本文深入探讨了FlexCAN模块的邮箱和接收队列结构,包括报文缓冲区的配置、ID过滤机制、仲裁算法,以及不同操作模式如正常、冻结、监听和闭环模式的特性。详细介绍了接收邮箱全局掩码寄存器、中断掩码寄存器和控制寄存器的作用,以及如何通过掩码机制实现报文的高效过滤。
摘要由CSDN通过智能技术生成

邮箱

邮箱系统由高达64个报文缓冲区组成,前38个MBs相对应的内存空间可以被配置成支持FIFO接收机制,该机制具有一个强大的ID过滤机制,能够检测接收帧的ID表(最多可以是128个扩展帧ID或者256个标准帧ID或者512个8比特的ID分片),还具有高达32个ID表提供私有掩码寄存器。

同时支持通过队列FIFO以及邮箱接收

对于邮箱接收,一个匹配算法可以使得将接收到的帧存储到MBs中,该MB的ID字段和接收到的帧具有相同的ID字段。掩码机制可以使得在MB中设置的ID号与一系列的接收到的CAN帧的ID进行匹配。对于传输,仲裁算法可以基于报文的ID(通过本地3个比特的优先权字段来选择)或者MB的排序来决定将要发送的MBs的优先权。

仲裁过程会根据CTRL1[LBUF]以及MCR[LPRIO_EN]位的设置,在扫描结束时在所有激活的发送邮箱中选择优胜者。

CTRL1[LBUF]置位,则第一个(最小号)激活的发送邮箱将获得仲裁优先权。当其置位时,MCR[LPRIO_EN]将不会产生作用。

 

FLEXCAN模块具有四种不同的功能模式:正常模式(用户和管理员)、冻结模式、监听模式以及闭环模式;同样具有三种不同的低功耗模式:禁止模式、睡眠模式以及停止模式。

冻结模式:

MCR寄存器的FRZ位被置位,CAN_MCR_FRZ_MASK:当MCR的HALT位置位时或者在MCU级请求调试模式并且MCR寄存器的FRZ_ACK被置位,CAN模块将进入到冻结模式。

回环模式:

CAN_CTRL1_LPB_MASK;CAN工作在内部闭环模式用于自测。从发送器发出的比特流输出回内部的接收器输入,输入引脚将被忽略,并且输出引脚将处于逻辑1状态。

睡眠模式:

当MCR寄存器的DOZE被置位、在MCU级请求睡眠模式并由CAN置位MCR寄存器的LPM_ACK位时将进入低功耗模式。

停止模式:

在MCU级请求模式并且由FLEXCAN模块置位MCR寄存器LPM_ACK位时,模块进入该低功耗模式。在停止模式中,模块将会自己置于不活动状态,然后通知CPU可以关闭所有时钟。当请求离开停止模式或者当检测到CAN总线上有活动时,并且同时开启了自醒机制时,flexcan将会退出该模式。

CAN RX与CAN TX引脚:

显性状态代表逻辑0,隐性状态表示逻辑1.

 

模块可以使用邮箱和RX接收队列结构存储CAN报文用于传输与接收。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

CANX_RXMGMASK

接收邮箱全局掩码寄存器,位于RAM区,是为了对传统的支持。

【可替代的掩码机制】四个掩码寄存器,主要是向后兼容。当MCR[IRMQ]位清零时,开启。

接收邮箱全局掩码寄存器CAN_RXMGMASK_REG(CANBaseAdd),当MCR[IRMQ]位清零时,RXMGMASK总是全部有效,当MCR[IRMQ]位置位时,RXMGMASK无效。

RXMGMASK用于给所有接收MB提供过滤字段,除了MBX14-15,它们有自己的掩码寄存器。只能在冻结模式下才能被写入。

0 相应的比特在过滤器中为无关,1为检查。

SMB 接收帧的RTR比特位,其被放在附加的MB,即接收串行报文缓冲区RXSMB。

中断掩码寄存器1(CANx_IMASK1)

每一个缓冲区在该寄存器中都有一个相应的屏蔽位,置位:开启相应缓冲区中断;0禁止相应缓冲区中断。

当IFLAG1置位时,当缓冲区1完成收发过程时,会向CPU产生中断。

中断标志寄存器1:

CANx_IFLAG1,如果相应的IMASK1置位,就会产生一个中断,向相应的中断标记写1可以清除该位,写0无影响。

当接收队列FIFO使能时,BUF7I与BUF5I标志也可以用来表示队列FIFO中断。

BUF5I:

缓冲区MB5中断或者接收队列FIFO中可用的帧,当MCR寄存器的RFEN位清零时,该位用来表示MB5缓冲区中断。

MCR[RFEN]=1:接收队列有可用帧。

控制寄存器2:

RFEN:接收队列FIFO过滤器的数目。冻结模式下选择。不能大于接收队列及邮箱ID过滤器的报文缓冲区的数目,由MACR[MAXMB]所定义。

接收私有掩码寄存器CANx_RXIMRn

位于RAM区,因此在复位后不会被初始化。用作在接收MBs以及接收队列FIFO的ID过滤器的可接收掩码。如果没有使能接收队列FIFO,那么会给每个可用的邮箱提供一个掩码寄存器,该掩码寄存器为邮箱的每一位提供ID掩码功能。1检查过滤器中相应位;0不受影响。

接收队列FIFO:

MCR[RFEN]位置位,可以使能只用于接收的队列FIFO,复位值为0。FIFO队列具有6个报文的深度,当队列中至少有一个可读帧时,IFLAG[BUF5I]标志位被置位。同时使能相应的掩码会产生一个中断。只有当IFLAG[BUF5I]被置位时FIFO输出才有效。

IFLAG[BUF6I]接收队列警告置位时,意味着接收队列将要满了。会一直置位,直到CPU清除它。

IFLAG[BUF7I]  :Rx FIFO overflow

发送时先发送高位,再发送低位。

匹配处理:

扫描整个MB内存,寻找与CAN总线上接收到的帧的ID相匹配的接收缓冲区的一个算法。只有被设置为接收的MB才参与匹配

通过使用ID接收掩码,可以匹配一系列ID,通过三个掩码寄存器来支持掩码机制。在匹配算法中,如果掩码位被置位,则相应ID位被验证,反之,则相应ID位不进行验证。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值