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

📄 hw_fr0605akey.c

📁 RK27驱动
💻 C
字号:
/******************************************************************/
/*   Copyright (C) 2007 ROCK-CHIPS FUZHOU . All Rights Reserved.  */
/*******************************************************************
File	:  hw_vx979key.c
Desc	:  VX979按键消息\接口函数的实现
		  
Author	: huangxinyu
Date	: 2007-07-09
Notes	: 

$Log: hw_Fr0605Akey.c,v $
Revision 1.1.1.1  2008/03/06 13:29:06  Lingzhaojun
no message

Revision 1.1  2007/11/26 14:31:30  Huangxinyu
增加vx979key目录

Revision 1.4  2007/10/15 09:16:37  Huangxinyu
根据RK27提交修改driver

Revision 1.3  2007/10/08 02:38:45  Lingzhaojun
添加版本自动注释脚本

*********************************************************************/

#include "include.h"
#include "hw_include.h"
#include "hw_gpio.h"
#include "hw_Fr0605Akey.h"
#include "keyglobal.h"
#include "hwapi_adc.h"
#include "hw_timer.h"

#if (KEY_TYPE == Fr0605AKEY)

static  UINT16  gKeyPortState;	    /*	用于记录 按键 PIO 的状态,相应位为高表示按下,相应位为低表示没有按下或弹起 */
static  UINT8   gKeyPioState;               /*  用于记录GPIO口用作keyboard之前的状态,在反初始化时可恢复 */

#ifdef ADC_KEY_EN	
extern INT16U			gKeyScanCode;
extern INT16U			gKeyDownMsgSend;
extern unsigned short   AdcValue[4];
//extern unsigned char 	AdcCurrChn;
#endif
extern UINT16 gSysState;

void  FieldRockKeySendMsg(UINT16 press , UINT16 KeyNo);

KEYEXT  UINT16   gKeyIOMasks[] = 
	{PIO_MENU_MASK, PIO_FFW_MASK, PIO_FFD_MASK, PIO_UP_MASK,  PIO_PLAY_MASK };
/**************************************************************************
* 函数描述: 导航键初始化
* 入口参数: 无
* 出口参数: 无
* 返回值:   无
***************************************************************************/
void RockKey_PowerOnInit(void)
{
    gKeyPioState = GPIO_GetPortDirection(PIO_KEY);
    //GPIO_PullUpDown(GPIOPortA_Pin7, GPIOPort_NoPull);
    //GPIO_SetPinDirection(GPIOPortA_Pin7, GPIO_IN);
    GPIO_SetPinDirection(GPIOPortC_Pin1, GPIO_IN);
    GPIO_SetPinDirection(GPIOPortC_Pin2, GPIO_IN);
    GPIO_SetPinDirection(GPIOPortC_Pin3, GPIO_IN);
    GPIO_SetPinDirection(GPIOPortC_Pin4, GPIO_IN);
    GPIO_SetPinDirection(GPIOPortC_Pin6, GPIO_IN);
    GPIO_SetPinLevel(GPIOPortC_Pin1,GPIO_LOW);
    GPIO_SetPinLevel(GPIOPortC_Pin2,GPIO_LOW);
    GPIO_SetPinLevel(GPIOPortC_Pin3,GPIO_LOW);
    GPIO_SetPinLevel(GPIOPortC_Pin4,GPIO_LOW);
    GPIO_SetPinLevel(GPIOPortC_Pin6,GPIO_LOW);
    
    #ifdef		ADC_KEY_EN
    //StartHWTimer(1/*timer1*/, 1/*mstick*/, ADC_KEY_TimerISR);
	#endif

}
UINT16  TestadcValue;
/**************************************************************************
* 函数描述: 导航键硬件检测
* 入口参数: 无
* 出口参数: 无
* 返回值:   无
***************************************************************************/
void RockKeyScanning( void )
{
	UINT8	pioData;
	UINT16	keys;
    UINT16 tempADCValue;

    //GPIO_SetPortDirection(PIO_KEY, 0x0); // set key port to input

	pioData = GPIO_GetPortLevel(PIO_KEY);  
	for( keys = 0; keys < (UINT8)MAX_PIO_KEYS; keys++ )  
	 {
		if( (pioData & gKeyIOMasks[keys])==0 )          //为低,按键没有按下 
		{
		   if(gKeyPortState & (0x0001<<keys))	        /* 原来是按下 状态 */
			  {
				gKeyPortState &= ~(0x0001<<keys);
			//	RockStopTimer( TID_KEY_BASE-KEY_SCAN_MIN+keys );
				FieldRockKeySendMsg( 0 , KEY_SCAN_MIN+keys );
			  }
		}
		else	/*	按键按下 */
		{
		    if((gKeyPortState & (0x0001<<keys))==0 )	    /*	原来是 弹起 状态 */
			  {
				gKeyPortState |= 0x0001<<keys;
				FieldRockKeySendMsg( 1 , KEY_SCAN_MIN+keys );
			  }
		}
	 }
#if 0
  //  GPIO_SetPinDirection(GPIOPortA_Pin7, GPIO_IN);
	pioData = GPIO_GetPinLevel(GPIOPortA_Pin7); 
     if( pioData == 1)    // 
        {
          if((gKeyPortState & (0x0001<<MAX_PIO_KEYS))==0 )  // 原来是弹起状态
            {
				gKeyPortState |= 0x0001<<MAX_PIO_KEYS;
               FieldRockKeySendMsg(1, MAX_PIO_KEYS);
            }
        }
     else
        {
          if(gKeyPortState & (0x0001<<MAX_PIO_KEYS))  // 原来是按下状态
            {
               gKeyPortState &= ~(0x0001<<MAX_PIO_KEYS);
               FieldRockKeySendMsg(0, MAX_PIO_KEYS);
            }
        }
#endif

#if 1   
	//ADC_Start(KEYBOARD_ADC, NULL);   // KEYBOARD_ADC
	//DelayMs_nops(5);
	//ADC_ReadData(&tempADCValue);
	//if( tempADCValue < 300 ) 
	
		tempADCValue = AdcValue[KEYBOARD_ADC];
		TestadcValue = tempADCValue;
	if( AdcValue[KEYBOARD_ADC] > 300 ) 
	{
          if((gKeyPortState & (0x0001<<(MAX_PIO_KEYS+1)))==0 )  // 原来是弹起状态
            {
				gKeyPortState |= 0x0001<<(MAX_PIO_KEYS+1);
               FieldRockKeySendMsg(1, (MAX_PIO_KEYS+1));
            }
	}
     else
        {
          if(gKeyPortState & (0x0001<<(MAX_PIO_KEYS+1)))  // 原来是按下状态
            {
               gKeyPortState &= ~(0x0001<<(MAX_PIO_KEYS+1));
               FieldRockKeySendMsg(0, (MAX_PIO_KEYS+1));
            }
        }

#endif

}

/**************************************************************************
* 函数描述: 发送按键消息
*           
* 入口参数: UINT16 press , UINT16 KeyNo
* 出口参数: 无
* 返回值:   无
***************************************************************************/
void  FieldRockKeySendMsg(UINT16 press , UINT16 KeyNo)
{
	if(gSysState&SYS_LCD_OFF)	//黑屏先唤醒
	{
		if(KeyNo == 7)			//HOLD键另外处理
		{
			RockKeySendKeyMsg(press, KeyNo);
			return;
		}
		if(press == 1)
			return;
		else
			RockKeySendKeyMsg(press, 8);	//发送无效消息
		return;
	}
	else
	{
        RockKeySendKeyMsg(press, KeyNo);
		return;
	}
}

static unsigned char AdcCurrChn = 0;
/**************************************************************************
* 函数描述: 读取通道AB的值和AD键数值
*           
* 入口参数: 无
* 出口参数: 无
* 返回值:   无
***************************************************************************/
void  ADC_KEYSCAN_READ(void)
{
    unsigned short adctemp;
 
//********************AD键读入判断*******************************   

    if(ADC_ReadData(&adctemp))
        AdcValue[AdcCurrChn] = adctemp;
    AdcCurrChn++;
    if(AdcCurrChn>=Adc_channel_max)
        AdcCurrChn = Adc_channel0;
    ADC_Start(AdcCurrChn,NULL);	
}	

/**************************************************************************
* 函数描述: 导航键反初始化
* 入口参数: 无
* 出口参数: 无
* 返回值:   无
***************************************************************************/
void RockKey_PowerOffDeinit(void)
{
    GPIO_SetPortDirection(PIO_KEY,gKeyPioState); // restore key port 
}

#endif

⌨️ 快捷键说明

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