3 矩阵键盘扫描流程的分析.doc
《3 矩阵键盘扫描流程的分析.doc》由会员分享,可在线阅读,更多相关《3 矩阵键盘扫描流程的分析.doc(8页珍藏版)》请在三一办公上搜索。
1、3 矩阵键盘扫描流程的分析关于按键这块,我想矩阵键盘的原理我就不说了,网上一搜一大把,但是要注意CC2530的IO口的配置情况,涉及到:是外设还是普通的IO口的选择,端口方向的选择,端口的中断是否使能(这里是在行输入用到),上拉还是下拉,初始的时候端口是高电平还是低电平等的一些配置。下面上图,文档本身的描述:这些最基本的配置都是在HalKeyInit()里面实现的,原函数如下void HalKeyInit(void)#if(HAL_KEY=TRUE)halKeySavedKeys=HAL_KEY_CODE_NOKEY;/初始化保存的键值HAL_KEY_COL_SEL&=(uint8)HAL_K
2、EY_COL_BITS;/设置列端口的功能为普通的IO口HAL_KEY_COL_DIR|=HAL_KEY_COL_BITS;/设置列端口的方向为输出if(HAL_KEY_ROW_PULLDOWN)/这里涉及到上拉还是下拉的问题HAL_KEY_COL_PORT|=HAL_KEY_COL_BITS;/输出所有的列为高电平elseHAL_KEY_COL_PORT&=(uint8)HAL_KEY_COL_BITS;/输出所有的列为低电平HAL_KEY_ROW_SEL&=(HAL_KEY_ROW_BITS);/设置行为普通的IO口HAL_KEY_ROW_DIR&=(HAL_KEY_ROW_BITS);/
3、设置行的方向为输入/pull down setup if necessary if(HAL_KEY_ROW_PULLDOWN)/如果是下拉模式,进来配置行端口为下拉HAL_KEY_ROW_INP|=HAL_KEY_ROW_PDUPBIT;pHalKeyProcessFunction=NULL;/这里是对回调函数的初始化为空HalKeyConfigured=FALSE;halKeyTimerRunning=FALSE;#endif下面我们开始对历程中的键盘扫描进行简要的分析:我们从每一个框框开始分析:(1)start就不用说了(2)All columns active output,All ro
4、ws interrupt enable.这里就是我们前面所说的整个对IO初始化的过程,这里要说明的是对HalKeyInit()的调用要从rsa_main.c中说起,rsa_main.c文件没什么东西,只有一个函数int main(void),在main函数中HalDriverInit()被调用,HalDriverInit()对很多外设做了初始化,这里面就包含了HalKeyInit()这个函数(也就是对键盘初始化的函数),但是在这个函数中并没有使得All rows interrupt enable,别急,仍然是在main函数中的倒数第二句,又调用了一个函数HalKeyConfig(RSA_KEY
5、_INT_ENABLED,RSA_KeyCback);这句非常关键,RSA_KEY_INT_ENABLED是对行中断的使能,RSA_KeyCback是个回调函数,RSA_KeyCback本身是个普通的函数,它的作用是读取按下键盘的值,它被定义在rsa_basic.c中上前段设计到的程序void HalKeyConfig(bool interruptEnable,halKeyCBack_t cback)#if(HAL_KEY=TRUE)Hal_KeyIntEnable=interruptEnable;pHalKeyProcessFunction=cback;/登记回调函数(也就是说回调函数pHa
6、lKeyProcessFunction不等于NULL了)if(Hal_KeyIntEnable)/注意这里TI原始程序中默认中断时使能的PICTL&=(HAL_KEY_ROW_EDGEBIT);/设置是上升沿中断还是下降沿中断if(HAL_KEY_ROW_EDGE=HAL_KEY_FALLING_EDGE)PICTL|=HAL_KEY_ROW_EDGEBIT;HAL_KEY_ROW_ICTL|=HAL_KEY_ROW_ICTLBITS;/使能中断,具体到某一位的中断HAL_KEY_ROW_IEN|=HAL_KEY_ROW_IENBIT;/整个端口使能中断,不具体某一位if(HalKeyConf
7、igured=TRUE)osal_stop_timerEx(Hal_TaskID,HAL_KEY_EVENT);else如果没有使用端口中断/disable interrupt不使能中断HAL_KEY_ROW_ICTL&=(HAL_KEY_ROW_BITS);HAL_KEY_ROW_IEN&=(HAL_KEY_ROW_IENBIT);osal_start_timerEx(Hal_TaskID,HAL_KEY_EVENT,HAL_KEY_POLLING_VALUE);HalKeyConfigured=TRUE;#endif(3)Row interrupt这里指的是触发了行中断这个事件,首先调用H
8、AL_ISR_FUNCTION(halKeyPort0Isr,P0INT_VECTOR)这个函数,接着在中断程序中调用halProcessKeyInterrupt(),在这个函数中调用了osal_start_timerEx(Hal_TaskID,HAL_KEY_EVENT,HAL_KEY_DEBOUNCE_VALUE),osal_start_timerEx的作用是步骤(4)所提到的Start key de-bounce timer,也就是说启动键盘防抖动的定时器HAL_ISR_FUNCTION(halKeyPort0Isr,P0INT_VECTOR)/中断程序,halKeyPort0Isr/是
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 矩阵键盘扫描流程的分析 矩阵 键盘 扫描 流程 分析
链接地址:https://www.31ppt.com/p-4146168.html