1、基于 ARM11的多路信号采集及发送系统设计及实现 1. 绪论 当今嵌入式系统 ARM 微处理器发展迅速,这是一种 RISC 架构下嵌入式系统的核心部件,被广泛地应用到工业控制、无线通讯、消费类电子产品等很多领域。 它的指令系统相对简单,它只要求硬件执行很有限且最常用的那部分指令,大部分复杂的操作则使用成熟的编译技术,由简单指令合成。 此次课设利用 ARM11_S36410 及其外围扩展板设计一个嵌入式系统,可通过对 ARM 植入操作系统或者利用 ARM 单片机特性实现部分功能。首先研究 ARM系统可扩展的电路,根据元器件判断扩展板可实现的功能,其次查询手册,根据外围电路与芯片引脚硬件电路编写
2、程序,最后根据实物测试判断是否实现了功能。 我使用的是 ADS1.2 编写程序,对电路实现了串口, PWM 驱动蜂鸣器, AD转换等功能,经过测试表明,功能基本上都达到要求。 2. 原理分析 2.1 UART接口 串行通信是一种将接受来自 CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给 CPU的通信方式。 UART 是通过产生一个中断或 DMA请求 ,在 CPU 和 UART 之间传输数据的。 每个 UART包含两个 64-byte FIFOs用于发送和接收数据。通过配置相关寄存器 , 我们可以设置通信的 波特率、数据位、停止位和奇偶校验
3、位 。 发送数据之前,首先将数据写入 FIFO 存储器 ,然后复制到发送移位寄存器。通过发送数据的引脚( txdn)将数据发送,同时,通过数据接收的引脚( rxdn)将接收到的数据从接收移位寄存器复制到 FIFO 存储器。 如下图所示: 图 1 UART发送接收状态图 2.3 按键中断 外部中断源控制器 EINT 一共被分为 9 个组,每组里面对应不同的 IO 管脚,S3C6410 芯片 共有 127 个外部中断,每个引脚都可以产生一个外部中断。 ARM 的总中断控制器 是 VIC, 包括 VIC0 和 VIC1,联合起来控制了 64 个中断源,每个 VIC 控制 32 个,我们可以找到了与外
4、部中断有关的 127 个外部中断在VIC 里的中断号的对应关系。外部中断组 0 的 27 个中断占用了 VIC 里的 4 个中断号,外部中断组 1-9 只占用了 1 个中断号。我们测试板 的 按键 中断 如下: 图 2 按键中断对应图 2.3 PWM PWM即脉冲宽度调制 , 是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。 PWM控制技术主要应用在电力电子技术行业,具体讲,包括风力发电、电机调速、直流供电等领域 。 S3C6410微处理器有五个 32 位定时器,用来产生内部中断到 ARM子系统。定时器 0, 1, 2 和 3 各包含一个 PWM 功能,可驱动外部的 I/O信
5、号。 每个定时器有自己的 32位向下计数器,被定时器时钟驱动。下数计数器是最初被加载来自定时器计数缓冲寄存器( TCNTBn)。当下数计数器达到零,定时器产生中断请求通知 CPU,定时器操作完成。当定时器下数计数器达到零,相应的 TCNTBn 能被自动重新进入下数计数器的下一个周期的开始。然而,如果定时器停止,通过清除定时器的使能位 TCONn , TCNTBn 的值将不被加载到计数器中 。 PWM使用 TCMPBn 寄存器的值,当下数计数器的值匹配于定时器控制器逻辑中的比较寄存器的值时,定时器控制器逻辑改变输出标准。故比较寄存器决定一个PWM 输出的打开时间(或关闭时间)。 图 3 PWM定
6、时器结构图 2.4 AD 转换 AD 转换就是模数转换。顾名思义,就是把模拟信号转换成数字信号 。 S3C6410 微处理器 具有 10 位 CMOS 的 ADC (模数转换器) ,它是 是一种循环类型的装置,具有 8 位通道模拟输入。它将模拟的输入信号转换成 10 位二进制数字编码,最大转换率是 500KSPS 和 2.5MHz 的 ADC 时钟。 ADC 转换器的操作带有片上采样保持功能。电源中断模式的支持。 S3C6410 微处理器 的 ADC 及触摸屏 模块是共用的。 当触摸屏装置被使用,触摸屏的 I/F, XM 或 YM 只接地。当触摸屏的装置未被使用,为正常 ADC 转换,XM 或
7、 YM 是连接模拟输入信号的。 该模块具体功能框图见下图: 图 4 ADC 和触摸屏接口的功能结构框图 3 程序 设计 3.1 串口模块 本程序是用串口通道 0进行串口通信,分别使用 IO 口 A0、 A1作为 RXD和 TXD。进行串口通信前,先初始化 串口 ,要配置寄存器 ULCON0、 UCON0、 UFCON0、 UMCON0来设置串口通信模式,配置寄存器 UBRDIV0 和 UDIVSLOT0 来设置波特率。进行串口通信时,直接读取或者写入相应缓冲寄存器即可。本模块代码见附录 1,具体流程如下图: 图 5 串口模块流程图 3.2 按键中断模块 本程序共设置了 8 个按键中断,按键 I
8、O 口分别是 N0-N5和 L11、 L12,分别对应 EINT0-5 和 EINT19-20。初始化外部中断时,先配置 IO 口,再通过配置寄存器 EINT0CON0、 EINT0CON1、 EINT0MASK、 EINT0PEND 来设置外部中断模式,配置寄存器 VICxINTENCLEAR、 VICxINTSELECT 和 VICxADDRESS 等来设置总中断。本模块代码见附录 2,具体初始化流程如下图: 图 6 按键中断初始化流程图 当发生外部中断时,系统自动进入中断处理程序,先检查按键值,在根据按键值进行相应操作,最后清除中断标志后回到主程序。具体中断处理见下图: 图 7 按键中断
9、 处理 流程图 3.3 PWM 模块 本程序通过 GPF14 口产生 PWM 波来驱动蜂鸣器发声,改变 PWM 波的频率可以改变蜂鸣器发声频率。初始化 PWM 模块时,先配置 IO 口,再通过配置寄存器 TCON来设置定时器开启与关闭,配置寄存器 TCFG0、 TCFG1 来设置定时器时钟,配置寄存器 TCNTB0、 TCMPB0 来设置定时器计数值。本模块代码见附录 3,具体初始化流程如下图: 图 8 PWM 模块 初始化流程图 3.4 AD 转换模块 本程序通过端口 AIN0 来接收模拟信号,通过调节开发板上的可调电阻W1 可以调节输入电压,通过配置寄存器 ADCCON 可以设置 ADC 工作模式,也可以读取 ADC 工作状态,通过寄存器 ADCCON 可以读取 AD 转换的值。本模块代码见附录 4, AD 转换流程如下图: 图 9 AD 转换 流程图 3.5 主程序 主程序开始后,先初始化端口以及串口、 AD 转换等模块,然后通过串口发送欢迎字符和菜单,再初始化外部中断,在进入无限循环,等待串口输入命令,并处理命令,同时等待按键中断发生。 本模块代码见附录 5, 具体程序流程见下图: 图 10 主程序 流程图 4.测试结果 4.1 串口发送与接收结果 串口发送数据与接收命令字符结果如下图: