K60_CAN

分为标准数据帧(11位标识符)(28--18,18个最低位将会被忽略)与扩展数据帧(29位标识符);0~8字节的数据长度;0~8字节长度报文缓冲区;

波特率可达1MBPS;

16位自由运行定时器的时间戳机制。

FLEXCAN模块内存映射包括16个128比特的报文缓冲MBS

每一个私有MB都由16字节组成。

  struct {           /* offset: 0x80, array step: 0x10 */

    uint32_t CS;     /**< Message Buffer 0 CSRegister..Message Buffer 15 CS Register, array offset: 0x80, array step: 0x10*/

    uint32_t ID;     /**< Message Buffer 0 IDRegister..Message Buffer 15 ID Register, array offset: 0x84, array step: 0x10*/

    uint32_t WORD0;  /**< Message Buffer 0 WORD0Register..Message Buffer 15 WORD0 Register, array offset: 0x88, array step:0x10 */

    uint32_t WORD1;  /**< Message Buffer 0 WORD1Register..Message Buffer 15 WORD1 Register, array offset: 0x8C, array step:0x10 */

  } MB[16];

 

CODE--报文缓冲区码,用来作为报文缓冲区匹配与仲裁过程的一部分。

发送时:

配置CODE域为1000,配置发送报文缓冲区,且为空闲状态;

填写其结构体;

RTR=0,CODE=1100,激活报文缓冲区,启动数据帧发送。

由于发送过程需要一定时间,所以需要延迟然后再判断发送是否完成,邮箱中数据帧发送成功则中断标志寄存器IFLAG中相应位会被置位。此时若允许中断(中断掩码寄存器的IMASK的对应位被置位),将触发MBx中断。

一次发送完成,需要清中断标志寄存器IFLAG中BUFxI位。

数据帧接收

控制/状态字段的4位CODE域=0000,配置MBx为接收缓冲区且为空闲状态;

如果通过邮箱MBx接收一个扩展帧,则首先写标准ID和扩展ID到其ID字段,然后将控制/状态字段的IDE位和SRR位置位。

注意:接收报文缓冲区的ID字段将结合RXGMASK的设置,及控制/状态字段的IDE位来过滤报文。

写邮箱的控制/状态字段的CODE域=0100,激活接收缓冲区,启动接收。

一旦邮箱接收到数据,则中断标志寄存器IFLAG中的BUFxI位将被置位,此时若允许中断(中断掩码寄存器IMASK的BUFxM位被置位)将触发MBx中断,用户可以通过查询相应标志位,或者通过中断读取接收报文缓冲区数据。


SRR--替代远程请求。固定隐形位只用于扩展帧格式。Fixed recessive bit, used only in extended format. It must be set to '1' by the user for transmission (Tx Buffers) and will be stored with the value received on the CAN bus for Rx receiving buffers.

IDE--ID扩展位。1为扩展帧,0为标准帧。1=接收扩展帧但是拒绝标准帧;0=拒绝扩展帧但是接收标准帧。

RTR--远程传输请求。远程帧是由总线单元发出的,负责请求发送相同的数据帧

如果你需要某个节点向你发送数据,可以用这个节点的ID,发送一个remote frame,这样节点受到这样的ID的Remote Frame 之后就发送数据了,发送的数据就是数据帧。远程帧就像命令,命令相应的节点返回一个数据包.

DLC数据的字节长度。

PRIO本地优先级,只有当MCR寄存器的LPRION_EN位置位时这三位才有用,并且只对传输邮箱有效,这些位不会被传输,经常被附加到ID来定义传输优先级。

ID帧标识符--分为标准数据帧(11位标识符)(28--18,18个最低位将会被忽略)与扩展数据帧(29位标识符);0~8字节的数据长度。

接收队列FIFIO结构:MCR[RFEN]位被置位,内存空间的0X80到0XDC(通常被MB0到MB5占用)将会被用于接收队列FIFO引擎。

区间0x80到0x8C包含队列FIFO的输出,该队列必须被CPU当作报文缓冲区读取。


FlexCAN

邮箱系统由高达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位时将进入低功耗模式。

CAN_MCR_LPMACK_MASK。

停止模式:在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位不进行验证

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值