KEA128 控制器 CAN 初始化及过滤功能设置
在 KEA128 控制器中,可以使用以下代码初始化 CAN 并设置过滤功能:
#include "kea128_mscan.h"
void CAN_Init(void) {
// 初始化 MSCAN 控制器
MSCAN->CANCTL0 = MSCAN_CANCTL0_INITRQ_MASK;
while (!(MSCAN->CANCTL1 & MSCAN_CANCTL1_INITAK_MASK)) {}
// 设置 MSCAN 控制器为环回模式
MSCAN->CANCTL1 = MSCAN_CANCTL1_CANE_MASK | MSCAN_CANCTL1_CLKSRC_MASK | MSCAN_CANCTL1_LOOPB_MASK;
// 设置过滤功能
MSCAN->CANIDAR_BANK_0 = (0x18FF5018 >> 3) & 0xFF;
MSCAN->CANIDAR_BANK_1 = ((0x18FF5018 << 5) & 0xE0) | MSCAN_CANIDAR_BANK_IDE_MASK;
MSCAN->CANIDMR_BANK_0 = 0xFF;
MSCAN->CANIDMR_BANK_1 = 0xFF;
MSCAN->CANIDAR_BANK_2 = (0x18FEE23A >> 3) & 0xFF;
MSCAN->CANIDAR_BANK_3 = ((0x18FEE23A << 5) & 0xE0) | MSCAN_CANIDAR_BANK_IDE_MASK;
MSCAN->CANIDMR_BANK_2 = 0xFF;
MSCAN->CANIDMR_BANK_3 = 0xFF;
// 退出初始化模式,开始正常工作
MSCAN->CANCTL0 = MSCAN_CANCTL0_SYNCH_MASK;
while (MSCAN->CANCTL1 & MSCAN_CANCTL1_INITAK_MASK) {}
}
在以上代码中,我们首先将 MSCAN 控制器设置为初始化模式,然后设置 CAN 控制器为环回模式,这样我们可以在不连接 CAN 总线的情况下测试 CAN 功能。
接下来,我们设置过滤功能。MSCAN 控制器的过滤功能是通过 CANIDAR_BANK 和 CANIDMR_BANK 寄存器来设置的。我们将 CAN ID 右移 3 位得到的值写入 CANIDAR_BANK_0 和 CANIDAR_BANK_2 寄存器,将 CAN ID 左移 5 位并与 0xE0 进行按位或运算,然后再加上 MSCAN_CANIDAR_BANK_IDE_MASK(表示扩展帧)后的值写入 CANIDAR_BANK_1 和 CANIDAR_BANK_3 寄存器。CANIDMR_BANK_0 和 CANIDMR_BANK_2 寄存器则设置为 0xFF,表示不对对应位进行匹配。
最后,我们退出初始化模式,开始正常工作。
请注意,以上代码中的 MSCAN_CANIDAR_BANK_IDE_MASK 是一个宏定义,表示扩展帧的标志位。具体的宏定义可能会因不同的 MCU 型号而有所不同,请根据您所使用的 MCU 型号进行相应的修改。
原文地址: https://www.cveoy.top/t/topic/pke2 著作权归作者所有。请勿转载和采集!