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

📄 drv_key.c

📁 Epson系列芯片开发的例子
💻 C
字号:
/********************************************************************************************************
 *													*
 *	Copyright (C) SEIKO EPSON CORP. 2002								*
 *													*
 *	File name: Drv_key.c										*
 *	  This is key matrix driver for Star.								*
 *													*
 *													*
 *	Revision history										*
 *		2002.05.30	Andrew Yin	Start.							*
 *													*
 *******************************************************************************************************/

#include "common.h"
#include "int.h"
#include "io.h"
#include "main.h"

void vInitKey( void );
void vIntKey( void );
unsigned char rucK5PortData;
unsigned char gucKeyCode;

void vInitKey( void )
{
	//[0x402c0] set K50, K51,K52,K53,K54=KEYI0,KEYI1,KEYI2,KEYI3 KEYI4
	*(volatile unsigned char *)IN_CFK5_ADDR &= 0xe0;		// select K5 function: K50, K51,K52,K53,K54
	//[0x402c9]
	*(volatile unsigned char *)IN_SEP_ADDR &= 0xe0;
	//[0x402ca]
	*(volatile unsigned char *)IN_SPPK_ADDR &= 0x0fc;	//set FPK0 interrupt input port K5
	//[0x402cc]
	*(volatile unsigned char *)IN_SCPK0_ADDR |= 0x1F;	//set K50-K54 input comparison register 0 
	//[0x402ce]
	*(volatile unsigned char *)IN_SMPK0_ADDR |= 0x1F;	//set K50-K54 interrupt mask enable
	//[0x40262]
	*(volatile unsigned char *)INT_PK0_PK1_ADDR &= 0x0f0;
	*(volatile unsigned char *)INT_PK0_PK1_ADDR |= INT_PRIL_LVL4;	//set Key input0 interruput level 4
	//[0x40280]
	*(volatile unsigned char *)INT_FP0_FK_ADDR |= 0x10;		// reset Key input0 interrupt flag
	//[0x40270]
	*(volatile unsigned char *)INT_EP0_EK_ADDR |= 0x10;		// enable Key input0 interrupt
	
	//[0x402c6]
//	*(volatile unsigned char *)IN_SPT0_SPT3_ADDR |= 0x55;	//select K50,K51,K52,K53,K54 input pin for port interrupt
//	*(volatile unsigned char *)IN_SPT0_SPT3_ADDR &= 0x55;
	//[0x402c7]
//	*(volatile unsigned char *)IN_SPT4_SPT7_ADDR |= 0x01;
//	*(volatile unsigned char *)IN_SPT4_SPT7_ADDR &= 0x0fd;
	//[0x402c8]
	//*(volatile unsigned char *)IN_SPP_ADDR &= 0x0e0;		//set FPT0-FPT4 high level triger
}

void vIntKey( void )
{
	asm("pushn	%r15");			// save r1,r2...r15
	asm("ld.w	%r9,%psr");		// EI,enable interrupt 
	asm("or 	%r9,0x10");
	asm("ld.w	%psr,%r9");
  	
	rucK5PortData = *(volatile unsigned char *)IN_K5D_ADDR & 0x1F;	// [0x402c1]
   	switch( rucK5PortData )
 	{
 		case 0x1E:
 			gucKeyCode = OKKEY;	//K50
 			break;
 		case 0x1D:
 			gucKeyCode = LEFTKEY;	//K51
 			break;
 		case 0x1B:
 			gucKeyCode = DOWNKEY;	//K52
 			break;
 		case 0x17:
 			gucKeyCode = UPKEY;	//K53
 			break;
 		case 0x0F:
 			gucKeyCode = RIGHTKEY;	//K54
 			break;
 		default:
 			gucKeyCode = NULL;
 	}

 	//[0x40280]
	*(volatile unsigned char *)INT_FP0_FK_ADDR |= 0x10;		// reset Key input0 interrupt flag

	asm("popn	%r15");			// restore r1,r2...r15
	asm("reti");
}

⌨️ 快捷键说明

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