有一段函数判断是否有按键被按下代码如下,求理解

static int iskey_down(unsigned long irq)
{
int reg, gpio_no;

irq_no = (int irq);
irq_no = irq_no -44; //EINT4~29 , 20~23 //此处含义?????

if(irq_no<8)

{

reg = _raw_read(S3C2410_GPFDAT);

gpio_no = irq_no;

}

else

{

reg = raw_readl(S3C2410_GPGDAT);

gpio_no = irq_no - 8; //此处减8的含义???

}

if(reg&(1<gpio_no))

return 0;

else

return 1; //return 的返回值0和1有什么区别????

}

慕无忌1623718
浏览 91回答 2
2回答

冉冉说

S3C2410_GPFDAT口上接了8个按键,S3C2410_GPGDAT中上接了8个按键,一个bit位代表一个按键,一共16个按键。当有按键按下时,通过轮询或中断方式知道了有按键信息,然后传进了一个irq号的参数,这个参数数值是44+(0~15)=44~59,这个数据可能是根据的接的中断号或者其它某些硬件的设计规则得到的(具体看你设备硬件的连接及配置),代表着哪一个按键按下了。static int iskey_down(unsigned long irq){int reg, gpio_no;irq_no = (int irq); // 取得中断号(按键标识)irq_no = irq_no -44; //EINT4~29 , 20~23 //减掉偏移量44得到0~15的键码,分别代表16个按键中的一个if(irq_no<8) // 如果0~7,那就是按在GPFDAT口上的8个按键{reg = _raw_read(S3C2410_GPFDAT); //读取GPFDATA口上的按键状态,每bit代表一个按键gpio_no = irq_no; // 具体按键数值在GPFDATA中的位置(0~7)和按键编号(0~7)对应(0:7~0:7),可以直接用于后面取出具体的bit位}else{reg = raw_readl(S3C2410_GPGDAT); //读取GPGDATA口上的按键状态,每bit代表一个按键gpio_no = irq_no - 8; // 具体按键数值在GPGDATA中的位置(0~7)和按键编号(8~15)有一个偏移的映射关系,所以直接减8让它位对应(0:7~0:7),以便于后面取出具体的bit位}if(reg&(1<gpio_no)) // 如果对应的按键bit位没有按下(此时gpio_no就代表着相应的按键在对应键盘状态数值中的bit位的位置第0~7位)return 0; //按键没有按下或者松开了噢elsereturn 1; //按键被按下了噢~~~}

凤凰求蛊

irq_on是怎么定义的? 来个完整代码吧。 return的值就是告诉调用者程序运行的情况
打开App,查看更多内容
随时随地看视频慕课网APP