




已閱讀5頁,還剩14頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
。蜂鳴器驅(qū)動(dòng)課程設(shè)計(jì)專 業(yè): xxxxxxxxxxxxxx 班 級: xxxxxxxxx 學(xué) 號: xxxxxxxxx 姓 名: xxxx 設(shè)計(jì)題目: 蜂鳴器驅(qū)動(dòng)程序設(shè)計(jì) 2016年12月 1。目錄一.任務(wù)21.目標(biāo)22.環(huán)境23.需求:2二總體設(shè)計(jì)21.處理流程22.模塊介紹33.模塊接口設(shè)計(jì)34.各個(gè)模塊設(shè)計(jì)3三.PWM蜂鳴器字符設(shè)備驅(qū)動(dòng)31.模塊設(shè)計(jì)31. 模塊介紹32. 模塊結(jié)構(gòu)圖42.接口設(shè)計(jì)41. 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)42. 驅(qū)動(dòng)程序接口43.函數(shù)設(shè)計(jì)41.初始化函數(shù)5 2. 字符設(shè)備打開函數(shù)6 3. 字符設(shè)備關(guān)閉函數(shù)7 4. 模塊卸載函數(shù).85. 文件操作接口函數(shù)8四. PWM蜂鳴器字符設(shè)備驅(qū)動(dòng)測試81. 調(diào)用系統(tǒng)函數(shù)ioctl實(shí)現(xiàn)對蜂鳴器的控制85 tiny210開發(fā)板調(diào)試.96 綜合設(shè)計(jì)總結(jié)與思考.101. 任務(wù)1.目標(biāo):編寫按鍵蜂鳴器驅(qū)動(dòng)程序函數(shù)與測試文件,實(shí)現(xiàn)上位機(jī)與tiny210-SDK開發(fā)板的連接,利用函數(shù)實(shí)現(xiàn)對蜂鳴器通過按鍵來啟動(dòng)與關(guān)閉。2.環(huán)境:軟件環(huán)境:windows 7 系統(tǒng)和VMware Workstation 軟件硬件環(huán)境:tiny210 開發(fā)板 , 內(nèi)核部分 Linux-3.0.8 , 交叉編譯版本 arm-linux-gcc-4.5.1-v6-vfp1Linux系統(tǒng)介紹: Linux是一種自由開發(fā)源碼的類Unix操作系統(tǒng),存在這許多不同的Linux版本,但它們都使用了Linux內(nèi)核。Linux可安裝在各種計(jì)算機(jī)硬件設(shè)備中,比如手機(jī)、平板電腦、路由器、視頻游戲控制臺(tái)、臺(tái)式計(jì)算機(jī)、大型機(jī)和超級計(jì)算機(jī)。 Linux是一個(gè)領(lǐng)先的操作系統(tǒng),世界上運(yùn)算最快的10臺(tái)超級計(jì)算機(jī)運(yùn)行的都是Linux操作系統(tǒng)。嚴(yán)格來說,Linux這個(gè)詞本身只表示Linux內(nèi)核,但實(shí)際上人們已經(jīng)習(xí)慣了用Linux來形容整個(gè)基于Linux內(nèi)核,并且使用GNU工程各種工具和數(shù)據(jù)庫的操作系統(tǒng)。Linux得名于天才程序員林納斯托瓦茲。 tiny210開發(fā)板中模塊介紹:PWM蜂鳴器模塊PWM(脈沖寬度調(diào)制)簡單的講是一種變頻技術(shù)之一,是靠改變脈沖寬度來控制輸出電壓,通過改變周期來控制其輸出頻率。來看看我們實(shí)際生活中的例子,我們的電風(fēng)扇為什么扭一下按扭,風(fēng)扇的轉(zhuǎn)速就會(huì)發(fā)生變化;調(diào)一下收音機(jī)的聲音按鈕,聲音的大小就會(huì)發(fā)生變化。這些都是PWM的應(yīng)用,都是通過PWM輸出的頻率信號進(jìn)行控制的。蜂鳴器的種類和工作原理蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。 壓電式蜂鳴器主要由多諧振蕩器、壓電蜂鳴片、阻抗匹配器及共鳴箱、外殼等組成。有的壓電式蜂鳴器外殼上還裝有發(fā)光二極管。多諧振蕩器由晶體管或集成電路構(gòu)成。當(dāng)接通電源后(1.515V直流工作電壓),多諧振蕩器起振,輸出1.52.5kHZ的音頻信號,阻抗匹配器推動(dòng)壓電蜂鳴片發(fā)聲。 電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動(dòng)膜片及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號電流通過電磁線圈,使電磁線圈產(chǎn)生磁場。振動(dòng)膜片在電磁線圈和磁鐵的相互作用下,周期性地振動(dòng)發(fā)聲。 有源蜂鳴器和無源蜂鳴器的區(qū)別:這個(gè)“源”字是不是指電源,而是指震蕩源,即有源蜂鳴器內(nèi)有振蕩源而無源蜂鳴器內(nèi)部沒有振蕩源。有振蕩源的通電就可以發(fā)聲,沒有振蕩源的需要脈沖信號驅(qū)動(dòng)才能發(fā)聲。3. 需求:要實(shí)現(xiàn)PC與tiny210開發(fā)板的通信,要求在PC機(jī)上的VMware Workstation 軟件的Red Hat Enterprise Linux環(huán)境下編寫程序,包含蜂鳴器驅(qū)動(dòng)程序和測試文件。利用交叉編譯器arm-linux-gcc-4.5.1-v6-vfp1生成目標(biāo)文件,最后講目標(biāo)文件下載到開發(fā)板,并且驅(qū)動(dòng)蜂鳴器根據(jù)按鍵的不同完成啟動(dòng)或者停止的操作。2 總體設(shè)計(jì)1. 處理流程:2. 模塊介紹:按鍵模塊:通過按鍵來操作蜂鳴器的啟動(dòng)與停止。蜂鳴器模塊:通過加載蜂鳴器驅(qū)動(dòng)模塊到內(nèi)核,驅(qū)動(dòng)蜂鳴器。按鍵模塊:A. 正確驅(qū)動(dòng)主設(shè)備號和次設(shè)備號B. 實(shí)現(xiàn)字符設(shè)備驅(qū)動(dòng)程序C. 實(shí)現(xiàn)file-operation結(jié)構(gòu)D. 實(shí)現(xiàn)初始化函數(shù),注冊字符設(shè)備E. 實(shí)現(xiàn)卸載函數(shù),釋放字符設(shè)備F. 創(chuàng)建文件節(jié)點(diǎn)按鍵模塊:G. 正確驅(qū)動(dòng)住設(shè)備號和次設(shè)備號H. 實(shí)現(xiàn)字符設(shè)備驅(qū)動(dòng)程序I. 實(shí)現(xiàn)file-operation結(jié)構(gòu)J. 實(shí)現(xiàn)初始化函數(shù),注冊字符設(shè)備K. 實(shí)現(xiàn)卸載函數(shù),釋放字符設(shè)備L. 創(chuàng)建文件節(jié)點(diǎn)模塊設(shè)計(jì):(1)beep.c#include#include#include#include#include#include#includestatic int beep_major=0;static dev_t beep_devno;static struct cdev beep_cdev;static int *pload=NULL;#define BEEPNUM 3static int str_len(char *str)int count=0;while(*str!=0)count+;str+;return count;ssize_t beep_read (struct file *fp, char _user *buff, size_t count, loff_t *fps)char string20=HELLO,EVERYONEn;int retur=0;printk(%sn,_FUNCTION_);retur=copy_to_user(buff,string,str_len(string)+1);return retur;ssize_t beep_write (struct file *fp, const char _user *buff, size_t count, loff_t *fps)char string100;int retur=0;printk(%s,_FUNCTION_);retur=copy_from_user(string,buff,count);printk(kernal- %sn,string);return retur;int beep_open(struct inode *nodep,struct file *fp)unsigned int value=0;printk(%sn,_FUNCTION_);pload=ioremap(0XE02000A0,16);/convert register physical address to virtual addressvalue=ioread32(pload);value&=0x13;value&=0x12;value&=0x11;value|=0x10;iowrite32(value,pload);return 0;int beep_release(struct inode *nodep,struct file *fp)printk(%sn,_FUNCTION_);return 0;void beep_start(void)unsigned int value=0;value=ioread32(pload+1);/read data registervalue|=0x10;iowrite32(value,pload+1);void beep_stop(void)unsigned int value=0;value=ioread32(pload+1);/read data registervalue&=0x10) beep_devno=MKDEV(beep_major,0); register_chrdev_region(beep_devno,BEEPNUM,beep); else alloc_chrdev_region(&beep_devno,0,BEEPNUM,beep); beep_major=MAJOR(beep_devno); printk(beep_major = %dn,beep_major);static void initial_cdev(void) cdev_init(&beep_cdev,&beep_ops); beep_cdev.owner=THIS_MODULE; beep_cdev.ops=&beep_ops; beep_cdev.dev=beep_devno; beep_cdev.count=BEEPNUM; cdev_add(&beep_cdev,beep_devno,BEEPNUM);/register a cdev variable to linux kernelstatic int _init beep_init(void) printk(%sn,_FUNCTION_); alloc_beep_dev_num();/get device number initial_cdev();/initial and register cdev variable return 0;static void _exit beep_exit(void) printk(%sn,_FUNCTION_);unregister_chrdev_region(beep_devno,BEEPNUM);cdev_del(&beep_cdev); return ;module_init(beep_init);module_exit(beep_exit);3. PWM蜂鳴器字符設(shè)備驅(qū)動(dòng)1.蜂鳴器模塊介紹及結(jié)構(gòu)圖開發(fā)板上蜂鳴器原理圖分析由原理圖可以得知,蜂鳴器是通過GPD0 IO口使用PWM信號驅(qū)動(dòng)工作的,而GPD0口是一個(gè)復(fù)用的IO口,要使用它得先把他設(shè)置成TOUT0 PWM輸出模式。GPD0參數(shù)要讓蜂鳴器發(fā)聲,需要兩大要素:將蜂鳴器接到正確的端口并且設(shè)置為輸出口,將端口設(shè)置為高電平要使蜂鳴器發(fā)聲,就是要讓GPD0作為輸出端,同時(shí)該端口要設(shè)為高電平。也就是說GPD0設(shè)置為01為輸出,讓GPDDAT的最后一位設(shè)置為1則該端口就置成了高電平。2模塊代碼分析:2.1打開設(shè)備模塊 int beep_open(struct inode *nodep,struct file *fp)unsigned int value=0;printk(%sn,_FUNCTION_);pload=ioremap(0XE02000A0,16);/convert register physical address to virtual addressvalue=ioread32(pload);value&=0x13;value&=0x12;value&=0x11;value|=0x1 %sn,string);return retur;2.3 開啟蜂鳴器void beep_start(void)unsigned int value=0;value=ioread32(pload+1);/read data registervalue|=0x10;iowrite32(value,pload+1);2.4 關(guān)閉蜂鳴器void beep_stop(void)unsigned int value=0;value=ioread32(pload+1);/read data registervalue&=0x10;iowrite32(value,pload+1);恢復(fù)GPD0口為IO口輸出功能,由原理圖可知直接給低電平可讓蜂鳴器停止工作。2.5 ioctl控制模塊long beep_unlocked_ioctl(struct file *fp,unsigned int cmd,unsigned long param)printk(%sn,_FUNCTION_);switch(cmd)case 0:/beep stopbeep_stop();break;case 1:/beep startbeep_start();break;return 0;應(yīng)用程序向設(shè)備發(fā)送命令,設(shè)備接受到命令并進(jìn)行解析,并做相應(yīng)的設(shè)置并啟動(dòng)設(shè)備工作或停止工作。如果輸入的參數(shù)大于0,就讓蜂鳴器開始工作,不同的參數(shù),蜂鳴器的頻率也不一樣。2.6 重要數(shù)據(jù)結(jié)構(gòu)模塊在Linux字符設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)中,有3種非常重要的數(shù)據(jù)結(jié)構(gòu):Struct fileStruct inodeStruct file_operations Struct File代表一個(gè)打開的文件。系統(tǒng)中每個(gè)打開的文件在內(nèi)核空間都有一個(gè)關(guān)聯(lián)的 struct file。它由內(nèi)核在打開文件時(shí)創(chuàng)建, 在文件關(guān)閉后釋放。重要成員:loff_t * fp/*文件讀寫位置*/struct file_operations *fp Struct Inode用來記錄文件的物理上的信息。因此, 它和代表打開文件的file結(jié)構(gòu)是不同的。一個(gè)文件可以對應(yīng)多個(gè)file結(jié)構(gòu), 但只有一個(gè)inode 結(jié)構(gòu)。 重要成員:dev_t:設(shè)備號 struct file_operations一個(gè)函數(shù)指針的集合,定義能在設(shè)備上進(jìn)行的操作。結(jié)構(gòu)中的成員指向驅(qū)動(dòng)中的函數(shù), 這些函數(shù)實(shí)現(xiàn)一個(gè)特別的操作, 對于不支持的操作保留為NULL。static struct file_operations beep_ops= .open = beep_open, .release =beep_release, .read = beep_read, .write = beep_write, .unlocked_ioctl =beep_unlocked_ioctl,2.7 在linux 內(nèi)核中,字符設(shè)備使用 struct cdev 來描述。字符設(shè)備的注冊可分為如下3個(gè)步驟:分配cdev初始化cdev添加cdevStruct cdev的分配可使用cdev_alloc函數(shù)來完成。Struct cdev的初始化使用cdev_init函數(shù)來完成。struct cdev的注冊使用cdev_add函數(shù)來完成。2.8 設(shè)備注銷模塊static void _exit beep_exit(void) printk(%sn,_FUNCTION_);unregister_chrdev_region(beep_devno,BEEPNUM);cdev_del(&beep_cdev); return ;此函數(shù)實(shí)現(xiàn)該混雜設(shè)備的注銷。4. 蜂鳴器驅(qū)動(dòng)測試模塊和截圖1、模塊代碼:#include#include#include#includeint main(void) int fp=0;int i=0;fp=open(/dev/beep,O_RDWR,0x777);if(fp=0)printf(fail in opening beep device filen);return 0;while(i5)ioctl(fp,1,0);sleep(1);ioctl(fp,0,0);sleep(1);i+; close(fp); return 0; 測試程序解析:該測試程序先執(zhí)行打開設(shè)備文件,往設(shè)備中寫入命令和參數(shù)來實(shí)現(xiàn)對蜂鳴器的控制。蜂鳴器的開啟與關(guān)閉間隔及蜂鳴器的頻率取決于往設(shè)備里寫的命令與參數(shù)。運(yùn)行結(jié)果及截圖beep_open蜂鳴器開始工作,beep_release蜂鳴器停止工作五tiny210開發(fā)板調(diào)試1.tiny210開發(fā)板測試步驟:(1)連接開發(fā)板電源。(2)用串口將PC和tiny210開發(fā)板相連。(3)打開SecureCRT軟件,點(diǎn)擊快速連接,配置端口協(xié)議:Serial 端口:com n(看自己的端口號) 波特率:115200 數(shù)據(jù)位:8奇偶校驗(yàn):none停止位:1勾掉RTS/CTS選項(xiàng)(4)點(diǎn)擊連接(5)打開開發(fā)板電源(6)SecureCRT軟件會(huì)出現(xiàn)一些選項(xiàng),選擇b,root system(7)輸入指令rz,將beep.ko和pp
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 院內(nèi)低血糖的防治
- 湖南省長沙市2024屆高三數(shù)學(xué)下學(xué)期三模試題含答案
- 江蘇省泗洪縣2025年高中畢業(yè)生班階段性測試(三)語文試題含解析
- 上海電子信息職業(yè)技術(shù)學(xué)院《軟件項(xiàng)目管理》2023-2024學(xué)年第一學(xué)期期末試卷
- 天津市職業(yè)大學(xué)《中國民族樂器發(fā)展史》2023-2024學(xué)年第二學(xué)期期末試卷
- 山西運(yùn)城農(nóng)業(yè)職業(yè)技術(shù)學(xué)院《路橋檢測》2023-2024學(xué)年第一學(xué)期期末試卷
- 江蘇省如東縣2025年初三年級模擬考試數(shù)學(xué)試題含解析
- 南昌職業(yè)大學(xué)《家畜環(huán)境衛(wèi)生學(xué)實(shí)驗(yàn)》2023-2024學(xué)年第二學(xué)期期末試卷
- 錦州醫(yī)科大學(xué)醫(yī)療學(xué)院《電信專業(yè)英語》2023-2024學(xué)年第一學(xué)期期末試卷
- 江蘇省泰興市分界鎮(zhèn)初級中學(xué)2025年初三下學(xué)期3月物理試題試卷含解析
- 佛朗克變頻器用戶手冊
- 2024年中考英語真題-帶答案
- 2023年廣東省廣州市天河區(qū)中考一模英語試題(解析版)
- 包裝函范文英文函電(3篇)
- JTG-QB-003-2003公路橋涵標(biāo)準(zhǔn)圖鋼筋混凝土蓋板涵
- 2024年四川省成都市龍泉驛區(qū)中考數(shù)學(xué)二診試卷(含答案)
- MOOC 感測技術(shù)-武漢理工大學(xué) 中國大學(xué)慕課答案
- 2024年陜西新華出版?zhèn)髅郊瘓F(tuán)新華書店分公司招聘筆試參考題庫含答案解析
- 鐵路機(jī)務(wù)知識(shí)培訓(xùn)課件
- 人工智能在制造業(yè)中的應(yīng)用2024年智能工廠的新范式
- (高清版)TDT 1037-2013 土地整治重大項(xiàng)目可行性研究報(bào)告編制規(guī)程
評論
0/150
提交評論