基于LPC2131嵌入式系统的CAN模块设计与实现

发布者:落寞梦惊最新更新时间:2006-10-18 来源: 电子产品世界关键字:处理器  传输  ARM 手机看文章 扫描二维码
随时随地手机看文章
随着信息技术技术的飞速发展, 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的模式。

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

图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的初始化模块
在开始通讯之前,首先要在SJA1000的各个功能寄存器进行设置,包括模式寄存器,波特率,时钟分频器,中断使能寄存器,,滤波寄存器,输出控制寄存器。

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();
}

·数据接受模块

  根据电路图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)
{
uint8 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通讯软件开发,该设计现已在工厂车间中的分布式监控系统中得到了应用,运行可靠、稳定。

参考文献:

1.Jean J.Labrosse 著,MicroC/OS-II The Teal-Time Kernel(SecondEdition) 邵贝贝等译.“嵌入式实时操作系统uC/OS-II(第二版)”,北京航空航天大学出版社,2003年5月
2.杜春雷,“ARM 体系结构与编程”,清华大学出版社,2003
3.LPC2131/LPC2132/2138 Product data,Philips Semiconductors.2004
4.SJA1000 Datasheet,Philips Semiconducto-rs. 1999


关键字:处理器  传输  ARM 引用地址:基于LPC2131嵌入式系统的CAN模块设计与实现

上一篇:基于LPC2131嵌入式系统的CAN模块设计与实现
下一篇:基于嵌入式系统的CAN模块设计与实现

推荐阅读最新更新时间:2024-05-02 20:26

ARM嵌入式系统中断向量表的动态配置
摘要:通常32位ARM嵌入式系统的中断向量表是在程序编译前设置好的,每次编写中断程序都要改C程序的汇编启动代码,相当繁琐。本文给出一种配置ARM中断向量表新方法。该方法比通常方法仅增加一条指令执行时间,简便高效,功能完备,向量表在运行时动态生成,C程序可以使用固定向量表的启动代码,并可隐藏起来。 关键词:动态配置 嵌入式系统 ARM 中断向量表 一般32位ARM嵌入式系统的中断向量表是程序编译前设置好的。在编写32位ARM嵌入式系统的中断服务程序、设置和修改ARM体系结构的中断向量表时,常感到相当麻烦,不得不修改汇编代码,对不喜欢使用汇编代码编程的程序员尤其如此。当需要在程序运行过程中动态修改中断向量的程序时会感到更为不便,
[应用]
iSuppli公布第二季全球微处理器市场份额
  iSuppli今天发表报告称,2010年第二季度的全球微处理器产业实现了高速增长,但是Intel、AMD这对老冤家基本维持了各自的市场份额。 厂商 2010Q2 2010Q1 同比增幅 2009Q2 环比增幅 Intel 80.4% 80.3% 0.1% 80.7% -0.3% AMD 11.52% 11.70% -0.18% 11.48% 0.04% 其他 8.1% 8.0% 0.1% 7.8% 0.3%   注:这里所谓的微处理器包括x86、RISC和其他架构的通用目的处理器,并不仅限于PC x86市场。   
[半导体设计/制造]
展讯获ARM实体IP技术授权 开发28nm芯片
    ARM(ARMH-US)近日与晶片厂展讯(SPRD-US)共同宣布,展讯取得ARM POP处理器优化套件IP在内的完整ARM Artisan实体IP技术授权,此后展讯将能就ARM所支援的广泛IC代工选择以及多样化的28奈米制程,开发出最富有弹性的制造方案。 ARM指出,在这项授权协议之下,展讯可使用ARM Artisan标准单元、新一代记忆体编译器及针对ARM Cortex处理器与Mali图形处理器的POP处理器优化套件IP,ARM Artisan实体IP及POP IP将为展讯低功耗手机系统单晶片(SoC)的加速开发奠定基础。 ARM表示,透过提供针对28奈米制程的完整实体IP平台,ARM能协助客户发展更多元化的应用如手机
[手机便携]
一种基于ARM的图像采集与蓝牙传输系统设计
嵌入式Linux系统具有可移植性好、网络功能强、优秀的GNU编译工具、免费的开放源代码等优点。S3C2410处理器是一款采用ARM920T结构,内部资源非常丰富的32位嵌入式处理器。USB摄像头具有低廉的价格,良好的性能,加上Linux下有V4L支持对其编程,很容易集成到嵌入式系统中。蓝牙技术是目前被认可的短距离无线通信技术,广泛应用于手机、电脑以及汽车免提系统。 本文介绍基于嵌入式Linux的USB图像采集系统,并通过构建好的嵌入式Linux下的蓝牙环境将采集到的图片传送到蓝牙手机上,实现监控功能。 1 软硬件平台概述 系统硬件平台如图1所示。该平台软件上采用嵌入式Linux操作系统;硬件上采用Samsung公司的S
[单片机]
一种基于<font color='red'>ARM</font>的图像采集与蓝牙<font color='red'>传输</font>系统设计
Nvidia携手ARM攻占超级电脑市场
绘图处理器大厂Nvidia周一(6/23)宣布,已有多家伺服器业者打算利用Nvidia GPU加速器的效能推出全球首批基于64位元ARM开发系统的高效能运算产品。 Nvidia说明,ARM的64位元伺服器处理器原本专为微型伺服器或网站伺服器所设计,但搭配Nvidia的CUDA 6.5平行编程平台的GPU加速器后,就能处理超级电脑等级的任务,让伺服器制造商能够最大化ARM架构的省电能力与系统配置,同时打造出高效能的运算系统。 在行动处理器市场打下江山的ARM逐步将触角伸向伺服器市场,支持ARM架构的处理器业者AMD曾预测,ARM伺服器在2017年可望取得10%的市占率,到2019年更将攀升至20~25%。 首批基于GPU加速器
[手机便携]
基于ARM9和MPC56x的燃料电池发动机主控制器
随着清洁能源需求的增加,燃料电池发动机及其在汽车动力系统中的应用越来越重要。燃料电池按电化学原理直接将等温的化学能转化为电能。由于不受热机卡诺循环的限制,目前各类燃料电池实际的能量转化率均可达40%~60%;燃料电池环境友好、工作安静、噪声很低。燃料电池发动机由空气系统、氢气系统、水热管理系统、增湿系统和电堆等几部分组成,其结构如图1所示。 1 分布式燃料电池发动机控制系统 针对燃料电池发动机的上述要求,清华大学和大连化学物理研究所合作,研制了分布式燃料电池控制系统。整个系统以燃料电池发动机主控制器为核心,包括了2个发动机的独立控制子系统,每个发动机控制系统包括电堆控制器节点、增湿控制器节点、风机控制器节点以及4
[工业控制]
基于<font color='red'>ARM</font>9和MPC56x的燃料电池发动机主控制器
跑分23万 新款iPad Pro成最强生产力工具
  苹果在今年6月份的WWDC大会上,发布了目前iPad线的最强硬件,iPad Pro 的10.5英寸版本。除了外观上的变化,在集成了苹果的核心科技硬件后,其配备的A10X处理器在安兔兔跑分已经来到23万,是目前分数最高的一款芯片。即使是上一代iPhone7的A10处理器,综合性能跑分也只在18万上下浮动,更别说只有17万分的骁龙835了。   A10X处理器目前只应用再新款iPad Pro,这款新平板有10.5和12.9英寸两个版本,目前苹果官网售价是5188和6388起步,对于一线的苹果产品,这个价格还算可以接受。当你使用时,相比上一代的iPad Pro感受差别相当明显。   这里我们拿10.5英寸版本来做比较。外观上其
[手机便携]
摩托罗拉Moto G42亮相Geekbench:搭骁龙680 4G处理器
摩托罗拉正准备很快推出两款高端手机:摩托罗拉 Razr 3 和摩托罗拉 Frontier,后者已确认将配备 2 亿像素摄像头和骁龙 8 Plus Gen1 芯片组。除了这些高端新品外,该品牌也在准备一些经济型新品,即将推出的 Moto G42 现在已经在 Geekbench 数据库中被发现,相关配置曝光。   IT之家了解到,Moto G42 已经出现在 Geekbench 上,主板部分提到了“hawao”的代号,这应该是骁龙 680 4G 芯片组,四个性能核心的频率为 1.9GHz,四个效率核心的频率为 2.4GHz。   Moto G42 在单核测试中获得 376 分,在多核测试中获得 1538 分,信息显示其将预装安卓
[手机便携]
摩托罗拉Moto G42亮相Geekbench:搭骁龙680 4G<font color='red'>处理器</font>
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

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

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