亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? spikeyboardtest.c

?? S3C2443 WINCE6.0 BSP
?? C
字號:
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//

#include <windows.h>
#include <bsp.h>

#define	DBG_ON	1
#define	U8	UINT8
#define	U32	UINT32

#define pISR		(*(unsigned *)(0x30000000+0x18))		// Virtual Address 0x0 is mapped to 0x30000000, ISR Address is VA 0x18

void	IsrKeyboardHandler(void);
void	IsrKeyboard(unsigned int val);

int	putcToKBCTL(U8 c)
{
	volatile S3C2443_IOPORT_REG *s2443IOP = (S3C2443_IOPORT_REG *)OALPAtoVA(S3C2443_BASE_REG_PA_IOPORT, FALSE);	
	volatile S3C2443_HSSPI_REG *s2443SPI = (S3C2443_HSSPI_REG *)OALPAtoVA(S3C2443_BASE_REG_PA_SPI0, FALSE);		
	U32	i;

	s2443SPI->SLAVE_SELECTION_REG &= ~(1<<0);
  	//s2443IOP->GPLDAT &= ~(1 << 13);       //Set _SS signal to low (Slave Select)
  	

	while((s2443SPI->SPI_STATUS & (1<<21))==0);	// wait while busy

	s2443SPI->SPI_TX_DATA = c;	                // write left justified data

	while((s2443SPI->SPI_STATUS & (1<<21))==0);	// wait while busy
   	
   	//s2443IOP->GPLDAT |= (1 << 13);        //Set _SS signal to high (Slave Select)
   	s2443SPI->SLAVE_SELECTION_REG |= (1<<0);

	i = s2443SPI->SPI_RX_DATA;

	return(i);
}

void getsFromKBCTL(U8 *m, int cnt)
{
	int	i, j;
	volatile tmp = 1;

	for(j = 0; j < 3; j++)
		tmp += tmp;
	for(j = 0; j < 250 * 30; j++)
		tmp += tmp;

	for(i = 0; i < cnt; i++) 
	{
		m[i] = putcToKBCTL(0xFF);

		for(j = 0; j < 400; j++)
			tmp+= tmp;
	}
}

void putsToKBCTL(U8 *m,  int cnt)
{
	int	i, j, x;
	volatile tmp = 1;
	
	for(j = 0; j < 3; j++)
		x = j;
	for(j = 0; j < 3; j++)
		tmp += tmp;
	for(j = 0; j < 250 * 30; j++)
		tmp += tmp;

	for(i = 0; i < cnt; i++) {

		j = putcToKBCTL(m[i]);

		for(j = 0; j < 400; j++)
			tmp+= tmp;
		for(j = 0; j < 400; j++)
			x = j;
    }
}


void SPIKBD_Port_Init()
{
	volatile S3C2443_IOPORT_REG *s2443IOP = (S3C2443_IOPORT_REG *)OALPAtoVA(S3C2443_BASE_REG_PA_IOPORT, FALSE);	

	// Setup IO port for SPI interface & Keyboard
	
	// Setup KBDINT as output
    s2443IOP->GPFCON &= ~(0x3 << 4); 	// Clear GPF2
    s2443IOP->GPFCON |= (0x2 << 4);  	// Set GPF2 to EINT2 for Keyboard interrupt
    s2443IOP->GPFUDP &= ~(0x3 << 4);
    s2443IOP->GPFUDP |= (0x1 << 4);

    s2443IOP->EXTINT0 &= ~(0x7 << 8);    // Clear EINT2
    s2443IOP->EXTINT0 |= (0x2 << 8);     // fallig edge triggered for EINT2

	// setup SPI interface
	// GPE11 : SPIMISO (KBDSPIMISO)
	// GPE12 : SPIMOSI (KBDSPIMOSI)
	// GPE13 : SPICLK  (KBDSPICLK)
    s2443IOP->GPECON &= ~((0x3 << 26) | (0x3 << 24) | (0x3 << 22));   // Clear GPE11,12,13
    s2443IOP->GPECON |= ((0x2 << 26) | (0x2 << 24) | (0x2 << 22));    
    s2443IOP->GPEUDP &= ~((0x3 << 26) | (0x3 << 24) | (0x3 << 22));
    s2443IOP->GPEUDP |= ((0x1 << 26) | (0x1 << 24) | (0x1 << 22));       
     
	// setup _SS signal(nSS_KBD)
    s2443IOP->GPLCON &= ~(0x3 << 26);         // Clear GPL14
    s2443IOP->GPLCON |= (0x2 << 26);        // Set Port GPL14 to output for nSS signal
    s2443IOP->GPLUDP &= ~((0x3 << 26));
    s2443IOP->GPLUDP |= ((0x1 << 26));    
    
	// setup _PWR_OK signal (KEYBOARD)
    s2443IOP->GPFCON &= ~(0x3 << 6);         // Clear GPF3 
    s2443IOP->GPFCON |= (0x1 << 6);       // Set Port GPF3 to output for _PWR_OK signal
    s2443IOP->GPFUDP &= ~((0x3 << 6));
    s2443IOP->GPFUDP |= ((0x1 << 6));    

    s2443IOP->GPFDAT &= ~(1 << 3);        // set _PWR_OK to 0
}

void Kbd_PowerOn(void)
{
	volatile S3C2443_IOPORT_REG *s2443IOP = (S3C2443_IOPORT_REG *)OALPAtoVA(S3C2443_BASE_REG_PA_IOPORT, FALSE);	
	volatile S3C2443_HSSPI_REG *s2443SPI = (S3C2443_HSSPI_REG *)OALPAtoVA(S3C2443_BASE_REG_PA_SPI0, FALSE);	
	volatile S3C2443_CLKPWR_REG *s2443PWR = (S3C2443_CLKPWR_REG *)OALPAtoVA(S3C2443_BASE_REG_PA_CLOCK_POWER, FALSE);	
	
	U8 msg[5];
	int t;
	char dummy = (char)0xff;	

	SPIKBD_Port_Init();

	// Setup SPI registers
    // Interrupt mode, prescaler enable, master mode, active high clock, format B, normal mode
    s2443PWR->PCLKCON |= (1<<6);
    s2443IOP->MISCCR |= (1<<31);
    s2443SPI->CH_CFG &= ~(1<<5);
    s2443SPI->CH_CFG |= (1<<5);
    s2443SPI->CH_CFG &= ~(1<<5);
    
    s2443SPI->CH_CFG = (0<<4)|(0x0<<3)|(1<<2)|(1<<1)|(1<<0);
    
    s2443SPI->CLK_CFG = (00<<9)|(1<<8)|(255<<0);
    //s2443SPI->SPPIN |= (1<<0);//Feedback Clock Disable, Master Out Keep
    
	// Developer MUST change the value of prescaler properly whenever value of PCLK is changed.
    //s2443SPI->SPPRE = 255;// 99.121K = 203M/4/2/(255+1) PCLK=50.75Mhz FCLK=203Mhz SPICLK=99.121Khz
         
    for(t=0;t<20000; t++); // delay
	    msg[0] = (char)0x1b; msg[1] = (char)0xa0; msg[2] = (char)0x7b; msg[3] = (char)0; // Initialize USAR
    	for(t=0; t < 10; t++) {
    	dummy = putcToKBCTL(0xff);
    }
    
    for(t=0; t<10; t++) { // wait for a while
        putsToKBCTL(msg,3);
        for(t=0;t<20000; t++);
    }
    t = 100;

#if 1
   	s2443IOP->GPFCON &= ~(3<<4);
    while(t--) {
        if((s2443IOP->GPFDAT & (1<<2))==0) { // Read _ATN (KBDINT) GPF2
            break;
        }
    }	//check _ATN
   	s2443IOP->GPFCON |= (2<<4);
#endif
   	
    if(t != 0) {
        getsFromKBCTL(msg,3);
    }    
    t=100000;
    while(t--); // delay
	msg[0] = (char)0x1b; msg[1] = (char)0xa1; msg[2] = (char)0x7a; msg[3] = (char)0; //Initialization complete
	putsToKBCTL(msg,3);

	RETAILMSG(DBG_ON,(TEXT("KeybdPowerOn\n")));
}

void IsrKeyboard(unsigned int val)
{
    U8           ui8ScanCode;	
	volatile S3C2443_INTR_REG *s2443INTR = (S3C2443_INTR_REG *)OALPAtoVA(S3C2443_BASE_REG_PA_INTR, FALSE);	
	RETAILMSG(DBG_ON,(TEXT("IsrKeyboard\n")));
	if(s2443INTR->INTPND & (1<<2))
	{
		s2443INTR->INTMSK |= (1<<2); // clear EINT2
		RETAILMSG(DBG_ON,(TEXT("Keyboard Interrupt occured!\n")));	
		
		s2443INTR->SRCPND = (1<<2);	// clear EINT2
		s2443INTR->INTPND = (1<<2);	// clear EINT2	


		getsFromKBCTL(&ui8ScanCode, 1);

		RETAILMSG(1,(TEXT("keybd interrupt asserted -> scancode = 0x%x\n"), ui8ScanCode));
			
	
		s2443INTR->INTMSK &= ~(1<<2); // clear EINT2		
	}			
}

void	Isr_SpiInit()
{
	RETAILMSG(DBG_ON,(TEXT("Isr_SpiInit\n")));	
	pISR =(unsigned)(0xEA000000)+(((unsigned)IsrKeyboardHandler - (0x80000000 + 0x18 + 0x8) )>>2);		
}

void	SpiKeyboardTest()
{
	volatile S3C2443_IOPORT_REG *s2443IOP = (S3C2443_IOPORT_REG *)OALPAtoVA(S3C2443_BASE_REG_PA_IOPORT, FALSE);		
	volatile S3C2443_SPI_REG *s2443SPI = (S3C2443_SPI_REG *)OALPAtoVA(S3C2443_BASE_REG_PA_SPI0, FALSE);		
	volatile S3C2443_INTR_REG *s2443INTR = (S3C2443_INTR_REG *)OALPAtoVA(S3C2443_BASE_REG_PA_INTR, FALSE);	
	volatile S3C2443_CLKPWR_REG *s2443PWR = (S3C2443_CLKPWR_REG *)OALPAtoVA(S3C2443_BASE_REG_PA_CLOCK_POWER, FALSE);
	int i=0;
	RETAILMSG(DBG_ON,(TEXT("SpiKeyboardTest\n")));

	pISR =(unsigned)(0xEA000000)+(((unsigned)IsrKeyboardHandler - (0x80000000 + 0x18 + 0x8) )>>2);	
	Kbd_PowerOn();
	RETAILMSG(1,(TEXT("PCLKCON = 0x%X\n"),s2443PWR->PCLKCON));
	
	
	if(s2443INTR->SRCPND & (1<<2))
		s2443INTR->SRCPND = (1<<2);	// clear EINT2
	if(s2443INTR->INTPND & (1<<2))
		s2443INTR->INTPND = (1<<2);	// clear EINT2
	s2443INTR->INTMSK &= ~(1<<2); // clear EINT2
	
	
	/*
	while(1)
	{
		if(s2443INTR->INTPND & (1<<0))
		{
			s2443INTR->SRCPND = (1<<0);	// clear EINT2
			s2443INTR->INTPND = (1<<0);	// clear EINT2
			RETAILMSG(DBG_ON,(TEXT("Keyboard Interrupt occured!\n")));			
		}
	}*/
	//getsFromKBCTL(&ui8ScanCode, 1);	
	
	
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩激情中文字幕| 亚洲一区国产视频| 国产在线日韩欧美| 精品国产一区二区三区四区四| 日韩 欧美一区二区三区| 欧美日韩精品一区二区三区| 日韩高清国产一区在线| 日韩一区二区在线看| 国内久久婷婷综合| 国产精品国产三级国产aⅴ入口 | 国产精品电影一区二区三区| 波多野结衣中文一区| 中文字幕亚洲区| 精品视频全国免费看| 日韩电影免费一区| 久久久综合视频| 91在线观看高清| 视频一区二区中文字幕| 久久综合久久综合亚洲| 国产99久久久国产精品潘金网站| 又紧又大又爽精品一区二区| 欧美一区二区三区视频免费| 国产成a人亚洲精品| 亚洲午夜免费视频| 精品久久久久久久久久久院品网| www.在线成人| 肉肉av福利一精品导航| 国产午夜精品一区二区三区视频 | 成人免费观看视频| 亚洲国产欧美日韩另类综合 | 国产精品久久99| 6080国产精品一区二区| 国产成人精品一区二| 亚洲一区在线免费观看| 久久蜜臀精品av| 欧美精品18+| 不卡的av网站| 激情成人综合网| 夜夜嗨av一区二区三区网页| 久久夜色精品国产噜噜av| 在线视频你懂得一区| 国产精品911| 三级在线观看一区二区| 日韩一区日韩二区| 欧美tickling网站挠脚心| 91蝌蚪porny| 国产一区在线不卡| 亚洲福利视频三区| 欧美国产欧美综合| 精品日产卡一卡二卡麻豆| 欧美亚洲愉拍一区二区| bt7086福利一区国产| 久久电影网电视剧免费观看| 亚洲国产精品久久久久婷婷884 | 99re亚洲国产精品| 国产一区二区三区四区在线观看| 日韩不卡一二三区| 一区二区三区久久| 中文字幕中文乱码欧美一区二区| 久久久综合精品| 日韩欧美一级二级三级久久久| 欧美日韩一区二区三区视频| 一本大道久久a久久综合| 成人18视频日本| 国产成人精品综合在线观看 | 成人高清视频免费观看| 激情综合色综合久久综合| 亚洲mv在线观看| 亚洲国产一区视频| 亚洲精品国产精品乱码不99| 亚洲免费观看高清| 国产精品久久久久影院色老大| 国产亚洲欧洲997久久综合| 欧美tickling网站挠脚心| 精品免费日韩av| 精品国产三级电影在线观看| 精品国产免费一区二区三区香蕉| 日韩视频免费直播| 欧美精品aⅴ在线视频| 在线播放中文字幕一区| 3atv在线一区二区三区| 日韩精品一区二区三区蜜臀| 精品va天堂亚洲国产| 欧美videofree性高清杂交| 337p日本欧洲亚洲大胆色噜噜| 欧美精品一区二区三| 久久精品在线观看| 欧美激情艳妇裸体舞| 亚洲天堂精品在线观看| 一区二区免费在线| 亚洲成av人在线观看| 人人超碰91尤物精品国产| 麻豆91在线观看| 国产精品一级黄| 99re视频精品| 91精品一区二区三区在线观看| 日韩精品一区二区三区视频 | 中文字幕的久久| 最新热久久免费视频| 亚洲制服丝袜av| 久久99久久99小草精品免视看| 久国产精品韩国三级视频| 国产不卡视频在线播放| 色系网站成人免费| 日韩一区二区电影| 久久久青草青青国产亚洲免观| 国产精品二三区| 日韩**一区毛片| k8久久久一区二区三区| 欧美影院午夜播放| 日韩精品一区二区三区中文不卡 | 日韩免费视频一区| 国产精品丝袜在线| 一区二区三区毛片| 麻豆高清免费国产一区| 成人黄色综合网站| 欧美理论片在线| 中文字幕久久午夜不卡| 夜夜嗨av一区二区三区网页| 久久99精品国产.久久久久久 | 欧美国产一区二区在线观看| 亚洲高清免费观看| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 一区二区三区日韩欧美精品| 免费在线观看不卡| 99re这里只有精品首页| 日韩色在线观看| 一区二区三区在线免费| 国产一区二区主播在线| 色婷婷综合久久| 久久久精品一品道一区| 亚洲午夜激情网页| 国产白丝网站精品污在线入口| 欧美日韩成人综合天天影院| 最新不卡av在线| 国产精品一区二区x88av| 欧美日韩激情一区| 国产精品久久777777| 久草热8精品视频在线观看| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 精品久久人人做人人爰| 亚洲电影视频在线| 北条麻妃国产九九精品视频| 国产三级欧美三级日产三级99| 日韩和欧美一区二区| 91亚洲精品久久久蜜桃网站| 国产视频一区二区在线| 美女精品一区二区| 欧美日韩精品欧美日韩精品| 亚洲免费成人av| 91在线免费看| 国产精品另类一区| 久99久精品视频免费观看| 欧美日韩成人一区二区| 亚洲老司机在线| 99国产精品久久| 中文字幕视频一区二区三区久| 国产高清久久久| 久久久激情视频| 国产老妇另类xxxxx| 欧美www视频| 国产原创一区二区三区| 精品国产区一区| 国产一区二区在线视频| 欧美不卡一区二区| 美女在线观看视频一区二区| 这里只有精品99re| 日韩二区在线观看| 欧美一区二区在线免费播放 | 伊人色综合久久天天| 91视频一区二区| 一区二区视频免费在线观看| 在线免费视频一区二区| 亚洲伊人伊色伊影伊综合网 | 欧美大片国产精品| 久久99精品国产| 欧美激情一区二区三区全黄| 成人av午夜影院| 亚洲美女一区二区三区| 欧美最新大片在线看| 午夜国产不卡在线观看视频| 91精品国产综合久久精品性色| 麻豆一区二区在线| 久久综合九色综合欧美就去吻| 国产不卡视频在线播放| 中文字幕欧美一| 欧美日韩夫妻久久| 免费一级欧美片在线观看| 久久久三级国产网站| 成人av在线影院| 午夜伦欧美伦电影理论片| 欧美一区二区在线免费观看| 国产精品一区二区果冻传媒| 综合激情成人伊人| 在线观看国产一区二区| 免费视频一区二区| 国产偷国产偷亚洲高清人白洁| 91在线你懂得| 久久99精品一区二区三区三区| 中文字幕人成不卡一区|