NanoPi—M1(H3)———基于该平台的一个内核中的按键中断程序开发历程

本文详细介绍了在NanoPi M1平台上,基于H3芯片进行按键中断程序开发的过程,包括硬件初始化、中断号注册、中断处理函数的编写。在注册中断号时遇到与系统冲突的问题,通过分析内核源码、修改配置规避了中断号已被占用的冲突,并强调了在中断处理函数中清除中断的重要性。
摘要由CSDN通过智能技术生成

        以前用的是Tiny210的开发板,在那个上面做过一个按键中断的驱动程序。现在在这个H3的开发板上照着以前的的驱动程序做一个按键的中断程序。

        首先是硬件初始化,主要是配置相应的寄存器:

#define PL_CFG0_REG 0x01F02C00
#define PL_EINT_CFG0 0x01F02E00
#define PL_EINT_CTL 0x01F02E10
#define PL_EINT_STATUS 0x01F02E14
#define PL_EINT_DEB 0x01F02E18

//设置PL3为外部中断模式:
	gpio_config = ioremap(PL_CFG0_REG,4);
	data = readl(gpio_config);
    data &= 0xffff0fff;
	data |= 0x00006000;
	writel(data,gpio_config);
	
	
	//下降沿触发中断
	gpio_config = ioremap(PL_EINT_CFG0,4);
	data = readl(gpio_config);
	data &= 0xffff0fff;
	data |= 0x00001000;
	writel(data,gpio_config);
	
	//使能中断
	gpio_config = ioremap(PL_EINT_CTL,4);
	data = readl(gpio_config);
	//data &= 0xFfffffff;
	data |= 0x00000008;
	writel(data,gpio_config);

        然后是注册中断号:

//注册中断处理程序
	/*IRQF_TRIGGER_FALLING:下降沿产生中断*/
	/*IRQ_EINT16_31(中断号)查找文件路径: /arch/arm/mach-s5pv210/include/mach/irqs.h 中*/
    //request_irq(gpio_to_irq(S5PV210_GPH2(0)),key_int,IRQF_TRIGGER_FALLING,"testkey",0);
    
	//request_irq(gpio_to_irq(43),key_int,IRQF_TRIGGER_FALLING,"testkey",0);
	//SUNXI_IRQ_EINTL          IRQF_TRIGGER_LOW|IRQF_SHARED
	val = request_irq(77,key_int,0,"testkey",NULL);
        在这个注册中断号这里走了很多的弯路:

        1、芯片引脚PL3的中断号不知道是多少,首先从芯片手册上查找,但是最后得出的结果是芯片PL这一组共用一个中断号,当时很不解,后来查找资料发现,PL这一组确实共用一个中断号,具体区分是哪个引脚的中断,有一个中断发生的寄存器,通过查看这个寄存器来判断是哪一个引脚发生的中断。从芯片手册上查到PL这一组的中断号是77,但是这个中断号和linux内核中的中断号是一样的吗?210开发板的时候,内核中的中断号的查找路径:

/*IRQ_EINT16_31(中断号)查找文件路径: /arch/arm/mach-s5pv210/include/mach/irqs.h 中*/

按照这个方式查找:

Z:\home\nanopi_h3\lichee\linux-3.4\arch\arm\mach-sunxi\include\mach\sun8i

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值