一:XMC4800简介
英飞凌XMC4800属于XMC4000系列中的一个子型号,时英飞凌公司基于Cotex-M4内核开发的集成片上EtherCAT(用于控制和自动化技术的以太网)节点的全新32位微控制器。其部分参数如下表:
CPU frequency | 144MHZ |
Flash | 2.5MB |
RAM | 512KB |
Cache | 6KB |
POSIF | 2x |
CCU4(4ch) | 4x |
CCU8(8ch) | 2x |
ADC 12-Bit | 4x |
Delta/Sigma Demodulator | 4x |
DAC | 2x |
Ethernet MAC/EtherCAT MAC | 2x/1x |
USB | FS OTG |
USIC | 6X |
CAN | 6x |
二:MuLtiCAN模块介绍
2.1 MuLtiCAN模块简述:
XMC4800的MuLtiCAN模块包含6个可独立运行的符合ISO 11898和SAE J 1939的CAN节点,每个节点都支持通过网关或远程帧模式交换数据。MultiCAN模块提供256个“消息对象”用于接收和处理CAN报文,这256个消息对象可以自由分配给任何一个节点使用,一个消息对象只能映射到一个CAN节点。每个节点都有自己的消息对象列表,这些列表可以组成FIFO方式缓存报文,也可以用作网关模式。报文的处理流程如下图所示。
我们使用一种快递模型来理解MuLtiCAN的工作模式。假定MCU为一个区域的承包人,那么他需要将自己承包的区域划分为不同的部分由不同的加盟店来完成该区域的工作,划分区域其实就是安排加盟店(CAN-NODE),每一个加盟店在收到物流网络上的包裹(报文)之后需要人工进行筛选(Message Objects)决定那些包裹(报文)需要处理,接收需要处理的,丢弃不需要处理的。每个加盟店可以由区域承包人(MCU)安排需要多少工人(Message Objects),每个工人(Message Objects)可以接收的包裹(报文)的地址范围。对于大规模的包裹(报文)的处理还可以安排多个(Message Objects)组成流水线(FIFO)形式处理,以满足客户需要大规模投递需要。
所以我们需要使用MuLtiCAN模块实现CAN总线通信功能需要完成以下内容:
1. 初始化CAN-NODE
2. 初始化Message Object(接收/发送滤波)
3. 为CAN-NODE分配可用的MessageObject(List)
4. 使能物理引脚,打开中断
2.2 MuLtiCAN模块主要寄存器简述:
2.2.1 Global ModuleRegisters
2.2.1.1 Module Identification Register(模块识别寄存器)(ID)
作用:CAN节点的消息对象列表分配与管理面板。
MOD_NUMBER(32-16):模块的识别号
MOD_TYPE(15-8):模块类型
MOD_REV(0-7):模块的版本号
这是一个只读寄存器,不需要做任何配置。
2.2.1.2 PANCTR(Panael Control Regisiter 面板控制寄存器)
作用:消息对象列表分配控制面板,负责每个消息对象列表的消息对象管理,包括静态\动态插入和删除消息对象。
PANAR2(31-24),PANAR1(23-16),0(15-10),RBUSY(9),BUSY(8),PANCMD(7-0)
PANCMD和PANAR1、PANAR2组成组合命令完成不同的任务,RBUSY和BUSY为忙标志。PANCMD和PANAR1、PANAR2组成命令内容如下。
PANCMD | PANAR2 | PANAR1 | 功 能 |
00 | - | - | NO Operation |
01 | Bit7:ERR | - | 列表初始化,复位所有报文,解除所有已分配的报文对象。初始化时CAN节点(0-5)必须职位INIT和CCE。 ERR:0,初始化成功;1,并非所有节点的INIT和CCE被置位取消初始化。MUltican模块复位时会自动执行初始化指令 |
02 | 列表指针 | 报文对象编号 | 将PANAR1给出的报文对象分配到PANAR2给出的列表的末尾,也可以取消对PANAR1给出的报文对象的分配,PANAR2=0即可。 |
03 | 列表指针 Result: Bit7:ERR | 结果 报文对象编号 | 将未分配报文对象列表中的第一个报文对象分配给PANAR2指定的报文对象列表(添加到该列表最后)被分配的报文对象编号返回到PANAR1. Result: ERR :0,成功 1,失败,未分配的报文对象列表为空(所有报文对象都已经分配完毕?) |
04 | 目标对象编号 | 源对象编号 | 将PANAR1给定的源对象从其所属的对象列表中移除并插入到PANAR2所给定的目标对象所属的对象列表中,它插入到目标对象的前面。 |
05 | 目标对象编号 Result: Bit7:ERR | Result: 被插入的报文对象编号 | 将未分配报文对象列表中的第一个报文对象插入到给定目标对象编号的前面,返回被插入的报文对象编号给PANAR1. Result: ERR :0,成功 1,失败,未分配的报文对象列表为空(所有报文对象都已经分配完毕?) |
06 | 目标对象编号 | 源对象编号 | 将PANAR1给定的源对象从其所属的对象列表中移除并插入到PANAR2所给定的目标对象所属的对象列表中,它插入到目标对象的后面。 |
07 | 目标对象编号 Result: Bit7:ERR | Result: 被插入的报文对象编号 | 将未分配报文对象列表中的第一个报文对象插入到给定目标对象编号的后面,返回被插入的报文对象编号给PANAR1. Result: ERR :0,成功 1,失败,未分配的报文对象列表为空(所有报文对象都已经分配完毕?) |
08-FF | - | - | - |
2.2.1.3 MCR(Module Control Register)模块控制寄存器
作用:时钟选择和报文挂起选择
0(31-16),MPSEL(15-12-rw),0(11-9),0(8-rw),0(7-4),CLKSEL(3-0-rw)
CLKSEL(3-0-rw) | 0000 没有时钟可提供 0001 fPERIPH 0010 fOHP 0100不允许 1000 hard wired to 0 |
0(8-rw) | Written 0 |
MPSEL(15-12-rw) | 在报文接收/发送之后,位域MPSEL可用于计算报文挂起位置,由位域RXINP、TXINP和MPN(报文挂起编号)共同选择。-详细描述参见用户手册 |
2.2.1.4 MITR(Module Interrupt Trigger Register)中断触发寄存器
作用:触发中断
0(31-16),IT(15-0-W)
IT(15-0-W) | 在对应的位写1(n)可以在INT_O[n]中断输出线上产生中断,写0无影响。 |
2.2.1.5 List Pointer and List Register(列表指针和列表寄存器)
作用:描述消息对象列表指针,消息对象列表大小,对象列表包含的消息对象等内容。有七个消息对象列表,消息对象列表0包含所有未分配到消息对象列表的消息对象,消息对象列表(1-6)分别映射到CAN-NODE(0-5)。
LIST0
LIST(1-15)
LIST Register N
0(31-25),EMPTY(24-rh),SIZE(23-16),END(15-8-rh),BEGIN(7-0-rh)
EMPTY | 0- 列表不为空(列表内至少有一个报文对象) 1- 列表为空(列表未分配报文对象) |
SIZE | 列表中元素个数-1(即从0开始计数) 为0时表示列表为空 |
END | 指向列表最后一个报文对象 |
BEGIN | 指向列表第一个报文对象 |
2.2.1.6 报文通知寄存器(集)MSPNDk
当报文对象因报文发送/接收操作而产生一个中断请求时, 该请求将被送至报文对象
的位域 TXINP 或 RXINP 所选择的中断输出线上。因为报文对象个数多于中断输出线个
数,因此通常一个中断程序可处理来自多个报文对象的请求。因此,MultiCAN 模块实现
了一个优先级选择机制,在报文对象集合中选择具有最高优先级的报文对象。报文挂起
寄存器包含挂起的中断请求。
MSPNDk (k = 0-7)(MessagePending Register k)
MPN(31-0)
当一个报文对象中断产生,MSPND中的某一位会被置位(由IPR寄存器的MPN域决定)寄存器选择 n 由 MPN 最高位给出。对应的位上写1可以清零。
每个消息挂起寄存器都有一个与之关联的消息索引寄存器MSIDk。消息索引寄存器显示处于待处理位组中最低位置的有效位(置位)。
MSIDK(k = 0-7)(MessageIndex Register k)
0(31-6),INDEX(5-0)
INDEX(5-0) | INDEX 的值由具有下列特性 MSPNDk 挂起位的位i 给出: 1. MSPNDk[i] & IM[i] = 1 2. i = 0 或者 MSPNDk[i-1:0] & IM[i-1:0] = 0 如果 MSPNDk 中没有满足上述条件的位,那么 INDEX 被读为 100000B。 因而, INDEX 给出 MSPNDk 中的第一个挂起位的 位置,只考虑那些被报文指针屏蔽寄存器选中的 位。 |
MSIMASK(Message Index MaskRegister)
IM(31-0)
只有在IM中设置了相应索引掩码位,MSPNDk中的那些位才有助于计算消息索引。
(掩码?控制开关?)
2.2.2 CAN Node Registers(CAN节点寄存器)
CAN节点寄存器内置于MultiCAN +模块的每个CAN节点。包含节点控制直接相关的信息。
2.2.2.1 Node x Control Register CAN_NCRx (x = 0-5)
0(31-8),CALM(7),CCE(6),TXDIS(5),CANDIS(4),ALIE(3),LECIE(2),TRIE(1),INIT(0)
INIT(0-rw) | 0: 复位 INIT 用于使能该节点,使其可参加 CAN通信。 如果 CAN 节点处于总线关闭状态,那么继续进行总线关闭的恢复操作(该操作不依赖于INIT 位)。总线关闭恢复序列结束时,允许该节点参加 CAN 通信。如果 CAN 节点不处于总线关闭状态,在允许该节点参加 CAN 通信之前,必须要检测到 11个连续的隐性位. 1: 关闭节点,禁止参与通讯。取消任何正在传送的帧。如果该节点处于总线关闭状态则继续运行总线关闭恢复序列。 |
TRIE(1-rw) | 传输中断使能,运行在CAN报文发送或接收成功之后产生中断 0:不允许产生传输中断 1:允许产生传输中断 通过 CAN 节点中断指针寄存器中的 TRINP 选择中断输出线 |
LECIE(2-rw) | 允许当每一次硬件刷新NSRX寄存器的LEC位(LEC>0,CAN协议错误)时产生中断。 0:禁止中断 1:允许中断 中断输出线由位域NIPRx.LECINP选择 |
ALIE(3-rw) | 警告中断使能 0:禁止中断 1:允许中断 以下事件会产生中断 NSRX(CAN节点状态寄存器)的位BOFF发送改变 NSRX(CAN节点状态寄存器)的位EWRN发送改变 列表长度错误,该错误也置位NSRX(CAN 节点状态寄存器)中的位 LLE 列表对象错误,该错误也置位NSRX(CAN 节点状态寄存器)中的位 LOE 位域NIPRx.ALINP选择在这种类型的中断时被激活的中断输出线 |
CANDIS(4-rw) | 置位将禁止该CAN节点。首先CAN节点一直等待,直到总线空闲或总线关闭撞他,然后INIT自动置位,如果ALIE被置位那么产生一个警报中断。 |
TXDIS(5-rw) | 置位,在总线空闲时禁止CAN节点发送消息?用途? |
CCE(6-rw) | 0:位时序寄存器,端口控制寄存器和错误计数器 寄存器只能被读取,忽略所有试图修改这些寄 存器的操作。 1:位时序寄存器,端口控制寄存器和错误计数器 寄存器可读也可写 |
CALM(7-rw) | CAN 分析模式 置位该位,那么 CAN 节点工作在分析模式。这就意味着可以接收报文,但不能发送报文。帧接收操作之后不向 CAN 总线发送应答。有效错误标志以隐性而不是显性发送。发送线连续保持为隐性(1)电平。只有当位 INIT 置位时,才能对位 CALM 写入 |
2.2.2.2 CAN_NSRx (x = 0-5) (CAN节点状态寄存器)
0(31-0),LOE(9),LLE(8),BOFF(7),EWRN(6),ALERT(5),RXOK(4),TXOK(3),LEC(2-0)
LEC(2-0-rwh) | 最近的错误代码 000:无错误 001:填充错误,接收到的报文中出现了连续极性相同的5个位 010:格式错误 011:应答错误 100:位 1 错误,在报文发送过程中, CAN 节点试着在仲裁域和应答时隙之外发送隐性电平(1),但是监测到的总线值为显性。 101:位 0 错误,该编码指示两种不同情况: a) 在报文发送过程中(或者应答位,有效错误标志,过载标志), CAN 节点试着发送显性电平(0),但监测到的总线值是隐性。 b) 总线关闭恢复期间,每次监测到 11 个连续的隐性位,将置位该编码。 CPU 可以用这个编码指示总线被连续扰乱。 110:CRC错误 111:CPU 向 LEC 写: 无论何时 CPU 向 LEC 写 111B, LEC 被设置为 111B;无论何时CPU 向 LEC 写其它值, 实际写入值被忽略。 |
TXOK(3-rwh) | 0: 从最近一次该标志被复位开始,无成功的发送操作 1: 已经成功发送了一个报文 TXOK 必须由软件复位(写 0), 写 1 无任何影响。 |
RXOK (4-rwh) | 0: 从最近一次该标志被复位开始,无成功的接收操作 1: 已经成功接收了一个报文 RXOK 必须由软件复位(写 0), 写 1 无任何影响。 |
ALERT(5-rwh) | 出现下列事件之一将置位 ALERT(如果 ALIE 被置 位,这些事件也会触发报警中断): 1) CAN 节点状态寄存器中的位 BOFF 改变 2) CAN 节点状态寄存器中的位 EWRN 改变 3) 列表长度错误,该错误也置位 CAN 节点状态 寄存器中的位 LLE 4) 列表对象错误,该错误也置位 CAN 节点状态 寄存器中的位 LOE 5) MultiCAN 模块已经置位 INIT ALERT 必须由软件复位(写 0),写 1 无影响。 |
EWRN(6-rwh) | 错误警告状态 0B 没有超过警告界限。 1B 错误计数器 REC 或 TEC 达到警告界限EWRNLVL。 错误计数器达到警告界限(如何处理)? |
BOFF(7-rwh) | 0:CAN控制器不属于关闭状态 1:CAN控制器属于关闭状态 |
LLE(8-rwh) | 列表长度错误 0: 从最近一次该标志被清零开始,没有出现列表长度错误。 1:报文验收滤波过程中,检测到列表长度错误,属于这个 CAN 节点的列表中的元素个数和列表终止指针给出的列表大小(SIZE)不同。 LLE 必须由软件复位(写 0),写 1 无任何影响 |
LOE(9-rwh) | 列表对象错误 0B 从最近一次该标志被清零开始,没有出现列表对象错误。 1B 报文验收滤波过程中,检测到一个列表 对象错误。已经检测到带有错误列表指针(报文对象控制寄存器中的)的报文对象。 LOE 必须由软件复位(写 0),写 1 无任何影响。 |
2.2.2.3 CAN_NIPRx (x = 0-5)
Node x Interrupt Pointer Register 节点中断指针寄存器
0(31-16),CFCINP(15-12),TRINP(11-8),LECINP(7-4),ALINP(3-0)
ALINP(3-0-rw) | 警报节点指针 选择CAN节点(0-7)告警中断的中断输出线INT_Om(m=0-7) 0000 :选择INT_O0 0001 :选择INT_O1 …… 1111 :选择INT_O15 |
LECINP(7-4-rw) | 最近一次警告节点指针 选择CAN节点(0-7)最近一次警告的中断输出线INT_Om(m=0-7) 0000 :选择INT_O0 0001 :选择INT_O1 …… 1111 :选择INT_O15 |
TRINP(11-8-rw) | 最近一次传输成功中断节点指针 选择CAN节点(0-7)最近一次传输成功的中断输出线INT_Om(m=0-7) 0000 :选择INT_O0 0001 :选择INT_O1 …… 1111 :选择INT_O15 |
CFCINP(15-12-rw) | 帧计数器中断节点指针 如果由 CFCIE = 1 使能,由 CFCINP 选择用来指出“帧计数器溢出中断请求”的中断输出线INT_Om(m = 0-15)编号。 |
2.2.2.4 Node x Port Control Register CAN_NPCRx (x = 0-5)
节点端口控制寄存器:
0(31-9),LBM(8),0(7-3),RXSEL(2-0)
RXSEL(2-0-rw) | 只能从8条输入线中选择其中一条 |
LBM(8-rw) | 0:禁止环回模式 1:使能环回模式,消息只在内部节点之间传递 |
2.2.2.5 Node x Bit Timing Register CAN_NBTRx (x = 0-5)
节点位时序寄存器
0(31-16),DIV8(15),TSEG2(14-12),TSEG1(11-8),SJW(7-6),BRP(5-0)
BRP(5-0-rw) | 波特率预分频 如果 DIV8 = 0,一个时间单元等于(BRP+1)个时钟周期。 如果 DIV8 = 1,一个时间单元等于 8×(BRP+1)个时钟周期。 |
SJW(7-6-rw) | (重新)同步跳跃宽度 可用于重新同步的时间为(SJW+1)个时间单元 |
TSEG1(11-8-rw) | 采样点前的时间段 由用户定义的同步段结束和采样点之间的额定时间为(TSEG1+1)个时间单元。它包括传播段(将信号传播延迟考虑在内)。 重新同步操作可将该时间段拉长。TSEG1 的有效值在 2 到 15 之间。 |
TSEG2(14-12-rw) | 采样点后的时间段 由用户定义的采样点和下一个同步段开始之间的额定时间为(TSEG2+1)个时间单元。 重新同步操作可将该时间段缩短。TSEG2 的有效值在 1 到 7 之间。 |
DIV8(15-rw) | 预分频时钟 8 分频 0B 一个时间单元持续(BRP+1)个时钟周期 1B 一个时间单元持续 8×(BRP+1)个时钟周期 |
2.2.2.6 Node xError Counter Register CAN_NECNTx (x =0-5)
节点错误寄存器
0(31-26),LEINC(25),LETD(24),EWRNLVL(23-16),TEC(15-8),REC(7-0)
REC(7-0-rw) | 接收错误值寄存器,接收错误计数 |
TEC(15-8-rw) | 发送错误值寄存器,发送错误计数 |
EWRNLVL(23-16-rw) | 错误警告级别(默认为96) |
LETD(24-rh) | 最近一次错误方向: 0:最近一次错误是接收错误 1:最近一次错误是发送错误 |
LEINC(25-rh) | 错误计数器增量 0:最后一次错误导致错误计数器增量为1 1:最后一次错误导致错误计数器增量为8 |
2.2.2.7 Node x Frame Counter Register CAN_NFCRx (x = 0-5)
节点帧计数寄存器
0(31-24),CFCOV(23),CFCIE(22),0(21),CFMOD(20-19),CFSEL(18-16),CFC(15-0)
CFC(15-0-rwh) | 在帧计数模式(CFMOD = 00B)中,该位域包含帧计数值。 在时间标记模式(CFMOD = 01B)中,该位域包含捕获的位时间计数值,在新帧开始时捕获。 在所有位定时分析模式1)(CFMOD = 10B)中,CFC始终显示fCLC时钟周期数(测量结果)减1.例如:CFC值为34 在测量模式下,CFSEL = 000B表示在接收输入的最近两个主要边沿之间已经过了35 fCLC时钟周期。 在错误计数模式(CFMOD = 11B)中,该位域包含接收到的错误帧总数或节点检测到的错误。 |
CFSEL(18-16-rw) | CAN帧数选择 该位选择所选帧计数模式的帧计数器的功能。 帧计数模式: 位0 如果CFSEL的位0被置位,则每次在CAN总线上接收到外部帧(即,与消息对象不匹配的帧)时,CFC递增。 位1 如果CFSEL的位1置位,则每次在CAN总线上接收到与消息对象匹配的帧时,CFC就会增加。 位2 如果CFSEL的位2置位,则每次节点已经成功发送帧时,CFC都会增加。时间戳模式帧计数器在新的位时间开始时递增(内部)。该值在新帧的SOF位中被采样。采样值在CFC字段中可见。 位定时模式: 如果设置了CFCIE,则通过CFC更新生成中断请求节点x(其中x是CAN节点号)。 错误计数模式: 当接收到错误帧或节点检测到错误时,帧计数器递增 |
CFMOD(20-19-rw) | 决定帧计数器的工作模式 00:帧计数器模式,计数器在帧的接收和发送时递增 01:时间戳模式,帧计数器用于计算位时间 10:位定时模式:帧计数器用于位定时分析。 11:错误计数模式:帧计数器用于收到错误帧或节点检测到错误时进行计数。 |
CFCIE(22-rw) | CAN帧计数中断使能 0:禁止CAN帧计数器溢出中断使能 1:允许CAN帧计数器溢出中断使能 位域NIPRx.CFCINP选择的中断输出线在该位使能且CAN帧计数器溢出时激活。 |
CFCOV(23-rwh) | 帧计数器溢出标志 0:自上次复位以来没有发生溢出 1:自上次复位以来产生了溢出 标志CFCOV在帧计数器溢出时置位(从FFFFH转换到0000H)。 在位定时分析模式下,CFCV在更新CFC时被置位。 如果CFCIE = 1,则产生一个中断请求。 |
2.2.3 Message Object Registers
CAN传输相关的控制位
2.2.3.1 CAN_MOCTRz(z = 0-254) And CAN_MOSTATn (n = 1-254)
Message Object z Control Register
0(31-28),SETDIR(27),SETTXEN1(26)
Message Object n Status Register
通过对MOCTR寄存器写入,通过MOSTAT的状态来判断是否完成指定设定任务。
PNEXT | 指在同一列表内在该消息对象之后一个消息对象指针 |
PPREV | 指在同一列表内在该消息对象之前一个消息对象指针 |
RXPND | 接收成功该位置位 |
TXPND | 发送成功该位置位 |
RXUPD | 没有更新在进行(无论发送或接收) |
NEWDAT | 接收到的CAN帧存储在消息对象n中后,NEWDAT由硬件置位。 当消息对象n的CAN传输已经启动时,NEWDAT被硬件清除。 NEWDAT应该在新的发送数据被存储在消息对象n中之后由软件来设置,以防止在正在进行的传输结束时自动重置TXRQ。 |
MSGLST | 0:没有CAN消息丢失 1:CAN消息丢失,因为NEWDAT被重复置位导致上一条丢失 |
MSGVAL | 0:消息对象无效 1:消息对象有效,只有有效的消息对象才可以参与CAN报文传输 |
RTSEL | 0:消息对象没有被选中用于发送或接收报文 1:消息对象呗选中用于发送或接收报文 帧接收: 当消息对象n被标识用于存储当前接收到的CAN帧时,RTSEL由硬件置位。 在接收到的帧最终被存储在消息对象n中之前,执行检查以确定RTSEL是否被设置。 因此,CPU可以通过软件清除RTSEL来抑制对该消息对象n的预定帧传送。 帧发送: 当消息对象n被识别为接下来被发送时,RTSEL由硬件置位。 执行检查以确定在消息对象n被实际设置为传输并且NEWDAT位被清除之前RTSEL是否仍然被设置。 还检查了由于帧的成功发送而在其消息对象n被验证之前,RTSEL仍然被设置。 只有当消息对象n的上下文改变时才需要检查RTSEL,并且避免与正在进行的帧传输的冲突。 在所有其他情况下,RTSEL可以被忽略。 RTSEL对消息接受过滤没有影响。 RTSEL不被硬件清除 |
RXEN | 0:消息对象不允许用于帧接收 1:消息对象允许用于帧接收 |
TXRQ | 0:没有消息发送请求 1:有消息发送请求 |
TXEN0 | 发送使能 0 0B 禁止报文对象 n 进行帧发送 1B 使能报文对象 n 进行帧发送 只有TXEN0和TXEN1都置位才允许消息对象n发送帧。可以清除TXEN0来禁止当前报文的发送更新,或者禁止远程帧的自动回应。 |
TXEN1 | 发送使能 1 0B 禁止报文对象 n 进行帧发送 1B 使能报文对象 n 进行帧发送 只有TXEN0和TXEN1都置位才允许消息对象n发送帧。 MultiCAN 模块用 TXEN1 在发送 FIFO 中选择有效报文对象。 |
DIR | 0: 接收对象选择: TXRQ=1,安排发送带有报文对象 n 的标识符的远程帧。接收到的标识符匹配的数据帧,报文存储在报文对象 n 中。 1: 发送对象选择: 如果 TXRQ=1,安排用报文对象 n 发送数据帧。接收到标识符匹配的远程帧时,置位TXRQ。 |
LIST(-rh) | 列表分配,指明消息对象所属列表编号,通过面板命令修改时硬件会改写这里 |
2.2.3.1 Message Object n Interrupt Pointer Register CAN_MOIPRn
CFCVAL(31-16),MPN(15-8),TXINP(7-4),RXINP(3-0)
CFCVAL(31-16-rwh) | 当完成一个帧的接收或者发送,会自动复制NFCRx.CFC值到这里 |
MPN(15-8) | 出现接收或者发送中断时,该位域用来选择报文挂起寄存器的挂起位置 |
TXINP(7-4) | 发送中断节点指针 为发送中断选择中断输出线 INT_Om(m = 0-15) |
RXINP(3-0) | 接收中断节点指针 为接收中断选择中断输出线 INT_Om(m = 0-15) |
2.2.3.2 Message Object n Function Control Register
CAN_MOFCRn (n = 0-255) 消息对象功能控制寄存器
0(31-28),DLC(27-24),STT(23),SDT(22),RMM(21),FRREN(20),0(19),OVIE(18),TXIE(17),RXIE(16)
0(15-12),DATC(11),DLCC(10),IDC(9),GDFS(8),0(7-4),MMC(3-0)
MMC(3-0-rw) | 消息对象模式控制 0000:标准的消息对象模式 0001:接收FIFO基本报文对象模式 0010:发送FIFO基本报文对象模式 0011:发送FIFO从属报文对象 0100:网关源对象 …… |
GDFS(8-rw) | 0:TXRQ 在目标对象中没有改变 1:数据在从网关源对象传递到目标对象之后TXRQ置位 仅在网关源对象起作用。 |
IDC(9-rw) | 标识符复制 如果 IDC = 1,则网关源对象的标识符(在接收帧被保存到源对象中之后)被复制到网关目标对象中。 仅在网关源对象起作用。 |
DLCC(10-rw) | 如果 DLCC = 1,则网关源对象的数据长度码(在接收帧被保存到源对象中之后)被复制到网关目标对象中。 仅在网关源对象起作用。 |
DATC(11-rw) | 数据复制 如果 DATC = 1,则网关源对象(在接收帧被保存到源对象之后)的数据域(寄存器 MODATA0 和MODATA4)被复制到网关目标对象。 仅在网关源对象起作用。 |
RXIE(16-rw) | CAN报文接收中断使能,该位置位时无论报文使用网关模式接收还是普通模式接收,都会触发接收中断。 |
TXIE(17-rw) | 置位,在CAN报文发生之后产生发送中断 |
OVIE(18) | OVIE启用消息对象n的FIFO完全中断。当指向当前消息对象(CUR)的指针达到FIFO /网关指针寄存器中的SEL值时,会产生此中断。 0:禁止 1:使能 如果消息对象时FIFO发送消息对象则MOIPRn.TXINP选择该中断的中断输出线,如果消息对象时FIFO接收消息对象则MOIPRn.RXINP选择该中断的中断输出线。 其余消息对象模式,此位无效。 |
FRREN(20-rw) | 外部远程请求启用 指定在消息对象n中还是在由指针CUR引用的外部消息对象中设置TXRQ位。 消息对象n的0B TXRQ在接收到匹配的远程帧时被设置。 指针CUR参考的消息对象的TXRQ在接收到匹配的远程帧时被设置。 |
RMM(21-rw) | 发送对象远程监控: 0:禁用远程监控:接收到匹配的远程帧后,消息对象n的标识符,IDE位和DLC保持不变。 1:为了监视传入的远程帧,复制匹配的标识符,IDE位和DLC以传送对象n。 |
SDT(22-rw) | 单向数据传输: 如果SDT = 1且消息对象n不是FIFO基础对象,则当该对象参与成功的数据传输(接收或发送)时,MSGVAL被复位。 如果SDT = 1且消息对象n是FIFO基础对象,则当指向当前对象CUR的指针达到FIFO /网关指针寄存器中的SEL值时,MSGVAL被重置。 SDT = 0时,MSGVAL位不受影响。 |
STT(23) | 单向传输实验: 0:发生传输错误时允许重新传送 1:置位,则在消息对象n的传输开始时TXRQ被清除。 因此,在传输失败的情况下不执行传输重试 |
DLC(27-24-rw) | 数据长度 |
2.2.3.3 Message Object n FIFO/Gateway Pointer Register
消息对象n FIFO/网关指针寄存器
SEL(31-24),CUR(23-16),TOP(15-8),BOT(7-0)
BOT(7-0-rw) | FIFO中的第一个消息对象指针 |
TOP(15-8-rw) | FIFO中的最后一个消息对象指针 |
CUR(23-16-rw) | 指向FIFO /网关结构内的当前目标对象 在FIFO /网关操作之后,CUR被更新为列表结构中的下一个消息对象的消息号(由消息对象状态寄存器的PNEXT给出),直到它被复位到FIFO顶端元素(由TOP给出)或底部元素(由BOT给出) |
SEL(31-24-rw) | SEL是第二个(软件)指针,用于补充FIFO结构中的硬件指针CUR。 SEL用于监视目的(FIFO中断生成)。 |
2.2.3.4 Message Object n Acceptance Mask Register
CAN_MOAMRn (n = 0-255) 消息对象n验收屏蔽寄存器
0(31-30),MIDE(29),AM(28-0)
AM(28-0-rw) | 消息标识符的接受掩码位字段AM是用标准标识符(AM [28:18])或扩展标识符(AM [28:0])过滤传入消息的29位掩码。 对于标准标识符,位AM [17:0]是“不关心”。 |
MIDE(29-rw) | 消息IDE位的接收掩码位 0:允许接收标准或扩展标识符 1:消息对象仅通过匹配的IDE位的接收帧 |
2.2.3.5 Message Object n Arbitration Register
CAN_MOARn (n = 0-255) 消息对象n仲裁寄存器
PRI(31-30),IDE(29),ID(28-0)
ID(28-0-rwh) | 标准帧标识符使用ID[28:18],其余位忽略,扩展真标识符使用位ID[28:0]。 |
IDE(29-rwh) | 0:只处理标准帧 1:只处理扩展帧 |
PRI(31-30-rw) | PRI将四个优先级0,1,2,3中的一个分配给消息对象n。 较低的PRI编号定义较高的优先级。 具有较低PRI值的消息对象总是赢得对接收帧的接受过滤,并通过具有较高PRI值的消息对象进行传输。 仅基于标识符/掩码和列表位置的接受过滤仅在具有相同优先级类别的消息对象之间执行。 PRI也确定传输的接受过滤方法: 00:保留 01:传输验收过滤基于列表顺序。 这意味着消息对象n只有在列表中的这个对象之前没有其他消息对象具有有效的发送请求(MSGVAL&TXEN0&TXEN1 = 1)的情况下才被考虑用于发送。 10:发送接收过滤基于CAN标识符。 这意味着,只有在列表中的某处中没有其他具有较高优先级标识符+ IDE + DIR(关于CAN仲裁规则)的消息对象时,才认为消息对象n用于传输。 11:传输验收过滤基于列表顺序 (p-2112) |
2.2.3.6 Message Object n Data Register
Message Object n Data Register Low
DB3(31-24),DB2(23-16),DB1(15-8),DB0(7-0)
Message Object n Data Register High
DB7(31-24),DB6(23-16),DB5(15-8),DB4(7-0)
备注:个人第一次发文章,如果有错误的地方还请指正,不胜感激。