LINUX驱动之矩阵键盘

本文详细介绍了LINUX环境下矩阵键盘驱动的实现,包括按键数据结构、中断处理、GPIO端口初始化和中断申请。通过扫描矩阵按键数组,结合中断处理函数,实现了按键的识别与响应。
摘要由CSDN通过智能技术生成

/* butt_drv.h */
//……

typedef struct _st_key_info_matrix       /* 按键数据结构 */
{
	unsigned char key_id;                /* 按键ID */
	unsigned int irq_no;                 /* 对应的中断号 */
	unsigned int irq_gpio_port;          /* 对应的中断线的输入端口地址*/
	unsigned int kscan_gpio_port;        /* 对应的KSCAN端口地址 */
} st_key_info_matrix;

typedef struct _st_key_buffer             /* 按键缓冲数据结构 */
{
	unsigned long jiffy[MAX_KEY_COUNT];   /* 按键时间, 5秒钟以前的铵键作废*/
	unsigned char buf[MAX_KEY_COUNT];     /* 按键缓冲区 */
	unsigned int head,tail;               /* 按键缓冲区头和尾 */
} st_key_buffer;
//……

//下面是矩阵按键数组的定义,数组元素的信息(一个按键信息)按照0行0列,0行1列,…,3行2列,3行3列的顺序逐行排列。
static st_key_info_matrix key_info_matrix[MAX_COLUMN][MAX_ROW] =
{
	{
  {10, 	IRQ_EINT0, S3C2410_GPF0, S3C2410_GPE11},		/* 0行0列 */
	{11, 	IRQ_EINT0, S3C2410_GPF0, S3C2410_GPG6},
	{12, 	IRQ_EINT0, S3C2410_GPF0, S3C2410_GPE13},
	{16, 	IRQ_EINT0, S3C2410_GPF0, S3C2410_GPG2}},
	{
  {7, 	IRQ_EINT2, S3C2410_GPF2, S3C2410_GPE11},		/* 1行0列 */
	{8, 	IRQ_EINT2, S3C2410_GPF2, S3C2410_GPG6},
	{9, 	IRQ_EINT2, S3C2410_GPF2, S3C2410_GPE13},
	{15, 	IRQ_EINT2, S3C2410_GPF2, S3C2410_GPG2}},
	{
  {4, 	IRQ_EINT11, S3C2410_GPG3, S3C2410_GPE11},		/* 2行0列 */
	{5, 	IRQ_EINT11, S3C2410_GPG3, S3C2410_GPG6},
	{6, 	IRQ_EINT11, S3C2410_GPG3, S3C2410_GPE13},
	{14,	IRQ_EINT11, S3C2410_GPG3, S3C2410_GPG2}},
	{
  {1, 	IRQ_EINT19, S3C2410_GPG11, S3C2410_GPE11},		/* 3行0列 */
	{2, 	IRQ_EINT19, S3C2410_GPG11, S3C2410_GPG6},
	{3, 	IRQ_EINT19, S3C2410_GPG11, S3C2410_GPE13},
	{13, 	IRQ_EINT19, S3C2410_GPG11, S3C2410_GPG2}},
};

//下面是与按键相关的端口的初始化函数。这些函数已经在简单的GPIO字符设备驱动程序里被使用过。此外,set_irq_type()函数用于设定中断线的类型,在本实例中通过该函数将4个中断线的类型配置为下降沿触发式。
static void init_gpio(void)
{
	s3c2410_gpio_cfgpin(S3C2410_GPE11, S3C2410_GPE11_OUTP);     /* GPE11 */
	s3c2410_gpio_setpin(S3C2410_GPE11, 0);
	s3c2410_gpio_cfgpin(S3C2410_GPE13, S3C2410_GPE13_OUTP);     /* GPE13 */
	s3c2410_gpio_setpin(S3C2410_GPE13, 0);
	s3c2410_gpio_cfgpin(S3C2410_GPG2, S3C2410_GPG2_OUTP);     /* GPG2 */
	s3c24
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值