首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 维修教程知识 > 单片机栏
基于飞利浦P8XC591的CAN总线节点扩展
来源:本站整理  作者:佚名  2009-09-21 11:05:12



微处理器P87C591和SJA1000均使用12MHz的石英晶体,以获得相同的时钟信号。由于 P87C591含有片上的CAN控制器,通过TXDC,RXDC两个管脚,P87C591就可和外部的CAN节点交换数据。另一方面,P87C591直接控制SJA1000的AD0~AD7, RD, WR, ALE, RST和INT管脚,SJA1000的MODE管脚接高电平,工作在Intel模式下;片选CS管脚接地,使SJA1000始终处于选通状态。P87C591对SJA1000的操作主要是对寄存器中的模式寄存器(MOD)、命令寄存器(CMR)、状态寄存器(SR)、中断寄存器(IR)、中断允许寄存器(IEP)、总线定时寄存器(BTR0, BTR1)、输出控制寄存器(OCR)、时钟分频计数器(CDR)进行设置和检测,以及对收发缓冲区进行读写,从而完成和其它CAN节点的数据交换。

为了能使CAN网络1(最多110个节点)的信息和CAN网络2(最多110个节点)的信息共享,P87C591在软件上必须使得任何格式的数据能实时的从CAN网络1传送到CAN网络2,以及信息从CAN网络2传送到CAN网络1。这样,两个不同的子网就实现了互联,CAN网络的节点得到了扩展。

    软件设计

*在初始化SJA1000时,必须设置接收代码寄存器ACRn,接收代码屏蔽寄存器AMRn的值为FF,以能收发所有的数据。由于P87C591片上自带的CAN控制器在软件上是向上兼容SJA1000的,所以对SJA1000的初始化,读、写的流程与P87C591基本类似。

初始化部分的原程序如下:

#include<reg591.h>

viod 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); /*等待总线激活*/

}

类似以上的设置可以使得所有的CAN信息都通过CAN的连接滤波器而到达接收缓冲区,从而为不同CAN网络信息的交换奠定了基础。

上一页  [1] [2] 

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)

推荐阅读

图文阅读

热门阅读

Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:269,820.30000 毫秒