微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于LPC2119和μC/OSII 的CAN中继器设计

基于LPC2119和μC/OSII 的CAN中继器设计

时间:10-08 来源:互联网 点击:

基于提高CAN总线组网能力的考虑,提出一种新颖的CAN中继器设计方法;阐述以LPC2119控制器为核心的硬件设计方案;详细分析在μC/OSII实时操作系统下的软件实现过程;针对中继器的实时性和安全性以及总线与总线之间可能存在的速度不匹配的问题,确立提升紧急任务优先级、建立相关事件标志、合理地对事件与任务进行同步的改进方法,从而有效地解决组网中最远传输距离和最大节电数限制的问题。

引 言

CAN总线的直接通信距离只有10 km左右,而且由于收发器驱动能力的限制,总线上最多只能挂110个节点,给系统组网带来一定的困难。CAN中继器就是为了解决这个问题而设计的。由于中继器具有数据转发功能,不仅可以扩大通信距离,还可以增加节点的最大数目。对CAN中继器初始化参数进行设置,可以在不同的网段内采用不同的通信速率,还可以对报文进行过滤,减轻总线负担。

1 CAN中继器的硬件设计

1.1 微控制器LPC2119简介

CAN中继器是以ARM微控制器LPC2119为核心的软硬件系统。LPC2119是Philips公司生产的一款基于支持实时仿真和跟踪的16/32位ARM7TDMISMCU,带有128 KB嵌入的高速Flash存储器。独特的加速结构使32位代码能够在最大时钟速率下运行。对代码规模有严格控制的应用可使用16位Thumb模式将代码规模降低超过30 %,而性能的损失却很小。LPC2119内部集成2个CAN控制器。它的主要特性有:单个总线上的数据传输速率高达1 Mb/s;32位寄存器和RAM访问;兼容CAN 2.0B, ISO 118981规范;全局验收滤波器可以识别所有的11位和29位Rx标识符;验收滤波器为选择的标准标识符提供Full CANstyle自动接收。

1.2 LPC2119内部CAN控制器与SJA1000比较

LPC2119内部集成的CAN控制器与Philips公司的SJA1000 CAN控制器相比较大致相同,只是在验收滤波这一环略有不同,这为习惯SJA1000的开发人员采用LPC2119提供了方便。SJA1000验收滤波器由验收代码寄存器和验收屏蔽寄存器定义,要接收报文的位模式在验收代码寄存器中定义,相应的验收屏蔽寄存器允许定义某些位为“无关”,通过模式寄存器可以选择不同的过滤模式:单过滤模式和双过滤模式。

而对LPC2119内部集成的CAN控制器,全局验收过滤器包含一个512×32(2 KB)的RAM,通过软件处理,可在RAM中存放1~5个标识符表格,整个RAM可容纳1024个标准标识符或512的扩展标识符或两种类型混合的标识符。同时有5个地址寄存器指向验收过滤器RAM的表格:Full CAN标准地址,标准单个地址,标准地址范围,扩展单个地址或扩展地址范围。当CAN控制器的接收端已接收到一个完整的标识符时,它将通知验收过滤器,验收过滤器响应这个信号,并读出控制器编号、标识符尺寸,以及来自控制器本身的标识符,然后通过验收过滤器搜索RAM中的表格,以决定接收或放弃这一帧信息。

1 .3 CAN中继器硬件结构

中继器的硬件结构框图如图1所示。LPC2119分别通过CAN总线收发器与两路总线相连;总线驱动器采用带隔离的DC/DC模块单独供电,不仅实现了两路CAN接口之间的电器隔离,也实现了中继器与CAN总线的电器隔离。除此之外,还有LED显示和键盘接口。LED用于显示中继器的工作状态,键盘用来修正总线的波特率。最终程序的调试与跟踪通过JTAG调试口完成。

图1硬件结构框图

2 系统软件设计

2.1 引入μC/OSII实时操作系统

随着应用的复杂化,采用传统前后台设计方法,会显得过于复杂,实时性得不到保证,而且容易发生死锁。解决这些问题的最好方法就是采用实时操作系统。

μC/OSII完全是占先式的实时内核, 是基于优先级的, 即总是让就绪态中优先级最高的任务先运行, 因此实时性比非占先式的内核要好。 它包含了实时内核、任务管理、时间管理、任务间通信同步(信号量、邮箱、消息队列) 和内存管理等功能; 它的绝大部分代码是用C 语言编写的, 可移植性强, 可以在绝大多数8 位、16 位、32 位以至64 位微处理器、微控制器、数字信号处理器(DSP) 上运行。

CAN中继器对系统的实时性和可靠性要求比较高。采用μC/OSII实时操作系统可以有效地对任务进行调度;对各任务赋予不同的优先级可以保证任务及时响应,而且采用实时操作系统,降低了程序的复杂度,方便程序的开发。

2.2 软件设计中需考虑的问题

(1) 使用代码的容量

在前/后台系统的设计中,对存储器容量的需求仅仅取决于应用程序代码,而使用RTOS的情况则很不一样。RTOS 内核本身需要额外的代码空间。

总代码量=应用程序代码+内核代码

每个任务都是独立运行的,必须给每个任务提供单独的栈空间(RAM)。在决定分配给每个任务多少栈空间时,应

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top