基于ARM A53开发板,使用按键中断及中断底半部实现《led灯状态取反》的驱动
#include <linux/init.h>
#include <linux/module.h>
#include <linux/timer.h>
#include <linux/workqueue.h>
#include <linux/gpio.h>
#include<linux/interrupt.h>
?//GIPO口的初始化
#define GPIO(m,n) m*32+n
#define GPIOA28 GPIO(0,28)
#define GPIOB12 GPIO(1,12)
#define GPIOE13 GPIO(4,13)
#define GPIOB8 GPIO(1,8)
#define GPIOB16 GPIO(1,16)
int irqno[2] = {GPIOB8,GPIOB16};
int gpiono[] = {GPIOA28,GPIOB12,GPIOE13};
?//延時工作隊列定義結(jié)構(gòu)體
struct delayed_work dwork;
//中斷底板部處理函數(shù) 延時
void myfunc(struct work_struct *work){
printk("%s : %s : %d\n",__FILE__,__func__,__LINE__);
schedule_delayed_work(&dwork,msecs_to_jiffies(1000));
}
//中斷處理函數(shù)
irqreturn_t my_irq_handler(int irq, void *dev){
//紅燈GPIO口狀態(tài)獲取、取反、及設(shè)置回填
int red_statu = gpio_get_value(GPIOA28);
red_statu = red_statu ? 0:1;
gpio_set_value(GPIOA28,red_statu);
//調(diào)用執(zhí)行中斷底板部處理函數(shù)
schedule_delayed_work(&dwork,0);
return IRQ_HANDLED;
}
?
//入口初始化函數(shù)
static int __init work_timer_init(void){
int i,ret;
//釋放系統(tǒng)占用的gpio口
for(i=0; i<ARRAY_SIZE(gpiono); i++){
gpio_free(gpiono[i]);
}
//申請GPIO口(本實(shí)驗只用紅燈)
for(i = 0;i<ARRAY_SIZE(gpiono);i++){
ret = gpio_request(gpiono[i],NULL);
if(ret){
printk("gpio_request %d error",gpiono[i]);
return ret;
}
//輸出方向
gpio_direction_output(gpiono[i],0);
}
//中斷申請? 兩個按鍵
for(i=0;i<ARRAY_SIZE(irqno);i++){
ret = request_irq(gpio_to_irq(irqno[i]),my_irq_handler, IRQF_TRIGGER_FALLING,NULL, NULL);
if(ret){
printk("request_irq error");
return ret;
}
}
//延時工作隊列初始化對象
INIT_DELAYED_WORK(&dwork,myfunc);
return 0;
}
//出口注銷申請資源
static void __exit work_timer_exit(void){
int i;
for(i=0; i<ARRAY_SIZE(gpiono); i++){
gpio_free(gpiono[i]);
}
for(i=0;i<ARRAY_SIZE(irqno);i++)
{
free_irq(gpio_to_irq(irqno[i]), NULL);
}
cancel_delayed_work_sync(&dwork);
}
module_init(work_timer_init);
module_exit(work_timer_exit);
MODULE_LICENSE("GPL");
?
轉(zhuǎn)載于:https://www.cnblogs.com/huiji12321/p/11493976.html
總結(jié)
以上是生活随笔為你收集整理的基于ARM A53开发板,使用按键中断及中断底半部实现《led灯状态取反》的驱动的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring学习(二)Spring Io
- 下一篇: 常量与格式化输出练习