⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keypad.c

📁 sparc硬件平台上的键盘驱动
💻 C
字号:
#include <stdio.h>#include "../frame/frm_hd_device.h"#include " ../kernel/kern_irq.h"#include "keypad.h"D_UINT16 drv_get_numb(KEYCODE  *key , int keycode){    int   row,col;            if((keycode&0x00000080) !=0)                 key->short_long = 1;  // 是长按键           else  key->short_long = 0;  // 是短按键           if((keycode&0x00000060) !=0)                    key->push_pop = 1;    // 按键被按下           else  key->push_pop = 0;    // 按键释放                     row = keycode&0x00000038;                     col = keycode&0x00000007;            key->key_value = code[row][col];           printf("the key->key_value is:%c\n",key->key_value);           printf("row=%d,col=%d\n",row,col);           KP_STS = 0x00000001;           return 0;}D_UINT8 handler(D_INT32 irq, void *devid, void *dd){         KEYCODE  *key_val;     int keycode1 = KP_DAT;     drv_get_numb(*key_val , keycode1);     printf("%d%d%d\n",key_val->short_long,key_val->push_pop,key_val->key_value);     return 0; }   D_UINT8  drv_keypad_ioctl(D_UINT8 request, void *param)  //修改为重按键形式{   /* KEYCODE  *key_val;    *int keycode2 = KP_DAT;*/     int* pp = (int*)param;     if(*pp == 0)     	  { KP_CTRL =0x00000000;     	  	KP_CTRL = KP_CTRL|0x00015000;  //设定Re_press和时间间隔为150ms(5x30ms);     	  	}     kern_enable_irq(6);     kern_request_irq(6, handler, 0x000F000A, 0);             //   get_numb(*key_val , keycode2);     return TRUE;} D_BOOL drv_keypad_init(d_device *keypad){    if(!keypad)         return FALSE;     KP_CTRL =0x00000000;     KP_CTRL =0x00000a00;      printf("the initialization is ok\n");     kern_enable_irq(6);     kern_request_irq(6, handler, 0x000F000A, 0);     printf("the irq is opened\n");     return 0;} void drv_keypad_exit(void){        KP_CTRL =0x00000000;     printf("the rtc is exit\n"); }int main(){    int parm;	   D_UINT8 reqt;	   scanf("%d\n",&parm);	   d_device *key;	   printf("begin test\n");	   drv_keypad_init(key);	   printf("KP_STS = 0x%d\n",KP_STS);	   drv_keypad_ioctl(reqt , &parm);	   drv_keypad_exit();	   printf("over!\n");	   return 0;	}d_device keypad = {0x0F,0x0A,drv_keypad_init,drv_keypad_exit,NULL,NULL,drv_keypad_ioctl,NULL,NULL,handler,0};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -