微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 基于ARM 的红外光汽车速度管理系统研究

基于ARM 的红外光汽车速度管理系统研究

时间:01-30 来源: 点击:

存储器数据线D0 至D7, DB8 至DB15 接VDD,实现与LPC2294 的8 位数据总线连接;其硬件配置由两片高速CMOS 静态存储器IS61C1024对S1D13503 的VD0 至VD15 来完成。四线电阻式触摸屏可检测到触摸信号并通过触摸屏控制器FM7843 将模拟信号转换为位置坐标数据,传递给LPC2294 进行处理[3]。

  3 系统软件设计

  3.1 uclinux 系统移植

  虽然当前 uclinux 已经支持无MMU 的ARM 体系结构,但由于具体使用的ARM 处理器芯片存储系统不同、片内的外设不同、中断系统也不同,因此需添加或修改LPC2294 芯片相关的具体代码[6]。包括:添加芯片型号、启动代码和描述机型的数据结构;修改中断系统相关代码并在include/asm-armnommu/arch-lpc/目录下添加irq.h、irq.c 和irqs.h 文件,实现系统中断;在include/asm-armnommu/arch-lpc/目录下添加dma.h、memory.h、processor.h 等头文件,并在hardware.h 文件中定义包括时钟、串口、中断控制器等寄存器地址;在include/asm-armnommu/arch-lpc/目录下创建文件time.h、timex.h 及serial.h 实现时钟串口驱动的移植;修改arch/armnommu/config 目录下的config.in 文件设定菜单配置以及修改mach-lpc/makefile、linux-2.4.x/makefile 和arch/armnommu/makefile 等文件。

  3.2 设备驱动程序设计

  由于uclinux 2.4.x内核为非抢占式,进程时间片为10ms,本身实时性并不高。但由于本系统中只有一个高实时性任务----车辆通过信号的捕获,因此,可通过TIMER1设备驱动程序操作LPC2294上的定时器实现CAP1.0脚信号的双边沿捕获。TIMER1设备驱动由驱动程序初始化函数、清除函数、设备信息结构体,open、release、read、ioctl等方法以及中断服务程序等构成。uclinux系统在加载内核模块时首先会执行初始化函数timer1_init( ),通过调用result = register_chrdev (MAJOR_NR, DEVICE_NAME , &timer1_fops)注册字符设备;并依据返回值result判断设备注册是否成功;在内核卸载模块时,执行清除函数timer1_cleanup( ),通过调用unregister_chrdev(MAJOR_NR, DEVICE_NAME)注消字符设备。设备信息结构体用来描述该设备的open、release、read等操作方法:其中,在系统和应用程序首次使用此定时器时,首先执行timer1_open(struct inode *inode, struct file *filp) 方法调用request_irq(IRQ_timer1, timer1_irq_handle, SA_INTERRUPT, "my" DEVICE_NAME, NULL)函数进行中断响应函数注册,配置定时器T1IR、T1PR、T1TC、T1TCR等寄存器完成定时器初始化,使用中断开关函数local_irq_save()和local_irq_restore()来控制临界区;最终由uclinux系统接收硬件中断并调用中断服务程序;当系统和应用程序不再使用该定时器时调用timer1_release(struct inode *inode, struct file *filp)进行关闭和释放。中断服务程序timer1_irq_handle(int irq,void *dev_id,struct pt_regs *regs)完成清除中断源、定时器计数器复位以及通过uclinux提供的宏inl(T1CR)读取捕获寄存器中计数器的值并调用系统函数copy_to_usr()将数据从内核空间拷贝至用户空间。最后,将设备驱动程序timer1. c复制到linux-2.4.x/driver/char目录下,在timer1.c中加入函数timer1_init()完成设备的注册。在mem.c文件中添加timer1_init()外部函数说明,在chr_dev_init()函数添加timer1_init()调用,编译得到新内核[4]。

  3.3 MiniGUI 移植

  目前,嵌入式Linux 平台下常见的 GUI 系统有: MicroWindows、QT/Embedded、XWindows、OpenGUI、MiniGUI 等多种选择。从易用性、跨平台性以及开发成本等多方面因素考虑,本文采用飞漫公司的MiniGUI 实现GUI 人机交互图形界面的开发[5]。为方便调试,采用VMware 软件在windows 系统下建立linux 平台的宿主机,进入linux 环境,从www.minigui.com 上下载函数库源代码包libminigui-str-1.6.2.tar.gz 和资源文件包minigui-res-str-1.6.tar.gz 并展开。

  MiniGUI 为实现其跨平台特性,采用GAL(图形抽象层)和IAL(输入抽象层)将MiniGUI上层和操作系统隔离开。因此,首先创建lcdgal.c 文件,参考native 图形引擎数据结构和

Framebuffer 驱动程序按照GAL 接口编写接口函数;然后将液晶驱动程序lcddriver.clcddriver.h 及LPC2294 的头文件lpc2294.h 放在libminigui 下的/src/gal/native 目录下并修改Makefile.am 文件。在libminigui 的/src/ial 目录下添加ialinput.h 和 ialinput.c 编写IAL 接口函数,并添加触摸屏控制器驱动程序fm7843.

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top