余姚建设局网站南京网站制作搭建

当前位置: 首页 > news >正文

余姚建设局网站,南京网站制作搭建,电子商务网站建设的基本要求,企业网站设计开发CAN总线开发一本全#xff08;3#xff09; - 微控制器集成的FlexCAN外设 苏勇#xff0c;2023年2月 文章目录CAN总线开发一本全#xff08;3#xff09; - 微控制器集成的FlexCAN外设引言硬件外设模块系统概要总线接口单元 - 寄存器清单数据结构 - 消息缓冲区MB初始化过…CAN总线开发一本全3 - 微控制器集成的FlexCAN外设 苏勇2023年2月 文章目录CAN总线开发一本全3 - 微控制器集成的FlexCAN外设引言硬件外设模块系统概要总线接口单元 - 寄存器清单数据结构 - 消息缓冲区MB初始化过程接收过程Rx、Rx FIFO及帧过滤机制Filter数据结构功能描述接收过程发送过程Tx和仲裁机制winner发送过程仲裁过程总结参考资料引言 集成在微控制器芯片中的CAN总线通信引擎的外设电路系统有一些典型的实现例如飞思卡尔半导体已并入恩智浦半导体的ColdFire系列微控制器中用到的MSCAN和Kinetis系列微控制器的FlexCAN由Silvaco International公司设计这些CAN总线通信引擎在汽车电子应用中已经被广泛使用用以实现内存中的数据与CAN总线上串行信号的的相互转换。灵动微电子设计生产的MM32F0140和MM32F5系列微控制器芯片也集成了FlexCAN外设模块。本文以MM32F0140 / MM32F5270 微控制器芯片上集成的FlexCAN作为CAN硬件外设模块的实例讲述硬件的CAN通信引擎的工作方式以此展现硬件电路系统对CAN总线控制逻辑的建模建立起软件系统同硬件电路的关联关系。同本系列的其它文章一样本文希望以尽量简洁的语言关注基本的原理和常用的功能建立起对常规CAN外设模块的概念为后续适配CAN通信协议栈的软件包做好准备。 硬件外设模块 系统概要 FlexCAN外设模块是CAN总线通信的协议引擎通过一个非常灵活的邮箱管理系统消息缓冲区MB管理发送和接收CAN通信帧。邮箱管理系统由一组消息缓冲区Message Buffer组成MB中存放了通信帧的配置信息、数据负载、时间戳、消息ID等。完整的FlexCAN外设在MB队列中的前38个MB可以配置成FIFO模式配合一个功能强大的ID过滤机制可以将总线上捕获到的输入帧同一个ID过滤器表的项目进行匹配多达128个扩展ID或者256个标准ID或者512个8位的ID片段并且可以在独立掩码寄存器中选择多达32个ID过滤器表项。 同时使用FIFO和独立消息邮箱单通道接收帧亦是可行的。使用消息邮箱接收帧就是将选定的MB同ID固定的消息ID绑定后该MB仅能接收固定消息ID的通信帧使用ID掩码机制的情况下可以将匹配一个范围的ID。 在执行发送帧或者接收帧之前这里需要强调一个很重要的概念当说明一个MB处于激活Active状态时在意味着它正在参与发送过程的仲裁或是接收过程中的匹配。此处的激活状态其实就意味着这个MB当前正被FlexCAN外设或CPU占用它是不可操作的。 FlexCAN外设模块内部包含总线接口单元、发送机构包含仲裁、接收机构包含匹配、消息缓冲区以及协议引擎有功能框图如图x所示。 图x FlexCAN的系统框图CPU通过外设总线访问FlexCAN的寄存器与FlexCAN外设进行交互除了通过寄存器配置FlexCAN模块的多种工作模式及反馈信息外CPU主要是向MB消息缓冲区中写入CAN通信帧的数据内容。消息缓冲区的存储块中包含多个MB每个MB对应一个CAN通信帧内容的数据结构并且可分别配置为将要发送帧的MB或是准备接收帧的MB。当要发送帧时先将CAN发送帧的内容包括帧ID、数据负载等按照MB的存储结构填充到特定的字段然后配置MB中的CODE字段为发送命令则协议引擎PE会自动启动发送操作过程包括自动同总线上的其他设备进行仲裁以及在超过连续5个同电平位之后自动翻转等。当要接收帧时需要从多个帧接收过滤器中拿出一个设定需要匹配接收帧的ID或者一个范围并为之绑定一个存放将要匹配到的CAN通信帧数据内容的MB之后协议引擎PE会监控CAN总线上的信号流当遇到匹配ID范围内的通信帧就存下来到预先准备好的MB。发送和接收完成后协议引擎都会通过寄存器接口向CPU传达状态的变化产生中断触发进一步的数据搬运过程。 PSCAN总线对CAN通信帧进行仲裁时不是以发送通信帧或接收通信帧的CAN总线设备本身作为获得仲裁优先级的评判依据CAN节点不参与仲裁而是以CAN通信帧的ID标识符作为获得仲裁的依据值越小优先级越高。类似的概念还存在于以太网应用中IP主机和端口号的关系应用程序最终是在端口的层面上进行通信而不仅仅是拥有IP地址的主机。所以当某一个CAN节点设备可以收纳多个ID的CAN通信帧时意味着这个节点设备在CAN总线通信系统中可以被抽象成多个节点。但实际上在后续介绍的CAN总线通信协议中可以看到不同的ID将对应总线系统中不同的服务总线系统中总有一个响应服务的线程可能位于某个节点设备的某一个ID过滤器之后被实现。 总线接口单元 - 寄存器清单 FlexCAN外设模块的总线接口单元以存储空间中的寄存器作为操作界面可由CPU通过外设总线访问到FlexCAN外设模块内部。虽然不建议开发者通过直接读写外设模块寄存器的方式对FlexCAN外设模块进行开发因为直接操作寄存器实在是一件繁琐并且容易出错的过程但本文在这里仍然将FlexCAN外设模块的寄存器清单列写出来让读者一览FlexCAN外设模块为软件系统开放的应用接口。FlexCAN外设模块的寄存器如表x所示。 表x FlexCAN外设模块寄存器清单地址偏移寄存器寄存器名功能简介0x0000CAN_MCRModule Configuration Register配置外设模块的工作模式、功能开关等。0x0004CAN_CTRL1Control 1 register配置外设模块的工作模式、功能开关等包含位时钟的时钟源。0x0008CAN_TIMERFree Running Timer register内部集成的一个16位的计数器在特定的情况下对位时钟加减计数一般用不上。0x0010CAN_RXMGMASKRx Mailboxes Global Mask register给旧应用场景使用的可用于设定MB0-MB13的接收过滤器。新应用大多使用另一种过滤机制。0x0014CAN_RX14MASKRx Buffer 14 Mask register给旧应用场景使用的专用于设定MB14的接收过滤器。0x0018CAN_RX15MASKRx Buffer 15 Mask register给旧应用场景使用的专用于设定MB14的接收过滤器。0x001CCAN_ECRError Counter Register内含两个8位的错误计数器分别记录发送错误计数和接收错误计数。0x0020CAN_ESR1Error and Status 1 Register包含了多个错误事件和常规标志位部分错误标志位可以触发中断。0x0028CAN_IMASK1Interrupt Masks 1 register对应每个MB通信过程发送或接收完成是否产生中断的开关。0x0030CAN_IFLAG1Interrupt Flags 1 register对应每个MB通信过程发送或接收完成是否产生中断的标志位。0x0034CAN_CTRL2Control 2 Register作为CTRL1的扩展配置外设模块的工作模式、功能开关等。0x0038CAN_ESR2Error and Status 2 Register附加的错误与标志位。不常用。0x0044CAN_CRCRCRC Register外设会自动计算发送帧数据的CRC值并在发送帧之后通过本寄存器呈现出来。0x0048CAN_RXFGMASKRx FIFO Global Mask register推荐使用FIFO模式管理MB空间。当启用FIFO模式后本寄存器将用于指定接收帧ID的过滤器掩码。0x004CCAN_RXFIRRx FIFO Information Register查看当前FIFO的状态。不常用。0x0050CAN_CBTCAN Bit Timing Register专门用于配置位时钟各段的时间长度。0x0080 - 0x017FCAN_MBn (n0-15)Message buffersMB的内存空间每个MB占用连续的16个字节总共16个MB。数据结构见下文。0x0880 - 0x08BCCAN_RXIMRn (n0-15)Rx Individual Mask Registers默认不启用FIFO模式时顾名思义为每个MB指定过滤器。启用FIFO时指定的是每个“接收FIFO ID过滤器表元素”。数据结构见下文。 数据结构 - 消息缓冲区MB FlexCAN外设地址空间的0x0080 - 0x017F之间的地址被映射到RAM中用于存放MB的数据结构每个MB占用连续的16个字节总共16个MB。 这些MB将用于存放即将向CAN总线发送的帧数据内容软件需要先把数据填充到MB中再启动发送工程或者从CAN总线上捕获的CAN数据内容之后软件就可以从MB中读到接收帧的信息。MB在存储空间中的数据结构如图x所示。
图x MB消息缓冲区结构其中各字段功能为 CODE (Message Buffer Code)CPU和FlexCAN外设都可能向这个字段写命令。当CPU向CODE字段中写数用于向FlexCAN外设配置发送和接收的过程当FlexCAN外设向CODE字段中写数用于告知CPU当前发送或接收过程已经完成或者正在进行的状态。关于具体的各种命令以及对应的操作和状态可进一步参见芯片手册中的表格说明Table 50-5 Table 50-6。SRR (Substitute Remote Request)仅用于扩展帧。当表示扩展帧时必须置1。IDE (ID Extended Bit)标记是否为扩展帧1表示扩展帧0表示标准帧。RTR (Remote Transmission Request)设定或表示当前MB中是否为远程请求帧1表示远程帧0表示数据帧。DLC (Length of Data in Bytes)发送和接收帧中的数据长度0表示没有。有效值为1到8。当接收通信帧时FlexCAN协议引擎会从接收到的帧中提取有效数据填充到数据字段并复制接收帧的DLC值到MB的DLC字段中。当发送通信帧时在总线上发送通信帧的字节流时若DLC小于8则实际数据负载的字节流长度亦会对应缩短而不会填充空位。当RTR1即发送远程帧时此时发送数据字段中无有效内容将会忽略DLC中的值等价于DLC0。TIMESTAMP (Free-Running Counter Time Stamp)接收帧时本机填入时间戳用于本机处理多个MB中的接收帧时判断先后时序。这个字段将由FlexCAN的协议引擎自动填充从CAN_TIMER寄存器中复制过来。PRIO (Local Priority)对本机多个MB的发送帧执行仲裁而不是总线上的设备CAN总线对设备没有优先级的概念使用唯一的发送引擎按优先级逐个发送。这个字段的值不会被发送到CAN总线上可以被附加到常规的ID后面作为一个配置项当CAN_MCR[LPRIO_EN]1时生效仅作用于发送过程中的多个MB之前进行排序。ID (Frame Identifier)在标准帧的格式中只用到收发通信帧的高11位28b - 18b后续的低18位被忽略。当使用扩展帧时整个29位的字段全部用于表示通信帧的ID。话说标准帧和扩展帧的区别就在于ID字段的位数扩展帧使用更多位的ID可以在总线系统中表示更多的通信帧类型。DATA Byte 0-7(Data Field)通信帧的有效数据负载。最多8字节同DLC字段描述的数据字节数对应。当为发送帧时由CPU写入数据到本字段供FlexCAN引擎发送到总线上当为接收帧时FlexCAN的协议引擎会在总线上捕获到数据帧后自动复制值到本字段供CPU读取。 CAN总线标准帧同MB消息缓冲区的有一一对映关系如图x所示。
图x CAN总线标准帧同MB消息缓冲区的一一对映CAN总线扩展帧相对于标准帧多了SRR的字段但仍同MB消息缓冲区有一一对映的关系如图x所示。
图x CAN总线扩展帧同MB消息缓冲区的一一对映初始化过程 FlexCAN外设的工作周期从复位状态开始可以由如下两种情况触发复位过程 芯片硬件复位此时包括FlexCAN外设模块在内的所有寄存器都将被复位配置CAN_MCR[SOFTRST]寄存器位这会复位FlexCAN中的部分配置寄存器。当软件向CAN_MCR[SOFTRST]寄存器位写1时向FlexCAN外设模块发出复位请求当FlexCAN外设模块执行复位操作后会将这一寄存器位清零因此软件可通过轮询这个标志位在置1后是否清零判定内部软复位是否完成。 之后对FlexCAN模块进行配置。但要注意任何对FlexCAN外设的配置操作都需要在FlexCAN外设的冻结模式下才能完成。 一般的初始化FlexCAN外设模块的过程如下 写CAN_MCR寄存器配置FlexCAN引擎的工作模式。写CAN_CTRL1和CAN_CBT寄存器配置FlexCAN的CAN时钟位时间。初始化MB列表。MB映射的内存区是带ECC的需要先写入初值才能正常使用。如果启用了Rx FIFO模式还必须配置好ID过滤器表。写CAN_RXIMRn寄存器。写CAN_IMASK寄存器启用必要的中断。将CAN_MCR[HALT]寄存器清零退出冻结模式。 退出冻结模式之后FlexCAN外设模块开始同CAN总线同步接入总线网络。 接收过程Rx、Rx FIFO及帧过滤机制Filter 相对于默认的将每个MB作为一个单独的通道一帧一帧地接收并处理数据FIFO模式可以将几个MB的存储空间组织成一个FIFOFIFO可以缓存更多的帧在CPU提供同等算力的情况下提升节点设备的处理CAN总线通信帧的动态吞吐率。 数据结构 当配置CAN_MCR[RFEN]1时启用Rx FIFO模式此时原MB列表的部分MB存储区域MB0 - MB5模块内偏移地址为0x80 - 0xDC的内存区域将合并成Rx FIFO由FIFO引擎管理。其中原MB0的作为CPU访问Rx FIFO的接口CPU始终可以从原MB0的位置读到最早进入FIFO的帧信息。此时Rx FIFO的区域为只读模式复位缺省值为0x00。 另外还可以通过配置CAN_CTRL2[RFEN]1启用Rx FIFO的另一段区域这个FIFO对应于原MB6 - MB15的区域模块内偏移地址为0xE0 - 0x17C的内存区域将用于存放Rx FIFO的ID过滤器表只有通过ID过滤器表中的表项匹配的CAN通信帧才能被捕获进入Rx FIFO。ID过滤器表可能有多种模式匹配不同的位数可被配置为8至40个表项。复位FlexCAN外设模块后ID过滤器表的内存区域的默认为从0xE0至0xFC对应使用原MB6和MB7的空间同未开启Rx FIFO模式的配置兼容。图x展示了Rx FIFO的数据结构。
图x FlexCAN Rx FIFO数据结构其中每个ID过滤器表项ID Filter Table element占用32位字的空间可以被分成1个32位、2个16位或4个8位的匹配接收掩码IDAFIdentifier Acceptance Filters这需要在CAN_MCR[IDAM]寄存器中设置。图x中展示了这种可能使用多种格式分割ID过滤器表项的格式但要特别注意一旦选定一种格式所有的ID过滤器表项都会使用同一种格式。
图x FlexCAN ID过滤器表项的格式其中各配置字段的含义如下 RTR (Remote Frame)指定能否捕获匹配ID的远程帧。1指定可以捕获0指定不捕获。IDE (Extended Frame)指定能否捕获匹配ID的扩展帧。1指定可以捕获0指定不捕获扩展帧仅捕获标准帧。RXIDA/B/C (Rx Frame Identifier with Format A/B/C)指定匹配的ID模式当不满足完整的帧ID时仅匹配帧的高位。 FIFO中MB结构中多出来的IDHIT (Identifier Acceptance Filter Hit Indicator)表示当前的MB匹配到了哪个ID过滤器。 功能描述 Rx FIFO将6个MB的内存空间整合成一个FIFO使用FIFO引擎管理先后收到的数据帧。相对于老式的单独管理各个MBFIFO模式对DMA应用比较友好并且可以提升从CAN总线上捕获帧的动态吞吐率。 CAN_IFLAG1[BUF5I]标志位表示Rx FIFO中已经捕获到有效的数据帧可供CPU读取。这个标志位也可以触发中断CPU在中断服务程序中读取Rx FIFO的内容后FlexCAN外设会更新FIFO状态寄存器CAN_RXFIR的值然后自动清中断标志。如果Rx FIFO中有多个有效的数据帧则CAN_IFLAG1[BUF5I]会持续置位触发CPU处理接收帧的过程直到Rx FIFO中捕获的通信帧全部被读走。 CAN_IFLAG1[BUF6I]标志位表示Rx FIFO达到警告门限此时Rx FIFO中已经积压了4个MB从5个MB读走1个后剩下4个MB的时机此时意味着Rx FIFO几乎要满到溢出了。这个标志位需要CPU清除。 CAN_IFLAG1[BUF7I]标志位表示Rx FIFO已经满溢此时Rx FIFO中已经积压了6个未读的MB并且有一个新的CAN通信帧被捕获下来。这个标志位需要CPU清除。 CAN_IFLAG1[BUF0I]标志位可用于清空Rx FIFO。当CPU向该标志位写1时直接清空Rx FIFO。但这个功能仅在冻结模式下使用这就意味着用户不要试图在FlexCAN正常工作的情况下清空Rx FIFO可以软件读掉Rx FIFO中的数据这个功能大多用于改变全局配置时重新初始化FlexCAN模块时使用。 FlexCAN模块中设计了功能强大略显复杂的帧过滤器模式可以由硬件自动过滤掉很多本设备处理不了的帧这就节约了很多原本需要在接收中断服务程序中判断捕获帧是否能在本机处理的过程。FlexCAN可以同时匹配众多的ID帧标识符128个Format A格式的IDAF或者256个Format B格式的IDAF或者512个Format C格式的IDAF。每个捕获到Rx FIFO中的接收帧都有一个对应的IDHIT指示它匹配到的过滤器的索引编号CAN_RXFIR[IDHIT]寄存器字段中也能查看最近捕获的接收帧的IDHIT值。此时需要在清接收标志之前读CAN_RXFIR寄存器以确保存放在CAN_RXFIR寄存器中的值不会被后面捕获到帧覆盖掉。 当配置CAN_CTRL2[RFEN]1时启用过滤器表过滤器表中最多可以有16个表项可以由独立掩码寄存器CAN_RXIMRx分别配置。当CAN_MCR[IRMQ]0时过滤器表由CAN_RXFGMASK寄存器配置。 接收过程 为了能让FlexCAN从CAN总线上捕获到通信帧CPU软件需要准备一些工作 如果选定的MB处于激活状态正在发送或接收要么等等要么强行终止确保MB处于一个可用的非激活状态向MB中写入希望捕获通信帧的ID值。向MB的CODE字段中写入EMPTY0b0100激活接收过程。 当MB被激活后它将会接收到通过ID过滤器匹配的通信帧。 当接收过程成功完成后FlexCAN外设通过搬运过程将捕获到的通信帧从CAN通信引擎的缓冲中转运至MB中 接收到通信帧的数据8字节将被存放至MB的DATA字段。接收到的ID将被存放至MB的ID字段。接收时刻的定时器CAN_TIMER寄存器的值将被写入到MB的时间戳字段中。MB中的SRR、IDE、RTR和DLC字段将被更新。MB中的CODE字段中的状态将被更新。CAN_IFLAG1中的接收中断标志位将会置位如果在CAN_IMASK1寄存器中启用了对应的中断也将会触发中断。 因此建议CPU软件在读取CAN接收帧时遵循如下步骤 先读一下对应MB的状态位再看一下BUSY标志位是否置位若置位意味着MB被锁着先等一等。从MB中读数据。但如果MB被锁着MB中的数据实际是无效的。清IFLAG标志位。读时间戳。 建议当收到CAN接收帧时尽快把收到的帧读走解锁MB为后面接收的帧释放空间。 特别注意的是在CPU通过轮询过程查看FlexCAN‘释放捕获到接收帧的过程中应当以CAN_IFLAG1寄存器中的标志位来判定而不是MB中CODE字段的状态码。读CODE状态码是没有意义的因为一旦FlexCAN收到通信帧后被CPU读走CODE不会变为EMPTY而是仍保持为FULL需要CPU人为清空。 若是使用FIFO模式CPU需要在FlexCAN的冻结模式下配置启用Rx FIFO模式再次启用FlexCAN通信引擎后FlexCAN将以Rx FIFO模式捕获CAN通信帧 读CAN_IFLAG中的Rx FIFO的接收标志位读Rx FIFO头部MB的接收帧ID读Rx FIFO头部MB的数据负载8字节读CAN_RXFIR寄存器写1清Rx FIFO捕获到有效帧的标志位CAN_IFLAG[BUF5I]。 Rx FIFO对使用DMA的场景更友好。但目前的ECU系统中因为附加了协议栈和大量的软件干预所以实际使用DMA的并不多。如果需要也可以参见芯片用户手册的相关说明。 发送过程Tx和仲裁机制winner 发送过程 当要发送一个CAN通信帧CPU需要选出一个MB然后执行如下的步骤 查看当前CAN通信引擎是否正忙如果正忙就等一等或者通过硬件机制终止通信过程。是否有之前通信过程的遗留标志位如果有就清零。务必确保CAN通信引擎恢复成初始状态 确保发送中断和接收中断都是停用的。如果选用的MB是激活的Active正在被占用可以通过向该MB的CODE字段中写入ABORT命令字0b1001终止通信过程。通过轮询CAN_IFLAG寄存器中对应的IFLAG标志位置位或者启用中断触发等待MB转入非激活状态。再读MB的CODE字段确认发送过程已经被中断或者完成。清除对应的中断标志位。 向MB中写入通信帧 写入消息ID。如果通过配置CAN_MCR[LPRIO_EN]1寄存器启用了本地优先级配置还需要一并写入PRIO配置字段。写入数据负载。最多8个字节的数据。配置发送属性包括IDE、RTR、DLC。在CODE字段中写入激活命令码对应发送帧CODE0xC。
当MB被激活之后它被加入到FlexCAN外设的发送仲裁过程根据本地优先级若有最终被发送到CAN总线上。 在发送过程成功完成后 定时器CAN_TIMER寄存器的时间戳将被写入到本MB的时间戳字段中。CODE字段中的值将被FlexCAN外设更新。至于更新成什么状态需要根据具体发送的情况确定。见表x所示。在CAN_IFLAG1寄存器中的发送完成中断标志位会置位如果在CAN_IMASK1寄存器中启用了发送完成中断那么对应的中断也会被触发。 注意当通过CAN_MCR[AEN]启用了终止通信的功能后当发送完整中断标志位置位时此时MB是被锁住的需要CPU清中断标志位后才能再次访问MB准备写入下一个新的通信帧。 仲裁过程 此处的仲裁过程并不是指CAN总线网络的仲裁机制而是FlexCAN外设本身的多个通信通道MB争用同一个通信引擎发送至CAN总线上的过程。FlexCAN会扫描当前所有待发送的MB然后根据特定的策略选出其中一个作为本次发送过程的MB。这个策略是可以通过寄存器配置的如表x所示。 表x 配置发送仲裁优先级策略CAN_CTRL1[LBUF]CAN_MCR[LPRIOEN]仲裁策略1-当CAN_CTRL1[LBUF]置位时CAN_MCR[LPRIOEN]的配置无效。此时编号小的发送MB拥有更高优先级。01当CAN_MCR[LPRIOEN]置位时可以通过配置MB中的3b位宽PRIO字段更小的值对应更高的优先级。 关于仲裁的过程还有更多的细节例如当某个MB被激活发送过程后如果长时间得不到仲裁优先级也将会产生一些报警此时判断超时和报警的机制在FlexCAN外设模块上有一些具体的实现策略。这些内容可以根据具体问题具体分析在遇到具体场景时再查阅手册一一对症。此处就不做赘述了。 总结 本文描述了一个典型的CAN总线通信引擎FlexCAN外设模块的工作机制。FlexCAN总线以消息缓冲区MB作为数据缓冲单元收发通信过程同典型的基本通信类引擎例如UART相似但由于CAN总线以通信帧作为基本通信单元包含ID和最多8个字节的数据负载而不是基本通信引擎的单元数据所以需要一个协议引擎同步地在总线和MB之间搬运包含数据和状态的帧属性信息。CAN总线是一个多对多的网络因此也引入了网络型通信引擎的问题例如接收过程的目标地址ID匹配和发送过程中的仲裁冲突检测。FlexCAN外设模块在硬件上也提供了对这些问题的解决方案在接收过程中设计了非常灵活的接收标识符过滤器组的机制在发送过程中设计了在本地多个待发送MB之间的本地优先级的机制至于CAN总线网络上的仲裁就依赖于网络本身的物理特性完成了。FlexCAN外设还增加实现了Rx FIFO的工作模式可以将多个MB合在一起以FIFO的方式进行管理使用FIFO可以提升FlexCAN外设在总线上的动态吞吐率并且对DMA操作更加友好。本文对于FlexCAN内部机制的一些实现细节仅点到为止未做详细的拆解如果读者在具体应用中遇到具体问题仍可参见芯片用户手册进行针对性阅读。 参考资料 Kinetis KE1xF Sub-Family Reference Manual, https://www.nxp.com/docs/en/reference-manual/KE1xFP100M168SF0RM.pdfMM32F5270 用户手册中文版, https://www.mindmotion.com.cn/download/products/UM_MM32F5270_MM32F5280_SC.pdf