




已閱讀5頁,還剩14頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
。蜂鳴器驅(qū)動課程設計專 業(yè): xxxxxxxxxxxxxx 班 級: xxxxxxxxx 學 號: xxxxxxxxx 姓 名: xxxx 設計題目: 蜂鳴器驅(qū)動程序設計 2016年12月 1。目錄一.任務21.目標22.環(huán)境23.需求:2二總體設計21.處理流程22.模塊介紹33.模塊接口設計34.各個模塊設計3三.PWM蜂鳴器字符設備驅(qū)動31.模塊設計31. 模塊介紹32. 模塊結構圖42.接口設計41. 數(shù)據(jù)結構設計42. 驅(qū)動程序接口43.函數(shù)設計41.初始化函數(shù)5 2. 字符設備打開函數(shù)6 3. 字符設備關閉函數(shù)7 4. 模塊卸載函數(shù).85. 文件操作接口函數(shù)8四. PWM蜂鳴器字符設備驅(qū)動測試81. 調(diào)用系統(tǒng)函數(shù)ioctl實現(xiàn)對蜂鳴器的控制85 tiny210開發(fā)板調(diào)試.96 綜合設計總結與思考.101. 任務1.目標:編寫按鍵蜂鳴器驅(qū)動程序函數(shù)與測試文件,實現(xiàn)上位機與tiny210-SDK開發(fā)板的連接,利用函數(shù)實現(xià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可安裝在各種計算機硬件設備中,比如手機、平板電腦、路由器、視頻游戲控制臺、臺式計算機、大型機和超級計算機。 Linux是一個領先的操作系統(tǒng),世界上運算最快的10臺超級計算機運行的都是Linux操作系統(tǒng)。嚴格來說,Linux這個詞本身只表示Linux內(nèi)核,但實際上人們已經(jīng)習慣了用Linux來形容整個基于Linux內(nèi)核,并且使用GNU工程各種工具和數(shù)據(jù)庫的操作系統(tǒng)。Linux得名于天才程序員林納斯托瓦茲。 tiny210開發(fā)板中模塊介紹:PWM蜂鳴器模塊PWM(脈沖寬度調(diào)制)簡單的講是一種變頻技術之一,是靠改變脈沖寬度來控制輸出電壓,通過改變周期來控制其輸出頻率。來看看我們實際生活中的例子,我們的電風扇為什么扭一下按扭,風扇的轉速就會發(fā)生變化;調(diào)一下收音機的聲音按鈕,聲音的大小就會發(fā)生變化。這些都是PWM的應用,都是通過PWM輸出的頻率信號進行控制的。蜂鳴器的種類和工作原理蜂鳴器主要分為壓電式蜂鳴器和電磁式蜂鳴器兩種類型。 壓電式蜂鳴器主要由多諧振蕩器、壓電蜂鳴片、阻抗匹配器及共鳴箱、外殼等組成。有的壓電式蜂鳴器外殼上還裝有發(fā)光二極管。多諧振蕩器由晶體管或集成電路構成。當接通電源后(1.515V直流工作電壓),多諧振蕩器起振,輸出1.52.5kHZ的音頻信號,阻抗匹配器推動壓電蜂鳴片發(fā)聲。 電磁式蜂鳴器由振蕩器、電磁線圈、磁鐵、振動膜片及外殼等組成。接通電源后,振蕩器產(chǎn)生的音頻信號電流通過電磁線圈,使電磁線圈產(chǎn)生磁場。振動膜片在電磁線圈和磁鐵的相互作用下,周期性地振動發(fā)聲。 有源蜂鳴器和無源蜂鳴器的區(qū)別:這個“源”字是不是指電源,而是指震蕩源,即有源蜂鳴器內(nèi)有振蕩源而無源蜂鳴器內(nèi)部沒有振蕩源。有振蕩源的通電就可以發(fā)聲,沒有振蕩源的需要脈沖信號驅(qū)動才能發(fā)聲。3. 需求:要實現(xiàn)PC與tiny210開發(fā)板的通信,要求在PC機上的VMware Workstation 軟件的Red Hat Enterprise Linux環(huán)境下編寫程序,包含蜂鳴器驅(qū)動程序和測試文件。利用交叉編譯器arm-linux-gcc-4.5.1-v6-vfp1生成目標文件,最后講目標文件下載到開發(fā)板,并且驅(qū)動蜂鳴器根據(jù)按鍵的不同完成啟動或者停止的操作。2 總體設計1. 處理流程:2. 模塊介紹:按鍵模塊:通過按鍵來操作蜂鳴器的啟動與停止。蜂鳴器模塊:通過加載蜂鳴器驅(qū)動模塊到內(nèi)核,驅(qū)動蜂鳴器。按鍵模塊:A. 正確驅(qū)動主設備號和次設備號B. 實現(xiàn)字符設備驅(qū)動程序C. 實現(xiàn)file-operation結構D. 實現(xiàn)初始化函數(shù),注冊字符設備E. 實現(xiàn)卸載函數(shù),釋放字符設備F. 創(chuàng)建文件節(jié)點按鍵模塊:G. 正確驅(qū)動住設備號和次設備號H. 實現(xiàn)字符設備驅(qū)動程序I. 實現(xiàn)file-operation結構J. 實現(xiàn)初始化函數(shù),注冊字符設備K. 實現(xiàn)卸載函數(shù),釋放字符設備L. 創(chuàng)建文件節(jié)點模塊設計:(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蜂鳴器字符設備驅(qū)動1.蜂鳴器模塊介紹及結構圖開發(fā)板上蜂鳴器原理圖分析由原理圖可以得知,蜂鳴器是通過GPD0 IO口使用PWM信號驅(qū)動工作的,而GPD0口是一個復用的IO口,要使用它得先把他設置成TOUT0 PWM輸出模式。GPD0參數(shù)要讓蜂鳴器發(fā)聲,需要兩大要素:將蜂鳴器接到正確的端口并且設置為輸出口,將端口設置為高電平要使蜂鳴器發(fā)聲,就是要讓GPD0作為輸出端,同時該端口要設為高電平。也就是說GPD0設置為01為輸出,讓GPDDAT的最后一位設置為1則該端口就置成了高電平。2模塊代碼分析:2.1打開設備模塊 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 關閉蜂鳴器void beep_stop(void)unsigned int value=0;value=ioread32(pload+1);/read data registervalue&=0x10;iowrite32(value,pload+1);恢復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;應用程序向設備發(fā)送命令,設備接受到命令并進行解析,并做相應的設置并啟動設備工作或停止工作。如果輸入的參數(shù)大于0,就讓蜂鳴器開始工作,不同的參數(shù),蜂鳴器的頻率也不一樣。2.6 重要數(shù)據(jù)結構模塊在Linux字符設備驅(qū)動程序設計中,有3種非常重要的數(shù)據(jù)結構:Struct fileStruct inodeStruct file_operations Struct File代表一個打開的文件。系統(tǒng)中每個打開的文件在內(nèi)核空間都有一個關聯(lián)的 struct file。它由內(nèi)核在打開文件時創(chuàng)建, 在文件關閉后釋放。重要成員:loff_t * fp/*文件讀寫位置*/struct file_operations *fp Struct Inode用來記錄文件的物理上的信息。因此, 它和代表打開文件的file結構是不同的。一個文件可以對應多個file結構, 但只有一個inode 結構。 重要成員:dev_t:設備號 struct file_operations一個函數(shù)指針的集合,定義能在設備上進行的操作。結構中的成員指向驅(qū)動中的函數(shù), 這些函數(shù)實現(xiàn)一個特別的操作, 對于不支持的操作保留為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)核中,字符設備使用 struct cdev 來描述。字符設備的注冊可分為如下3個步驟:分配cdev初始化cdev添加cdevStruct cdev的分配可使用cdev_alloc函數(shù)來完成。Struct cdev的初始化使用cdev_init函數(shù)來完成。struct cdev的注冊使用cdev_add函數(shù)來完成。2.8 設備注銷模塊static void _exit beep_exit(void) printk(%sn,_FUNCTION_);unregister_chrdev_region(beep_devno,BEEPNUM);cdev_del(&beep_cdev); return ;此函數(shù)實現(xiàn)該混雜設備的注銷。4. 蜂鳴器驅(qū)動測試模塊和截圖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ù)來實現(xiàn)對蜂鳴器的控制。蜂鳴器的開啟與關閉間隔及蜂鳴器的頻率取決于往設備里寫的命令與參數(shù)。運行結果及截圖beep_open蜂鳴器開始工作,beep_release蜂鳴器停止工作五tiny210開發(fā)板調(diào)試1.tiny210開發(fā)板測試步驟:(1)連接開發(fā)板電源。(2)用串口將PC和tiny210開發(fā)板相連。(3)打開SecureCRT軟件,點擊快速連接,配置端口協(xié)議:Serial 端口:com n(看自己的端口號) 波特率:115200 數(shù)據(jù)位:8奇偶校驗:none停止位:1勾掉RTS/CTS選項(4)點擊連接(5)打開開發(fā)板電源(6)SecureCRT軟件會出現(xiàn)一些選項,選擇b,root system(7)輸入指令rz,將beep.ko和pp
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 直腸癌保肛切除術后護理
- 常用機床電氣檢修(第二版)課件:T68 型臥式鏜床電氣檢修
- 血透高位瘺穿刺及護理
- 幼兒園設計理論基礎與實踐
- 血液淋巴瘤患者的護理
- 胸腰椎骨折伴截癱的護理
- 三維設計在小學語文教學中的應用
- 便攜式簡易呼吸機技術解析與應用
- 水電解質(zhì)紊亂的護理
- 文化創(chuàng)意產(chǎn)業(yè)園區(qū)品牌塑造與2025年產(chǎn)業(yè)集聚的產(chǎn)業(yè)集聚與產(chǎn)業(yè)鏈升級路徑報告
- 《“的、地、得”的用法》教學設計-2024-2025學年統(tǒng)編版語文二年級上冊
- 2《登高》公開課一等獎創(chuàng)新教學設計 統(tǒng)編版高中語文必修上冊
- 保安服務監(jiān)督方案
- 2024「科技生活」趨勢洞察報告(小紅書平臺)-千瓜-202409
- 小學數(shù)學五年級下同《折線統(tǒng)計圖》教學實錄
- 水利工程質(zhì)量缺陷處理方案
- 2024年全國軟件水平考試之初級程序員考試經(jīng)典測試題附答案
- 大國三農(nóng)-輝煌成就版智慧樹知到期末考試答案章節(jié)答案2024年中國農(nóng)業(yè)大學
- 2023-2024學年貴州省貴陽市部分學校高二(下)期末數(shù)學試卷(含答案)
- JTG 3432-2024 公路工程集料試驗規(guī)程(正式版)
- JTG-QB-003-2003公路橋涵標準圖鋼筋混凝土蓋板涵
評論
0/150
提交評論