【记录】ARM-linux开发之按键控制
[复制链接]
本帖最后由 ywlzh 于 2016-7-30 11:19 编辑
驱动框架:
采用混杂驱动程序的框架,具体细节在下面这个帖子二楼做过描述
http://bbs.eeworld.com.cn/thread-495558-1-1.html
硬件电路图:
QQ图片20160730083821.jpg (31.87 KB, 下载次数: 0)
2016-7-30 08:37 上传
QQ图片20160730083854.jpg (40.78 KB, 下载次数: 0)
2016-7-30 08:37 上传
分析:
对于按键程序的编写,在我用stm32单片机的时候,就有多种控制方式,ARM-linux 下也有多种方式去做,查询,中断,poll机制,信号,用内核定时器........
查询方式:
这种方式的实现,内核只需要提供read,open接口即可,在open()里面将对应引脚初始化成输入配置,在应用程序中,C语言写的话,while(1){}无限循环,读按键,发现读出来的值有变化,就证明按键按下去了,就打印到终端,用qt,C++写的话,需要自己创建一个线程,在这个线程里不断的执行读,打印,不管是用什么应用程序写,用top命令可以发现自己的应用程序占据cpu 77.7%甚至更多。这种方式显然不适合。
中断方式:
对于中断更多的解释可以查看《宋宝华-精通LINUX设备驱动开发》第四章第2节
QQ图片20160730091509.jpg (45.66 KB, 下载次数: 0)
2016-7-30 09:14 上传
QQ图片20160730091626.jpg (136.56 KB, 下载次数: 0)
2016-7-30 09:15 上传
QQ图片20160730091652.jpg (104.18 KB, 下载次数: 0)
2016-7-30 09:15 上传
从中提出我需要写的部分,中断配置添加进我写好的混杂驱动程序框架中,在函数外定义一个结构体:
static unsigned char key_value; //保存键值,作为全局变量使用复制代码
/* 硬件引脚 定义 */
struct pin_des {
int pin;
unsigned char key_val;
};
static struct pin_des pins_desc[3] = {
{MXS_PIN_TO_GPIO(PINID_SSP0_DATA4), 0x01},
{MXS_PIN_TO_GPIO(PINID_SSP0_DATA