当前位置:首页 > 第10章 K60的CAN总线开发方法
该位不受软件复位影响。
0:开启FlexCAN模块; 1:禁止FlexCAN模块。
FRZ——冻结模式使能位,用来指定FlexCAN模块是否能进入冻结模式。前提是当MCR寄存器的HALT位被置位时或者在MCU级的调试模式请求下才能生效。
0:禁止FlexCAN模块进入到冻结模式; 1:使能FlexCAN模块进入到冻结模式。
RFEN——接收队列使能位,用来控制是否开启接收队列。RFEN被置位时,MB0?MB5不能用于正常的接收与传输,因为其相应的内存空间(0x80?0xDC)被队列引擎使用。同时还要用掉5 MB之后的几个MB(最多32个,这取决于CTRL2 [RFEN]位的设置,8个过滤器表将占用2 MB的存储空间),用于接收队列ID过滤器表元素。该位只有在冻结模式下才能被写入,在其他模式下该位被通过硬件的方法锁定。
0:禁止接收队列; 1:开启接收队列。
HALT——暂停FlexCAN模块。该位置位会使FlexCAN模块进入到冻结辦式。CPU在初始化报文缓冲区与控制寄存器之后要将该位淸0,否则会导致报文缓冲无法接收和传递数据。FlexCAN在任何一种低功耗模式下时,都不可能进入到冻结模式。
0:没有冻结模式请求;
1:如果FRZ置位那么FlexCAN进入到冻结模式。
NOTRDY——表示FlexCAN模块未准备好。该位只读,用来表示FlexCAN现在处于以下几种模式:禁止模式、睡眠模式、停止模式或者冻结模式。当FlexCAN模块退出以上模式该位会自动淸0。
0:FlexCAN模块处于正常模式、监听模式或者回环模式;
1:FlexCAN模块处于禁止模式、睡眠模式、停止模式或者冻结模式。 WAKMSK——唤醒中断,用来使能唤醒中断。 0:唤醒中断被禁止; 1:唤醒中断被使能。
SOFTRST——软件复位。以下寄存器将会受复位影响:MCR(除了MDIS位)、TIM-ER、ECR、ESR1、ESR2、IMASK1、IMASK2、IFLAG1、IFLAG2以及CRCR。以下寄存器不会受影响:CTRL1、CTRL2、RXIMR0?RXIMR63、RXMGMASK、RX14MASK、RX15MASK、RXFGMASK、RXFIR以及所有的报文缓冲区。
当软件复位SOFTRST被写入1的时候,CPU会直接置位软件复位,同样,当K60的全局软件复位罝位后,CPU也会直接罝位CAN模块的软件复位标志位。软件复位也要遵守单片机的时钟总线控制,需要占用一些时间去等待软件复位生效。复位过程在进行时,SOFTRST位会保持置位,复位完成后自动清零。所以可以循环检测SOFTRST位,用来确定软件复位是否已经完成。
在任何一种低功耗模式下,如果时钟被关闭那么软件复位将不起作用,模块应该首先退出低功耗模式,然后软件复位才会起作用。
0:没有复位请求;
1:有复位请求,相关寄存器会受到软件复位的影响。
FRZACK——冻结模式确认位,该位只读,用来指示FlexCAN模块现仵处于冻结模式,并且它的预分频器是停止的。冻结模式只有在当前接收和发送进程结束后才能被响应。软件可以循环检测该位,以了解FlexCAN模块逛否已进入到冻结模式。如果冻结模式请求被忽略,那么一旦FlexCAN模块预分频器又重新运行,该位也会取反。如果FlexCAN正处于任何一种低功耗模式时请求冻结模式,那么只有当模块退出低功耗模式时FRZACK位才会被置位。
这里要注意的是:当CPU响应冻结模式后FRZACK会在178个CAN总线时钟位中置位,当解除冻结模式后,FRZACK会在2个CAN总线时钟位中被清零。
0:FlexCAN模块没有处于冻结模式,预分频器处于运行之中; 1:FlexCAN模块处于冻结模式,预分频器停止。
SUPV——管理员模式,用来配罝FlexCAN模块是处于管理员模式还是用户模式。寄存器会被该位影响,取决于该位是管理员模式还是用户模式,两种模式在内存映射的访问权不同。该位只有在冻结模式下才能被写人,在其他模式下该位通过硬件的方式被锁住。
0: FlexCAN处于用户模式。所有受影响的寄存器可以以管理员或者无限制的方式访问。 1:FelxCAN处于管理员模式,所有受影响的寄存器只能以管理员的身份访问。
SLFWAK——当FlexCAN处于低功耗模式时,使能该位将允许FlexCAN从低功耗模式恢复到正常模式。当该位使能以后,FlexCAN会监视CAN总线的唤醒事件(指CAN总线电平由隐性到显性的转变):
如果在DOZE模式下唤醒,FlexCAN会恢复时钟,如果被使能了这种功能,那么此时会产生一个中断到CPU。
如果在STOP模式下使能了这种功能,那么此时会产生一个中断到CPU允许离开STOP模式,FlexCAN会恢复时钟。
在低功耗而不是禁止模式下,该位不能被写入,因为该位被硬件封闭。 0:FlexCAN自唤醒功能禁止; 1:FlexCAN自唤醒功能使能。
WRNEN——警告中断使能。如果该位使能,那么FlexCAN的错误和状态寄存器的 TWRNINT和RWRNINT标志位将会被激活。如果该位被禁止,那么这两个标志位为0,而且错误计数器和警告中断都不能工作。该位只能在冻结模式下写入,在其他模式下该位被硬件锁定。
0:TWRNINT和RWRNINT标志位为0,错误计数器的值没有实际意义; 1:TWRNINT和RWRNINT标志位被激活,且在错误计数器等于或大于96个错误时置位。 LPMACK——低功耗模式状态获得位。该位表示FlexCAN是否进入低功耗模式 (Disable Mode, Doze Mode, Stop Mode),进入低功耗模式必须等在当前发送接收进程完成,循环查询该位可以获得FlexCAN是否进入低功耗模式。
这里要注意的是:当CPU响应低功耗模式后LPMACK会在180个CAN总线位中置位,当解除冻结模式后,LPMACK会在2个CAN总线位中被淸零。
0:FlexCAN没在低功耗模式中; 1:FlexCAN在低功耗模式中。 DOZE——DOZE模式使能位。该位使能后,FlexCAN进入低功耗模式。当Flex CAN从DOZE模式中唤醒或使能SLFWAK后,CAN总线上出现电平变换时,DOZE位会自动复位。
0:当DOZE模式被响应时,FlexCAN不使能进入低功耗模式。 1:当DOZE模式被响应时,FlexCAN使能入人低功耗模式。
SRXDIS——自我接收禁止位,作用是FlexCAN发送的数据被自己接收。该位置位以后设定好的MB不会接收到任何数据,不会有相应的标志位置位,会忽略MB的匹配过程。该位只能在冻结模式下写入,在其他模式下该位被硬件锁定。
0:FlexCAN使能自我接收; 1:FlexCAN禁止自我接收。
IRMQ——使能私有接收掩码与队列。该位决定匹配过程将基于私有掩码与队列 (individual masking and queue,主要是CANx_RXFGMASK和CANx_RXIMR寄存器)或者基于由 RXMGMASK、RX14MASK、RX15MASK 及 RXFGMASK 构成的掩码机制(即在两种掩码方式中选择一种)。该位只能在冻结模式下写入,在其他模式下该位被硬件锁定。
0:禁止个别接收掩码和队列功能(individual Rx masking and queue feature),为了向后
兼容,C/S宇的读取将锁定MB,即使MB位为空; 1:开启个别接收掩码和队列功能。
LPRIOEN——使能本地优先,为提供向后兼容而设计的。该位控制当前本地优先是否使能,作用是在总线仲裁期间扩展正在使用的ID。扩展ID的概念是:当ID初始化为11位的标准帧或者29位的扩展帧时,CPU会在仲裁过程中将ID扩展至32位。
0:禁止本地优先功能; 1:开启本地优先功能。
AEN——中止使能位,是为提供向后兼容而设计的。该位使能传输中止机制,保证能在安全的过程中中止正在传输的过程,以便没有数据发送到CAN总线上。
这里需要注意的是:当AEN被置位时,中止机制只能用于发送的MB,而不能用于接收的MB;如果在接收的MB中写入中止机制,那么会造成不可预知的结果。
0:中止机制禁止; 1:中止机制使能。
IDMA——ID接收模式,用来鉴别接收队列(Rx FIFO)过滤器表的格式。该位只能在冻结模式下写入,在其他模式下被硬件锁定。
00:格式A: 每一个ID过滤表元素有一个全ID(标准的和扩展的);
01:格式B: 每一个ID过滤表元素都有两个全IDs(标准的)或者两个14 bit(标准的和
扩展的)ID;
10:格式C: 每一个ID过滤表元素有4个8 bit标准ID; 11:格式D: 拒绝所有的帧。
MAXMB——用于确定最终参与总线仲裁的MB的数里。复位值为0x0F,即默认情况下报文缓冲区个数为16 MB。该字段只能在冻结模式下写入,在其他模式下该位被硬件锁定。最终用于收发的MB(除去队列的占用的MB0?5,以及队列FIFO过滤器占用的MB)。这里要注意:MAXMB设置的值必须小于参数NUMBER_OF_ MB,NUMBER_OF_MB参数的值为64,最大有效报文个数应是NUMBER_OF_MB—1。另外,MAXMB的值必须包括由CTRL2[RFEN]定义的队列大小。
2. CAN 控制寄存器1(CANx_CTRL1)
该寄存器用来定义和CAN总线相关的具体的FlexCAN模块的控制功能。
PRESDIV——预分频器分频系数,用来定义协议引擎(PE)时钟频率与串行时钟频率(Sclock)之间的比率。Sdock周期定义了CAN协议的最小时间份额。对于复位值,Sclock频率等于PE的时钟频率,最大值为0xFF。Sclock的最小时钟频率等于PE(CAN协议引擎)时钟频率除以256的值。该字段只能在冻结模式下写入,在其他模式下该位被硬件锁定。
Sclock 频率=PE时钟频率/(PRESDIV+1)
RJW——再同步跳跃宽度,定义了在一次再同步过程中位改变的最大时间份额(1个时间份额为Sclock时钟周期)。有效值为0?3,该字段只能在冻结模式下写入,在其他模式下
该位被硬件锁定。
再同步跳跃宽度= RJW+1
PSEG1——相位段1,用来定义相位段1位时间长度。有效值为0?7,该字段只能在冻结模式下写入,在其他模式下该位被硬件锁定。
相位段1 = (PSEG1 + 1) X Time—Quanta
PSEG2——相位段2,用来定义相位段2位时间长度。有效值为0?7,该字段只能在冻结模式下写入,在其他模式下该位被硬件锁定。
相位段2 = (PSEG2 + 1) X Time—Quanta
BOFFMSK——总线断开中断使能。该位提供了总线断开中断的功能。 0:禁止总线断开中断; 1:开启总线断开中断。 ERRMSK——错误中断使能。
0:禁止错误中断; 1:开启错误中断。
CLKSRC——CAN引擎时钟源,用来为CAN协议引擎(PE)选择时钟源,时钟源可以是设备外设时钟(PLL分频而来)也可以是外部晶振时钟。所选择的时钟源供预分频使用,以产生串行时钟(Sclock)。为了保证可靠运行,该位只有在禁止模式下才能被写入,在其他模式下该位被硬件锁定。
0:选择外部晶振时钟; 1:选择外设时钟。 LPB——闭环模式选择位,用来配置FlexCAN工作在闭环模式下。在该模式下, FlexCAN模式执行内部循环用于自测。
0:禁止闭环模式; 1:开启闭环模式。
TWRNMSK——传输错误警告中断使能。TWRNINT标志位置位后,使能该位可以产生警告中断,但必须保证MCR寄存器中WRNEN位置位。
0:禁止传输错误警告中断; 1:开启传输错误警告中断。
RWRNMSK——接收错误警告中断使能。RWRNINT标志位置位后,使能该位能产生警告中断。但必须保证MCR寄存器中WRNEN位置位。
0:禁止接收错误警告中断; 1:开启接收错误警告中断。 SMP——CAN位采样,定义了接收引脚(Rx pin)的采样模式。该位只有在冻结模式下才能被写入,在其他模式下该位被硬件锁定。
0:仅采样一次来决定接收位的值;
1:通过3次采样来决定接收到位的值:常规的一次(采样点)以及两次之前的采样,使用了多数裁定原则。
BOFFREC——总线恢复功能,决定了FlexCAN如何从总线断开状态下恢复。 0:总线自动恢复功能启动,参考CAN Spec 2.0 part B, 1:禁止总线自动恢复功能。
TYSN——计数器同步模式位。使能该位后,MB0每接收到一个报文就复位自由运行计数器。该机制为同步多个FlexCAN结点提供特定的SYNC报文(全局网络时间)。如果MCR寄存器的RFEN位置位(启用接收队列),第一个可用的邮箱(通过CTRL2[RFEN]的设置)而不是MB0被用于计数器的同步。该位只有在冻结模式下才能被写入,在其他模式下该位被硬件锁定。
0:禁止计数器同步; 1:使能计数器同步。
LBUF——报文缓冲区的发送次序位,定义了报文缓冲区传输的排序机制。当该位被置位时,LPRIOEN位将不会影响优先级的裁定。该位只有在冻结模式下才能被写入,在其他模式下该位被硬件锁定。
0:具有高优先级的缓冲先发送;
共分享92篇相关文档