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

📄 2410keypad.c

📁 三星公司的S3c2410嵌入式开发的键盘使用程序
💻 C
字号:
#include "def.h"
#include "option.h"
#include "2410addr.h"
#include "2410lib.h"
#include "2410slib.h"
#include "2410keypad.h"

void __irq KeyPad_Int(void);	//also Eint1 int
int KeyPadInit(void);

/****************************************************************
 *	             OURS2410EDU KEYPAD configuration                *
 *	             KEYPAD CHIP UR5HCSPI			                 *
 *  GPB6=/CS, GPG7 =SPIMISO0, GPE12=SPIMOSI0, GPE13=SPICLK0     *
 *  GPB6 =/CS, GPG5 =SPIMISO1, GPG6 =SPIMOSI1, GPG7 =SPICLK1     *
 *  GPB0 =DIO DIRECTION 0:MOSI→DIO  1:  DIO→MISO			     *
 ****************************************************************/

#define ONEBIT    0x1

#define KEYPADCSDIS       	(rGPBDAT |=(ONEBIT << 6))
#define KEYPADCSEN      	(rGPBDAT &=~(ONEBIT << 6))
#define KEYPADDIRMO       	(rGPBDAT &=~(ONEBIT << 0))
#define KEYPADDIRMI      	(rGPBDAT |=(ONEBIT << 0))


void Delay30us(void)
{
	unsigned int i;
	for (i=0;i<0x4ff;i++);
}

void Delay60us(void)
{
	unsigned int i;
	for (i=0;i<0x9ff;i++);
}


int	putcToKBCTL(U8 c)
{
	U32  	i;


	KEYPADCSEN;
	KEYPADDIRMO;
	Delay60us();

	while((rSPSTA1 & ONEBIT)==0);	// wait while busy

	rSPTDAT1 = c;	                // write left justified data

	while((rSPSTA1 & ONEBIT)==0);	// wait while busy
   	
   	KEYPADCSDIS;
   	
	i = rSPRDAT1;

	return(i);
}



U8 readKBValue(void)
{
	
	unsigned char i;
	
	KEYPADCSEN;
	KEYPADDIRMO;
	Delay60us();

	while((rSPSTA1 & ONEBIT)==0);	// wait while busy

	rSPTDAT1 = 0x15;	            // write read key value command

	while((rSPSTA1 & ONEBIT)==0);	// wait while busy
   	
	Delay30us();//delay 30us
	
	KEYPADDIRMI;	
	rSPTDAT1 = 0xff;	            // write read key value command

	while((rSPSTA1 & ONEBIT)==0);	// wait while busy

	i = rSPRDAT1;
	
   	KEYPADCSDIS;
   	KEYPADDIRMO;

	return(i);


}

int KeyPadInit()
{
    int  t;
    char dummy = (char)0xff;

	// Setup IO port for SPI interface & Keyboard
	
	// Setup EINT1 (KBDINT)
    rGPFCON &= ~(0x3 << 2); 		// Clear GPF1 
    rGPFCON |= (0x2 << 2);  		// Set GPF1 to EINT1 for Keyboard interrupt

    rEXTINT0 &= ~(0x7 << 4);    	// Clear EINT1
    rEXTINT0 |= (0x2 << 4);     	// fallig edge triggered for EINT1

	// setup SPI interface
	// GPG5 : SPIMISO (KBDSPIMISO)
	// GPG6 : SPIMOSI (KBDSPIMOSI)
	// GPG7 : SPICLK  (KBDSPICLK)
    rGPGCON &= ~((0x3 << 10) | (0x3 << 12) | (0x3 << 14));   // Clear GPG5,6,7
    rGPGCON |= ((0x3 << 10) | (0x3 << 12) | (0x3 << 14));    
     
	// setup _SS signal(nSS_KBD)
    rGPBCON &= ~(0x3 << 12);         // Clear GPB6
    rGPBCON |= (ONEBIT << 12);       // Set Port GPB6 to output for nSS signal
    
   	KEYPADCSDIS;			         // Set /SS high 

	// setup Dir signal (KEYBOARD)  CPU->7289
    rGPBCON &= ~(0x3 << 0);         // Clear GPB0 
    rGPBCON |= (ONEBIT << 0);       // Set Port GPB0 to output for _PWR_OK signal
	//    rGPDDAT &=~(ONEBIT << 0);        // set _PWR_OK to 0
	KEYPADDIRMO;

    
    
    
	// Setup SPI registers
    // Interrupt mode, prescaler enable, master mode, active high clock, format B, normal mode
	// rSPCON1 = (ONEBIT<<5)|(ONEBIT<<4)|(ONEBIT<<3)|(0x0<<2)|(ONEBIT<<1);

    // Poll mode, prescaler enable, master mode, active high clock, format A, normal mode
    rSPCON1 = (0<<5)|(ONEBIT<<4)|(ONEBIT<<3)|(0x0<<2)|(0<<1);

    
	// Developer MUST change the value of prescaler properly whenever value of PCLK is changed.
    rSPPRE1 = 255;					// 99.121K = 203M/4/2/(255+1) PCLK=50.75Mhz FCLK=203Mhz SPICLK=99.121Khz

	putcToKBCTL(0xa4);				//send init command

    Uart_Printf("Key Pad Init complete:\n");	




    rSRCPND = BIT_EINT1; //to clear the previous pending states
    rINTPND = BIT_EINT1;

	//Define the keypad int entry
    pISR_EINT1 = (unsigned)KeyPad_Int;
    rINTMSK=~(BIT_EINT1);			//enable Eint

	return(TRUE);
}


void __irq KeyPad_Int(void)
{
    U8   ui8ScanCode;
	
	ui8ScanCode=readKBValue();

 
    Uart_Printf("中断产生 key %d pressed!\n",ui8ScanCode);	

    rSRCPND = BIT_EINT1; //to clear the previous pending states
    rINTPND = BIT_EINT1;
    
	
}

⌨️ 快捷键说明

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