KEA128 控制器 CAN 模块初始化及过滤功能设置
在 KEA128 控制器中,可以通过以下步骤初始化 CAN 并设置过滤功能:
- 打开 MSCAN 模块的时钟控制。
SIM->SCGC |= SIM_SCGC_MSCAN_MASK; // 打开 MSCAN 模块时钟
- 关闭 MSCAN 模块。
MSCAN->CANCTL0 &= ~MSCAN_CANCTL0_INITRQ_MASK; // 关闭 MSCAN 模块
while((MSCAN->CANCTL1 & MSCAN_CANCTL1_INITAK_MASK) != 0); // 等待 MSCAN 模块关闭
- 配置 MSCAN 模块的控制寄存器。
MSCAN->CANCTL1 = MSCAN_CANCTL1_CLKSRC_MASK; // 使用系统时钟
MSCAN->CANCTL0 |= MSCAN_CANCTL0_CSWAI_MASK; // 进入等待模式时继续工作
- 配置 MSCAN 模块的过滤器。
// 设置过滤器 1
MSCAN->CANIDAR_BANK_1[0] = 0x18FF5018; // 过滤 0x18FF5018 CAN ID
MSCAN->CANIDMR_BANK_1[0] = 0xFF; // 掩码设置为 0xFF,匹配所有位
// 设置过滤器 2
MSCAN->CANIDAR_BANK_1[1] = 0x18FEE23A; // 过滤 0x18FEE23A CAN ID
MSCAN->CANIDMR_BANK_1[1] = 0xFF; // 掩码设置为 0xFF,匹配所有位
// 启用过滤器 1 和 2
MSCAN->CANIDAC = MSCAN_CANIDAC_IDAM(0x01); // 使用 32 位过滤器
- 打开 MSCAN 模块。
MSCAN->CANCTL0 |= MSCAN_CANCTL0_INITRQ_MASK; // 打开 MSCAN 模块
while((MSCAN->CANCTL1 & MSCAN_CANCTL1_INITAK_MASK) == 0); // 等待 MSCAN 模块打开
完整的 CAN 初始化代码如下所示:
#include "SKEAZ1284.h"
void CAN_Init(void)
{
SIM->SCGC |= SIM_SCGC_MSCAN_MASK; // 打开 MSCAN 模块时钟
MSCAN->CANCTL0 &= ~MSCAN_CANCTL0_INITRQ_MASK; // 关闭 MSCAN 模块
while((MSCAN->CANCTL1 & MSCAN_CANCTL1_INITAK_MASK) != 0); // 等待 MSCAN 模块关闭
MSCAN->CANCTL1 = MSCAN_CANCTL1_CLKSRC_MASK; // 使用系统时钟
MSCAN->CANCTL0 |= MSCAN_CANCTL0_CSWAI_MASK; // 进入等待模式时继续工作
// 设置过滤器 1
MSCAN->CANIDAR_BANK_1[0] = 0x18FF5018; // 过滤 0x18FF5018 CAN ID
MSCAN->CANIDMR_BANK_1[0] = 0xFF; // 掩码设置为 0xFF,匹配所有位
// 设置过滤器 2
MSCAN->CANIDAR_BANK_1[1] = 0x18FEE23A; // 过滤 0x18FEE23A CAN ID
MSCAN->CANIDMR_BANK_1[1] = 0xFF; // 掩码设置为 0xFF,匹配所有位
// 启用过滤器 1 和 2
MSCAN->CANIDAC = MSCAN_CANIDAC_IDAM(0x01); // 使用 32 位过滤器
MSCAN->CANCTL0 |= MSCAN_CANCTL0_INITRQ_MASK; // 打开 MSCAN 模块
while((MSCAN->CANCTL1 & MSCAN_CANCTL1_INITAK_MASK) == 0); // 等待 MSCAN 模块打开
}
这样,CAN 模块就被初始化并设置了过滤功能,可以接收到符合过滤条件的 CAN 消息。
原文地址: https://www.cveoy.top/t/topic/pkj5 著作权归作者所有。请勿转载和采集!