首先,在做這個(gè)實(shí)驗(yàn)之前有三件事是要明確的:
1. linux下的中斷實(shí)驗(yàn)不需要像裸機(jī)實(shí)驗(yàn)一樣要自己寫(xiě)取消屏蔽,清除中斷標(biāo)志位的操作,系統(tǒng)會(huì)自動(dòng)幫你完成;
2.中斷號(hào)的申請(qǐng)我使用的是gpio_to_irq()這個(gè)宏,它會(huì)幫我們自動(dòng)分配中斷號(hào),返回值為中斷號(hào);
3. 在每個(gè)板子配套來(lái)的內(nèi)核代碼大部分都是已經(jīng)包含了按鍵中斷驅(qū)動(dòng),如果想另自己寫(xiě)的按鍵中斷驅(qū)動(dòng)不與內(nèi)核本身帶的發(fā)生中斷號(hào)上的沖突,應(yīng)先找到內(nèi)核代碼下的arch/arm/mach-s5pv210/mach-mini210.c中的gpio_bottons中的對(duì)按鍵初始化的代碼注釋掉(其他板子也類似),如下代碼所示:
static struct gpio_keys_button gpio_buttons[] = {
/*{
.gpio = S5PV210_GPH2(0),
.code = 158,
.desc = 'BACK',
.active_low = 1,
.wakeup = 0,
}, {
.gpio = S5PV210_GPH2(1),
.code = 102,
.desc = 'HOME',
.active_low = 1,
.wakeup = 1,
}, {
.gpio = S5PV210_GPH2(2),
.code = 139,
.desc = 'MENU',
.active_low = 1,
.wakeup = 0,
}, {
.gpio = S5PV210_GPH2(3),
.code = 232,
.desc = 'DPAD_CENTER',
.active_low = 1,
.wakeup = 0,
}, {
.gpio = S5PV210_GPH3(0),
.code = 105,
.desc = 'DPAD_LEFT',
.active_low = 1,
.wakeup = 0,
}, {
.gpio = S5PV210_GPH3(1),
.code = 108,
.desc = 'DPAD_DOWN',
.active_low = 1,
.wakeup = 0,
}, {
.gpio = S5PV210_GPH3(2),
.code = 103,
.desc = 'DPAD_UP',
.active_low = 1,
.wakeup = 0,
}, {
.gpio = S5PV210_GPH3(3),
.code = 106,
.desc = 'DPAD_RIGHT',
.active_low = 1,
.wakeup = 0,
}, {
.gpio = S5PV210_GPH1(7),
.code = 102,
.desc = 'HOME',
.active_low = 1,
.wakeup = 1,
}*/
};
下面給出完整代碼:
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 11 #define GPH2CON 0xe0200c40 12 13 irqreturn_t key_irq(int irq, void * dev_id) 14 { 15 //1. 檢測(cè)是否發(fā)生了按鍵中斷 16 17 18 //2. 清除已經(jīng)發(fā)生的按鍵中斷 19 20 21 //3. 打印按鍵值 22 printk('key down!n'); 23 24 return 0; 25 } 26 27 int key_open (struct inode *inode, struct file *filp) 28 { 29 return 0; 30 } 31 32 void key_hw_init() 33 { 34 //unsigned int data; 35 unsigned int *gpio_config; 36 37 gpio_config = ioremap(GPH2CON,4); 38 //data = readl(gpio_config); 39 //data &= ~0b1111; 40 //data |= 0b1111; 41 writel(0x0000000f,gpio_config); 42 } 43 44 struct file_operations key_fops = 45 { 46 .open = key_open, 47 }; 48 struct miscdevice key_miscdevice = 49 { 50 /*MISC_DYNAMIC_MINOR代表動(dòng)態(tài)分配次設(shè)備號(hào),即由系統(tǒng)自動(dòng)分配*/ 51 .minor = MISC_DYNAMIC_MINOR, 52 .name = 'key_miscdev', 53 .fops = &key_fops, 54 }; 55 56 static int key_init() 57 { 58 /*注冊(cè)混雜設(shè)備*/ 59 misc_register(&key_miscdevice); 60 61 /*申請(qǐng)中斷,如果內(nèi)核中已有按鍵中斷驅(qū)動(dòng),則需要把a(bǔ)rch/arm/mach-s5pv210/mach-mini210.c文件的gpio_buttons定義的相關(guān)按鍵去掉, 62 不然板子上的按鍵中斷就已經(jīng)被占用,不能注冊(cè)中斷*/ 63 /*注意:中斷號(hào)這個(gè)參數(shù)應(yīng)該用gpio_to_irq(S5PV210_GPH2(0)),假如用了IRQ_EINT16_31則按鍵驅(qū)動(dòng)不會(huì)工作*/ 64 request_irq(gpio_to_irq(S5PV210_GPH2(0)), key_irq, IRQF_TRIGGER_FALLING, 'key_miscdev', 0); 65 request_irq(gpio_to_irq(S5PV210_GPH2(1)), key_irq, IRQF_TRIGGER_FALLING, 'key_miscdev', 0); 66 request_irq(gpio_to_irq(S5PV210_GPH2(2)), key_irq, IRQF_TRIGGER_FALLING, 'key_miscdev', 0); 67 request_irq(gpio_to_irq(S5PV210_GPH2(3)), key_irq, IRQF_TRIGGER_FALLING, 'key_miscdev', 0); 68 69 return 0; 70 71 } 72 73 static void key_exit() 74 { 75 /*注銷設(shè)備*/ 76 misc_deregister(&key_miscdevice); 77 } 78 79 MODULE_LICENSE('GPL'); 80 81 module_init(key_init); 82 module_exit(key_exit);
上一篇:基于s5pv210外部中斷使用指南
下一篇:ARM的MMU功能分析
推薦閱讀最新更新時(shí)間:2025-06-25 01:21
- 熱門(mén)資源推薦
- 熱門(mén)放大器推薦
-
Applied Computational Physics (Joseph F. Boudreau, Eric S. Swanson) 應(yīng)用計(jì)算物理,900頁(yè)
-
嵌入式視頻應(yīng)用系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn) 基于TI DaVinci DM355處理器
-
嵌入式系統(tǒng)技術(shù)與設(shè)計(jì)
-
集成電路EDA設(shè)計(jì) 仿真與版圖實(shí)例
-
嵌入式硬件設(shè)計(jì)
-
小波理論:淺談應(yīng)用
-
電磁場(chǎng)及天線原理基礎(chǔ)
-
Unix操作系統(tǒng)設(shè)計(jì)
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦
- Microchip 升級(jí)數(shù)字信號(hào)控制器(DSC)產(chǎn)品線 推出PWM 分辨率和 ADC 速度業(yè)界領(lǐng)先的新器件
- 意法半導(dǎo)體STM32MP23x:突破成本限制的工業(yè)AI應(yīng)用核心
- 意法半導(dǎo)體推出用于匹配遠(yuǎn)距離無(wú)線微控制器STM32WL33的集成的匹配濾波芯片
- ESP32開(kāi)發(fā)板連接TFT顯示屏ST7789跳坑記
- 如何讓ESP32支持analogWrite函數(shù)
- LGVL配合FreeType為可變字體設(shè)置字重-ESP32篇
- 使用樹(shù)莓派進(jìn)行 ESP32 Jtag 調(diào)試
- ESP32怎么在SPIFFS里面存儲(chǔ)html,css,js文件,以及網(wǎng)頁(yè)和arduino的通訊
- ESP32 freeRTOS使用測(cè)試
- L6565 過(guò)載或短路鎖定關(guān)斷的典型應(yīng)用
- 使用 ON Semiconductor 的 KA7805E 的參考設(shè)計(jì)
- 具有開(kāi)路檢測(cè)功能的 LT4256-3 正高壓熱插拔控制器的典型應(yīng)用
- ADR420 超精密、低噪聲、5.00 Vout XFET 電壓基準(zhǔn)作為可編程 DAC 基準(zhǔn)的典型應(yīng)用
- AM3GW-4815SZ 15V 3 瓦 DC/DC 轉(zhuǎn)換器的典型應(yīng)用
- LTM8073EY 5Vout 從 7Vin 到 60Vin 降壓轉(zhuǎn)換器的典型應(yīng)用電路
- NCP716MTTBGEVB,LDO 穩(wěn)壓器,WDFN-6 封裝,超低靜態(tài)電流評(píng)估板
- LT1764AET-1.5 SCR 預(yù)穩(wěn)壓器的典型應(yīng)用可提供跨線路變化的效率
- 用于儀表的 12 位、32 通道 DAC
- 使用 IXYS 的 LTC3454EDD 的參考設(shè)計(jì)
- ZDS2022示波器百集實(shí)操特輯之24:CAN協(xié)議觸發(fā)方式設(shè)置
- S3C2440啟動(dòng)代碼分析 start.s
- 小米12真機(jī):鏡頭模組搭配線條設(shè)計(jì),多彩配色
- Excelitas公司推出μPAX-3脈沖氙氣光源
- 【話說(shuō)定時(shí)器系列】之四:STM32定時(shí)器更新事件及案例分享
- 基于恩智浦MPC5744P的SAE J1939協(xié)議棧開(kāi)發(fā)
- 采用頻率步進(jìn)雷達(dá)在真實(shí)環(huán)境中實(shí)現(xiàn)精確設(shè)計(jì)、驗(yàn)證和測(cè)試
- 上汽大眾:汽車網(wǎng)絡(luò)安全漏洞防護(hù)
- 恩智浦推出全新電池控制IC系列 助力新能源解決方案發(fā)展
- 全球首條GWh級(jí)新型固態(tài)電池生產(chǎn)線樣件下線
- 總投資455億元!三大動(dòng)力電池項(xiàng)目齊刷進(jìn)度條
- 現(xiàn)代汽車韓國(guó)建氫燃料電池廠,2028年投產(chǎn)
- 6月融資一覽:智能汽車芯片、第三代半導(dǎo)體、機(jī)器人成資本焦點(diǎn)
- 艙駕一體“點(diǎn)燃”新戰(zhàn)事
- 汽車智能化2.0引爆「萬(wàn)億蛋糕」,誰(shuí)在改寫(xiě)游戲規(guī)則?
- 2025研華智能系統(tǒng)產(chǎn)業(yè)伙伴峰會(huì)成功舉辦
- 意法半導(dǎo)體公布2025年第二季度財(cái)報(bào)和電話會(huì)議時(shí)間安排
- 車電分離 一分鐘換電來(lái)了!
- 技術(shù)詳解:如何開(kāi)發(fā)一個(gè)iOS小程序并且通過(guò)NFC標(biāo)簽觸發(fā)
- 科幻感十足!盤(pán)點(diǎn)未來(lái)可能普及的汽車配置
- 恩智浦利用RapidRF前端設(shè)計(jì)加快5G基礎(chǔ)設(shè)施建設(shè)
- 華為再公開(kāi)一項(xiàng)智能汽車行駛軌跡規(guī)劃專利,提升自動(dòng)駕駛安全性
- 鴻蒙車機(jī)將顯真容,國(guó)產(chǎn)汽車系統(tǒng)踏上崛起之路
- 誰(shuí)有能力挑戰(zhàn)Mobileye的地位
- 固特異輪胎裝上傳感器 實(shí)現(xiàn)輪胎的快速網(wǎng)聯(lián)化
- 中國(guó)汽研推出“智慧健康座艙”認(rèn)證
- 比亞迪聯(lián)手西門(mén)子共同推進(jìn)企業(yè)數(shù)字化轉(zhuǎn)型