3 下位机的软件设计
软件模块包括串口控制程序、A/D数据采集、无线模块收发控制、LCD更新显示控制、定时器控制和按键扫描输入控制部分。
由于下位机工作模式简单,出于精简代码量以及程序稳定性的考虑,未在控制器中使用操作系统等复杂的进程调度机制。下位机上电后直接运行主程序,完成初始化过程之后进入主循环,接收上位机发送的命令并据此进行相关操作。对于实时性要求较高的数据采集、LCD屏显示更新和键盘扫描任务,则在定时器中断服务程序中完成。
主程序主要包括系统初始化(初始化MCU、总线、I/O端口、LCD、A/D、参数、串口等)、无线数传模块设置(读取并设置地址和身份码)、显示开机画面、开定时器中断、接收串口数据、数据校验和发送数据。中断控制程序包括键盘扫描、判断键值响应按键、模拟量和数字量采样以及按照协议将数据填充到发送数组。
3.1 对LCD显示屏的控制
ARM系统使用12个I/0端口控制内置SED1335控制器的显示屏。其中4个端口为控制命令端口,8个端口为数据端口,端口控制信号图如图3所示。
AT91SAM7S64并行输入输出控制器(PIO)管理多达32个全可编程I/O线。对于LCD显示屏的控制,实际上是根据SED1335控制器的时序进行操作,即通过PIO控制器控制并行数据输出。
程序的具体实现就是先总线初始化,配置控制LCD的8条数据总线和4条命令总线,设置外围设备时钟使能寄存器(PCER)、上拉禁止寄存器(PPUDR)、多驱动禁止寄存器(MDDR)、输入滤波禁止寄存器(IF—DR)、输出写使能寄存器(0WER)、PIO使能寄存器(PER)、输出使能寄存器(OER)和输出数据寄存器(S0一DR)。
3.2 对无线数传电台模块的控制
AT91SAM7S64的USART,支持与使能由发送器到接收器的数据传输的外设数据控制器的连接,可管理多类型串行同步或异步通信。推焦车上的下位机通过USART口同无线数传电台模块通信,控制电台接收和发送数据,相关接口的核心芯片是MAX3232EEA,具体电路如图4所示。
串口的初始化包括初始化外设I/0,使能时钟,配置串口工作模式(如波特率)等,使能串口;串口接收采用超时接收,其含义是:当串口收到1字节的数据后,若在一定时间间隔内收到另外1字节数据,则可认为后1字节同前1字节为同一包数据中的内容,若在一定时间间隔内未收到数据,则认为此包数据接收结束。这时,串口状态寄存器的相应位置1,通过查询状态寄存器该状态位的值可判断是否接收结束。串口数据发送只要设置好发送数据寄存器和发送数据计数器,即可开始发送。
3.3 系统中定时器的作用
本系统通过AT91SAM7S64的定时器/计数器模块控制数据采集周期、按键扫描和LCD更新。AT91SAM7S64定时器/计数器(TC)包括3个相同但相互独立的16位定时器/计数器通道。
每个通道有3个外部时钟输入,5个内部时钟输入及2个可由用户配置的多功能输入/输出信号。每个通道驱动一个可编程内部中断信号来产生处理器中断。定时器/计数器有2个作用于这3个通道的全局寄存器。块控制寄存器允许使用同样的指令同时启动3个通道。块模式寄存器为每个通道定义外部时钟输入,允许将它们连接。另外,每个通道有一个16位寄存器,寄存器值在所选时钟每个上升沿处自减,当计数器达到0xFFFF并转为0x0000时,表明发生溢出,TC_SR(状态寄存器)中COVFS位置1。