首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

LPC2131嵌入式系统μCOS-II实现CAN通讯 02

LPC2131嵌入式系统μCOS-II实现CAN通讯 02

CAN收发器与CAN总线接口
   
    CAN收发器与CAN总线的接口如图2所示,其中SJA1000的TX0,RX0分别与CAN收发器的TXD,RXD相连,为提高CAN收发器82C250与CAN总线的接口部分的抗干扰能力,特在82C250 的CANH 和CANL 引脚串接一个共模扼流圈,以消除一定的共模干扰,而使得总线差分信号能够顺利通过。并且CANH和CANL分别通过一个磁珠与总线相连,以起到消除一定的高频干扰。同时CANH 和CANL与地之间并联了两个30pf 的小电容,可以起到滤除总线上的高频干扰和一定的防电磁辐射的能力。另外在两根CAN总线接入端与地之间分别接了一个TVS,当CAN 总线有较高的电压时通过TVS的击穿而接地,可起到一定的过压保护作用。82C250 的Rs引脚上接有一个斜率电阻以降低CAN总线的向外辐射。

图2 CAN收发器与总线接口电路
    对于其他无内置CAN控制器的能够承受5V的TTL电平的处理器来说,只需改变与SJA1000的数据端口ALE/AS,RD/E,WR,CS,INT,RST相连接的引脚即可完成外扩CAN接口的硬件设计工作,否则在两者之间加一个逻辑电平转换的器件即可。
   
    软件设计
   
    对SJA1000的读写访问
   
    由于LPC2131的48个引脚全是IO,所以首先需要通过软件模拟读写SJA1000的时序,来对SJA1000进行操作,进而完成CAN通讯功能。
   
    依据SJA1000在Intel模式下的读写时序[4],可编写LPC2131通过CAN控制器SJA1000发送数据的写函数void WriteCan(uint8 Addr,uint8 Data)和接受CAN控制器所接受的数据的读函数uint8 ReadCan(uint8 Addr),其中Addr为SJA1000相应的寄存器的地址,Data为LPC2131所发送的数据,读函数ReadCan可返回所接受的数据。
   
    CAN通讯的实现
   
    要实现一个CAN通讯需要实现3个功能模块:对SJA1000的初始化模块;数据发送模块;数据接受模块。
   
    ·对SJA1000的初始化模块
   
    在开始通讯之前,首先要在SJA
   
    1000的各个功能寄存器进行设置,包括模式寄存器,波特率,时钟分频器,中断使能寄存器,滤波寄存器,输出控制寄存器。
   
    uint8 IniSJA1000(uint8 BTR0,uint8 BTR1)
   
    {
   
    IO0CLR=CS; //片选SJA1000
   
    WriteCan(0,0x09); //进入复位模式
   
    WriteCan(31,0xe8); //设置时钟分频器
   
    WriteCan(4,0xfd); //设置中断使能寄存器
   
    WriteCan(16,AcceptCode1);//设置验收代码1
   
    WriteCan(17,AcceptCode2);//设置验收代码2
   
    WriteCan(18,AcceptCode3);//设置验收代码3
   
    WriteCan(19,AcceptCode4);//设置验收代码4
   
    WriteCan(20,MaskCode1); //设置验收屏蔽1
   
    WriteCan(21,MaskCode2); //设置验收屏蔽2
   
    WriteCan(22,MaskCode3); //设置验收屏蔽3
   
    WriteCan(23,MaskCode4); //设置验收屏蔽4
   
    WriteCan(6,BTR0); //设置总线时序寄存器1
   
    WriteCan(7,BTR1); //设置总线时序寄存器2
   
    WriteCan(8,0xfa); //设置输出控制积存器
   
    WriteCan(0,0x08); //进入操作模式
   
    OSCANMbox=OSMboxCreate(0);/建立CAN通讯邮箱
   
    if (OSCANMbox==NULL)
   
    {
   
    return FALSE;
   
    }
   
    return TRUE;
   
    }
返回列表