6410 Eboot 添加键盘控制
来源:互联网 发布:淘宝卖家骂人怎么处罚 编辑:程序博客网 时间:2024/05/20 18:52
升级的时候,需要搞个提示,加个键盘控制神马的。
所以,咱得把这个键盘加到Eboot里面。
由于Eboot里面使用不了这个中断,所以只能使用扫描按键的方式。
按键接的是:
行:GPK8~GPK13
列:GPL0~GPL4(这里只需要使用到一列就够了,就使用GPL0吧,这样就有6个按键了)
参照键盘驱动KeyPad,这里把其简化,分成初始化和循环扫描处理,按键识别三部分。
使用的时候,咱先初始化一下键盘:
调用
ret = InitKey();
初始化成功后,在循环里面调用
KScan_Proc();
去检测按键按下,接着再通过
keyValue = GetKeyDown();
去获取按下的按键,然后做识别处理。
6个按键,根据行列扫描后的键值,定义如下:(Key.h)
#defineKEY_ENTER(0x1)#defineKEY_SCAN(0x2)#defineKEY_CANCEL(0x4)#defineKEY_DELETE(0x8)#defineKEY_BACKSPACE(0x10)#defineKEY_UP(0x20)
Key.c的实现如下:
// *** you add ***// for 6410 key.// use row0 & col0~col5#include "Key.h"#include <windows.h>#include "Winbase.h"#include <oal.h>#include <s3c6410.h>//#ifdef _KEY_H_//#define _KEY_H_// define#defineSIZE_COLS1#defineKEYIF_Row_Read(pKeyPadReg->KEYIFROW)// KEYIFCON#defineFC_EN_DIS (0<<3)#defineFC_EN_EN (1<<3)#defineDF_EN_DIS (0<<2)#defineDF_EN_EN (1<<2)#defineINT_R_ENABLE (0<<1)#defineINT_R_DISABLE (1<<1)#defineINT_F_ENABLE (0<<0)#defineINT_F_DISABLE (1<<0)// KEYIFFC#defineFC_DIV_VAL(n) (((n)&0x3ff)<<0)#defineKEY_POWER_ON (1<<11) // PCLKCON#ifndef FIN#define FIN 12000000#endif#defineFT_CLK_DIV (FIN/32000 - 1)// KEYIFSTSCLR#defineCLEAR_P_INT (0xFF<<0)#defineCLEAR_R_INT (0xFF<<8)// global variablevolatile S3C6410_GPIO_REG *pGPIOReg2 = NULL;volatile S3C6410_KEYPAD_REG *pKeyPadReg = NULL;volatile S3C6410_SYSCON_REG *pSysConReg = NULL;DWORD KeyState[SIZE_COLS];// functionBOOL InitKey();void KScan_Proc();DWORD GetKeyDown();void ClearKey();BOOL InitKey(){ // GPIO Virtual alloc pGPIOReg2 = (S3C6410_GPIO_REG *)OALPAtoVA(S3C6410_BASE_REG_PA_GPIO, FALSE);if(pGPIOReg2 == NULL)return FALSE; // Keypad Virtual alloc pKeyPadReg = (S3C6410_KEYPAD_REG *)OALPAtoVA(S3C6410_BASE_REG_PA_KEYPAD, FALSE);if(pKeyPadReg == NULL)return FALSE; // Syscon Virtual alloc pSysConReg = (S3C6410_SYSCON_REG *)OALPAtoVA(S3C6410_BASE_REG_PA_SYSCON, FALSE);if(pSysConReg == NULL)return FALSE;// enable the Keypad Clock (PCLK)pSysConReg->PCLK_GATE |= KEY_POWER_ON;pKeyPadReg->KEYIFCON = INT_F_DISABLE|INT_R_DISABLE|DF_EN_EN|FC_EN_DIS;//Keypad interfae debouncing filter clock division registerpKeyPadReg->KEYIFFC = FC_DIV_VAL(FT_CLK_DIV);pKeyPadReg->KEYIFCOL = (0x00<<8);// select all column - Set Keypad column GPIO to output(low)//pGPIOReg2->GPLCON0=(pGPIOReg2->GPLCON0 & ~(0xfffff<<0)) | (0x33333<<0); //KBC_0(GPL0)~ KBC_4(GPL4)pGPIOReg2->GPLCON0=(pGPIOReg2->GPLCON0 & ~(0xf<<0)) | (0x3<<0);//KBC_0(GPL0)pKeyPadReg->KEYIFCOL = (0x0 & 0xff);// configure - Set Keypad row GPIO to [Key PAD ROW]pGPIOReg2->GPKCON1=(pGPIOReg2->GPKCON1 & ~(0xffffff<<0)) | (0x333333<<0); //KBR_0(GPK8)~ KBR_5(GPK13)// unmask the key interruptpKeyPadReg->KEYIFSTSCLR = CLEAR_P_INT|CLEAR_R_INT; // Clear Pressed/Released Interruptreturn TRUE;}void KScan_Proc(){int i=0;volatile int m=0;// Read the Matrix// KBC_0 ~ KBC_7for(i = 0 ; i < SIZE_COLS; i++){pKeyPadReg->KEYIFCOL = (0x0 & 0xff);// select a columnpKeyPadReg->KEYIFCOL = pKeyPadReg->KEYIFCOL | (0xff & ~(0x1 << i));for(m=0; m<2000; m++);KeyState[i] = (~KEYIF_Row_Read) & 0xff;for(m=0; m<2000; m++);}pKeyPadReg->KEYIFCOL = (0x0 & 0xff);}DWORD GetKeyDown(){DWORD key = 0x0;int i=0;for(i = 0 ; i < SIZE_COLS; i++){if(KeyState[i] & KEY_ENTER)key |= KEY_ENTER;if(KeyState[i] & KEY_SCAN)key |= KEY_SCAN;if(KeyState[i] & KEY_CANCEL)key |= KEY_CANCEL;if(KeyState[i] & KEY_DELETE)key |= KEY_DELETE;if(KeyState[i] & KEY_BACKSPACE)key |= KEY_BACKSPACE;if(KeyState[i] & KEY_UP)key |= KEY_UP;}return key;}void ClearKey(){memset(KeyState, 0, sizeof(KeyState)/sizeof(DWORD));}//#endif
特此记录一下。
仅供参考,请勿模仿~~
若存在错误,请大家指出
- 6410 Eboot 添加键盘控制
- iOS给键盘添加控制栏
- VR项目添加键盘鼠标控制
- 6410 Eboot 显示图片
- 键盘控制小游戏简化版(功能添加更新。。)
- WinCE Eboot中的OEM控制函数
- WinCE Eboot中的OEM控制函数
- WinCE Eboot中的OEM控制函数
- WinCE Eboot中的OEM控制函数
- WinCE Eboot中的OEM控制函数
- WinCE Eboot中的OEM控制函数
- 键盘控制:
- 键盘控制
- 键盘控制
- OpenGL之路(八)添加光照效果和键盘控制
- 键盘控制级联菜单
- js源码--键盘控制
- 用键盘控制电脑
- presentModalViewController 的动画效果
- 在SDK程序中使用MFC中的辅助类
- Debian中安装Bochs 2.6的方法
- 第3章:给出一个月的总天数
- javascript经典例子
- 6410 Eboot 添加键盘控制
- java.io.File中的绝对路径和相对路径
- Cocoa中NSString到NSDate的处理
- win7 系统下实现音量控制
- Android通过sharedUserId实现不同APK数据共享
- 修改源码文件的编码格式的小技巧
- mac批量缩放png文件
- 橡皮筋算法的原理和实现
- java.lang.IllegalStateException: Cannot forward after response has been committe