国产毛片a精品毛-国产毛片黄片-国产毛片久久国产-国产毛片久久精品-青娱乐极品在线-青娱乐精品

基于ARM-contexA9蜂鳴器驅動開發(fā)

發(fā)布時間:2017-11-22 11:25    發(fā)布者:ludi
上次,我們寫了一個LED的驅動程序,這一節(jié),我們只需稍微改動一下就可以實現(xiàn)蜂鳴器的驅動,讓我們來看看吧。file:///C:\Users\郭曉娟\AppData\Local\Temp\ksohtml\wps3E58.tmp.png
     還是跟之前一樣,先找電路圖,找到電路板上對應的引腳和相關聯(lián)的寄存器。
     1、看電路圖file:///C:\Users\郭曉娟\AppData\Local\Temp\ksohtml\wps3E68.tmp.png
     (1)蜂鳴器接口位于電路板的底板,看電路圖可知道是高電平有效。
file:///C:\Users\郭曉娟\AppData\Local\Temp\ksohtml\wps3E69.tmp.jpg
   (2)相對應的找到核心板的接口。由此可知,我們的蜂鳴器是GPD0_0
file:///C:\Users\郭曉娟\AppData\Local\Temp\ksohtml\wps3E7A.tmp.jpg
接下來找數(shù)據(jù)手冊,嵌入式物聯(lián)網(wǎng)等系統(tǒng)學習企鵝意義氣嗚嗚吧久零就易,找到對應的寄存器,然后配置它就可以了。
  2、查數(shù)據(jù)手冊,找到相關的寄存器,并配置file:///C:\Users\郭曉娟\AppData\Local\Temp\ksohtml\wps3E8B.tmp.png
(1)找到GPD0CON,地址是0x114000A0,我們需要配置GPD0CON(0)為輸出狀態(tài)。也就是寫0x1這個值到這個寄存器。
file:///C:\Users\郭曉娟\AppData\Local\Temp\ksohtml\wps3E9B.tmp.png
(2)找到GPD0DAT這個寄存器,用于配置蜂鳴器的高低電平,物理地址是0x114000A4,剛好與上一個差4個字節(jié)的偏移
我們只要對這個寄存器寫1和寫0,那么蜂鳴器就可以叫起來了,哈哈。是不是很簡單?file:///C:\Users\郭曉娟\AppData\Local\Temp\ksohtml\wps3EAC.tmp.png
file:///C:\Users\郭曉娟\AppData\Local\Temp\ksohtml\wps3EBC.tmp.png
3、開始寫驅動程序。
[plain] view plain copy print?file:///C:\Users\郭曉娟\AppData\Local\Temp\ksohtml\wps3ECD.tmp.png
1.
#include   
2.
3.
#include   
4.
5.
#include   
6.
7.
#include   
8.
9.
#include   
10.
11.
#include   
12.
13.
#include   
14.
15.
#include   
16.
17.
#define DEV_NAME    "test-dev"  
18.
19.
//定義蜂鳴器配置IO的地址   
20.
21.
#define GPD0CON  0x114000A0  
22.
23.
volatile unsigned long *bell_config = NULL ;   
24.
25.
volatile unsigned long *bell_dat = NULL ;   
26.
27.
int bell_open(struct inode *inode, struct file *filp)  
28.
29.
{  
30.
31.
    printk("bell_open\n");  
32.
33.
    //清寄存器   
34.
35.
    *bell_config &= ~(0xf);  
36.
37.
    //設置io為輸出   
38.
39.
    *bell_config |= (0x1);  
40.
41.
    return 0;  
42.
43.
}  
44.
45.
  
46.
47.
int bell_close(struct inode *inode, struct file *filp)  
48.
49.
{  
50.
51.
    printk("bell_close\n");  
52.
53.
    //關閉蜂鳴器   
54.
55.
    *bell_dat &= ~0x1 ;  
56.
57.
    return 0;  
58.
59.
}  
60.
61.
  
62.
63.
long bell_ioctl(struct file *filp, unsigned int request, unsigned long arg)  
64.
65.
{  
66.
67.
    //控制蜂鳴器的狀態(tài)   
68.
69.
    switch(request)  
70.
71.
    {  
72.
73.
        case 0:  
74.
75.
            printk(KERN_EMERG"bell on\n");  
76.
77.
            *bell_dat |= 0x1 ;  
78.
79.
            break;  
80.
81.
  
82.
83.
        case 1:  
84.
85.
            printk(KERN_EMERG"bell off\n");  
86.
87.
            *bell_dat &=~0x1 ;  
88.
89.
            break;  
90.
91.
    }  
92.
93.
    return 0 ;  
94.
95.
}  
96.
97.
  
98.
99.
struct file_operations fops = {  
100.
101.
    .owner = THIS_MODULE ,  
102.
103.
    .open = bell_open,  
104.
105.
    .release = bell_close,  
106.
107.
    .unlocked_ioctl = bell_ioctl,  
108.
109.
};  
110.
111.
  
112.
113.
int major ;  
114.
115.
int test_init(void)  
116.
117.
{  
118.
119.
    printk("bell_init\n");  
120.
121.
    //注冊設備   
122.
123.
    major = register_chrdev(major, DEV_NAME, &fops);  
124.
125.
    //映射IO   
126.
127.
    bell_config = (volatile unsigned long *)ioremap(GPD0CON , 16);  
128.
129.
    //加4個字節(jié)偏移到GP0DAT順便映射該物理地址   
130.
131.
    bell_dat = bell_config + 1 ;      
132.
133.
    return 0;  
134.
135.
}  
136.
137.
  
138.
139.
void test_exit(void)  
140.
141.
{  
142.
143.
    printk("bell_exit\n");  
144.
145.
    //解除注冊   
146.
147.
    unregister_chrdev(major, DEV_NAME);  
148.
149.
    //取消映射   
150.
151.
    iounmap(bell_config);  
152.
153.
}  
154.
155.
  
156.
157.
module_init(test_init);  
158.
159.
module_exit(test_exit);  
160.
161.
  
162.
163.
MODULE_LICENSE("GPL");  
164.
165.
MODULE_AUTHOR("Y.X.YANG");  
166.
167.
MODULE_VERSION("2016.1.16");  
168.
4、寫測試程序
[plain] view plain copy print?file:///C:\Users\郭曉娟\AppData\Local\Temp\ksohtml\wps3EDE.tmp.png
1.
#include   
2.
3.
#include   
4.
5.
#include   
6.
7.
#include   
8.
9.
  
10.
11.
int main(int argc, char **argv)  
12.
13.
{  
14.
15.
    int fd;  
16.
17.
    //打開設備   
18.
19.
    fd = open("/dev/test-dev",O_RDWR) ;  
20.
21.
    if(-1 == fd)  
22.
23.
    {  
24.
25.
        printf("open fair!\n");  
26.
27.
        return -1 ;  
28.
29.
    }  
30.
31.
    while(1){  
32.
33.
        //打開蜂鳴器   
34.
35.
        ioctl(fd,1);  
36.
37.
        sleep(1);  
38.
39.
        //關閉蜂鳴器   
40.
41.
        ioctl(fd,0);  
42.
43.
        sleep(1);  
44.
45.
    }  
46.
47.
    return 0;  
48.
49.
}  
50.
5、編寫makefile
[plain] view plain copy print?file:///C:\Users\郭曉娟\AppData\Local\Temp\ksohtml\wps3EEE.tmp.png
1.
obj-m   += bell.o  
2.
3.
  
4.
5.
ROOTFS = /disk/A9/filesystem  
6.
7.
KERNEL = /disk/A9/linux-3.5/  
8.
9.
all:  
10.
11.
    make -C $(KERNEL) M=`pwd` modules  
12.
13.
  
14.
15.
clean:  
16.
17.
    make -C $(KERNEL) M=`pwd` clean  
18.
19.
    rm -rf my_bell  
20.
21.
  
22.
23.
install:  
24.
25.
    make -C $(KERNEL) M=`pwd` modules_install INSTALL_MOD_PATH=$(ROOTFS)  
26.
27.
  
28.
29.
my_bell:  
30.
31.
    arm-linux-gcc my_bell.c -o my_bell  
32.
33.
  
34.

本文地址:http://m.qingdxww.cn/thread-519734-1-1.html     【打印本頁】

本站部分文章為轉載或網(wǎng)友發(fā)布,目的在于傳遞和分享信息,并不代表本網(wǎng)贊同其觀點和對其真實性負責;文章版權歸原作者及原出處所有,如涉及作品內容、版權和其它問題,我們將根據(jù)著作權人的要求,第一時間更正或刪除。
您需要登錄后才可以發(fā)表評論 登錄 | 立即注冊

廠商推薦

  • Microchip視頻專區(qū)
  • 利用SAM E54 Xplained Pro評估工具包演示CAN轉USB橋接器以及基于CAN的主機和自舉程序應用程序
  • 使用SAM-IoT Wx v2開發(fā)板演示AWS IoT Core應用程序
  • 使用Harmony3加速TCP/IP應用的開發(fā)培訓教程
  • 集成高級模擬外設的PIC18F-Q71家族介紹培訓教程
  • 貿澤電子(Mouser)專區(qū)

相關視頻

關于我們  -  服務條款  -  使用指南  -  站點地圖  -  友情鏈接  -  聯(lián)系我們
電子工程網(wǎng) © 版權所有   京ICP備16069177號 | 京公網(wǎng)安備11010502021702
快速回復 返回頂部 返回列表
主站蜘蛛池模板: 日韩a一级欧美一级在线播放 | 天堂bt在线 | bt日韩| 国产刚刚发育被强j在线播放 | 国产婷婷综合在线视频 | 亚洲视频欧美 | 亚洲视频欧洲视频 | 国产美女在线免费观看 | 日韩欧美视频一区二区 | 久久精品成人一区二区三区 | 一色屋精品免费视频 视频 一日本道加勒比高清一二三 | 韩国一级毛片在线观看 | 色男人的天堂 | 美日韩一区二区三区 | 青青青在线视频播放 | h亚洲| 日本在线观看的免费 | 中国大陆高清aⅴ毛片 | 国产精品一区二区手机看片 | 国产精品va在线观看一 | 免费一区在线观看 | 在线视频免费观看a毛片 | 久久精品国产72国产精福利 | 欧美国产精品不卡在线观看 | 日本不卡高清中文字幕免费 | 啦啦啦高清影视在线观看视频? | 国语精品91自产拍在线观看二区 | 91网站免费观看 | 草莓视频app下载站长统计 | 国产麻豆视频网站 | 青青草国产青春综合久久 | 精品日韩在线视频一区二区三区 | 欧美成人免费全部观看在线看 | 精品国产免费观看一区高清 | 九九久久精品国产 | 日韩精品一 | 欧美日韩国产另类在线观看 | 国内久久精品视频 | 日韩一级欧美一级一级国产 | 日韩成人动漫在线观看 | 一级女人18毛片免费 |