《TQ2440开发板按键点亮LED驱动开发详解》.docVIP

《TQ2440开发板按键点亮LED驱动开发详解》.doc

  1. 1、本文档共11页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
《TQ2440开发板按键点亮LED驱动开发详解》.doc

文章记录了作者在2440开发板上实现按键点亮LED驱动开发的详细过程,还记录了一些容易出现的错误,以及怎么解决这些错误。 一、驱动开发流程 Linux驱动开发不同于应用程序的开发。驱动开发是直接和硬件打交道的,通过对硬件的操作给应用程序提供一些接口函数,使得应用程序能够“间接”的控制硬件来工作。对于按键点亮LED的驱动开发流程如下。 驱动开发具体步骤 1、查看开发板TQ2440底板原理图,找到按键和LED模块,如下图: 图-2 按键和LED电路图 从上图我们可以清楚地看到K1~K4对应的管脚是ENT1~ENT4,LED1~LED4对应的管脚是nLED_1~nLED_4. 2、查看TQ2440_核心板原理图,找到对应的CPU管脚,如下图: 图-3 按键和LED对应CPU管脚电路图 查看s3c2440芯片手册,查看CPU管脚的模式,如下图 从上图我们可以看出按键对应的CPU管脚GPF0~GPF4都是占两位(如:GPF0[1:0])。按键是一种中断,要想让按键工作在中断模式下,就要设置GPF0~GPF4(GPF3除外)管脚都设置在中断模式下,即为10。对于LED对应的CPU管脚GPB5~GPB8也是占两位。要想让LED工作,就要让LED工作在输出模式下,即对应管脚设置为01. 4、编写按键点亮LED驱动程序 /*调用内核头文件,和应用程序调用的头文件不一样*/ #include <linux/module.h> #include <linux/kernel.h> #include <linux/fs.h> #include <linux/init.h> #include <linux/delay.h> #include <asm/irq.h> #include <linux/interrupt.h> #include <asm/uaccess.h> #include <asm/arch/regs-gpio.h> #include <asm/hardware.h> #include <linux/device.h> #include <linux/poll.h> #define DEVICE_NAME "tope-buttons" //自定义驱动称为“tope-buttons”。 #define BUTTON_MAJOR 232 //自定义驱动的主设备号是232。注意:此处的主设备号不 能和系统已使用的一样,用cat /proc/devices 查看该设备号是否已使用,如果已被使用,请换一个未使用的主设备号。 #define IOCTL_LED_ON 1 //定义LED亮为1 #define IOCTL_LED_OFF 0 //定义LED暗为0 /* 定义含中断,管脚,管脚设置等信息的结构体 */ struct button_irq_desc { int irq; int pin; int pin_setting; int number; char *name; }; /* 用来指定按键所用的外部中断引脚及中断触发方式, 名字 */ static struct button_irq_desc button_irqs [] = { {IRQ_EINT1, S3C2410_GPF1, S3C2410_GPF1_EINT1, 0, "KEY1"}, /* K1 */ {IRQ_EINT4, S3C2410_GPF4, S3C2410_GPF4_EINT4, 1, "KEY2"}, /* K2 */ {IRQ_EINT2, S3C2410_GPF2, S3C2410_GPF2_EINT2, 2, "KEY3"}, /* K3 */ {IRQ_EINT0, S3C2410_GPF0, S3C2410_GPF0_EINT0, 3, "KEY4"}, /* K4 */ }; 上面初始化成员里的S3C2410_GPF0_EINT0在Regs-gpio.h中定义为 #define S3C2410_GPF0_EINT0 (0x02 << 0),即为我们前面说的“10”模式,其他的管脚类似。这个初始化函数的作用就是将如S3C2410_GPF0_EINT0的模式写入地址为如S3C2410_GPF0的寄存器里,并将这个管脚设置成中断模式,以及添加一些其他信息。 /* 初始化四个按键的值key_values */ static volatile int key_values [] = {0, 0, 0, 0}; static unsigned long led_table [] ={ S3C2410_GPB5, S3C2410_GPB6, S3C2410_GPB7, S3C2410_

文档评论(0)

ghfa + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档