[AutoSar]BSW_Com016 硬件滤波、软件滤波、mask、code 配置


  

关键词

嵌入式、C语言、autosar、OS、BSW

平台说明

项目Value
OSautosar OS
autosar厂商vector , EB
芯片厂商TI 英飞凌
编程语言C,C++
编译器HighTec (GCC)
autosar版本4.3.1

在这里插入图片描述
>>>>>回到总目录<<<<<<

一、背景

  什么是CAN 滤波?讲人话,就是个筛选器,哪些报文需要,哪些不需要,筛选一下就行。通过配置就可以实现上述功能。

二、硬件滤波和软件滤波

2.1 硬件滤波

  硬件滤波实现是在CAN Drv 。MCU会提通过相关存器来实现对标准11bit或者扩展29bit ID 的过滤。下图为TC3XX系列相关寄存器说明,有兴趣自行查看:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2.1.1硬件滤波在vector cfg中的配置处

在这里插入图片描述

在这里插入图片描述

2.2 软件滤波

  软件滤波在CANIF中通过相关配置实现。
在这里插入图片描述

2.3 软件滤波和硬件滤波对比

  CPU消耗: 硬件滤波 < 软件滤波
  效率: 硬件滤波 > 软件滤波
   范围: 硬件滤波 2n 例如0x0-0x1,0x0-0x3,0x0-0x7,0x0-0xF。软件滤波任意范围帧。

三、CanFilterCodeValue 和 CanFilterMaskValue

  满足下面公式的报文才能通过滤波:

  receiveID & Mask == Code & Mask

3.1 Filter Mask

  翻译为掩码。标准帧11bit,扩展帧29bit。如果对这个bit关心则置为1,否则为0.
例如:接收ID范围0x400–0x43F
0x400 二进制:0100 0000 0000
0x43F 二进制:0100 0011 1111

bit11109876543210
0X400010000000000
0X43F010000111111
mask011111000000

①bit11:超出范围,不关心置为0。
②bit10-bit8:收到的报文这3bit必须为1 0 0即0x4,所以这三位都必须关心,因此mask这三bit分别置为1 1 1。
③bit7-bit4:bit7和bit6在0x0变为0x3的过程中没有任何变化,所以收到的报文这两位必须是0,因此这两位必须被关心,mask bit7 bit6 被置为1.而bit5 和bit6 在0x0变为0x3的过程中都被改变过,所以不管收到的报文这两位是什么值我们都不必关心,因此mast 的bit5和bit6 被置为0.
④bit3 -bit0:bit3 -bit0 在0x0变为0xF的过程中都被改变过,所以不管收到的报文这四位是什么值我们都不必关心,因此mast 的bit3 -bit0 被置为0.
因此mask = 0x7C0.

3.2 Filter Code

  翻译为滤波区号,即滤波区间码。
官方手册说得有点复杂,这里提供一种取巧的计算方式:在保证mask计算无误的情况下,用滤波范围内的任意一个值&mask 就能得出code。

如3.1中的0x400–0x43F,取任意一个值:0x431
0x431&0x7C0 = 0x400=code

>>>>>回到总目录<<<<<<

  • 38
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老灰╮(╯-╰)╭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值