日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

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

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

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

     1、看電路圖

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


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


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

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

(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.     //設置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.     //關閉蜂鳴器   

  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.     //注冊設備   

  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.     //打開設備   

  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.         //關閉蜂鳴器   

  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、查看設備主設備號,這里就省略圖了,我們得到主設備號是250  cat /proc/devices   

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

9、開始執(zhí)行


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


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

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

LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: 驅(qū)動電源

在工業(yè)自動化蓬勃發(fā)展的當下,工業(yè)電機作為核心動力設備,其驅(qū)動電源的性能直接關系到整個系統(tǒng)的穩(wěn)定性和可靠性。其中,反電動勢抑制與過流保護是驅(qū)動電源設計中至關重要的兩個環(huán)節(jié),集成化方案的設計成為提升電機驅(qū)動性能的關鍵。

關鍵字: 工業(yè)電機 驅(qū)動電源

LED 驅(qū)動電源作為 LED 照明系統(tǒng)的 “心臟”,其穩(wěn)定性直接決定了整個照明設備的使用壽命。然而,在實際應用中,LED 驅(qū)動電源易損壞的問題卻十分常見,不僅增加了維護成本,還影響了用戶體驗。要解決這一問題,需從設計、生...

關鍵字: 驅(qū)動電源 照明系統(tǒng) 散熱

根據(jù)LED驅(qū)動電源的公式,電感內(nèi)電流波動大小和電感值成反比,輸出紋波和輸出電容值成反比。所以加大電感值和輸出電容值可以減小紋波。

關鍵字: LED 設計 驅(qū)動電源

電動汽車(EV)作為新能源汽車的重要代表,正逐漸成為全球汽車產(chǎn)業(yè)的重要發(fā)展方向。電動汽車的核心技術之一是電機驅(qū)動控制系統(tǒng),而絕緣柵雙極型晶體管(IGBT)作為電機驅(qū)動系統(tǒng)中的關鍵元件,其性能直接影響到電動汽車的動力性能和...

關鍵字: 電動汽車 新能源 驅(qū)動電源

在現(xiàn)代城市建設中,街道及停車場照明作為基礎設施的重要組成部分,其質(zhì)量和效率直接關系到城市的公共安全、居民生活質(zhì)量和能源利用效率。隨著科技的進步,高亮度白光發(fā)光二極管(LED)因其獨特的優(yōu)勢逐漸取代傳統(tǒng)光源,成為大功率區(qū)域...

關鍵字: 發(fā)光二極管 驅(qū)動電源 LED

LED通用照明設計工程師會遇到許多挑戰(zhàn),如功率密度、功率因數(shù)校正(PFC)、空間受限和可靠性等。

關鍵字: LED 驅(qū)動電源 功率因數(shù)校正

在LED照明技術日益普及的今天,LED驅(qū)動電源的電磁干擾(EMI)問題成為了一個不可忽視的挑戰(zhàn)。電磁干擾不僅會影響LED燈具的正常工作,還可能對周圍電子設備造成不利影響,甚至引發(fā)系統(tǒng)故障。因此,采取有效的硬件措施來解決L...

關鍵字: LED照明技術 電磁干擾 驅(qū)動電源

開關電源具有效率高的特性,而且開關電源的變壓器體積比串聯(lián)穩(wěn)壓型電源的要小得多,電源電路比較整潔,整機重量也有所下降,所以,現(xiàn)在的LED驅(qū)動電源

關鍵字: LED 驅(qū)動電源 開關電源

LED驅(qū)動電源是把電源供應轉(zhuǎn)換為特定的電壓電流以驅(qū)動LED發(fā)光的電壓轉(zhuǎn)換器,通常情況下:LED驅(qū)動電源的輸入包括高壓工頻交流(即市電)、低壓直流、高壓直流、低壓高頻交流(如電子變壓器的輸出)等。

關鍵字: LED 隧道燈 驅(qū)動電源
關閉