嵌入式系統(tǒng)軟硬件設(shè)計(jì)_第1頁
嵌入式系統(tǒng)軟硬件設(shè)計(jì)_第2頁
嵌入式系統(tǒng)軟硬件設(shè)計(jì)_第3頁
嵌入式系統(tǒng)軟硬件設(shè)計(jì)_第4頁
嵌入式系統(tǒng)軟硬件設(shè)計(jì)_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、課程名稱: 嵌入式系統(tǒng)的軟硬件設(shè)計(jì) 論文題目: 基于嵌入式web服務(wù)器的遠(yuǎn)程控制系統(tǒng) 姓 名: 組 號: 日 期: 一、設(shè)計(jì)背景介紹目前,Internet技術(shù)已在全球普及,嵌入式也開始采用這一技術(shù),并成為熱點(diǎn)。嵌入式的Internet技術(shù)具有廣泛的應(yīng)用前景,比如智能公路、信息家電、工業(yè)自動化、電子商務(wù)、設(shè)備管理等。在嵌入式Internet技術(shù)中,嵌入式web服務(wù)器的研究有這種用意義。它可以為我們管理、控制和監(jiān)測各式各樣的設(shè)備提供了已很好的途徑。嵌入式Web服務(wù)器可以運(yùn)行在硬件受限的嵌入式系統(tǒng)上,通過用戶端的瀏覽器,可以使用圖形界面來訪問嵌入式系統(tǒng),而這種方式是基于Internet的,這種設(shè)備可

2、以在世界的任何一個(gè)地方,只要它連入Internet就能控制它,非常的方便。隨著Internet技術(shù)和嵌入技術(shù)的高速發(fā)展,基于Internet的遠(yuǎn)程控制越來越普遍,工業(yè)現(xiàn)場運(yùn)行維護(hù)模式正在發(fā)生深刻的網(wǎng)絡(luò)變化:即將web服務(wù)器“嵌入”工業(yè)控制系統(tǒng)中接入Internet網(wǎng)中,在世界的任何一個(gè)地方可以通過網(wǎng)絡(luò)Internet獲得該工業(yè)控制的實(shí)時(shí)控制的信息。進(jìn)而實(shí)現(xiàn)實(shí)時(shí)遠(yuǎn)程控制,調(diào)節(jié),維護(hù)。顯然這種基于web服務(wù)器的遠(yuǎn)程控制維護(hù)將大大減少成本。但是現(xiàn)有的遠(yuǎn)程控制系統(tǒng)都是基于C/S模式的,需要客戶端程序的支持,這不僅加大客戶端的編程,還加大客戶端的維護(hù)的工作量。本小組選擇了基于嵌入式web服務(wù)器遠(yuǎn)程控制系

3、統(tǒng)。提供簡單的人機(jī)交互頁面的,減少了遠(yuǎn)程控制系統(tǒng)程序開發(fā)的難度。二、系統(tǒng)總體方案2.1硬件資源本次課程實(shí)驗(yàn)采用的硬件平臺友善公司的MINI2440開發(fā)板,如圖1所示。Mini2440 是一款真正低價(jià)實(shí)用的ARM9開發(fā)板,是目前國內(nèi)性價(jià)比最高的一款學(xué)習(xí)板; 它采用Samsung S3C2440為微處理器,并采用專業(yè)穩(wěn)定的 CPU 內(nèi)核電源芯片和復(fù)位芯片來保證系統(tǒng)運(yùn)行時(shí)的穩(wěn)定性。開發(fā)板提供了3個(gè)串行口、一個(gè)USB Host、一個(gè)USB Slave B、4個(gè)USER LED、1個(gè)PWM控制蜂鳴器、一個(gè)可調(diào)電阻等。根據(jù)本系統(tǒng)所涉及的模塊做出系統(tǒng)硬件框圖如圖2所示。圖1 MINI2440圖2 系統(tǒng)硬件框

4、圖2.2 軟件設(shè)計(jì)首先分析系統(tǒng)的功能需求,我們設(shè)計(jì)題目是基于嵌入式web服務(wù)器的遠(yuǎn)程控制系統(tǒng),那么此系統(tǒng)需要完成以下幾個(gè)功能:1) WEB服務(wù)器的搭建經(jīng)過查閱資料我們選擇BOA服務(wù)器作為本系統(tǒng)的WEB服務(wù)器,BOA服務(wù)器是一個(gè)小巧高效的web服務(wù)器,是一個(gè)運(yùn)行于unix或linux下的,支持CGI的、適合于嵌入式系統(tǒng)的單任務(wù)的http服務(wù)器,源代碼開放、性能高。具體的搭建流程參考網(wǎng)絡(luò)資料。2) 控制頁面的編寫控制頁面主要是通過html語言編寫,將頁面文件放置在web服務(wù)的文件根目錄下,等待瀏覽器訪問web服務(wù)器時(shí),服務(wù)器能夠自動的返回我們所編寫的頁面,從而實(shí)現(xiàn)與遠(yuǎn)程的交互3) 服務(wù)器端CGI程

5、序的編寫根據(jù)html和CGI調(diào)用的規(guī)范,我們將事先寫好的程序編譯成CGI文件放置到web服務(wù)器的相應(yīng)文件夾中,當(dāng)有相應(yīng)的請求發(fā)生時(shí),web服務(wù)器會自動條用相應(yīng)的CGI程序。4) linux驅(qū)動的編寫linux驅(qū)動主要涉及LED驅(qū)動、PWM驅(qū)動及DS18B20驅(qū)動。本系統(tǒng)大體的流程圖如下:系統(tǒng)流程圖三、驅(qū)動設(shè)計(jì)(個(gè)人工作)1、主要內(nèi)容1) 蜂鳴器驅(qū)動的編寫2) DS18B20驅(qū)動的編寫2、設(shè)備驅(qū)動原理linux系統(tǒng)設(shè)備分為3類:字符設(shè)備、塊設(shè)備、網(wǎng)路設(shè)備?;究蚣苋缦聢D所示:字符設(shè)備:是指只能按字節(jié)讀寫的設(shè)備,不能隨機(jī)讀取設(shè)備內(nèi)存中的某一數(shù)據(jù),讀取數(shù)據(jù)需要按照先后。字符設(shè)備是面向流的設(shè)備,常見的

6、設(shè)備有鼠標(biāo)、鍵盤、串口、控制臺和LED設(shè)備等。塊設(shè)備:是指可以從設(shè)備的任意位置讀取一定長度的設(shè)備。塊設(shè)備包括硬盤、磁盤、U盤和SD卡等。編寫字符設(shè)備驅(qū)動之前可以通過下圖了解用戶空間與字符設(shè)備是如何進(jìn)行交互的:3、蜂鳴器驅(qū)動編寫蜂鳴器的控制時(shí)通過改變PWM的占空比來實(shí)現(xiàn)的,MINI2440開發(fā)板提供了如下資源,通過控制GPB0的輸出可以控制蜂鳴器的狀態(tài),因?yàn)楸緦?shí)驗(yàn)要實(shí)現(xiàn)的是對蜂鳴器響聲的調(diào)節(jié),所以需要調(diào)節(jié)引腳輸出電平的頻率和占空比來實(shí)現(xiàn),這樣就需要編寫PWM驅(qū)動了。整個(gè)驅(qū)動設(shè)計(jì)流程如下圖所示:1) 字符設(shè)備的定義struct pwm_devstruct cdev cdev;/字符設(shè)備結(jié)構(gòu)體;定義

7、一個(gè)結(jié)構(gòu)體用來存放相關(guān)變量,有利于提高驅(qū)動的擴(kuò)展性。2) 設(shè)備初始化cdev_init(&dev->cdev, &pwm_fops);通過調(diào)用cdev_init函數(shù)進(jìn)行設(shè)備的初始化,第一個(gè)參數(shù)為字符設(shè)備結(jié)構(gòu)體的地址,第二個(gè)變量為pwm設(shè)備的操作函數(shù)結(jié)構(gòu)體地址。3) 設(shè)備號獲取if(pwm_major)/主設(shè)備號已經(jīng)分配直接注冊設(shè)備devno = MKDEV(pwm_major, pwm_minor);result = register_chrdev_region(devno, 1, DEV_NAME);else /主設(shè)備號未分配,需要動態(tài)分配result = alloc_

8、chrdev_region(&devno, 0, 1, DEV_NAME);pwm_major = MAJOR(devno);if(result < 0)/注冊失敗或分配失敗return result;這段代碼主要實(shí)現(xiàn)設(shè)備號的獲取首先驅(qū)動文件中定義一個(gè)pwm_major變量存儲了主設(shè)備號,首先判斷主設(shè)備號是否已經(jīng)分配,如果已經(jīng)分配(主設(shè)備號可以自己手動分配)則使用register_chrdev_region直接注冊設(shè)備,否者就通過alloc_chrdev_region函數(shù)動態(tài)獲取主設(shè)備號4) 添加設(shè)備dev->cdev.owner = THIS_MODULE;dev->

9、;cdev.ops = &pwm_fops;err = cdev_add(&dev->cdev, devno, 1);對字符設(shè)備結(jié)構(gòu)體的一些變量進(jìn)行初始化,然后調(diào)用cdev_add進(jìn)行設(shè)備的添加。5) 設(shè)備操作函數(shù)的定義struct file_operations pwm_fops = .owner=THIS_MODULE, .open=pwm_open, .release=pwm_release, .unlocked_ioctl = pwm_ioctl,;定義一個(gè)file_operations結(jié)構(gòu)體用于指明此設(shè)備驅(qū)動在系統(tǒng)調(diào)用的時(shí)候回調(diào)用哪些函數(shù),由于本設(shè)備只需要具備o

10、pen(打開操作)、release(釋放操作)和unlocked_ioctl(設(shè)備控制操作)。 pwm_openstatic int pwm_open( struct inode *inode,struct file *filp ) int retval = 0;filp->private_data = pwm_devp;tyy_pwm_init();printk("PWM init OK!n"); return retval; void tyy_pwm_init( void )tyy_pwm_gpio_init();tyy_pwm_config();pwm_open

11、函數(shù)中主要實(shí)現(xiàn)有關(guān)PWM引腳的配置、寄存器的配置,設(shè)定PWM引腳為TOUT、時(shí)鐘頻率62.5KHZ,同時(shí)定時(shí)器自動裝載計(jì)數(shù)值。 pwm_releasestatic int pwm_release( struct inode *inode,struct file *filp )tyy_pwm_close();printk("close okn");return 0;void tyy_pwm_close( void )unsigned long val_TCON= _raw_readl(PWM_TCON);val_TCON &= PWM_TCON_TXRELOAD;_r

12、aw_writel(val_TCON ,PWM_TCON);s3c2410_gpio_cfgpin(PWM_GPIO, S3C2410_GPIO_OUTPUT);s3c2410_gpio_setpin(PWM_GPIO, 0);pwm_release主要實(shí)現(xiàn)PWM的關(guān)閉,當(dāng)設(shè)備文件關(guān)閉時(shí),會調(diào)用此函數(shù)實(shí)現(xiàn)PWM定時(shí)器的停止,GPB0端口輸出的設(shè)置(主要防止端口處于高定平導(dǎo)致蜂鳴器叫,因此需要設(shè)置為低電平) pwm_ioctlstatic long pwm_ioctl(struct file *file, unsigned int cmd, unsigned long arg)switch(cm

13、d)case PWM_IOCTL_START:tyy_pwm_start();return 0;default:return -EINVAL;pwm_ioctl函數(shù)主要實(shí)現(xiàn)對PWM的一些控制,本驅(qū)動中總共定義了三個(gè)CMD#define PWM_IOCTL_START _IO(PWM_MAGIC, 0) #define PWM_IOCTL_SET_TCNTB_IOW(PWM_MAGIC, 1, int)#define PWM_IOCTL_SET_TCMPT _IOW(PWM_MAGIC, 2, int)第一個(gè)為啟動PWM定時(shí)器、第二個(gè)為設(shè)置PWM中TCNTB寄存器的值用于設(shè)定定時(shí)器的計(jì)數(shù)值、第三

14、個(gè)為設(shè)置PWM中TCMPT的值用于設(shè)定占空比。6) 設(shè)備驅(qū)動的測試int fd;fd = open("/dev/pwm_ctl", O_RDWR);if( fd < 0 )perror("Open device failed!n");exit(1);ioctl(fd, PWM_IOCTL_SET_TCNTB, 3000);ioctl(fd, PWM_IOCTL_SET_TCMPT, 0);ioctl(fd, PWM_IOCTL_START);通過讀取設(shè)備文件然后通過ioctl來控制PWM的輸出及啟動。4、DS18B20驅(qū)動編寫DS18B20是常用的

15、溫度傳感器,具有體積小,硬件開銷低,抗干擾能力強(qiáng),精度高的特點(diǎn)。硬件連接圖如下圖所示(本系統(tǒng)DS18B20接在GPB1上)。其操作主要通過1-wire協(xié)議完成,根據(jù)數(shù)據(jù)手冊提供的操作時(shí)序及命令定義即可實(shí)現(xiàn)溫度的獲取。由于DS18B20的驅(qū)動也是采用字符設(shè)備驅(qū)動所以在設(shè)計(jì)時(shí)很多東西都是和PWM設(shè)備驅(qū)動是相同的,下面主要介紹兩者不同的地方。雖然在linux驅(qū)動說明提供有關(guān)的1-wire但一直沒有找到相關(guān)使用資料,所以整個(gè)DS18B20的驅(qū)動只能采用IO的控制來實(shí)現(xiàn)讀取數(shù)據(jù)。1) 字符設(shè)備的定義struct ds18b20_devstruct cdev cdev; /字符設(shè)備結(jié)構(gòu)體struct mu

16、tex res_mutex; /互斥鎖結(jié)構(gòu)體;定義一個(gè)結(jié)構(gòu)體用來存放相關(guān)變量,有利于提高驅(qū)動的擴(kuò)展性。與上面結(jié)構(gòu)體不同的地方在于定義了一個(gè)mutex 變量,主要是因?yàn)镈S18B20操作過程中有時(shí)序的操作,而時(shí)序又不能被其他程序所打擾,不然讀出的數(shù)據(jù)是錯(cuò)誤的,所以通過互斥鎖可以實(shí)現(xiàn)在進(jìn)行DS18B20操作過程中不被其他程序中斷。2) 設(shè)備操作函數(shù)的定義struct file_operations ds18b20_fops = .owner = THIS_MODULE, .read = ds18b20_read, .open = ds18b20_open, ;定義一個(gè)file_operations

17、結(jié)構(gòu)體用于指明此設(shè)備驅(qū)動在系統(tǒng)調(diào)用的時(shí)候回調(diào)用哪些函數(shù),由于本設(shè)備只需要具備read(讀取數(shù)據(jù)操作)和open(打開設(shè)備操作)。 ds18b20_readstatic ssize_t ds18b20_read( struct file *filp, char _user *buf, size_t size, loff_t *ppos)unsigned long err; struct ds18b20_dev *dev = filp->private_data; unsigned char result2 = 0x00, 0x00;mutex_lock_interruptible(&

18、;dev->res_mutex); DS18B20_Read_Temp(result); err = copy_to_user(buf, &result, sizeof(result); mutex_unlock(&dev->res_mutex); return err ? -EFAULT : min(sizeof(result), size); ds18b20_read函數(shù)中主要實(shí)現(xiàn)DS18B20數(shù)據(jù)的獲取并將數(shù)據(jù)從內(nèi)核空間復(fù)制到用戶空間,從而實(shí)現(xiàn)內(nèi)核空間與用戶空間的數(shù)據(jù)交互。 ds18b20_openstatic int ds18b20_open( struct

19、 inode *inode,struct file *filp ) int retval;filp->private_data = ds18b20_devp; mutex_lock_interruptible(&ds18b20_devp->res_mutex);retval = ds1820_existed() ? 0: -ENODEV;mutex_unlock(&ds18b20_devp->res_mutex); return retval; ds18b20_open主要實(shí)現(xiàn)判斷DS18B20是否存在,若果存在則返回0否則返回一個(gè)錯(cuò)誤編號。5、調(diào)試結(jié)果編寫好驅(qū)動程序,安裝到linux系統(tǒng)之后,整個(gè)系統(tǒng)運(yùn)行之后蜂鳴器和DS

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論