在 KEA128 控制器库函数文件 kea128_mscan.c 中,可以通过以下方式在 CAN_Init() 函数中完善过滤功能:

  1. 首先,需要将 MSCAN 模块配置为接收模式。在 CAN_Init() 函数中,找到以下代码行:
MSCAN->CANCTL0 |= MSCAN_CANCTL0_INITRQ_MASK; // Set INIT bit

将其修改为:

MSCAN->CANCTL0 |= (MSCAN_CANCTL0_INITRQ_MASK | MSCAN_CANCTL0_RXACT_MASK); // Set INIT and RXACT bits

这样可以将 MSCAN 模块配置为接收模式。

  1. 在 CAN_Init() 函数中,在 MSCAN->CANIDAR_BANK_1[0] 中添加过滤程序。由于 MSCAN->CANIDAR_BANK_1[0] 为 unit8_t 数据类型且数组大小不能超过 8 位数据,需要将 0x18ff5018 和 0x18fEE23A CAN ID 前 2 个字节的过滤程序拆分为两个 8 位数据。
MSCAN->CANIDAR_BANK_1[0] = 0x18; // 第一个字节过滤值
MSCAN->CANIDAR_BANK_1[1] = 0xFF; // 第二个字节过滤值
MSCAN->CANIDAR_BANK_1[2] = 0x18; // 第一个字节过滤值
MSCAN->CANIDAR_BANK_1[3] = 0xFE; // 第二个字节过滤值

这样就可以设置过滤值为 0x18ff 和 0x18FE。

  1. 当 MSCAN 模块接收到 CAN 消息时,可以通过以下方式判断消息的 ID 是否符合过滤条件:
if ((MSCAN->CANIDAR_BANK_1[0] == received_id_byte_1) && (MSCAN->CANIDAR_BANK_1[1] == received_id_byte_2))
{
    // ID 符合过滤条件,进行相应处理
}
if ((MSCAN->CANIDAR_BANK_1[2] == received_id_byte_1) && (MSCAN->CANIDAR_BANK_1[3] == received_id_byte_2))
{
    // ID 符合过滤条件,进行相应处理
}

这样就可以判断接收到的 CAN 消息的 ID 前两个字节是否符合过滤条件。

注意:以上代码仅为示例,具体实现可能需要根据具体的 KEA128 控制器和库函数文件进行适当修改。请参考 KEA128 的 Datasheet 和库函数文件的相关文档以获取更准确的信息和指导。

KEA128 控制器 CAN 接收过滤:使用库函数文件实现 ID 过滤

原文地址: https://www.cveoy.top/t/topic/pknP 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录