嵌入式系统软硬件设计_第1页
嵌入式系统软硬件设计_第2页
嵌入式系统软硬件设计_第3页
嵌入式系统软硬件设计_第4页
嵌入式系统软硬件设计_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、课程名称:嵌入式系统的软硬件设计论文题目:基于嵌入式web服务器的远程控制系统姓名:组号:日期:一、设计背景介绍目前,Internet技术己在全球普及,嵌入式也开始采用这一技 术,并成为热点。嵌入式的Internet技术具有广泛的应用前景,比 如智能公路、信息家电、工业自动化、电子商务、设备管理等。在嵌 入式Internet技术中,嵌入式web服务器的研究有这种用意义。它 可以为我们管理、控制和监测各式各样的设备提供了己很好的途径。 嵌入式Web服务器可以运行在硬件受限的嵌入式系统上,通过用户端 的浏览器,可以使用图形界面来访问嵌入式系统,而这种方式是基于 Internet的,这种设备可以在世

2、界的任何一个地方,只要它连入 Internet就能控制它,非常的方便。随着Internet技术和嵌入技术的高速发展,基于Internet的 远程控制越来越普遍,工业现场运行维护模式正在发生深刻的网络变 化:即将web服务器“嵌入”工业控制系统中接入Internet网中, 在世界的任何一个地方可以通过网络Internet获得该工业控制的实 时控制的信息。进而实现实时远程控制,调节,维护。显然这种基于 web服务器的远程控制维护将大大减少成本。但是现有的远程控制系统都是基于C/S模式的,需要客户端程 序的支持,这不仅加大客户端的编程,还加大客户端的维护的工作量。 木小组选择了基于嵌入式web服务器

3、远程控制系统。提供简单的人机 交互页而的,减少了远程控制系统程序开发的难度。18 / 18二、系统总体方案2.1硬件资源本次课程实验采用的硬件平台友善公司的MINI2440开发板,如 图1所示Mini2440是一款真正低价实用的ARM9开发板,是目前国 内性价比最高的一款学习板;它采用Samsung S3C2440为微处理器, 并采用专业稳定的CPU内核电源芯片和复位芯片来保证系统运行时 的稳定性。开发板提供了 3个串行口、一个USB Host、一个USB Slave B、4个USER LED、1个PWM控制蜂鸣器、一个可调电阻等。根据木 系统所涉及的模块做出系统硬件框图如图2所示。g nrn

4、nriHUilHiK 5芒.宙Y同unii痂阳图 1 MIXI2440图2系统硬件框图2. 2软件设计首先分析系统的功能需求,我们设计题目是基于嵌入式web服务器的远程控制系统,那么此系统需要完成以下几个功能:1) WEB服务器的搭建经过查阅资料我们选择BOA服务器作为木系统的WEB服务器,BOA服务器是一个小巧高效的web服务器,是一个运行于Unix或linux下的,支持CGI的、适合于嵌入式系统的单任务的 http服务器,源代码开放、性能高。具体的搭建流程参考网 络资料。2)控制页面的编写控制页面主要是通过html语言编写,将页而文件放置在web 服务的文件根目录下,等待浏览器访问web服

5、务器时,服务 器能够自动的返回我们所编写的页面,从而实现及远程的交 互3)服务器端CGI程序的编写根据html和CGI调用的规范,我们将事先写好的程序编译成 CGI文件放置到web服务器的相应文件夹中,当有相应的请 求发生时,web服务器会自动条用相应的CGI程序。4)linux驱动的编写linux驱动主要涉及LED驱动、PWM驱动及DS18B20驱动。木系统大体的流程图如下:Response占空比输 入页面lgBZpiLHZMK态设 连页而RtQ-esti II /(I I 1 I U 1 1 J IJ* 1 I D-请求服务IL PWMi殳进结CGIl!|n|-hVRHU 务!LED设皎M

6、S81阳故故据显示页而系统流程图三、驱动设计(个人工作)1、主要内容1)蜂鸣器驱动的编写2)DS18B20驱动的编写 2、设备驱动原理linux系统设备分为3类:字符设备、块设备、网路设备。基本框架如下图所示:I子粗I备文件!參接字1于符 设备块设Z动协甘1网络设3动J字初洛 J块设4字符设备:是指只能按字节读写的设备,不能随机读取设备内存 中的某一数据,读取数据需要按照先后。字符设备是而向流的设备, 常见的设备有鼠标、键盘、串口、控制台和LED设备等。块设备:是指可以从设备的任意位置读取一定长度的设备。块设 备包括硬盘、磁盘、U盘和SD卡等。编写字符设备驱动之前可以通过下图了解用户空间及字符

7、设备 是如何进行交互的:r!z:3、蜂鸣器驱动编写蜂鸣器的控制时通过改变PWM的占空比来实现的,MINI2440开 发板提供了如下资源,通过控制GPBO的输出可以控制蜂鸣器的状态, 因为木实验要实现的是对蜂鸣器响声的调节,所以需要调节引脚输出 电平的频率和占空比来实现,这样就需要编写PWM驱动了。整个驱动设计流程如下图所示:1) 字符设备的定义struct pwm_devstruct cdev cdev;/字符设备结构体;定义一个结构体用来存放相关变量,有利于提高驱动的扩展性。2) 设备初始化cdev_init(&dev-cdev, &pwm_fops);通过调用cdev_init函数进行设备

8、的初始化,第一个参数为字符 设备结构体的地址,第二个变量为pwm设备的操作函数结构体地 址。3) 设备号获取辻(pwm_major) /主设备号己经分配直接注册设备devno = MKDEV(pwm_major, pwm_minor);result = register_chrdev_region(devno, 1, DEV_NAME);else 主设备号未分配,需要动态分配result =alloc_chrdev_region(&devno,0,1,DEV_NAME);pwm_major = MAJOR(devno);辻(result cdev. owner = THIS_MODULE;de

9、v-cdev. ops = &pwm_fops;err = cdev_add(&dev-cdev, devno, 1);对字符设备结构体的一些变量进行初始化,然后调用cdev.add进 行设备的添加。5) 设备操作函数的定义struet pwm_fops = owner=THIS_MODULE, .open二pwm_open, release=pwm_release, unlocked_ioctl = pwm_ioctl,;定义一个结构体用于指明此设备驱动在系统调用的时候回调 用哪些函数,由于本设备只需要具备open (打开操作)、release (释放操作)和unlocked_ioctl (

10、设备控制操作)。 pwm_openstatic int pwm_open( struct inode binode, struct file*filp )int retval = 0;f ilp-private_data = pwm_devp;tyy_pwm_init();printkCPWM init 0K!n);return :retval;void tyy_pwm_init( void )tyy_pwm_gpio_init();tyy_pwm_config();pwm_open函数中主要实现有关PWM引脚的配置、寄存器的配 置,设定PWM引脚为TOUT.时钟频率62. 5KHZ,同时定时

11、器自动 装载计数值。 p_releasesta tic int p_re lease ( st rue t inode *inode, st ruct file*filp )tyy_p_close ();printk(close okn);return 0;void tyy_pwm_close( void )unsigned long val_TC0N= _raw_readl (PW_TC0N); val_TC0N &二PWM_TCON_TXRELOAD;_raw_writel (val_TC0N , PWM_TCON); s3c2410_gpio_cfgpin(PWM_GPI0,S3C241

12、0_GPI0_0UTPUT);s3c2410_gpio_setpin (PM_GPI0, 0);pwTn_release主要实现PWM的关闭,当设备文件关闭时,会调 用此函数实现PWM定时器的停止,GPBO端口输出的设置(主要防 止端口处于高定平导致蜂鸣器叫,因此需要设置为低电平) pwm_ioctlstatic long pwm_ioctl(struct file *file, unsigned int cmd, unsigned long arg)switch(cmd)case PWM_IOCTL_START:tyy_pwm_start ();return 0;default:return

13、 -EINVAL;pwm_ioctl函数主要实现对PWM的一些控制,木驱动中总共定义了三个CMDdefine PWM_IOCTL_START_IO(PW_MAGIC, 0)井define PW_IOCTL_SET_TCXTB_I0W(PW_MAGIC,1,int)define PW_IOCTL_SET_TCMPT_I0W(PW_MAGIC, 2,int)第一个为启动PWM定时器、第二个为设置PWM中TCXTB寄存器 的值用于设定定时器的计数值、第三个为设置PWM中TCMPT的值 用于设定占空比。6) 设备驱动的测试int fd;fd = open(,z/dev/pwm_c11,z, O_RDW

14、R);if ( fd private_data; unsigned char resuIt2二0x00, 0x00;mutex_lock_interruptible(&dev-re s_mut ex);DS18B20_Read_Temp(result);err = copy_to_user(buf, &result, sizeof(result); mutex_unlock(&dev-res_mutex);return err ? -EFAULT : min(sizeof(resuIt), size);dsl8b20_read函数中主要实现DS18B20数据的获取并将数据 从内核空间复制到用户

15、空间,从而实现内核空间及用户空间的数据交互。 dsl8b20_openstatic int dsl8b20_open( struct inode *inode, struct file *filp )int retval;f ilp-private_data = dsl8b20_devp;mutex_lock_interruptible(&dsl8b20_devp-res_mutex)rretval = dsl820_existed() ? 0: -EXODEV; mutex_unlock(&dsl8b20_devp-:res_niutex);return retval;dsl8b20_ope

16、n主要实现判断DS18B20是否存在,若果存在则 返回0否则返回一个错误编号。5、调试结果编写好驱动程序,安装到linux系统之后,整个系统运行之后 蜂鸣器和DS18B20的运行结果效果图如下:Get the temperature successful!Date : 08:59:7 07/20 Inperature : 25.938 C返回主页面可见驱动能够正常的工作。6、实验的问题及不足之处1)在进行PWM驱动编写时,参照数据手册和网络上的相关资料进行 PWM寄存器的配置,但是在实际使用的时候,当计数器比较设置 为0的时候此时的GPBO应该是不输出电平的,但是实际的时候会 产生一个高脉冲,导致蜂鸣器会有轻微的震动产生。2)在编写DS18B20驱动的时候,首次测试时无法读取数据每次的数 据都是全1,查找资料确定为时序操作问题,这种问题只能对照 裸机的DS18B20程序和手册进行对比查找哪部分时序操作没有达 到要去导致读取温度数据失败,解决这个问题之后,能够正常的 读取数据,但是又发现了另外一个问题,虽然能够读取温度数据 但是经常性的出现错误的数据,经查阅资料分析应该是有时候读 取数据时时序被打乱了,所以需要读取数据的时候应该添加互斥 锁保证数据读取过程中不会被干扰,添加了互斥锁

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论