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

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

?? irda.c

?? 三星s3c2460開發板完整功能測試代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
//===================================================================
// NAME		: irda.c	
// DESC		: ver 1.1 compatible test module
// History	: 2003.06.25 edited by junon jeon from SMDK5410 test code
//          : 2003.10.09 Edited to verify IrDA core.by Minsoo, Lim
//          : 2003.10.31 Edited by Junon (DMA rx)
//===================================================================

#include <string.h>
#include <stdlib.h>
#include "2460addr.h"
#include "2460lib.h"
#include "option.h"
#include "irda.h"

#define MemoryRx	(_NONCACHE_STARTADDRESS+0x1000)
#define MemoryTx	(_NONCACHE_STARTADDRESS+0x2000)
#define MemoryCk	(_NONCACHE_STARTADDRESS+0x3000)
#define MemoryCk1	(_NONCACHE_STARTADDRESS+0x4000)

#define IrDA_BUFLEN		16		//Maximum about 255
#define IrDA_TxBUFLEN	16		//Maximum about 64
#define IrDA_RxBUFLEN	16		//Maximum about 64

#define IrDA_FIFOSIZE   1		// 0 : 16, 1 : 64 bytes
#define IrDA_FIFOENB	 1		// 1 : Enbale IrDA Tx/Rx FIFO

//====================================================================
// IrDA Contol Register (IrDA_CNT)
// This value only valid MIR mode.
#define	IrDA_TxINTEnb	1	// 1 : Enable Tx Interrupt
#define	IrDA_RxINTEnb	0	// 1 : Enable Rx Interrupt for loop test
#define	IrDA_LOOP_MODE	0	// 0 : Normal, 1 : Loop mode for core test
#define	MIR_HALF_MODE	0	// 0 : MIR,    1 : MIR-Half
#define	IrDA_SEND_SIP	0	// 1 : Send SIP pulse

//====================================================================
// IrDA Mode Definition Register (IrDA_MDR)

// -----------------------
// IrDA Test Configuration
// -----------------------
#define MODE_VALUE		0
// mode
// MODE			FIR|MIR mode
// 0			FIR mode
// 1			MIR mode

#define	PREAMBLE_VALUE		0
// number of preembles (FIR mode only)
// PREAMBLE		number of preambles
// 00b			16
// 01b			04
// 10b			08
// 11b			32

#define	STARTFLAG_VALUE		3
// number of start flags (MIR mode only)
// START_FLAG	number of start flags
// minimum value 3 required !!!

#define	RXFL_VALUE		0x1000
// Number of RX data

#define	RXTR_VALUE		1
// RX FIFO trigger level
// 00b			Reserved
// 01b			04|16
// 10b			08|32
// 11b			14|56

#define	TXFL_VALUE		16
// Number of TX data 

#define	TXTR_VALUE		1
// TX FIFO trigger level
// 00b			Reserved
// 01b			12|48
// 10b			08|32
// 11b			02|08

volatile int IrDA_DONE, IrDA_TxDone, IrDA_RxDone, IrDA_RxCount;
volatile int	IrDA_RxWrPnt, IrDA_RxRdPnt;
unsigned int save_rGPCON, save_rGPUP, save_rSPCON;
volatile unsigned char * IrDA_RXBUFFER;
volatile unsigned char * IrDA_TXBUFFER;
volatile unsigned char * IrDA_CKBUFFER;
volatile unsigned char * IrDA_CKBUFFER1;

unsigned char cData=0;
volatile int	IrDA_TxNum, IrDA_TxCnt;
volatile int RxISR_cnt,TxISR_cnt;

unsigned char *bHead, *bTail;
int tMode;

void * IrDA_func[][2]=
{
	(void *)Test_IrDA_Fifo_Rx,		"IrDA FIFO Rx",
	(void *)Test_IrDA_Fifo_Tx,		"IrDA FIFO Tx",
	0,0
};

void Ch12_IrDA(void)
{
	while(1)
	{
		int i = 0;
  
		printf("\n");
		while(1)
		{	//display menu
			printf("%2d:%s",i,IrDA_func[i][1]);
			i++;
			if((int)(IrDA_func[i][0])==0)
			{
				printf("\n");
				break;
			}
			if((i%4)==0)
				printf("\n");
		}
		
		printf("\nSelect the function to test : ");
		i = GetIntNum();
		printf("\n");
		if(i==-1) break;	 	
		if(i>=0 && (i<(sizeof(IrDA_func)/8)) ) 
		( (void (*)(void)) (IrDA_func[i][0]) )();			
	}
}

void Test_IrDA_Fifo_Rx(void)
{
	SetIrdaPort();
	
	printf("\nSelect transfering mode	1. FIR(D)    2. MIR full  3. MIR half : \n");
	tMode = GetIntNum() - 1;
	if (tMode == -2) tMode = 0; 
	
	printf("IrDA Interrupt Rx Test\n");
	printf("Select control mode : 1. Interrupt(D)    2. DMA\n");

	if (getchar() == '2')
		Test_Irda_Fifo_Dma_Rx(tMode, PREAMBLE_VALUE, STARTFLAG_VALUE, RXFL_VALUE, RXTR_VALUE);
	else
		Test_Irda_Fifo_Int_Rx(tMode, PREAMBLE_VALUE, STARTFLAG_VALUE, RXFL_VALUE, RXTR_VALUE);

	ReturnIrdaPort();
}

void Test_IrDA_Fifo_Tx(void)
{
	SetIrdaPort();

	printf("\nSelect transfering mode	1. FIR(D)    2. MIR full  3. MIR half : \n");
	tMode = GetIntNum() - 1;
	if (tMode == -2) tMode = 0; 
	
	printf("IrDA Interrupt Tx Test\n");
	printf("Select control mode : 1. Interrupt(D)    2. DMA\n");

	if (getchar() == '2')
		Test_Irda_Fifo_Dma_Tx(tMode, PREAMBLE_VALUE, STARTFLAG_VALUE, TXFL_VALUE, TXTR_VALUE);
	else
		Test_Irda_Fifo_Int_Tx(tMode, PREAMBLE_VALUE, STARTFLAG_VALUE, TXFL_VALUE, TXTR_VALUE);

	ReturnIrdaPort();
}

void SetIrdaPort(void)
{
    save_rGPCON = rGPHCON;
    save_rGPUP = rGPHPU;
    save_rSPCON = rSPCON;
    rGPHCON &= ~((3<<22)|(3<<20)|(3<<18)); // Set IrDA_TXD, IrDA_RXD, IrDA_SDBW
    rGPHCON |= (2<<22)|(2<<20)|(2<<18);
    rGPHPU |= (7<<9); // Disable IrDA pullup
    rSPCON |= (1<<2); // select IrDA 1.1 core
    printf("IrDA Port Initialize!!!\n");
}

void ReturnIrdaPort(void)
{
    rGPHCON = save_rGPCON;
    rGPHPU = save_rGPUP;
    rSPCON = save_rSPCON;
}

unsigned char	Init_Irda(int MODE, int PREAMBLE, int STARTFLAG, int RXTXFL, int RXTXTRIG)
// MODE : 010 - MIR mode,  100 - FIR mode	
// PREAMBLE : 00 - 16,  01 - 4,  10 - 8,  11 - 32 preamble data length
// STARTFLAG : 2 ~ 15 start flag
// RXTXFL : 0 ~ 65535 Frame length
// RXTXTRIG : 00 - reserved,  01 - TX(12/48),RX(4/16), 
//					10 - TX(8/32),RX(8/32),  11 - TX(2/8),RX(14/56) [for 16/64byte]
//    				FIFO TRIG level set
{
	int cnt;
	int selFIR = 0;
	int selMIR = 0;
	
	if (MODE != 0)
	{
		selFIR = 1;
		if (MODE == 1)
		{
			selMIR = 0;
			printf(" [MIR full mode]\n");	
		}
		if (MODE == 2)
		{
			selMIR = 1;
			printf(" [MIR half mode]\n");	
		}
	}		
	else 
	{
		selFIR = 4;
		printf(" [FIR mode]\n");
	}

	// IrDA Control Register
	// Tx disable/Rx disable/No Frame abort/SDBW High
	rIrDA_CNT = (IrDA_LOOP_MODE<<5)|(selMIR<<4)|(IrDA_SEND_SIP<<3)|(1);

	// Mode & Transceiver Set Register
	rIrDA_MDR = (1<<4) | (1<<3) | selFIR;	// Sip every frame / HP / Mode 

	printf("rMDR = 0x%x, rCNT = 0x%x\n",rIrDA_MDR, rIrDA_CNT);

	// Interrupt & DMA Control Register
	rIrDA_CNF = 0x0;		// Disable Interrupt & DMA

	// Interrupt Enable Register
	rIrDA_IER = 0x0;		// Disable All interrupts

	// FIFO Control Register
	// Tx FIFO reset[2] / RX FIFO reset[1]
	rIrDA_FCR = (RXTXTRIG<<6)|(IrDA_FIFOSIZE<<5)|(1<<2)|(1<<1)|(IrDA_FIFOENB);

	// Set Start Field Register or Preamble length
	rIrDA_PLR= ((PREAMBLE << 6) | (RXTXTRIG<<4) | STARTFLAG);

	// Receive Frame Length Register
	rIrDA_RXFLL = RXTXFL & 0xff;
	rIrDA_RXFLH= (RXTXFL>>8) & 0xff;
	printf(" [RXFL-L] %d, [RXFL-H] %d\n", (unsigned char)rIrDA_RXFLL, (unsigned char)rIrDA_RXFLH);

	// Transmit Frame Length Register
	rIrDA_TXFLL = RXTXFL & 0xff;
	rIrDA_TXFLH= (RXTXFL>>8) & 0xff;
	printf(" [TXFL-L] %d, [TXFL-H] %d\n", (unsigned char)rIrDA_TXFLL, (unsigned char)rIrDA_TXFLH);

	while(!(rIrDA_FCR & 0x18)) 
		if(Uart_GetKey()) return 2;

	printf("Tx and Rx FIFO clear is over...\n");
	return 1;
}


// IrDA Interrupt Test Code Start============================================================[END]
#if 1
void __irq Irda_Int_Rx(void)
{
	unsigned char status=0;
	unsigned char RxCount=0;

//	printf("E");
	// masking
	rINTMSK |= BIT_IrDA;

	// clear pending bit
	status = (unsigned char)rIrDA_IIR; // Sub-sub pending clear

	ClearPending(BIT_IrDA);

//	printf("rIrDA_IIR=%x\n",status);	
	
	if(status & (1<<6)) // RX error indication
	{ 
		__sub_Irda_Err_Int_Rx();
	}
	else 
	{
		if(status & 1) 
		{
//			printf("R");
			while(rIrDA_RXNO > 0) 
			{
				*(IrDA_RXBUFFER+IrDA_RxWrPnt) = (unsigned char)rIrDA_RBR;
				IrDA_RxWrPnt++;
				IrDA_RxCount++;
//				IrDA_DONE = 0;
			}
		} 
		if(status & (1<<3))  // RX Overrun
			printf("IrDA Rx Overrun Error Occurs!!\n");
		if((status & (1<<7)) || (status & (1<<4)))
		{
//			RxCount = rIrDA_RXNO;
//			while(rIrDA_RXNO > 0) 
//			{
//				*(IrDA_RXBUFFER+IrDA_RxWrPnt) = (unsigned char)rIrDA_RBR;
//				IrDA_RxWrPnt++;
//				IrDA_RxCount++;
//			}
//			printf("\nLast byte to Rx FIFO !!!!!!!!!\n");
//			IrDA_DONE = 0;
		}
		if(status & (1<<2)) 
		{ // last byte read from Rx FIFO
//			printf("\nLast byte read from Rx FIFO !!!!!!!!!\n");		
		}
	}
	// unmasking
	rINTMSK    &= ~BIT_IrDA;		
}

#else
void __irq Irda_Int_Rx(void)
{
	unsigned char status=0;
	unsigned char i,j,RxNO;
	
	RxISR_cnt++;
	// masking	
	rINTMSK    |= BIT_IrDA;

	// clear pending bit
	status = (unsigned char)rIrDA_IIR; // Sub-sub pending clear
	RxNO =(unsigned char)rIrDA_RXNO;

	ClearPending(BIT_IrDA);

	if(status & (1<<6))  // RX error indication
		{
		IrDA_DONE=0;
		ClearPending(BIT_IrDA);
		printf("Line Status Error\n");
		__sub_Irda_Err_Int_Rx();
		}

	else if(status & (1<<2))//Last byte detect
		{
		IrDA_DONE=0;
		//printf("\nLast byte detect\n");
		while( !(rIrDA_LSR&0x1))
			{
			printf("\1\n");
			*(IrDA_RXBUFFER+IrDA_RxWrPnt) = (unsigned char)rIrDA_RBR;
			*(IrDA_CKBUFFER+IrDA_RxWrPnt) = (unsigned char)rIrDA_RXNO;
			IrDA_RxWrPnt++;
			}		

		ClearPending(BIT_IrDA);	
		}
	
	else if(status & (1<<3)) //Overrun Error
		{
		IrDA_DONE=0;
		//rIrDA_IIR&=~(0x8);
		ClearPending(BIT_IrDA);
		printf("Overrun Error\n");
		}
	

	else
		{
		IrDA_DONE=0;
		
		while( !(rIrDA_LSR&0x1)||(status & (1<<2)))
			{		
			*(IrDA_RXBUFFER+IrDA_RxWrPnt) = (unsigned char)rIrDA_RBR;
			*(IrDA_CKBUFFER+IrDA_RxWrPnt) = (unsigned char)rIrDA_RXNO;
			IrDA_RxWrPnt++;
		    
			}
		}
		
	ClearPending(BIT_IrDA);

	// unmasking
	rINTMSK    &= ~BIT_IrDA;		
}

#endif
void __sub_Irda_Err_Int_Rx()
{
	switch((rIrDA_LSR & 0x1c)>>2)//to clear and check the status of register bits
	{
		case 1:
			printf("CRC error\n");
			break;
		case 2:
			printf("Phy error\n");
			break;
		case 3:
			printf("CRC and Phy error\n");
			break;
		case 4:
			printf("Frame Length error\n");
			break;
		case 5:
			printf("CRC and Frame Length error\n");
			break;
		case 6:
			printf("Phy and Frame Length error\n");
			break;
		case 7:
			printf("CRC, Phy and Frame Length error\n");
			break;
	}
}


void Test_Irda_Fifo_Int_Rx(int MODE, int PREAMBLE, int STARTFLAG, int RXFL, int RXTRIG)
{
	int	i;

	// Initialize IrDA
	Init_Irda(MODE, PREAMBLE, STARTFLAG, RXFL, RXTRIG);

	// Register IrDA ISR
	pISR_IrDA=(unsigned)Irda_Int_Rx;

	ClearPending(BIT_IrDA);	// Clear IrDA Int Pending

	rINTMSK &= ~(BIT_IrDA);	// Unmask IrDA pending bit

	IrDA_RXBUFFER=(unsigned char *)MemoryRx;
	for(i=0;i<=IrDA_RxBUFLEN;i++)
		*IrDA_RXBUFFER++=0;
	IrDA_RXBUFFER=(unsigned char *)MemoryRx;	
	// Initialize RX Data -----------------END

	// Initialize Check Data ----------------START
	IrDA_CKBUFFER=(unsigned char *)MemoryCk;
	for(i=0;i<=IrDA_RxBUFLEN;i++)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人午夜私人影院| 国产亚洲综合av| 日韩一级二级三级精品视频| 91精品免费在线观看| 国产无人区一区二区三区| 亚洲精品伦理在线| 五月婷婷激情综合| 国产精品自产自拍| 欧美年轻男男videosbes| 国产精品久久久久一区二区三区共| 亚洲精品亚洲人成人网| 成人av资源网站| 精品国产精品网麻豆系列| 亚洲曰韩产成在线| 91在线视频网址| 亚洲天堂2016| 99国产精品久久久久久久久久 | 日韩av不卡一区二区| 色系网站成人免费| 日韩理论片网站| 99久久99久久精品免费看蜜桃| 日韩欧美自拍偷拍| 国产成人精品亚洲日本在线桃色| 在线视频一区二区免费| 精品国产sm最大网站免费看| 自拍偷在线精品自拍偷无码专区| av欧美精品.com| 国产精品99久久久久久宅男| 欧美精品三级在线观看| 人人狠狠综合久久亚洲| 欧美绝品在线观看成人午夜影视| 亚洲福利视频导航| 欧美丰满少妇xxxbbb| 午夜不卡av在线| 精品国产一区二区精华| 亚洲成人久久影院| 7777精品伊人久久久大香线蕉| 久久精品国产精品亚洲综合| 欧美日韩mp4| 国产成人啪免费观看软件| 日本一区二区三区在线不卡| gogogo免费视频观看亚洲一| 一区二区三区成人| 日韩欧美国产三级电影视频| 一本大道久久a久久精二百| 亚洲精品国产视频| 2020国产成人综合网| 成人av网站在线观看免费| 亚洲国产一区视频| 亚洲欧美日韩久久| 亚洲欧美日本韩国| 久久久另类综合| 51精品秘密在线观看| 精品国产青草久久久久福利| 国产98色在线|日韩| 日韩和欧美一区二区| 亚洲乱码国产乱码精品精的特点| 91精品国产综合久久香蕉的特点| 色哦色哦哦色天天综合| 高清在线成人网| 国产一区二三区| 国产乱国产乱300精品| 婷婷综合在线观看| 日韩av中文在线观看| 五月天网站亚洲| 免费一级片91| 国产一区二区在线观看免费| 免费黄网站欧美| 国产一区激情在线| 国产成人在线视频免费播放| 韩国v欧美v日本v亚洲v| 久久99国内精品| 国内精品国产成人国产三级粉色| 亚洲第一在线综合网站| 亚洲国产cao| 午夜久久久久久久久| 爽好多水快深点欧美视频| 亚洲精品自拍动漫在线| 亚洲一区中文在线| 韩国v欧美v亚洲v日本v| 国产电影一区二区三区| 在线一区二区视频| 精品999久久久| 国产精品理论在线观看| 国产精品灌醉下药二区| 一区二区三区在线观看动漫| 极品尤物av久久免费看| 色婷婷久久一区二区三区麻豆| 欧美在线观看你懂的| 欧美群妇大交群中文字幕| www一区二区| 午夜精品免费在线| 国产成人亚洲综合色影视| 91久久精品一区二区三| 国产欧美日韩一区二区三区在线观看| 久久久久国产成人精品亚洲午夜| 久久这里只有精品6| 舔着乳尖日韩一区| 国产高清无密码一区二区三区| 国产精品一区二区三区网站| 欧美中文字幕一区| 欧美日韩你懂得| 亚洲自拍偷拍九九九| 韩国一区二区三区| 亚洲精品在线观看视频| 亚洲一区二区在线免费看| 成人动漫视频在线| 日韩欧美卡一卡二| 肉色丝袜一区二区| 91麻豆免费在线观看| 国产喷白浆一区二区三区| 精品一区二区影视| 欧美电影免费观看高清完整版| 亚洲三级免费观看| 在线精品视频一区二区| 爽爽淫人综合网网站| 精品电影一区二区三区| 日韩美女在线视频| 日韩一级免费观看| 中文字幕中文字幕一区二区| 亚洲一区二区三区中文字幕| 亚洲午夜一区二区三区| 午夜激情久久久| 久久精品噜噜噜成人av农村| 久久不见久久见免费视频1| 国产成人8x视频一区二区| 一区二区在线观看视频| 国产一区二区三区视频在线播放| 99精品欧美一区二区三区小说 | 久久国产精品99久久久久久老狼| 国产91露脸合集magnet| 欧美一卡二卡三卡四卡| 日韩精品在线看片z| 综合色天天鬼久久鬼色| 国产精品99久久久久久久女警| 高清不卡一区二区| 制服丝袜亚洲播放| 亚洲国产精品视频| 国内精品写真在线观看| 色狠狠色狠狠综合| 久久久久国产一区二区三区四区| 欧美tickling挠脚心丨vk| 午夜精品久久久久影视| 91免费在线视频观看| 日韩欧美精品在线视频| 久久电影网电视剧免费观看| 欧美日韩一区三区四区| 久久综合色8888| 国产成人无遮挡在线视频| 久久欧美一区二区| 亚欧色一区w666天堂| 欧美一级一级性生活免费录像| 亚洲精品成人天堂一二三| 高清不卡一区二区在线| 欧美精品一区在线观看| 中文字幕日韩一区| 欧美精品自拍偷拍动漫精品| 视频一区二区三区在线| 丁香亚洲综合激情啪啪综合| 国产精品欧美一区喷水| 丁香天五香天堂综合| 国产偷v国产偷v亚洲高清| 国产99久久久久| 国产色一区二区| 欧美性猛片xxxx免费看久爱| 午夜精品久久久久久久久| 欧美午夜寂寞影院| 国产精品一区二区在线播放| 中文字幕成人网| 欧美色综合网站| 亚洲精品菠萝久久久久久久| 欧美午夜一区二区三区免费大片| 日韩精品国产精品| 国产欧美日韩精品在线| 精品少妇一区二区三区在线播放| 日韩经典中文字幕一区| 国产午夜精品一区二区| 69p69国产精品| 欧美亚男人的天堂| 日本欧美韩国一区三区| 中国色在线观看另类| 欧美xxxxx裸体时装秀| 久久国产精品99精品国产| 亚洲国产日韩av| 国产精品久久精品日日| 精品免费国产二区三区| 在线免费不卡视频| 欧美三级视频在线观看| 欧美日韩国产片| 成人一级黄色片| 色婷婷av一区| 色香蕉久久蜜桃| 国产suv精品一区二区6| 日本不卡视频在线观看| 久久精品国产一区二区三区免费看| 亚洲国产cao| 三级亚洲高清视频| 国产一区二区不卡在线| 99免费精品在线观看| 国产在线精品视频|