基于ARM架构的通信控制器设计
2011-03-13高承志
高承志
(中国电子科技集团公司第二十八研究所)
1 引言
随着网络与通信技术的发展,嵌入式系统已经在很大程度上改变了人们的生活、工作和娱乐方式。同时这项系统也已经在很多产业中得到广泛的应用(例如通信、家用电器等产业),并逐步改变着这些产业[1]。与嵌入式系统相关的设备研究是当前的研究热点。本文介绍了一种基于ARM体系架构的通信控制器的设计。
2 应用场景
该通信控制器的典型应用场景如图1所示。
图1 通信控制器典型应用场景
节点的业务数据经过通信控制器处理后,经过通信网络传到了数据处理中心。在此过程中,通信控制器主要完成数据编解码、用户认证、线路测试等功能。
3 硬件组成
该通信控制器采用 LPC2214作为微处理器,LPC2214为基于ARM7TDMI内核的16/32位RISC处理器,内置PLL锁相环可以设置CPU的工作频率达60MHz,内部带256kB FLASH和16kB RAM。
该通信控制器的硬件平台组成示意图如图 2所示。
图2 通信控制器硬件平台示意图
ARM 是该通信控制器的控制中心,主要功能包括:通过与FPGA交互完成数据编解码的控制;从片外FALSH中读取状态信息;完成对指示灯、智能卡和噪声源的控制;读取拨码开关的值。用户可以通过串口对ARM发送指令从而完成对通信控制器的参数配置、线路测试等功能。ISP(in-system programming)接口用来对ARM芯片内的程序进行插除等操作。
FPGA负责数据传输的编码和解码,映射在ARM外部存储空间的BANK0;片外FLASH主要用来存储状态信息,重新加电后不会丢失,映射在ARM外部存储空间的BANK3。
指示灯主要用于反映通信控制器的当前工作状态。拨码开关主要提供某些工作参数给用户进行手动设置通信控制器的。智能卡主要用来进行用户身份验证。噪声源主要用来产生随机数。
4 软件设计
针对使用的ARM7系列微处理器LPC2214,结合ADS1.2开发环境,通信控制器的软件采用C语言编写。程序根据函数功能不同,分成不同的文件,采用模块化设计。
4.1 ADS1.2开发环境
ADS集成开发环境是ARM公司推出的ARM核微控制器开发工具,开发使用较为成熟的版本ADSl.2。
ADSl.2由六个部分组成,分别是:代码生成工具、集成开发环境、调试器、指令模拟器、ARM 开发包和 ARM 应用库[2]。用户一般直接操作的是CodeWarrior IDE集成开发环境和AXD调试器。
4.2 软件总体架构
通信控制器的软件总体架构如图3所示。
处理器的启动程序负责ARM 处理器的初始化,初始化完成后进入用户主程序。用户主程序的功能主要包括设备参数初始化及外设控制等。当有外部中断或者定时器中断产生时,根据处理器启动程序的设置,会自动调用相应的函数进行处理。
图3 通信控制器软件总体架构
4.3 ARM处理器的启动程序
为了能够进行ARM处理器初始化,采用一个汇编文件作启动代码是最常用的做法,它可以实现向量表定义、堆栈初始化、系统变量初始化、中断系统初始化、i/o初始化、外围初始化、地址重映射等操作。
在本系统软件开发中,使用了 LPC2214专用工程模板,该工程模板使用了ADS的分散加载机制,只要编辑相应的分散加载描述文件,即可将代码段、数据段分别定位到指定地址上。ARM处理器复位后,如果处于正常启动模式,模板中的启动代码部分即可被自动运行,执行ARM处理器的初始化并进入用户主函数。
4.4 用户主函数
用户主函数主要完成对外设的初始化及自检,系统参数的设置等功能。主函数包含的主要内容如下:
4.4.1 片外FLASH的使用
本系统中使用的片外FLASH总大小为4M字节,每扇区大小为4k字节,数据长度也是16位。按照芯片的使用规则,必须首先对要写入的地址所在扇区进行擦除操作,然后写入相应的数据才有效。擦除扇区数据的示例程序如下:
写入数据步骤的前两个周期相同,第三个周期向地址0x5555写入数据0xA0A0,第四个写周期则可以向相应地址写入有效数据。从片外FLASH中读数据时对相应的地址进行读取即可。
4.4.2 指示灯控制
通信控制器前面板的每个指示灯具有两种颜色,分别由LPC2214芯片的两个GPIO引脚来控制。使用GPIO引脚来控制指示灯时需要先配置引脚为输出状态,然后控制GPIO引脚输出高电平点亮指示灯。对指示灯操作的示例程序如下:
4.4.3 智能卡
对智能卡的操作利用LPC2214芯片的I2C接口来实现。
首先需要对I2C接口进行初始化,示例程序如下:
接着需要设置I2C中断允许。LPC2214的向量中断控制器具有32个中断请求输入,可以将其编程分为3类:FIQ、向量IRQ和非向量IRQ。快速中断请求(FIQ)具有最高优先级,向量IRQ中断具有中等优先级,非向量IRQ中断的优先级最低。中断设置示例程序如下:
然后当I2C中断发生时,可以通过判断I2C状态寄存器I2STAT的情况来进行相应的操作,比如读取I2C数据寄存器I2DAT中的内容,从而读取到智能卡中的信息。
4.4.4 噪声源
噪声源芯片的原理是当CLK引脚输入符合要求的时钟信号时,DATA引脚随机输出高低电平。实际使用中将LPC2214芯片的PWM5输出引脚接到噪声源的CLK输入引脚上,DATA引脚接到GPIO(P0.22)上。脉宽调制器初始化的示例程序如下:
4.4.5 拨码开关
拨码开关分别连接到了LPC2214芯片的GPIO引脚上。可以通过设置GPIO引脚为输入状态,然后读取引脚的值来获取拨码开关的当前值。示例程序如下:
4.4.6 与FPGA交互数据
由于 FPGA映射在 ARM 外部存储空间的BANK0,因此对FPGA的操作只需要对BANK0中对应的地址进行读写即可。需要注意的是FPGA的数据长度为16位,所以每次操作FPGA的数据长度也为16位。
4.4.7 串口功能
利用LPC2214芯片的UART0接口实现了通过串口对ARM进行控制。UART0接口的初始化示例程序如下:
接着需要设置UART0对应的中断向量。
当UART0收到数据时,会产生中断,然后启动中断服务程序读取接收缓存寄存器 U0RBR中的数据。UART0发送数据可以通过向发送器保持寄存器U0THR写入数据来实现。
4.4.8 定时器和外部中断
LPC2214芯片包含两个定时器。定时器对外设时钟(pclk)周期进行计数,根据4个匹配寄存器的设定,可设置为匹配时产生中断或执行其他动作。可以利用定时器产生中断定期对通信控制器进行操作。
此外 LPC2214还提供了 4个外部中断接口(ENT0~ENT4),外围设备可以通过连接到外部中断接口产生中断来通知ARM处理发生的事件。
4.5 编译调试
编写完用户程序后可以在CodeWarrior IDE集成开发环境中进行编译连接。如果编译连接通过,可以使用 JTAG仿真器连接到通信控制器上的 LPC2214芯片,然后使用AXD调试器调试。
调试通过的程序就可以通过JTAG接口或者使用ISP功能固化到LPC2214的片内FLASH中使用了。
5 结束语
随着嵌入式系统的发展,嵌入式微处理器的应用也越来越广泛。ARM 体系架构的嵌入式处理器以其明显的性能优势、丰富的接口、较高的性价比、较低的功耗等特点,在通信技术领域以及物联网、个人电子消费品等新兴技术领域均得到了广泛的应用。
[1]周立功等.ARM 嵌入式系统基础教程[M].北京:北京航空航天大学出版社, 2005:30.
[2]周立功等.ARM 嵌入式系统实验教程(一)[M].北京:北京航空航天大学出版社, 2004:31.