ImageVerifierCode 换一换
格式:DOC , 页数:11 ,大小:227.50KB ,
资源ID:3100477      下载积分:20 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-3100477.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验 8-2 键盘中断驱动实验.doc)为本站会员(hw****26)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

实验 8-2 键盘中断驱动实验.doc

1、实验 8-2 键盘中断驱动实验【实验目的】 掌握键盘原理。 熟悉驱动的中断机制。【实验步骤】第一步: 利用 vi 编辑器,编写一个 Keypad.c 驱动代码;1、 增加驱动所需的头文件和变量#include #include #include #include #include #include #include #include MODULE_LICENSE(“GPL“);#define DEVICE_NAME “emdoor_kbd“#define KEYVALUE_HAVE 1#define KEYVALUE_NO 0#define KPC_DIR 1private_data;KBD_

2、RET kbd_ret;while(1)if(kbd-kbd_status=KEYVALUE_HAVE)kbd_ret = kbd-kbd_buff;copy_to_user(buffer, kbd-kbd_status=KEYVALUE_NO;return sizeof(KBD_RET);elseif (filp-f_flags interruptible_sleep_on(if (signal_pending(current)return -ERESTARTSYS;return sizeof(KBD_RET);3、 实现键盘驱动中断服务例程static void Emdoor_isr_kb

3、d(int irq, void *dev_id, struct pt_regs *reg)printk(KERN_EMERG“Emdoor_isr_kbd,Interruptn“);int kpc_value;KBD_DEV * kbd = (KBD_DEV *) dev_id;spin_lock_irq(kpc_value=KPC;if(kpc_valueif(kbd-kbd_buff!=0xFF)switch(kbd-kbd_buff)case 0x0: kbd-kbd_buff=5; break;case 0x1: kbd-kbd_buff=6; break;case 0x2: kbd-

4、kbd_buff=7; break;case 0x5: kbd-kbd_buff=8; break;case 0x10: kbd-kbd_buff=9; break;case 0x11: kbd-kbd_buff=10; break;case 0x12: kbd-kbd_buff=11; break;case 0x15: kbd-kbd_buff=12; break;case 0x20: kbd-kbd_buff=13; break;case 0x21: kbd-kbd_buff=14; break;case 0x22: kbd-kbd_buff=15; break;case 0x25: kb

5、d-kbd_buff=16; break;default: break;kbd-kbd_status=KEYVALUE_HAVE;else if(kpc_valueif(kbd-kbd_buff!=0x0)switch(kbd-kbd_buff)case 0x40: kbd-kbd_buff=1; break;case 0x2: kbd-kbd_buff=2; break;case 0x4: kbd-kbd_buff=3; break;case 0x20: kbd-kbd_buff=4; break;default: break;kbd-kbd_status=KEYVALUE_HAVE;if

6、( fasync )kill_fasync( wake_up_interruptible(spin_unlock_irq(4、 实现键盘驱动设备打开操作函数static int Emdoor_kbd_open(struct inode *inode, struct file *filp)int ret;printk(KERN_EMERG “ Emdoor_kbd_open!n“);KBD_DEV * kbd;kbd =(KBD_DEV *) kmalloc(sizeof(KBD_DEV ), GFP_KERNEL);KPC=KPC_ASACT | (3wq);pxa_gpio_mode(94

7、| GPIO_ALT_FN_1_IN);/KP_DKINpxa_gpio_mode(95 | GPIO_ALT_FN_1_IN);/KP_DKINpxa_gpio_mode(98 | GPIO_ALT_FN_1_IN);pxa_gpio_mode(99 | GPIO_ALT_FN_1_IN);pxa_gpio_mode(100 | GPIO_ALT_FN_1_IN);pxa_gpio_mode(101 | GPIO_ALT_FN_1_IN);pxa_gpio_mode(102 | GPIO_ALT_FN_1_IN);pxa_gpio_mode(103 | GPIO_ALT_FN_2_OUT);

8、/KP_MKOUTpxa_gpio_mode(104 | GPIO_ALT_FN_2_OUT);/KP_MKOUTpxa_gpio_mode(105 | GPIO_ALT_FN_2_OUT);/KP_MKOUTpxa_gpio_mode(108 | GPIO_ALT_FN_2_OUT);/KP_MKOUTkbd-kbd_status=KEYVALUE_NO;filp-private_data=kbd;ret = request_irq(IRQ_KEYPAD, Emdoor_isr_kbd, SA_INTERRUPT, DEVICE_NAME, kbd);if (ret)printk(KERN_

9、EMERG “ Interrupt init=%x!n“,ret);return ret;return 0;5、 实现键盘驱动 select 和 poll 操作函数static unsigned int Emdoor_kbd_poll(struct file *filp,struct poll_table_struct *wait)printk(KERN_EMERG “ Emdoor_kbd_poll!n“);KBD_DEV * kbd=filp-private_data;poll_wait(filp,return (kbd-kbd_status=KEYVALUE_HAVE) ? (POLLI

10、N|POLLRDNORM): 0 ;static int Emdoor_kbd_release(struct inode *inode, struct file *filp)printk(KERN_EMERG “ Emdoor_kbd_release!n“);KBD_DEV * kbd = filp-private_data;KPC=0x0;Emdoor_kbd_fasync(-1, filp, 0);kfree(kbd );free_irq(IRQ_KEYPAD, kbd);return 0;6、 实现键盘驱动非阻塞访问操作函数static int Emdoor_kbd_fasync(int

11、 fd, struct file * file, int mode)return fasync_helper(fd, file, mode, 7、 键盘驱动文件结构体定义static struct file_operations Keypad_fops = open: Emdoor_kbd_open,read: Emdoor_kbd_read,release: Emdoor_kbd_release,poll: Emdoor_kbd_poll,fasync: Emdoor_kbd_fasync,owner: THIS_MODULE,;8、 键盘驱动初始化函数定义static int _init

12、Emdoor_kbd_init(void)printk(KERN_EMERG “ Emdoor_kpd initializedn“);int ret;ret = register_chrdev(62, DEVICE_NAME, if (ret #include #include #include #include #include #include int fd, fd_max;fd_set readfds;void handle();int main(void)fd=-1;long oflags; fd= open(“/dev/emdoor_kbd“,O_RDWR);if(fd0)print

13、f(“Keypad device open success!n“);elseprintf(“Keypad device open fail!n“);return 0;fd_max = fd;signal(SIGIO, fcntl(fd, F_SETOWN, getpid();oflags = fcntl(fd, F_GETFL);fcntl(fd, F_SETFL, oflags | FASYNC);printf(“Please press the keypad:n“);while(1);void handle() char buf=0;FD_ZERO(FD_SET(fd, select(fd

14、_max + 1, if ( FD_ISSET(fd, printf(“Scancode is 0x%08xn“, buf); 第五步: 利用vi编辑器,编写一个用于编译Keypad_test.c的Makefile 文件;其中CC = arm-linux-gcc为交叉编译工具所在的路径位置,INCLUDEDIR = /usr/local/xscalev1/arm-linux/include为头文件所在的路径# Makefile for Keypad test#CC = /opt/xscalev1/bin/arm-linux-gccINCLUDEDIR = /usr/local/xscalev1

15、/arm-linux/includeCFLAGS = -Wall -I. -I$(INCLUDEDIR)TARGET_TEST=Keypad_testOBJ_TEST = $(TARGET_TEST)SOURCE_TEST = $(TARGET_TEST).cALL: $(CC) $(CFLAGS) -o $(OBJ_TEST) $(SOURCE_TEST)clean:rm -rf $(OBJ_TEST)第六步: 运行 make 命令对 Keypad_test.c 源代码进行编译,用 ls 命令查看编译后的结果,利用 file 命令查看 Keypad_test 文件的格式,应为 ARM 格式的

16、ELF 文件。【图 8-2-2】第七步: 在 Linux 操作系统下输入 minicom,配置串口参数,然后打开 EELiod目标平台电源,平台启动后,按 CTRL+A,然后按 Z,启动串口命令界面,按 S 键,选择 zmodem 传输方式;按回车第八步: 选择 PC 平台中驱动模块文件 Keypad.ko 和驱动测试文件 Keypad_test,并按回车键。下载选中的文件,文件下载完毕后按 ESC 键,退出串口传输,返回目标平台界面。第九步: 在目标平台终端利用 mknod 命令建立设备文件节点;并利用 insmod 命令动态加载驱动模块,同时利用 lsmod 命令查看驱动模块的加载情况,【图 8-2-3】第十步: 在目标平台终端运行八段数码驱动测试程序 Keypad_test,然后按目标平台上键盘阵列中的任一按键,在平台终端将显示键盘驱动中断产生情况、select 和 poll 调用以及返回的键值。【图 8-2-4】第十一步: 按 CTRL+c 退出驱动测试程序,在平台终端将显示驱动退出时的调试信息。【图 8-2-5】第十二步: 在目标平台终端利用 rmnod 卸载 Keypad 驱动模块,查看驱动模块的卸载时输出的信息.【图 8-2-6】

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。