在P8Xc591中5个特殊功能寄存器.doc

在P8Xc591中5个特殊功能寄存器.doc

在P8Xc591中5个特殊功能寄存器 CAN 初始化的C 代码示例 void init_can_controller ( void ) { /* 进入CAN控制器复位模式 */ CANMOD = 0x01; /* 将CAN控制器设置为复位模式以启动初始化 */ /* TXDC Port (P1.1) 配置 */ /* 管脚TXDC 设置为推挽模式 */ P1M2 = P1M2 | 0x02; /* P1M2.1=’1’, P1M1.1 = ’0’ (默认) */ /* 配置与CAN有关的中断 */ CANSTA = 0x03; /* 使能接收和发送中断 */ /* CAN位定时的配置 */ CANADR = BTR0; /* BTR0和BTR1编程为125 kbit/s @12 MHz */ CANDAT = 0x45; CANADR = BTR1; /* TSEG1 = 12, TSEG2 = 3, SJW = 2 */ CANDAT = 0x2B; /* Samples = 1 - sample point ~81 % */ /* 验收滤波器的配置 Bank1的滤波器1配置为接收ID = 010.0000.0XXX */ CANADR = ACR10; /* 将地址设置到验收代码寄存器0 (Bank 1) */ CANDAT = 0x40; /* 验收代码0用于滤波 */ CANADR = AMR10; /* 将地址设置到验收屏蔽寄存器0 (Bank 1) */ CANDAT = 0x00; /* bank1: 验收屏蔽0 */ CANDAT = 0xFF; /* bank1: 验收屏蔽1无关 */ CANDAT = 0xFF; /* bank1: 验收屏蔽2无关 */ CANDAT = 0xFF; /* bank1: 验收屏蔽3无关 */ CANADR = ACFMOD; /* 将地址设置到ACF模式寄存器 */ CANDAT = 0x55; /* 单验收滤波器使用11位ID (SFF) */ CANADR = ACFPRIO; /* 将地址设置到ACF优先级寄存器 */ CANDAT = 0xFF; /* 所有滤波器都为高优先级 */ CANADR = ACFEN; /* 将地址设置到ACF使能寄存器 */ CANDAT = 0x01; /* 使能Bank1的验收滤波器 */ /* 选择操作模式退出CAN控制器复位模式 */ CANMOD = 0x00; /* 使CAN控制器进入操作模式 */ } 初始化部分的原程序如下: #includereg591.h d ini_can_controller (void) { CANMOD=0x01; /*进入复位模式,启动CAN初始化*/ P1M2=P1M2 I 0x02; /*管脚TXDC设置为推挽模式*/ CANSTA=0x03; /*使能接收和发送中断*/ CANADR=BTR0; /*BTR0和BTR1编程为125kbit/s@12MHz*/ CANDAT=0x45; CANADR=BTR1; /*TSEG1=12, TSEG2=3, SJW=2*/ CANDAT=0x2B; /*用户可根据具体的CAN网络来调整BTR0, BRT1的参数*/ CANADR=AMR10; /*设定接收屏蔽寄存器的地址*/ CANDAT=0xFF; /*Bank1: 与接收屏蔽寄存器1无关,允许任何数据通过滤波器*/ CANDAT=0xFF; /*Bank1: 与接收屏蔽寄存器2无关,允许任何数据通过滤波器*/ CANDAT=0xFF; /*Bank1: 与接收屏蔽寄存器3无关,允许任何数据通过滤波器*/ CANDAT=0xFF; /*Bank1: 与接收屏蔽寄存器4无关,允许任何数据通过滤波器*/ CANADR=ACFMODE; /*设定接收滤波器模式寄存器的地址*/ CANDAT=0x01; /*设定BANK1为单滤波模式,标准帧*/ CANADR=ACFENA; /*设定接收滤波器使能寄存器的地址*/ CANDAT=0x01; /*使能BANK1的滤波器1*/ CANMOD=0x00; /*请求进入CAN的激活模式*/ while (CANSTA 0x80); /*等待总线激活*/ }

文档评论(0)

1亿VIP精品文档

相关文档