英飞凌 AURIX TC3XX 系列单片机的 CAN 外设介绍(一)介绍了 MCMCAN 的基本框架、中断、端口节点和 Message RAM,这一篇详细介绍一下 Message RAM 中的过滤器、Rx 和 TX Buffer 等区域。
2、介绍 2.1、消息过滤区CAN 外设节点可以配置两套验收滤波器:标准标识符和扩展标识符,用于匹配后存储或拒绝接收到的消息标识符。最多(最多可配置的数目在上一章已经介绍了)可用来配置128个标准标识符(11-bit)和64个扩展标识符(29-bit)。
配置的过滤规则可以分配专用 Rx Buffer 和 Rx FIFO 0/1,在收到一帧消息时,会从过滤器列表的元素 0 开始遍历搜索,一旦匹配成功则立即储存或者拒绝,后面的就不再进行匹配搜索了。
2.1.1、过滤模式从过滤方式得知:
- 过滤器中的元素顺序对过滤性能有很重要的影响
- 如果一个消息标识符同时符合过滤器列表中的两个和多个元素,那么只会在第一次匹配处理后就退出了
以标准版为例,在配置过滤器的元素时,每个过滤器元素可以配置为以下几种模式:
- 范围过滤模式:该过滤器匹配标识符在两个标识符定义的范围内的所有消息(SFID1 ~ SFID2)。
- 列表双过滤模式:可以将过滤器配置为匹配一个(专用 Rx Buffer)或者两个特定的标识符(SFID1 和 SFID2)。
- 经典位屏蔽过滤模式:通过对接收到的标识符的位进行屏蔽来匹配标识符组(SFID1 作为标识符匹配值,SFID2 作为标识符屏蔽码,即 SFID2 中如果某一位为 1,则 SFID1 中相对应的位必须与收到的帧标识符中的相对应位吻合才算匹配成功;如果SFID2 中如果某一位为 0,则不关心 )。
- 过滤模式禁用:过滤器列表遍历时不需要匹配,继续下一个过滤匹配(通常不会使用,因为意义不大,反而会浪费了一个元素,不过可以作为清除使用)
注:SFID2 有两种不同的含义:列表双过滤模式下的第二个特定标识符 和 用于专用 Rx Buffer 位置或调试消息(后者在过滤处理方式为“如果标识符匹配则储存至 Rx Buffer 中或者用于调试消息”下生效,SFID2[5:0] 为专用 Rx Buffer 中的位置),这里较为复杂,没有具体使用过,就不多介绍了。
2.1.1、过滤处理方式
在配置过滤器的元素时,每个过滤器元素可以配置为以下几种处理方式:
- 禁用该元素过滤:过滤器列表遍历时不需要匹配,继续下一个(通常不会使用,因为意义不大,反而会浪费了一个元素,不过可以作为清除使用)
- 如果标识符匹配则储存至 Rx FIFO 0 中
- 如果标识符匹配则储存至 Rx FIFO 1 中
- 如果标识符匹配则拒绝并丢弃
- 如果标识符匹配则设置优先级:不储存元素只产生 HPM 中断
- 如果标识符匹配则储存至 Rx FIFO 0 中并设置优先级
- 如果标识符匹配则储存至 Rx FIFO 1 中并设置优先级
- 如果标识符匹配则储存至专用 Rx Buffer 中或者用于调试消息
储存并设置了优先级处理方式的标识符需要使能 HPM (High Prio Event)中断功能,收到消息并匹配成功后会产生中断,此时可以读取 HPMS 寄存器对帧数据进行取帧处理。
2.2、消息接收区
消息 RAM 中支持多达 64 个专用 Rx Buffer,和两个 Rx FIFO,且 Rx FIFO 最多可分别配置 64 个元素的储存,其中每一个元素的具体内容如下,n 的取值决定一个元素所占的大小。
2.2.1、Rx FIFORx FIFO 0 和 Rx FIFO 1可配置为每个最多可容纳 64个元素。两个 Rx FIFO 的元素数目配置通过寄存器 RXF0Ci(i=0-3)和RXF1Ci(i=0-3)完成。FIFO 的元素储存(Put Index)和读取(Get Index)顺序如下:
如果没有及时处理 Rx FIFO 的元素,那么 Rx FIFO 就会储满,可以根据实际情况配置不同的模式来处理新的数据元素:
- 阻塞模式:Rx FIFO 的默认 *** 作模式,不会写入 RxFIFO,直到至少一个元素已被读出。
- 覆盖模式:Rx FIFO 中接受的新元素将覆盖Rx FIFO中最旧(最先接收的数据)的元素。
最多支持 64 个专用 Rx Buffer,其中内容格式和 Rx FIFO 中的一致,n 的取值决定一个元素所占的大小。
在设置过滤储存至专用 Rx Buffer 时,标准帧的 SFID2[5:0] 或扩展帧的 EFID2[5:0] 为专用 Rx Buffer 中的位置。
和 Rx FIFO 接收读取不同的是,专用 Rx Buffer 新数据匹配成功后并储存时,需要以下的 *** 作:
- 重置中断标志 IRi.DRX
- 读取新数据寄存器判断指定的专用 Rx Buffer 是否为新的数据内容
- 如果是新的数据,那么从 RAM 中读取数据
- 重置已处理消息的新数据标志,防止下次重复读取
2.3、消息发送区
消息发送区有 Tx Event FIFO 和 Tx Buffer。而 Tx Buffer 包含了 专用 Tx Buffer ,Tx Queue 和 Tx FIFO 三种,且 Tx Buffer 最多可配置 32 个元素。
2.3.1、Tx Event FIFOTx Buffer 可配置以下几种传输模式:
- Tx FIFO
- Tx Queue
- 专用 Tx Buffer
- 专用 Tx Buffer 和 Tx FIFO 混合
- 专用 Tx Buffer 和 Tx Queue 混合
为了支持 Tx 事件处理,MCMCAN 已实现 Tx Event FIFO,且最多可配置 32 个元素。MCMCAN在 CAN 总线上传输消息后,消息ID和时间戳存储在Tx Event FIFO元件中。要将发送事件链接到发送事件FIFO元素,将发送的发送缓冲区中的消息标记复制到发送事件FIFO元素中。
通过使用Tx event FIFO,CPU 获得有关已发送元素的以下信息:
- 元素传输的顺序.
- 每个元素传输帧的本地时间。
专用 Tx Buffer 用于在主机 CPU 的完全控制下传输消息,最多支持 32 个元素。每个专用 Tx Buffer 都配置有特定的消息ID。如果多个 Tx Buffer 配置有相同的消息标识符 ID,则首先传输缓冲区编号最低的 Tx Buffer。
请求的消息在内部与来自可选 Tx FIFO 或 Tx Queue 的消息进行仲裁,在外部与CAN总线上的消息进行仲裁,并根据其消息ID发出,内容格式如下,n 的取值决定一个元素所占的大小。
2.3.3、Tx FIFO
通过寄存器 TXBCi (i=0-3).TFQM 设置为 0 配置成 TX FIFO 模式,同时将 TXBCi(i=0-3).TFQS 设置 FIFO 的数目(为 0 表示没有)。
当向 Tx FIFO 添加单个消息时,通过向 Tx FIFO 的 Put 索引引用的 Tx 缓冲区相关的 TXBAR 位写入“1”来请求传输。将多条(n)消息添加到 Tx FIFO时,它们将从 Put 索引开始写入 n 个连续的 Tx 缓冲区,然后通过 TXBARi(i=0-3)请求传输。然后,Put 索引循环递增 n。请求的 Tx 缓冲区数量不应超过 Tx FIFO 空闲级别指示的空闲 Tx 缓冲区数量。
- 当 Get 索引引用的 Tx 缓冲区的传输请求被取消时,Get 索引将增加到具有挂起传输请求的下一个 Tx 缓冲区,并重新计算 Tx FIFO 可用级别。
- 当传输取消应用于任何其他 Tx 缓冲区时,Get 索引和 FIFO 空闲级别保持不变。
当 Tx FIFO 和专用 Tx Buffer 混合时(总数不能大于 32),结构如下:
Tx FIFO 和专用 Tx Buffer 混合时的发送优先级处理方式:
- 扫描专用 Tx Buffer 和最旧的挂起 Tx FIFO Buffer(由 TXFQSi.TFGI 引用(i=0-3))
- 具有最高优先级消息标识符 ID 的 Buffer 获得最高优先级,然后传输
通过寄存器 TXBCi (i=0-3).TFQM 设置为 "1" 配置成 TX Queue 模式,同时将 TXBCi (i=0-3).TFQS 设置 Queue 的数目(为 0 表示没有)。
存储在发送队列中的消息从消息ID最低(优先级最高)的消息开始传输。如果使用相同的消息ID配置了多个队列缓冲区,则首先传输缓冲区编号最低的队列缓冲区。
必须将新消息写入 Put 索引 TXFQSi(i=0-3).TFQPI 引用的 Tx Buffer。“添加请求”周期性地将Put索引递增到下一个可用的 Tx Buffer。如果发送队列已满(TXFQSi(i=0-3) TXFQSi(i=0-3).TFQF = "1"),Put 索引无效,在发出至少一条请求的消息或取消挂起的传输请求之前,不应向 Tx Queue 写入更多消息。
当 Tx Queue 和专用 Tx Buffer 混合时(总数不能大于 32),结构如下:
Tx Queue 和专用 Tx Buffer 混合时的发送优先级处理方式:
- 使用激活的传输请求扫描所有 Tx Buffer(包括专用 Tx Buffer 和 Tx Queue)
- 具有最高优先级消息标识符 ID 的 Tx Buffer 获得最高优先级,然后传输
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)