Linux驱动编程day6-外部中断处理

最基本的中断:外部高低电平中断
中断源:中断号60,PIO中断,
选择有中断输入功能的GPIO口作为中断输入
设置PIN脚功能为EINT(110)
定义PI12、PI13脚作为中断输入脚

#define D11     PI12
#define D12     PI13

设置PI12、PI13脚的功能为EINT功能(对应不同的中断编号)

#define PI12_13_SELECT_MASK (0xff<<16)
#define PI12_13_SELECT_EINT (0x66<<16)

不同功能,引脚内部的电路连接不同,通过改变寄存器Bit位的值,来改变引脚的功能(查看寄存器功能手册)
配置PI_CFG1寄存器:

regval = readl(PI_CFG1);
regval &= ~PI12_13_SELECT_MASK;
regval |= PI12_13_SELECT_EINT;
writel(regval, PI_CFG1); 

配置中断配置寄存器:(选择触发方式)

#define PIO_INT_CFG3        (PIO_BASE_REMAP + 0x20C)
#define CFG3_EINT24_25_MASK (0xff)
#define CFG3_EINT24_25_N_EDGE   (0x11)

//配置触发方式
regval = readl(PIO_INT_CFG3);
regval &= ~CFG3_EINT24_25_MASK; //先清零
regval |= CFG3_EINT24_25_N_EDGE; //相应位置位
writel(regval, PIO_INT_CFG3); 

打开中断使能

#define PIO_INT_CTL         (PIO_BASE_REMAP + 0x210)
//打开24、25中断
regval = readl(PIO_INT_CTL);
regval |= 3<<24;
writel(regval, PIO_INT_CTL);

注册中断处理程序:

重要函数:request_irq();
向内核出册中断号和中断函数的关系

#define PIO_IRQ     60  //中断源序号
//注册成功,中断名字“eint_drv”会出现在/proc/interrupts中
//参数0表示不共享中断源号,若设为IRQF_SHARED表示和其他设备共享这个中断,但要求其他设备也设为共享方式
err = request_irq(PIO_IRQ, eint_irq, 0, "eint_drv", NULL);
    if(err)
    {
         printk("request_irq 60 fail\n");
    }

中断处理函数:

//中断状态寄存器,哪个中断产生,哪一位被置1
#define PIO_INT_STATUS      (PIO_BASE_REMAP + 0x214)

unsigned int eint_status = 0;
irqreturn_t eint_irq(int irq, void *dev_id)
{
    //处理动作
    eint_status = readl(PIO_INT_STATUS); //读出寄存器的值
    if(eint_status & (1 << 24)){ //11脚产生中断
        ev_press = 1;
        writel(1 << 24, PIO_INT_STATUS); //写“1”清中断
    }
    if(eint_status & (1 << 25)){
        ev_press = 1;
        writel(1 << 25, PIO_INT_STATUS);
    }
    return IRQ_HANDLED;
}

释放中断号:

free_irq(PIO_IRQ, NULL);

配置所有的寄存器通常都是用过位运算进行写入,具体设置的值需要查看技术手册

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值