基于RealView MDK的CAN总线仿真研究

2010年12月08日 20:45    发布者:designer
RealView MDK是ARM公司的产品,被全球超过10万的嵌入式开发工程师验证和使用,是ARM公司目前最新推出的针对各种嵌入式处理器的软件开发工具。RealView MDK集成了业内最领先的技术,包括μVision3集成开发环境与RealView编译器。支持ARM7、ARM9和最新的Cortex-M3核处理器,自动配置启动代码,集成Flash烧写模块,强大的Simulation设备模拟、性能分析等功能。

当前多数基于ARM的开发工具都有仿真功能,但是仅仅局限于对内核指令集的仿真。而RealView MDK的设备模拟器可以仿真整个目标硬件,包括快速指令集仿真、外部信号和I/O仿真、中断过程仿真、片内外围设备仿真等。开发工程师在无硬件的情况下即可开始软件开发和调试,使软硬件开发同步进行,大大缩短开发周期。而一般的ARM开发工具仅提供指令集模拟器,只能支持ARM内核模拟调试。

CAN总线即控制器局域网(Controller Area Net)是一种现场总线,主要用于各种过程检测及控制。CAN最初是由德国BOSCH公司为汽车监测和控制而设计的,目前CAN已逐步应用到其它工业控制中,现已成为ISO-11898国际标准。

1 LPC2378的CAN总线控制器说明

LPC2378是NXP公司推出的ARM7微控制器,它包含有2路独立的CAN模块,其CAN控制器的特点是:兼容CAN规范2.0B,多主机结构,带有无破坏性的位仲裁,由报文标识符(1l位或29位)确定总线访问优先级,可编程的传输速率(高达1Mb/s),多播和广播报文功能,数据长度从0到8字节,强大的错误处理能力,非归零(NRZ)编码/译码,带有位填充。

每个CAN总线控制器包括:APB总线接口、验收滤波器接口、向量中断控制器接口、通用状态寄存器接口,这些接口连接芯片内部;还包括接口管理单元、3个发送缓冲区、2个接收缓冲器、错误管理逻辑单元、位时序逻辑、位流处理。芯片外部外接CAN总线收发器。CAN总线控制器控制着数据的发送和接收。




CAN总线发送数据的过程为:CPU通过内部总线向CAN控制器的发送寄存器里填写需要发的数据,然后启动CAN控制器的发送使能,发送的数据分别经过位流管理器(变成在总线上发送的二进制码)、错误管理逻辑(负责检测总线状态及发送是否出现错误)及位时序逻辑(管理数据在总线上的发送时序)、CAN收发器(负责把位流数据转换成CAN总线够传输的差分电平),这样就完成了一帧CAN数据的发送。

CAN总线的接收与CAN数据的发送是一个相反的过程,当CAN收发器检测到CAN总线上有数据时,CAN收发器把CAN总线上的差分信号转换成位流数据,经过错误管理器及位时序逻辑单元对位数据流和时序进行检查,再经过位流管理器把位流数据转换成字节数据并存放到接收缓冲器中,当一帧数据接收完了之后则由接收缓冲器产生数据接收中断(通知CPU已经接收到一帧新数据),并将产生的各种状态通过状态寄存器的值来表示。

2 系统软件设计

本文所述系统实现的功能为:LPC2378的两个CAN控制模块各作为独立的CAN总线节点,实现它们之间的通信。为构建一个完整的CAN总线仿真环境,软件设计所实现的功能为:仿真一A/D转换通道,A/D转换后的数值传给CAN模块2,CAN模块l接收来自CAN模块2的数据。数据传送通道为A/D转换→CAN2→CANl。

2.1 定义一帧CAN数据的格式









2.2 初始化CAN控制器





2.3 中断服务程序

每当发送完一帧数据,或接收到一帧数据时都触发中断。





2.4 主程序流程图




3 仿真结果

编译并运行程序,打开CAN总线的Communication菜单项,可以看到图3所示的仿真结果。其中Number表示CAN消息的序号;States表示CAN消息的时间戳,它们是使用CPU状态标记的;#表示是哪一个CAN模块;ID表示CAN消息的标识,在发送或接收时使用;Dir表示CAN消息的传送方向;Xmit表示CAN控制器发送消息;Rec表示CAN控制器接受消息;Len表示一帧中数据场长度;data表示所传送的具体数据场。

从仿真结果中可以看出,CAN模块2发送数据(Xmit),CAN模块1接收数据(Rec),数据场长度3个字节,达到了预期的仿真效果。




4 结束语

RealView MDK具有强大的仿真功能,不仅能仿真CAN总线,还能仿真GPIO、I2C、SPI、A/D、D/A转换等。在嵌入式系统的前期开发中,我们可以利用其仿真功能,不受硬件和地点的限制,使硬件和软件的开发同步进行,有效缩短产品的设计开发周期。