天嵌 ARM开发社区

 找回密码
 注册
查看: 1941|回复: 1

扩展IO口接矩阵键盘,出现问题

[复制链接]
rjm1989 发表于 2010-5-26 15:19:03 | 显示全部楼层 |阅读模式
扩展IO口来驱动矩阵键盘 GPG1,3,5,7接列线,作为中断,EXTINT9,11,13,15;
GPE11,13 GPB8,6接行线 相关程序部分如下:   将程序下载到开发板上之后,4×4键盘中只要有一个键按下,就一直产生中断,串口上一直打印eint×,不知道原因?
static void __irq Key_ISR(void)
{U32 r;       

        EnterCritical(&r);
        if(rINTPND==BIT_EINT8_23)
        {
                Uart_Printf("eint%d\n",county++);
                ClearPending(BIT_EINT8_23);
        }
            //   rGPGCON = rGPGCON & (~((3<<14)|(3<<10)|(3<<6)|(3<<2))) | ((2<<14)|(2<<10)|(2<<6)|(2<<2)) ;        //eint 9,11,13,15 set EINT
                 rGPEDAT = rGPEDAT & (~((3<<11)|(3<<13))) | ((0<<11)|(0<<13));
                 rGPBDAT = rGPBDAT & (~((3<<6)|(3<<8))) | ((0<<6)|(0<<8));
        ExitCritical(&r);
}
void KeyScan_Test(void)
{  
        Uart_Printf("\nKey Scan Test, press ESC key to exit !\n");       

        rGPBUP = rGPBUP & ~0x01e0|0x01e0;                        //  LED [8:5] => PU En
        rGPBCON = rGPBCON & ~0x3d57fd|0x3d57fd;                //LED[8:5],GPB0 => OUTPUT ;
       
         rGPECON = rGPECON & (~((3<<26)|(3<<22))) | ((1<<26)|(1<<22)) ;                //GPE13,11 set OUTPUT
         rGPEUP = rGPEUP & ~0x2800|0x2800;                        //  GPE13,11 => PU En
       
         //rGPGCON = rGPGCON & (~((3<<14)|(3<<10)|(3<<6)|(3<<2))) | ((1<<14)|(1<<10)|(1<<6)|(1<<2));// GPG1,3,5,7 set OUTPUT
         //rGPGDAT = rGPGDAT & (~((1<<1)|(1<<5)|(1<<7)))|((1<<1)|(1<<3)|(1<<5)|(1<<7));
         
          rGPEDAT = rGPEDAT & (~((3<<11)|(3<<13))) | ((0<<11)|(0<<13));
         rGPBDAT = rGPBDAT & (~((3<<6)|(3<<8))) | ((0<<6)|(0<<8));//GPB8,6 GPE11,13口送0
       
        rEXTINT1 &= ~((7<<4)|(7<<12)|(7<<20)|(7<<28));       
        rEXTINT1 |= ((7<<4)|(7<<12)|(7<<20)|(7<<28));                //set eint 9,11,13,15 switch level int


    rGPGCON = rGPGCON & (~((3<<14)|(3<<10)|(3<<6)|(3<<2))) | ((2<<14)|(2<<10)|(2<<6)|(2<<2)) ;//GPG1,3,5,7 set EINT
        rEINTPEND = rEINTPEND|(1<<9)|(1<<11)|(1<<13)|(1<<15);                                //clear eint 9,11,13,15
        rEINTMASK &= ~((1<<9)|(1<<11)|(1<<13)|(1<<15));                                //enable eint 9,11,13,15
        ClearPending(BIT_EINT8_23);
                pISR_EINT8_23 = (U32)Key_ISR;
        EnableIrq(BIT_EINT8_23);       

         while( Uart_GetKey() != ESC_KEY );
         DisableIrq(BIT_EINT8_23);       
        }
 楼主| rjm1989 发表于 2010-5-26 15:55:45 | 显示全部楼层
在中断响应程序中,读取列的值 ,好比按下GPG1列对应的某个键,从串口打印信息中可以看出,在产生的无数次中断中,刚开始数次GPG1口的值为0,之后为1 但是仍然产生中断,不知道为什么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号-2 )

GMT+8, 2024-11-1 06:49 , Processed in 1.046875 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表