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

📄 keyscan.c

📁 针对嵌入式系统
💻 C
字号:
/**************************************************************
Key Scan
**************************************************************/

#include "def.h"
#include "option.h"
#include "2440addr.h"
#include "2440lib.h"
#include "2440slib.h" 

U8 Key_Scan( void )
{
	if     ( (rGPFDAT&(1<< 0)) == 0 )		return 1 ;
	else if( (rGPFDAT&(1<< 2)) == 0 )		return 2 ;
	else if( (rGPFDAT&(1<< 3)) == 0 )		return 3 ;
	else if( (rGPGDAT&(1<< 0)) == 0 )		return 4 ;
	else return 0xff;
}

static void __irq Key_ISR(void)
{
	U8 key;
	U32 r;

	EnterCritical(&r);
	if(rINTPND==BIT_EINT8_23) {
		ClearPending(BIT_EINT8_23);
		if(rEINTPEND&(1<<8)) {
			rEINTPEND |= 1<< 8;
		}
	}
	if(rINTPND==BIT_EINT0) {
		ClearPending(BIT_EINT0);
	}
	if(rINTPND==BIT_EINT2) {
		ClearPending(BIT_EINT2);
	}
	if(rINTPND==BIT_EINT3) {
		ClearPending(BIT_EINT3);
	}
	key=Key_Scan();
	if( key != 0xff )
	Uart_Printf( "Interrupt occur... K%d is pressed!\n", key ) ;

	ExitCritical(&r);
}

void KeyScan_Test(void)
{
	Uart_Printf("\nKey Scan Test, press ESC key to exit !\n");	

	rGPGCON = rGPGCON & (~3) | 2 ;		//GPG0 set EINT
	rGPFCON = rGPFCON & (~((3<<6)|(3<<4)|(3<<0))) | ((2<<6)|(2<<4)|(2<<0)) ;		//GPF3,2,0 set EINT
	
	rEXTINT0 &= ~(7|(7<<8)|(7<<12));	
	rEXTINT0 |= (2|(2<<8)|(2<<12));	//set eint0,2,3 falling edge int
	rEXTINT1 &= (~7);
	rEXTINT1 |= 2;	//set eint8 falling edge int

	rEINTPEND |= (1<<8);		//clear eint8
	rEINTMASK &= (~(1<<8));	//enable eint8
	ClearPending(BIT_EINT0|BIT_EINT2|BIT_EINT3|BIT_EINT8_23);
	pISR_EINT0 = pISR_EINT2 = pISR_EINT3 = pISR_EINT8_23 = (U32)Key_ISR;
	EnableIrq(BIT_EINT0|BIT_EINT2|BIT_EINT3|BIT_EINT8_23);	

	while( Uart_GetKey() != ESC_KEY ) ;
	DisableIrq(BIT_EINT0|BIT_EINT2|BIT_EINT8_23);	
}

⌨️ 快捷键说明

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