當(dāng)前位置:首頁 > 公眾號精選 > 嵌入式云IOT技術(shù)圈
[導(dǎo)讀]上次,我們寫了一個LED的驅(qū)動程序,這一節(jié),我們只需稍微改動一下就可以實現(xiàn)蜂鳴器的驅(qū)動,讓我們來看看吧。 ? ? ?還是跟之前一樣,先找電路圖,找到電路板上對應(yīng)的引腳和相關(guān)聯(lián)的寄存器。 ? ? ?1、看電路圖 ? ? ?(1)蜂鳴器接口位于電路板的底板,看電路圖可知

上次,我們寫了一個LED的驅(qū)動程序,這一節(jié),我們只需稍微改動一下就可以實現(xiàn)蜂鳴器的驅(qū)動,讓我們來看看吧。

     還是跟之前一樣,先找電路圖,找到電路板上對應(yīng)的引腳和相關(guān)聯(lián)的寄存器。

     1、看電路圖

     (1)蜂鳴器接口位于電路板的底板,看電路圖可知道是高電平有效。


       (2)相對應(yīng)的找到核心板的接口。由此可知,我們的蜂鳴器是GPD0_0


  接下來找數(shù)據(jù)手冊,找到對應(yīng)的寄存器,然后配置它就可以了。

  2、查數(shù)據(jù)手冊,找到相關(guān)的寄存器,并配置

(1)找到GPD0CON,地址是0x114000A0,我們需要配置GPD0CON(0)為輸出狀態(tài)。也就是寫0x1這個值到這個寄存器。

 

(2)找到GPD0DAT這個寄存器,用于配置蜂鳴器的高低電平,物理地址是0x114000A4,剛好與上一個差4個字節(jié)的偏移

我們只要對這個寄存器寫1和寫0,那么蜂鳴器就可以叫起來了,哈哈。是不是很簡單?


3、開始寫驅(qū)動程序。


[plain] view plain copy print?

  1. #include <linux/init.h>  

  2. #include <linux/module.h>  

  3. #include <linux/kernel.h>  

  4. #include <linux/fs.h>  

  5. #include <linux/io.h>  

  6. #include <asm/uaccess.h>  

  7. #include <asm/irq.h>  

  8. #include <asm/io.h>  

  9. #define DEV_NAME    "test-dev"  

  10. //定義蜂鳴器配置IO的地址   

  11. #define GPD0CON  0x114000A0  

  12. volatile unsigned long *bell_config = NULL ;   

  13. volatile unsigned long *bell_dat = NULL ;   

  14. int bell_open(struct inode *inode, struct file *filp)  

  15. {  

  16.     printk("bell_open\n");  

  17.     //清寄存器   

  18.     *bell_config &= ~(0xf);  

  19.     //設(shè)置io為輸出   

  20.     *bell_config |= (0x1);  

  21.     return 0;  

  22. }  

  23.   

  24. int bell_close(struct inode *inode, struct file *filp)  

  25. {  

  26.     printk("bell_close\n");  

  27.     //關(guān)閉蜂鳴器   

  28.     *bell_dat &= ~0x1 ;  

  29.     return 0;  

  30. }  

  31.   

  32. long bell_ioctl(struct file *filp, unsigned int request, unsigned long arg)  

  33. {  

  34.     //控制蜂鳴器的狀態(tài)   

  35.     switch(request)  

  36.     {  

  37.         case 0:  

  38.             printk(KERN_EMERG"bell on\n");  

  39.             *bell_dat |= 0x1 ;  

  40.             break;  

  41.   

  42.         case 1:  

  43.             printk(KERN_EMERG"bell off\n");  

  44.             *bell_dat &=~0x1 ;  

  45.             break;  

  46.     }  

  47.     return 0 ;  

  48. }  

  49.   

  50. struct file_operations fops = {  

  51.     .owner = THIS_MODULE ,  

  52.     .open = bell_open,  

  53.     .release = bell_close,  

  54.     .unlocked_ioctl = bell_ioctl,  

  55. };  

  56.   

  57. int major ;  

  58. int test_init(void)  

  59. {  

  60.     printk("bell_init\n");  

  61.     //注冊設(shè)備   

  62.     major = register_chrdev(major, DEV_NAME, &fops);  

  63.     //映射IO   

  64.     bell_config = (volatile unsigned long *)ioremap(GPD0CON , 16);  

  65.     //加4個字節(jié)偏移到GP0DAT順便映射該物理地址   

  66.     bell_dat = bell_config + 1 ;      

  67.     return 0;  

  68. }  

  69.   

  70. void test_exit(void)  

  71. {  

  72.     printk("bell_exit\n");  

  73.     //解除注冊   

  74.     unregister_chrdev(major, DEV_NAME);  

  75.     //取消映射   

  76.     iounmap(bell_config);  

  77. }  

  78.   

  79. module_init(test_init);  

  80. module_exit(test_exit);  

  81.   

  82. MODULE_LICENSE("GPL");  

  83. MODULE_AUTHOR("Y.X.YANG");  

  84. MODULE_VERSION("2016.1.16");</span>  

4、寫測試程序

[plain] view plain copy print?

  1. #include <stdio.h>  

  2. #include <sys/types.h>  

  3. #include <sys/stat.h>  

  4. #include <fcntl.h>  

  5.   

  6. int main(int argc, char **argv)  

  7. {  

  8.     int fd;  

  9.     //打開設(shè)備   

  10.     fd = open("/dev/test-dev",O_RDWR) ;  

  11.     if(-1 == fd)  

  12.     {  

  13.         printf("open fair!\n");  

  14.         return -1 ;  

  15.     }  

  16.     while(1){  

  17.         //打開蜂鳴器   

  18.         ioctl(fd,1);  

  19.         sleep(1);  

  20.         //關(guān)閉蜂鳴器   

  21.         ioctl(fd,0);  

  22.         sleep(1);  

  23.     }  

  24.     return 0;  

  25. }</span>  

5、編寫makefile

[plain] view plain copy print?

  1. obj-m   += bell.o  

  2.   

  3. ROOTFS = /disk/A9/filesystem  

  4. KERNEL = /disk/A9/linux-3.5/  

  5. all:  

  6.     make -C $(KERNEL) M=`pwd` modules  

  7.   

  8. clean:  

  9.     make -C $(KERNEL) M=`pwd` clean  

  10.     rm -rf my_bell  

  11.   

  12. install:  

  13.     make -C $(KERNEL) M=`pwd` modules_install INSTALL_MOD_PATH=$(ROOTFS)  

  14.   

  15. my_bell:  

  16.     arm-linux-gcc my_bell.c -o my_bell  

  17. </span>  


6、編譯


  

7、查看設(shè)備主設(shè)備號,這里就省略圖了,我們得到主設(shè)備號是250  cat /proc/devices   

8、創(chuàng)建設(shè)備節(jié)點  mknod  /dev/test-dev  c   250  0

9、開始執(zhí)行


由于蜂鳴器的現(xiàn)象沒有實質(zhì)的效果展示,只能通過終端打印,如有興趣,自己去嘗試,用其它板子也可以,就照著我這個方法寫驅(qū)動,一定成功的!


免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉