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

发布者:TranquilJourney最新更新时间:2013-09-12 来源: 21ic关键字:LPC2131  嵌入式系统  μCOS-II  CAN通讯 手机看文章 扫描二维码
随时随地手机看文章

随着信息技术技术的飞速发展,ARM技术方案架构作为一种具备低功耗、高性能、以及小体积等特性的32位嵌入式微处理器,得到了众多的知识产权授权用户,其中包括世界顶级的半导体和系统公司。目前已被广泛的用于各类电子产品,汽车、消费娱乐、影像、工业控制、海量存储、网络、安保和无线等领域。被业界人士认为,基于ARM的技术方案是最具市场前景和市场优势的解决方案。

现场总线CAN是为解决现代汽车中众多的电控模块之间的数据交换而开发的一种串行通信协议。由于其具有多主站依据优先权进行总线访问,采用非破坏性总线仲裁,可完成对通信数据的错误检验和优先级判别,数据长度最多为8个字节,传输时间短,受干扰的概率低,抗干扰能力较强,通信速率最高可达1Mbit/s等特点,它被广泛应用在汽车,工业,消费类电子等领域,而被公认为是最有前途的现场总线之一。

基于ARM在嵌入式系统方面优势和CAN总线的广泛应用,目前越来越多的ARM处理器内部都自带了CAN控制器,极大的方便了开发人员对CAN总线的开发。但目前仍有些产品中的ARM处理器没有内置CAN控制器,为了能够适应节点间对数据传输所提出的实时性,可靠性的要求,同时又不改变原来的硬件结构,通过外扩CAN接口模块来实现CAN通信成了一个较为合适的选择。

本文基于ARM7TDMI-S处理器LPC2131,对内部没有集成CAN控制器的处理器,设计了较为通用的CAN接口模块的硬件电路,并对CAN总线进行了可靠性设计,而且对基于嵌入式实时操作系统μCOS-II实现CAN通信,进行了嵌入式软件的设计,最终在实践中对CAN总线通讯的可靠性和可行性进行了验证。

LPC2131

Philips LPC2131是基于ARM7TDMI-S的高性能32位RISC微控制器,它一方面具有ARM处理器的所有优点:低功耗、高性能;同时又具有较为丰富的片上资源,非常适合嵌入式产品的开发。其特点如下:

·集成了Thumb扩展指令集。

·32KB可在系统中编程(ISP)的片内Flash和可在应用中编程(IAP)的8KB RAM,具有向量中断控制器。

·2个UART,2个I2C串行接口,2个SPI串行接口,2个定时器(7个捕获/比较通道),PWM单元可提供多达6个PWM输出,8通道10位ADC,实时时钟RTC,看门狗定时器WDT,48个通用I/O引脚。

·CPU时钟高达60MHz,具有片内晶体振荡器和片内PLL。

LPC2131内部没有集成CAN控制器,而无法利用CAN总线来进行通讯。为了使得LPC2131能够利用CAN总线进行通讯,可以通过外部扩展来拓展其功能。

硬件电路设计

由于LPC2131是由3.3V供电的ARM7TDMI-S微处理器,其各个IO引脚是3.3V的TTL电平,而且可以承受5V的电压。而独立CAN控制器SJA1000是5V供电,其各个IO口的电平是5V的TTL电平,所以二者兼容,其IO可以直接相连。

LPC2131与CAN控制器接口

LPC2131与CAN控制器接口如图1所示,LPC2131的P0.8~P0.15与SJA1000的AD0~AD7直接相连实现数据交互,P0.22,P0.25,P0.31,P0.23分别与SJA1000的ALE/AS,RD/E,WR,CS相连实现读写和片选,P0.30,P0.27分别与SJA1000的INT,RST相连实现中断和复位。LPC2131访问SJA1000时,可通过软件模拟SJA1000中所规定的读写时序来进行,SJA1000的模式引脚MODE通过VCC而置为高电平,使得SJA1000工作在Intel的模式。

LPC2131与CAN控制器接口电路

图1 LPC2131与CAN控制器接口电路

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总线的向外辐射。[page]

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;

}

·数据发送模块

假设要发送的数据的ID存储在数组ID[4]中,数据存储在数组SendData[8]中,其发送模块程序如下所示,其中参数DLC为发送的字节数,FF为帧类型,即0为数据帧,1为远程帧。

void Tx(uint8 DLC,uint8 FF)

{

uint8 i;

OS_ENTER_CRITICAL();

If (FF==0x01)

{

WriteCan(16,DLC+0x80); //数据帧

}

else

{

WriteCan(16,DLC+0xd0); //远程帧

}

WriteCan(17,ID[0]);

WriteCan(18,ID[1]);

WriteCan(19,ID[2]);

WriteCan(20,ID[3]); //TX标识码

for (i=0;i

WriteCan(21+i,sentdata[i]); //TX数据

WriteCan(1,0x01);//设置发送寄存器发送

OS_EXIT_CRITICAL();

}[page]

·数据接受模块

根据电路图1,采用中断接受的方式来接受数据,LPC2131的P0.30设置为外部中断3,整个数据接受模块由数据接受函数void ReceiveData(uint8 *Rt)、中断处理函数Can_Exception(void)构成。当SJA1000接受到CAN总线数据,通过接收中断使得LPC2131产生外部中断3而使其进入中断处理函数,进而对接受到的数据进行处理。其中数据接受函数和中断处理函数如下:

void ReceiveData (void)

{

uint8 i, err,*Rt;

OS_ENTER_CRITICAL();

Rt=(uint8 *)OSMboxPend(OSCANMbox,0,&err);

//通过邮箱接受数据

for (i=0;i<13;i++)

ReceiveData[i]=*Rt++; //将接受到的数据存在全局变量中供后续处理

OS_EXIT_CRITICAL();

}

void Can_Exception(void)

{

u

int8 temp[13],i;

OS_ENTER_CRITICAL();

for (i=0;i<13;i++)

temp[i]=ReadCan(16+i); //读取CAN数据

OSMboxPost(OSCANMbox,(void *)temp); //将

CAN数据以邮箱发送到接受函数

EXTINT=0x08; //清楚ENT3

VICVectAddr=0; //中断返回

OS_EXIT_CRITICAL();

}

结语

以ARM芯片作为主控制器,CAN总线作为数据传输方式来进行通讯的嵌入式系统得到了越来越广泛的应用。同时CAN通讯的可靠性也成为影响系统性能的关键部分之一。本文以LPC2131为例,给出了一类微处理器与CAN控制器SJA1000之间的较为通用的硬件连接方法,对CAN总线进行了可靠性设计,并基于嵌入式实时操作系统μCOS-II进行了CAN通讯软件开发,该设计现已在工厂车间中的分布式监控系统中得到了应用,运行可靠、稳定。

关键字:LPC2131  嵌入式系统  μCOS-II  CAN通讯 引用地址:基于LPC2131嵌入式系统μCOS-II实现CAN通讯

上一篇:基于Nios II 软核处理器的SD卡接口设计
下一篇:基于Linux和MiniGUI的心电监护仪设计

推荐阅读最新更新时间:2024-03-16 13:27

LPC2131的GPIO操作
在LPC2131中,使用IOxCLR,IOxSET寄存器来对x口清零置1 要清零P0口的第5位 IO0CLR=0x00000010; 0x00000010,为16进制数据 用二进制表示为0000,0000,0000,0000,0000,0000,0001,0000 31------------------------------------------0 其中的'1'出现在第五位 要清零P1口的第7位 IO1SET=0x00000040; LPC2131不能直接对某一位进行访问,必须对整个P0口进行操作, 输出时通过向IO0SET和IO0CLR写1来实现引脚电平的高低变换,输入时查询IO0PIN。在这之前需要对P0口
[单片机]
基于嵌入式系统中触摸屏交互功能模块设计
  1 引 言   嵌入式系统拉近了人与计算机的距离,形成一个人机和谐的工作与生活环境。从某一个角度来看,触摸屏作为嵌入式计算机系统中一体化的输入输出设备,在制造工业、过程控制、通讯、仪器、仪表、汽车、船舶、航空、航天、军事装备、消费类产品等方面均得到广泛应用,影响到人类工作与生活的各个领域并极具应用前景,它与嵌入式系统的交互功能的程序设计是整个系统设计的关键。本文描述的这样的设计过程,对其中的技术问题给出了详细的解释。功能设计基于ARM920T内核的S3C2410芯片,以GX开发板为硬件平台,是以 Windows CE为操作系统实现的图文交互界面模块。   2 系统交互功能的设计   2.1 系统构架   通常嵌入式系统
[单片机]
基于<font color='red'>嵌入式系统</font>中触摸屏交互功能模块设计
利用布线技巧提高嵌入式系统PCB的信号完整性
    随着电子技术的迅猛发展,嵌入式系统的应用越来越广泛,在很多应用中,人们考虑的不再是功能和性能,而是可靠性和兼容性。印制电路板(print circuit board,PCB)是电子产品中电路元件和器件的基本支撑件,其设计质量往往直接影响嵌入式系统的可靠性和兼容性。以往,一些低速电路板中,时钟频率一般只有10 MHz左右,电路板或封装设计的主要挑战就是如何在双层板上布通所有的信号线以及如何在组装时不破坏封装。由于互连线不曾影响系统性能,所以互连线的电气特性并不重要。在这种意义下对信号低速电路板中的互连线是畅通透明的。但是随着嵌入式系统的发展,采用的电路基本上都是高频电路,由于时钟频率的提高,信号上升沿也变短,印制电路对经
[嵌入式]
ARM嵌入式系统应用中的问题总结分析
引言 由于各种新型微处理器的出现和应用的不断深化,嵌入式系统在后PC时代得到了空前的发展。随着时间的推移和技术的进步,在工业控制和新兴的手持式应用等领域,用户体验成为产品成功的关键因素之一,越来越多的产品需要良好的用户界面、互联功能以及较强的数据处理能力,这对嵌入式处理器硬件、软件、教学等提出了新的要求。 1嵌入式处理器与硬件 在处理器方面,目前大量的中、低端嵌入式应用,主要使用8/16位单片机。在国内,由于历史的原因,主要是以MCS51核为主的许多不同型号单片机,主要厂商有Atmel、Philips、Winbond、宏晶等。还有一些近几年发展较快的新型单片机,如PIC、AVR、MSP430系列等。这些单片机各有特点,
[单片机]
嵌入式系统中USB主机控制器的实现
  通用串行总线(USB)接口具有简单灵活、高带宽、易于扩展和热插拔等优点,它目前已成为数码设备的标准接口之一,小到U盘、MP3,大到数码相机、打印机,USB接口的身影无处不在。但我们目前所使用的USB移动设备多为USB的外设(Device) , 比如USB的移动硬盘、USB接口的数码相机,一般只能在PC上使用,即只能通过PC实现文件和数据的交换。   业界和用户的需求呼唤USB主机的嵌入式化,因此在嵌入式系统中实现USB主机功能成了USB设计领域的热点之一。   迄今为止,嵌入式USB主机的最大市场和增长点在移动消费电子设备领域, 比如PDA与USB记忆棒传递数据、MP3之间传递歌曲、数码相机连接打印机等。   嵌入式US
[单片机]
<font color='red'>嵌入式系统</font>中USB主机控制器的实现
32位嵌入式系统的字节对齐
32位嵌入式系统的软件开发过程中,字节对齐问题是相当重要的。我们现在就拿ARM处理器和ADS1.2开发环境作为例子说明字节对齐的概念。 在此之前,我先声明几个基本的概念: (1)、对象:在C语言中使用结构体类型、共同体类型、或内部基本类型所定义的变量或常量,就称为对象。对象占据了一块实际的存储器空间,这块空间有固定的起始地址和字节数。 (2)、引用:使用对象有两种方法:“对象名”和“引用”。当你在源代码中定义一个对象时,编译器就会为它分配一块存储器,此时你就可以使用“对象名”来操作该对象。但是对于程序运行时动态分配的某一块存储器空间(对象),你就没法使用“对象名”了,而只能使用“引用”,所以,“引用”就是指向特定类型的
[单片机]
嵌入式系统到嵌入式操作系统
  嵌入式系统是以嵌入式计算机为技术核心,面向用户、面向产品、面向应用,软硬件可裁减的;适用于对功能、可靠性、成本、体积、功耗等综合性能有严格要求的专用计算机系统。   嵌入式系统应具有的特点是:高可靠性;在恶劣的环境或突然断电的情况下,系统仍然能够正常工作;许多嵌入式应用要求实时性,这就要求嵌入式操作系统具有实时处理能力;嵌入式系统和具体应用有机地结台在一起,它的升级换代也是和具体产品同步进行;嵌入式系统中的软件代码要求高质量、高可靠性;一般都固化在只读存储器中或间存中,也就是说软件要求固态化存储,而不是存储在磁盘等载体中。   嵌入式操作系统是嵌入式系统的操作系统。它们通常被设计非常紧凑有效,抛弃了运行在它们之上的特定的应用程序
[嵌入式]
CAN总线车载网络通讯组件的研究和实现
   1 引言   目前,汽车电子正朝着网络化的方向发展,车载网络成为汽车电子领域的最大热点。提高控制单元间通讯可靠性并且降低导线成本的网络总线应用中的关键技术包括CAN、LIN、FlexRey、MOST、IDB1394 等。对于汽车整车厂来说,CAN 网络设计是应用CAN 网络通讯的关键。纵观现有的设计技术,可以将其分为两类:一类是以仿真和测试为主的传统设计方法;另一类是以协议设计为主的方法。传统方法将每个节点对协议的要求拼凑起来,通过仿真、测试的方法检验协议的正确性,最终得到通讯协议。新方法通过系统设计技术,用理论方法对系统的时序建模,分析设计系统的通讯协议,保证系统的实时性能以及协议的正确性,最终发布正确的通讯协议。本文
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved