**如下:
#include
#include
#include
#include
#include
#include
#include
static
struct input_dev *button_dev;
#define button_irq irq_eint2
static
struct timer_list buttons_timer;
/* 定義乙個定時器結構體 */
static
void
func
(void
)//定義tasklet並繫結tasklet排程函式
declare_tasklet
(mytasklet, func,0)
;//declare_work(mywork, func);
static
void
buttons_timer_function
(unsigned
long data)
//中斷的上半步
static irqreturn_t button_interrupt
(int irq,
void
*dummy)
static
int __init s5pv210_button_init
(void
)//set to the eint2 mode
s3c_gpio_cfgpin
(s5pv210_gph0(2
),s3c_gpio_sfn
(0x0f))
;if(request_irq
(button_irq, button_interrupt, irqf_trigger_falling | irqf_trigger_rising,
"button-sw5"
,null))
button_dev =
input_allocate_device()
;if(!button_dev)
button_dev->evbit[0]
=bit_mask
(ev_key)
; button_dev->keybit[
bit_word
(key_left)]=
bit_mask
(key_left)
; error =
input_register_device
(button_dev);if
(error)
return0;
err_free_dev:
input_free_device
(button_dev)
; err_free_irq:
free_irq
(button_irq, button_interrupt)
;return error;
}static
void __exit s5pv210_button_exit
(void
)module_init
(s5pv210_button_init)
;module_exit
(s5pv210_button_exit)
;// module_***這種巨集作用是用來新增模組描述資訊
module_license
("gpl");
// 描述模組的許可證
module_author
("mark <[email protected]>");
// 描述模組的作者
module_description
("s5pv210 button driver");
// 描述模組的介紹資訊
module_alias
("s5pv210_button");
// 描述模組的別名資訊
S5PV210 裸機中斷
這裡我以外部中斷為例畫出了中斷響應的過程。當外部中斷得到響應,會由硬體自動轉到異常向量表,執行對應的異常處理程式。在這裡指的就是irq的處理程式。在異常處理程式irq handle中將會執行現場的保護與恢復,以及最重要的中斷處理函式 注意,這裡就來到了中斷處理部分,而不是異常處理了,相當於是乙個兩級...
S5PV210控制蜂鳴器
s5pv210帶有乙個蜂鳴器,十分吵鬧,本章將學習如何控制蜂鳴器。相關引腳 蜂鳴器的操作十分簡單,原理跟操作led一樣,通過控制gpdo o這個引腳就可以達到控制蜂鳴器的目的。1.start.s start.s做了下面3件事 第一步 關看門狗 第二步 設定棧,以便呼叫c函式 第三步 呼叫main函式...
S5PV210控制蜂鳴器
s5pv210帶有乙個蜂鳴器,十分吵鬧,本章將學習如何控制蜂鳴器。相關引腳 蜂鳴器的操作十分簡單,原理跟操作led一樣,通過控制gpdo o這個引腳就可以達到控制蜂鳴器的目的。1.start.s start.s做了下面3件事 第一步 關看門狗 第二步 設定棧,以便呼叫c函式 第三步 呼叫main函式...