s3c2410矩阵键盘驱动

本文介绍了在S3C2410开发板上矩阵键盘的驱动实现,包括初始化GPIO、设置中断类型、申请中断、中断处理函数以及读取按键值的流程。通过配置GPE、GPF和GPG的控制寄存器,设置中断为下降沿触发,并在中断处理中进行键盘扫描,将按键值存入缓冲区。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

fs2410开发板上矩阵键盘的硬件连接图如下:

      

连接矩阵键盘的8IO口与核心板IO依次对应为:

行:EINT0         GPF0  EINT2      GPF2  EINT11      GPF3   EINT19      GPF11

列:KCAN0        GPE11  KCAN1     GPG6  KCAN2     GPE13  KCAN3    GPG2

 

 

分析驱动入口函数button_init();

/*

   配置GPE,GPF,GPG的控制寄存器GPCON,和数据寄存器GPDAT,通过iremap()

   得到相应的IO口的虚拟地址,查数据手册可得,0x04表示32为。

*/

gpecon = ioremap(0x56000040, 0x04);//得到相应IO口的虚拟地址,下同

    gpedat = ioremap(0x56000044, 0x04);

    gpfcon = ioremap(0x56000050, 0x04);

    gpfdat = ioremap(0x56000054, 0x04);

    gpgcon = ioremap(0x56000060, 0x04);

gpgdat = ioremap(0x56000064, 0x04);

 

 

/*初始化GPIO*/

static void init_gpio(void)

{

    //GPE13 11 设置低位

    writel((readl(gpecon) |(~3<<(2*13)|(~3<<(2*11))) , gpecon); //GPE13,11 设置为输出

    writel(readl(gpedat) & (~1<<13) |(~1<<11), gpedat);  //GPE13,11 输出为0

 

    //GPG6, 2 设置低位

    writel((readl(gpgcon) | (~(3<<(2*6)|(~3<<(2*2)))), gpgcon);  //GPG6,2 设置为输出

    writel(readl(gpgdat) & 0xffffffbb, gpgdat);       //GPG6,2 输出为0

 

    writel((readl(gpfcon) | 0x33) & 0xffffffee, gpfcon);            //GPF2, 0 设置为中断

    writel((readl(gpgcon) | (3 << 22) | (3 << 6)) & (~((1 << 22) | (1 << 6))), gpgcon); //GPG11,3 设置为中断

 

    /*调用set_irq_type设置中断为下降沿中断*/

    set_irq_type(IRQ_EINT0, IRQT_FALLING);

    // printk("dddddddddddd=%x/n",EXTINT0);

    EXTINT0 = (EXTINT0 & (~0x07)) + 0x02;

    set_irq_type(IRQ_EINT2, IRQT_FALLING);

    EXTINT0 = (EXTINT0 & (~(0x07 << 8))) + (0x02 << 8);

    set_irq_type(IRQ_EINT11, IRQT_FALLING);

    EXTINT1 = (EXTINT1 & (~(0x07 << 12))) + (0x02 << 12);

    set_irq_type(IRQ_EINT19, IRQT_FALLING);

    EXTINT2 = (EXTINT2 & (~(0x07 << 12))) + (0x02 << 12);

                         

        进入申请中断函数request_irq:

 

static  int request_irqs()

{

                 int ret;

          /*

     IRQ_EINT0为中断号,button_irq为中断处理函数,SA_INTERUPT标志为快速中断方式,最后一个参数设为NULL.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值