西安欧亚学院本科毕业论文(设计)
3 应用模块
3.1 存储器
存储器是构成嵌入式系统硬件(处理器、存储器、I/O电路)的重要做成部分。设计嵌入式系统的存储器时需要考虑许多因素:有的嵌入式控制器集成了存储器,一般不需要额外扩展,甚至有的嵌入式控制器无法扩展;有的嵌入式微处理器片上没有存储器,必须外部扩展;有的嵌入式处理器片上集成了一定数量的存储器,可以满足一定的需要,如果软件占用空间比较大,可能需要扩展存储器,所以整个存储器系统由片上片外两部分组[6]。
RAM空间 ROM空间 EEPROM 图3-1 嵌入式系统典型的存储空间分配示意图
? 随机存储器RAM
这种存储器之所以称之为随机存储器(RAM),是因为任一存储单元的数据可以以任一顺序而非固定顺序被访问(读/写)。
在RAM中有两种重要的存储元件:SRAM(静态RAM)和DRAM(动态RAM)。它们之间的主要差别是存储于其中的数据的寿命长短。SRAM只要是芯片有就会保留其中的内容,但如果切断了电源或者是暂时断电了,其中的内容就会永久的丢失;DRAM只有极短的数据寿命,通常不超过0.25s,即使是在连续供电的情况下也是如此。因此使用DRAM时,需要配合SRAM控制器,对DRAM进行周期性刷新或再生[6]。
? 只读存储器ROM
ROM家族中的存储器是按照向其写入或更新数据的方法(通常叫作编程)及其可以从写的次数来区分的,其中包括不可擦除型。
通常,系统开发过程中常用的是可擦除型只读存储器。可一次编程的只读存储器通常与处理器集成在一起。
快闪存储器FLASH是存储器技术最新的发展结果,具有高密度、低价格、非意失性、快速读取以及电气可重编程等特点,在嵌入式系统中的使用迅速增长。
嵌入式系统中使用FLASH有两种形式,一种是嵌入式处理器上集成了FLASH,
5
西安欧亚学院本科毕业论文(设计)
另一种是片外扩展FLASH。
3.2 系统控制模块
一个ARM芯片中通常有很多功能部件,其中有一些是独自工作的,不会对其他部件产生影响,比如UART接口、I2C接口等。而有一些部件的影响是全局性的,它们的状态改变时可能引起整个系统运行状态的改变,这些部件如表3-1所列。
表3-1 系统控制模块名称及简介 部件名称 晶体振荡器 复位 存储器隐射控制 锁相环(PLL) VPB分频器 功率控制 唤醒定时器 功能简介 通过外外结晶振或时钟源为系统提供时钟信号 复位使ARM内核与外设部件进入一个确定的初始状态 控制异常向量表的重新映射方式 将晶体振荡器输入的时钟倍频到一个合适的时钟频率 将内核时钟与外设时钟分开的部件 使处理器空闲或者掉电,还能关闭指定的功能部件,以降低芯片功耗 系统上电或掉电唤醒后,保证晶体振荡器能输出稳定的时钟信信号 时钟系统是计算机系统的脉搏,处理器核在一拍接一拍的时钟驱动下完成指令执行、状态变换等动作。外设部件在时钟的驱动下进行着各种工作,比如串口数据的收发、A/D转换、定时器计数等[7]。因此时钟对于一个计算机系统是至关重要的,通常时钟系统出现问题也是最致命的,比如振荡器不起振、振荡不稳、停振等[7]。
时钟系统包括4个部分,分别为晶体振荡器、唤醒定时器、锁相环(PLL)和VPB分频器。其中“晶体振荡器”为系统提供基本的时钟信号。当复位或处理器从掉电模式被唤醒时,“唤醒定时器”要对输入的时钟信号做计数延时,使芯片内部件有时间进行初始化。接下来Fosc信号被PLL提高到一个符合用户需要的频率(Fcclk),Fcclk用于CPU内核。因为CPU内核通常比外设部件的工作速度要快,所以用户可以设置VPB分频器,把Fcclk信号降低到一个合适的值Fpclk,该信号用于外设部件。
3.3 UART模块
3.3.1 主要寄存器描述
UART是异步通信收发器的简称,遵守工业异步通信标准。目前大多数嵌入式处理器都配了UART接口,有的处理器上称为SCI。异步通信允许处理器之间的通信不使用公共的参考时钟。通信的双方使用相同的波特率,数据发送和接收的单位是帧。
6
西安欧亚学院本科毕业论文(设计)
帧由一系列在通信线上传输的位组成[8]。
UART的特性:
? 16字节接收FIFO和16字节发送FIFO。 ? 寄存器位置符合16C550工业标准。
? 接收器FIFO触发点可为1、4、8和14字节。 ? 内置波特率发生器。
? UART1含有标准调制解调器接口信号。 3.3.2 编程结构
UART的编程结构通常包括发送寄存器、接收寄存器、模式寄存器、状态寄存器、控制寄存器和波特率发生器等;如果串行接口模块支持同步通信方式,则还会包含同步字符寄存器等。对于高性能的UART模块,发送寄存器和接收寄存器可能被多个字节的发送缓冲区和接收缓冲区所取代,以最大限度地减少处理器内核的负担[8]。
U0RBR是UART0RxFIFO的最高字节,是UART0接收FIFO的出口,如图3-3所示。它包含了最早接收到的字符,可通过总线接口读出。LSB(bit0)代表最早接收到的数据位。如果接收到的字符小于8位,未使用的 MSB填充为0。
如果要访问U0RBR,U0LCR的除数锁存访问位(DLAB)必须为0。U0RBR为只读寄存器。
由于PE、FE和BI位与RBRFIFO顶端的字节相对应(即下次读RBR时读出的字节),因此,将接收的字节及其状态位成对读出的正确方法是先读U0LSR寄存器的内容,再读U0RBR的字节[9]。
图 3-2 接收FIFO16字节
U0THR是异步串行通信0口Tx先进先出的高字节, UART0发送FIFO的入口。我们可以用总线接口写入TxFIFO中最近的字符 [9]。
7
西安欧亚学院本科毕业论文(设计)
假如访问U0THR,U0LCR的除数锁存访问位(DLAB)要置为0。U0THR为只能写入的寄存器。
图3-3 发送FIFO16字节
其中PCLK为外围时钟,U0DLM和U0DLL为标准的异步串行通信T0波特率除数寄存器,DIVADDVAL和MULVAL为异步串行通信T0规定的值[10]。MULVAL和DIVADDVAL的参数值应具备[11]:
? 0<MULVAL≤15 ? 0≤DIVADDVAL≤15
如果U0FDR寄存器的数值不满足以上条件,则会引起小数分频后输出未定义。如果DIVADDVAL为0,就不会被分频。
UART0可以使能4个UART0中断源,操作示例: U0IER = 0X01;//使能RBR中断,即接收中断。
U0IIR提供状态代码用于指示一个挂起中断的中断源和优先级。在访问U0IIR过程中中断被冻结。如果在访问U0IIR时产生了中断,该中断被记录,下次U0IIR访问可读出[11]。
3.4 实时日历时钟RTC
日历时钟主要包括日历数据(年、月、日)和时钟数据(时、分、秒)。目前大多数嵌入式系统的日历时钟采用专用的日历时钟芯片实现,有的时钟芯片需要外接电池,也有的时钟芯片与电池组装在一起,形成模块电路,即使系统掉电,凭借电池也可以维持日历时钟芯片准确的运行。 3.4.1 概述
内部的RTC实时日历时钟模块需要以外部晶振来提供时钟源,并且可以在系统关闭的情况下运行计时,具有闰年产生器、报警功能和时钟节拍中断等功能。
内部实时日历时钟RTC模块,在系统电源掉电的情况下,支持备用电池供电,
8