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

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

?? seeddm642_esam.c

?? 合眾達的開發(fā)板自帶測試程序
?? C
字號:
/********************************************************************/
/*  Copyright 2004 by SEED Incorporated.							*/
/*  All rights reserved. Property of SEED Incorporated.				*/
/*  Restricted rights to use, duplicate or disclose this code are	*/
/*  granted through contract.									    */
/*  															    */
/********************************************************************/


#include "seeddm642.h"
#include "seeddm642_esam.h"

//---------Global constants---------
//Maximum count value
#define TIMER_CNT  20

//Timer control register (CTL)
Uint32 TimerControl = 
			
	TIMER_CTL_RMK
	(
		TIMER_CTL_SPND_EMUSTOP,
  		TIMER_CTL_INVINP_NO, 		// TINP inverter control(INVINP)
  		TIMER_CTL_CLKSRC_CPUOVR8,	// Timer input clock source (CLKSRC)
		TIMER_CTL_CP_PULSE, 		// Clock/pulse mode(CP)
		TIMER_CTL_HLD_YES, 			// Hold(HLD)
		TIMER_CTL_GO_NO, 			// Go bit(GO)-
									//   resets & starts timer counter
		TIMER_CTL_PWID_ONE, 		// Pulse width(PWID)-
									//   used only in pulse mode
		TIMER_CTL_DATOUT_0, 		// Data output (DATOUT)
		TIMER_CTL_INVOUT_NO, 		// TOUT inverter control (INVOUT) 
		TIMER_CTL_FUNC_GPIO 		// Function of TOUT pin(FUNC)
	);
	
//---------Function prototypes---------
void TimerEventHandler(void);


//---------Global data definition---------
TIMER_Handle hTimer1;
TIMER_Config myTimConfig;
Uint32 TimerEventId;
int cnt = 0;
Uint32 esamCnt = 0;
Bool cntfirst = TRUE;
Bool esam_rrdy = FALSE;
Bool esam_xrdy = FALSE;
Bool esam_wen  = FALSE;
Bool esam_dnew = FALSE;

/***********************************************************************/
/*																	   */
/*	seeddm642_esam_open												   */
/*		描述:	初始化定時器,為讀寫ESAM進行初始化					   */
/*      參數(shù):  無													   */
/*      返回:  無													   */
/*																	   */
/***********************************************************************/
void seeddm642_esam_open()
{ 
	//Open TIMER1 device, and reset it to power-on default state
	hTimer1 = TIMER_open(TIMER_DEV1, TIMER_OPEN_RESET);
	//Obtain the event ID for the timer device
	TimerEventId = TIMER_getEventId(hTimer1);
	//Map TIMER events to physical interrupt number
	IRQ_map(TimerEventId, 14);
	//Map External int4 to physical interrupt number
	IRQ_map(IRQ_EVT_EXTINT4,4);
	//Reset the timer events
	IRQ_reset(TimerEventId);
    IRQ_reset(IRQ_EVT_EXTINT4);
	//---------Configure the timer devices---------	
	//Start count value at zero
	myTimConfig.cnt = 0x0;
	//Use predefined control value  */
	myTimConfig.ctl = TimerControl;	
	//Set period,周期為(1/9600)/2
	myTimConfig.prd = 0xF42;

	IRQ_globalEnable();
	//Enable the timer events(events are disabled while resetting)
	IRQ_enable(TimerEventId);
	IRQ_enable(IRQ_EVT_EXTINT4);
}
/***********************************************************************/
/*																	   */
/*	seeddm642_esam_reset 											   */
/*		描述:	使ESAM卡復位										   */
/*      參數(shù):  無													   */
/*      返回:  無													   */
/*																	   */
/***********************************************************************/
void seeddm642_esam_reset()
{
	//將復位信號置低,ESAM處于復位狀態(tài)
	SEEDDM642_rset(SEEDDM642_ESAMW, 0x0);
	//延時1ms
	SEEDDM642_waitusec(5000);
	//將復位信號置高,ESAM脫離復位狀態(tài)
	SEEDDM642_rset(SEEDDM642_ESAMW, 0x4);
}
/***********************************************************************/
/*																	   */
/*	seeddm642_esam_read 											   */
/*		描述:	讀取ESAM的數(shù)據(jù)										   */
/*      參數(shù):  src  :接收數(shù)據(jù)緩沖區(qū)								   */
/*              length :接收到的數(shù)據(jù)的個數(shù)                             */
/*      返回:  1:無新數(shù)據(jù)產(chǎn)生										   */
/*				2:有新數(shù)據(jù)產(chǎn)生                                         */
/*				3:接收錯誤										       */
/*																	   */
/***********************************************************************/
int seeddm642_esam_read(Uint32 src, Uint32 length )
{
	Uint8 *pdst;
	Uint8 *plength;
	Uint8 esamdata = 0;
	Uint8 esambit  = 0;
	Uint8 esamcheck = 0;
	Uint8 esamcount =0;
    Uint32 i;
    Uint32 n= 0;
    
    /* Establish ricieve pointer */
    pdst = (Uint8 *)src;
    plength = (Uint8 *)length;
    *plength = 0;
    //打開中斷
	IRQ_enable(IRQ_EVT_EXTINT4);
	//將IO口配置成為輸入模式
	SEEDDM642_rset(SEEDDM642_ESAMW, 0x4);
	//如果讀取標志置1,讀取數(shù)據(jù)的一個BIT,共讀9次,拼成一個字節(jié)
	//第九個BIT為偶較驗位
	while(1)
	{
		if(esam_dnew == FALSE)
		{
			//超時即數(shù)據(jù)接收完成,再無新數(shù)據(jù)產(chǎn)生
			n++;
			if(n == 1000)
			{
				n = 0;
				esamCnt++;
			}		
			if(esamCnt == 300)
			{
				esamCnt = 0;
				if(esamcount ==0)
				{
					return 1;//無數(shù)據(jù)接收到
				}
				else
				{
					*plength = esamcount;
					return 2;
				}
			} 
		}
		else
		{
			//有新數(shù)據(jù)的產(chǎn)生,啟動計數(shù)器
			esam_dnew = FALSE;			
			//記數(shù)重新開始
			esamCnt = 0;
			for(i = 0;i<8;i++)
			{
				while(esam_rrdy == FALSE){}
				esam_rrdy = FALSE;
				esambit = SEEDDM642_rget(SEEDDM642_ESAMR);
				esamcheck = esamcheck + (esambit & 0x1);
				esamdata = esamdata + ((esambit & 0x1)<<i);
			}
			/*讀較驗位*/
			while(esam_rrdy == FALSE){}
			esam_rrdy = FALSE;
			esambit = SEEDDM642_rget(SEEDDM642_ESAMR);
			esamcheck = esamcheck + (esambit & 0x1);
			if((esamcheck & 0x1) == 1)
			{
				return 0;
			}
			*pdst++ = esamdata;
			esamcount++;
			esamdata = 0;
			esamcheck = 0;
			esambit = 0;
			//停止計數(shù)器
			TIMER_pause(hTimer1);
			//打開中斷
			IRQ_reset(IRQ_EVT_EXTINT4);
			IRQ_enable(IRQ_EVT_EXTINT4);
		}			
	}		
}
/***********************************************************************/
/*																	   */
/*	seeddm642_esam_write 											   */
/*		描述:	寫入ESAM的數(shù)據(jù)										   */
/*      參數(shù):  src  :接收數(shù)據(jù)緩沖區(qū)								   */
/*              length :發(fā)送的數(shù)據(jù)的個數(shù)                               */
/*      返回:  無													   */
/***********************************************************************/
void seeddm642_esam_write(Uint32 src, Uint32 length)
{
	Uint32 i,j,k;
	Uint8 esam_xd;
	Uint8 esam_xbit;
	Uint8 esam_xcheck = 0;
	Uint8 *pdst;
	//使能寫操作
	esam_wen = TRUE;
	/* Establish ricieve pointer */
    pdst = (Uint8 *)src;
	//禁止ESAM中斷
	IRQ_disable(IRQ_EVT_EXTINT4);
	//啟動計數(shù)器
	TIMER_config(hTimer1, &myTimConfig);
	//Start the timers
	TIMER_start(hTimer1);
	
	/*發(fā)送數(shù)據(jù)*/
	for(i = 0;i<length;i++)
	{
		esam_xd = *pdst++;
		/*將ESAMIO置為高電平*/
		SEEDDM642_rset(SEEDDM642_ESAMW, 0x7);
		/*延時一段時間,做為兩個字節(jié)間的間隔*/
		for(k= 0;k<4;k++)
		{
			while(esam_xrdy ==FALSE){}
			esam_xrdy = FALSE;	
		}
		/*發(fā)出起始位*/
		while(esam_xrdy ==FALSE){}
		esam_xrdy = FALSE;
		SEEDDM642_rset(SEEDDM642_ESAMW, 0x6);
		for(j = 0; j<8;j++)
		{
			while(esam_xrdy ==FALSE){}
			esam_xrdy = FALSE;
			esam_xbit = (esam_xd >>j) & 0x1;
			esam_xcheck = esam_xcheck + esam_xbit;
			SEEDDM642_rset(SEEDDM642_ESAMW, (0x6 + esam_xbit));
		}
		//設置偶較驗位
		while(esam_xrdy ==FALSE){}
		esam_xrdy = FALSE;
		if((esam_xcheck & 0x1)==0)
		{
			SEEDDM642_rset(SEEDDM642_ESAMW, 0x6);
		}
		else
		{
			SEEDDM642_rset(SEEDDM642_ESAMW, 0x7);
		}
		while(esam_xrdy ==FALSE){}
		esam_xrdy = FALSE;
		SEEDDM642_rset(SEEDDM642_ESAMW, 0x7);			
	}
	//停止計數(shù)器
	TIMER_pause(hTimer1);
	//禁止寫
	esam_wen = FALSE;
}
//---------Subroutine definition---------

//Function called from TIMER1 ISR. Just increments the count by
//  one each time it enters this function. Exit from the program
//  after certain count value is reached.
void TimerEventHandler(void)
{
	//Process timer event here
	if(esam_wen ==TRUE)
	{
		cnt++;
		if(cnt == 2)
		{
			cnt = 0;
			esam_xrdy = TRUE;
		}  	
	}
	else
	{
		if(cntfirst == TRUE)
		{
			cnt++;
			if(cnt ==3)
			{
				esam_rrdy = TRUE;
				cntfirst = FALSE;
				cnt= 0;
			}	
		}
		else
		{
			cnt++;
			if(cnt == 2)
			{
				cnt = 0;
				esam_rrdy = TRUE;
			}  
		}
	}
}

//ISR to service TIMERINT1. 
//  vecs_dm642.asm must be modified to include c_int14 entry.
interrupt void c_int14(void)    
{
	TimerEventHandler();
	return;
}
//ISR to service EXTERN INT1. 
//  ves_dm642.asm must be modified to include c_int04 entry.
interrupt void c_int04(void)    
{
	//禁止ESAM中斷
	IRQ_disable(IRQ_EVT_EXTINT4);
	//設置有新的數(shù)據(jù)的標志
	esam_dnew = TRUE;
	cntfirst = TRUE;
	//Reset the timer events
	IRQ_reset(TimerEventId);
	//Enable the timer events(events are disabled while resetting)
	IRQ_enable(TimerEventId);
	TIMER_config(hTimer1, &myTimConfig);
	//Start the timers
	TIMER_start(hTimer1);
	cnt = 0;
	return;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲视频在线一区二区| 欧洲一区二区三区在线| 色婷婷精品久久二区二区蜜臂av| 91黄视频在线| 日韩一区二区视频在线观看| 国产欧美精品国产国产专区 | 国产一区二区三区四区在线观看| 国产成人精品亚洲午夜麻豆| 97国产一区二区| 制服丝袜在线91| 亚洲国产经典视频| 日本亚洲电影天堂| 成人黄色电影在线 | 蜜桃av噜噜一区| 成人午夜看片网址| 欧美日韩视频一区二区| 久久久影视传媒| 色综合色狠狠天天综合色| 欧美一二三在线| 亚洲色图欧洲色图| 精品一区二区三区在线播放| 91丝袜美女网| 久久婷婷一区二区三区| 亚洲成人综合网站| 成人自拍视频在线观看| 91精品国产高清一区二区三区| 国产精品素人一区二区| 免费观看在线综合色| 91国产福利在线| 国产精品五月天| 日本不卡视频在线| 91国偷自产一区二区三区成为亚洲经典| 精品伦理精品一区| 五月激情综合色| 色一情一伦一子一伦一区| 精品国产3级a| 日韩av一区二区三区四区| 一本一道久久a久久精品综合蜜臀| 精品欧美乱码久久久久久1区2区 | 欧美系列在线观看| 中文字幕第一区综合| 麻豆中文一区二区| 欧美日韩一区小说| 亚洲欧美日韩久久精品| 成人综合婷婷国产精品久久免费| 日韩欧美国产1| 午夜婷婷国产麻豆精品| 99这里都是精品| 久久久亚洲精品一区二区三区 | 国产精品电影一区二区| 麻豆精品久久久| 欧美日韩高清不卡| 久久99精品视频| 欧美三级韩国三级日本一级| 国产最新精品精品你懂的| 黄色日韩三级电影| 美女网站一区二区| 中文字幕亚洲在| 不卡的av在线播放| www成人在线观看| 一本大道久久a久久综合| 蜜桃视频一区二区三区在线观看| 欧美日本一区二区三区四区 | 日韩电影免费在线| 国产精品一区二区久久不卡 | 在线播放中文一区| 麻豆精品一区二区三区| 911精品国产一区二区在线| 亚洲国产精品久久不卡毛片| 色婷婷综合五月| 欧美精品一区二区三区高清aⅴ| 亚洲一区二区在线观看视频| 麻豆91免费看| 欧美一二区视频| 懂色av噜噜一区二区三区av| 欧美一级夜夜爽| 成人av电影在线观看| 国产成人自拍网| 国产欧美精品一区二区色综合 | 免费在线看成人av| 免费高清成人在线| 亚洲精品水蜜桃| 亚洲国产精品二十页| 国产精品亲子乱子伦xxxx裸| 国产精品天干天干在观线| 国产精品无遮挡| 亚洲综合av网| 精品国产污网站| 9191精品国产综合久久久久久| 色综合欧美在线| 欧美日韩一区久久| 欧洲亚洲精品在线| 粉嫩在线一区二区三区视频| 久久精品一区二区三区四区| 91香蕉视频在线| 天堂久久久久va久久久久| 日韩美女视频19| 欧美大片一区二区三区| 91福利国产成人精品照片| 成人听书哪个软件好| 国产福利不卡视频| 国产激情91久久精品导航| 精品一区二区免费视频| 蜜乳av一区二区| 久久精品999| 成人综合激情网| 97se狠狠狠综合亚洲狠狠| 色综合天天综合网国产成人综合天 | 久久久久国产精品厨房| 国产无人区一区二区三区| 国产精品久久久久久久久久久免费看 | 亚洲精品乱码久久久久久黑人 | 亚洲成人1区2区| 中文字幕av在线一区二区三区| 欧洲生活片亚洲生活在线观看| 国产原创一区二区| 激情久久久久久久久久久久久久久久| 日韩中文字幕区一区有砖一区| 国产精品免费久久| 亚洲精选一二三| 国产乱子轮精品视频| 成人激情综合网站| 天堂一区二区在线免费观看| 樱花草国产18久久久久| 中文字幕免费一区| 欧美大片国产精品| 亚洲一区二区影院| 天天综合日日夜夜精品| 一区二区三区精品| 日韩av不卡在线观看| 国内欧美视频一区二区| 在线欧美日韩精品| 欧美精品一区二| 亚洲成a人片综合在线| 国产在线精品一区在线观看麻豆| 91麻豆国产福利在线观看| 精品伦理精品一区| 日韩在线观看一区二区| 99久久99久久精品免费观看| 欧美一区二区久久久| 亚洲欧美激情一区二区| 国产精品99久久久久久久vr| 欧美疯狂性受xxxxx喷水图片| 国产精品久久久久久一区二区三区| 秋霞电影网一区二区| 欧美午夜在线一二页| 亚洲欧美一区二区三区国产精品| 国内精品伊人久久久久av一坑 | 久久久久久久久久美女| 亚洲香肠在线观看| 色偷偷久久一区二区三区| 中文字幕第一区综合| 国产成人一区二区精品非洲| 久久久久综合网| 国产一区激情在线| 久久久久成人黄色影片| 国内不卡的二区三区中文字幕 | 亚洲成av人片观看| 国产一区二区三区久久悠悠色av | 91福利区一区二区三区| 亚洲色图在线视频| 在线观看一区日韩| 亚洲福利一二三区| 欧美一区二区久久| 国产精品亚洲一区二区三区在线| 久久久久久亚洲综合影院红桃| 国产成人无遮挡在线视频| 久久久国际精品| 99久久久国产精品免费蜜臀| 国产亚洲自拍一区| 亚洲综合区在线| 欧美无人高清视频在线观看| 日本成人中文字幕在线视频| 日韩欧美成人一区二区| 国产一二三精品| 亚洲免费伊人电影| 91精品婷婷国产综合久久竹菊| 国产剧情在线观看一区二区| 亚洲欧美一区二区不卡| 日韩三级av在线播放| 成人激情免费网站| 免费日韩伦理电影| 亚洲日本va在线观看| 欧美一区二区大片| 91年精品国产| 国产一区二区在线视频| 一区二区成人在线| 欧美国产视频在线| 日韩一卡二卡三卡国产欧美| av电影一区二区| 国产综合久久久久影院| 亚洲影视在线观看| 中文字幕 久热精品 视频在线| 欧美色中文字幕| 99久久er热在这里只有精品66| 狠狠色丁香九九婷婷综合五月| 亚洲一区二区三区自拍| 青青草91视频| 日韩精品欧美精品| 亚洲国产一二三|