三个按键实现按键中断
要求:按键按一下灯亮,再按一下灯灭
注:由于开发板位置,为了方便一一对应观察,采用key1控制LED3,key2控制LED2,key3控制LED1
0、添加相关设备树节点信息
①按键相关引脚,通过原理图可得:
key1------>gpiof9;
key2------>gpiof7;
key3------>gpiof8
②LED灯相关引脚:
led1----->gpioe10;
led2------>gpiof10;
led3------>gpioe8;
③编写完成之后在内核顶层目录下执行make dtbs重新生成设备树二进制文件
cp arch/arm/boot/dts/stm32mp157a-fsmp1a.dtb ~/tftpboot
④ 重新启动开发板
myleds{
myled1 = <&gpioe 10 0>;
myled2 = <&gpiof 10 0>;
myled3 = <&gpioe 8 0>;
};
myirq{
interrupt-parent = <&gpiof>;
interrupts = <7 0>,<8 0>,<9 0>;
};
1、获取设备树节点
本次采用通过名字进行获取(具体详情见gpio子系统(LED灯的操控实验))
2、从节点信息中解析出软中断号
int irq_of_parse_and_map(struct device_node *dev, int index)
功能:解析设备树节点信息获取软中断号
参数:
dev:设备树节点信息结构体指针
index:中断的索引号
返回值:成功返回软中断号,失败返回0
3、将要使用的中断注册进内核
int request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev)
功能:注册中断
参数:
irq:软中断号
handler:中断处理函数 //typedef irqreturn_t (*irq_handler_t)(int, void *);
&nbs

最低0.47元/天 解锁文章
4139

被折叠的 条评论
为什么被折叠?



