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

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

?? usart.c

?? at91rm9200基于多媒體控制接口控制smc卡的控制程序
?? C
字號:
//uart.C
//Catinux 040811
// Include Standart LIB  files 
#include "include/AT91M55800A.h"
#include "include/lib_AT91M55800A.h"
#include "drv/eb55.h"
#include "drv/Usart.h"
//#include "timer.h"

#include "include\includes.h"

//引用的匯編外部函數
extern void usart0_asm_irq_handler(void);
extern void usart1_asm_irq_handler(void);

extern OS_EVENT *SemNewRx;

//串口狀態標志
char flagUsTxEmpty;			//串口發送空閑
char flagUsTimeOut;			//串口數據超時
char flagUsOVRE;			//串口數據接收覆蓋
//char flagUsFrameReceived;	//數據串接收完畢
//char flagUsFrameTransmitted;//數據串發送完畢
//char flagUsByteFrameError;	//串口數據接收字節幀錯誤
//char flagUsPareError;			//串口數據接收字節校驗位錯誤
int UsOverCnt;//串口被覆蓋的數據個數,用于檢錯
//串口緩沖定義
#define TX_MAX 255
#define RX_MAX 255


//串口收發緩沖數據結構定義,
typedef struct _sUSART_Buffer{
	int TxCurIndex;//串口發送個數
	char *TxHead;//隊列頭指針,隊列頭取出
	char *TxTail;//隊列尾指針,尾寫入	
	char TxBuffer[TX_MAX];//串口發送緩沖區隊列
	int RxCurIndex;//串口接收緩沖區當前的字符數
	char *RxHead;//隊列頭指針,隊列頭取出
	char *RxTail;//隊列尾指針,隊列尾寫入
	char RxBuffer[RX_MAX];//串口接收緩沖區
}S_USART_BUFFER,*PS_USART_BUFFER;
S_USART_BUFFER USART0_BUFFER;
S_USART_BUFFER USART1_BUFFER;
S_USART_BUFFER USART2_BUFFER;
PS_USART_BUFFER pUSART0_BUFFER = &USART0_BUFFER;
PS_USART_BUFFER pUSART1_BUFFER = &USART1_BUFFER;
PS_USART_BUFFER pUSART2_BUFFER = &USART2_BUFFER;

//---------------------------------- 外部函數 -----------------------------
//返回接收緩沖的字節數量
int Us_GetRxCurIndex(char UsartNo)
{
	PS_USART_BUFFER pUsart_Buffer;
	switch(UsartNo)
	{
		case COM0:
			pUsart_Buffer = pUSART0_BUFFER;
		break;
		case COM1:
			pUsart_Buffer = pUSART1_BUFFER;
		break;
	}
	return pUsart_Buffer->RxCurIndex;
}
//接收字符串(串口通道COM0,1,2 接收指針,接收數量)
int Us_RecvStr(char UsartNo,char *pBuffer,int szBuffer)
{
	AT91PS_USART pUSART;
	PS_USART_BUFFER pUsart_Buffer;
	int i,szRecved;
	
	switch(UsartNo)
	{
		case COM0:
			pUSART = AT91C_BASE_US0;
			pUsart_Buffer = pUSART0_BUFFER;
		break;
		case COM1:
			pUSART = AT91C_BASE_US1;
			pUsart_Buffer = pUSART1_BUFFER;
		break;
	}
	AT91F_US_DisableRx(pUSART);						//暫停接收
	szRecved = (szBuffer <= pUsart_Buffer->RxCurIndex)? szBuffer : 0;
	if(szRecved>0)
	{
	for(i=0;i<szRecved;i++)
	{
		pBuffer[i] = *(pUsart_Buffer->RxHead++);					//出隊,讀取接收緩沖
		if( pUsart_Buffer->RxHead >= (pUsart_Buffer->RxBuffer+RX_MAX) )
			pUsart_Buffer->RxHead = pUsart_Buffer->RxBuffer;//隊列指針調整				
	}
	pUsart_Buffer->RxCurIndex -= szRecved;						//隊列長度更新
	}
	AT91F_US_EnableRx(pUSART);						//恢復接收

	return szRecved;
}


//發送字符串,
int Us_SendStr(char UsartNo,char * pBuffer,int szBuffer)
{
	AT91PS_USART pUSART;
	PS_USART_BUFFER pUsart_Buffer;
	int i,szSended;

	switch(UsartNo)
	{
		case COM0:
			pUSART = AT91C_BASE_US0;
			pUsart_Buffer = pUSART0_BUFFER;
		break;
		case COM1:
			pUSART = AT91C_BASE_US1;
			pUsart_Buffer = pUSART1_BUFFER;
		break;
	}

	AT91F_US_DisableTx(pUSART);							//暫停發送	US_CR = AT91C_US_TXDIS;	
	//如果緩沖區不足,則不發,直接返回
	szSended = (szBuffer <= (TX_MAX - pUsart_Buffer->TxCurIndex)) ? szBuffer : 0;
	if(szSended>0)
	{
	for(i=0;i<szSended;i++)
	{
		*(pUsart_Buffer->TxTail++) = pBuffer[i];							//入隊,寫入發送緩沖
		if( pUsart_Buffer->TxTail >= (pUsart_Buffer->TxBuffer + TX_MAX) )
			pUsart_Buffer->TxTail = pUsart_Buffer->TxBuffer;//隊列指針調整
	}
	pUsart_Buffer->TxCurIndex += szSended;								//隊列長度更新
	}
	AT91F_US_EnableTx(pUSART);							//恢復發送,啟動發送//US_CR = AT91C_US_TXEN;
	
	return 	szSended;
}

//清空收發緩沖
void ResetRxBuffer(char UsartNo)
{

	PS_USART_BUFFER pUsart_Buffer;
	switch(UsartNo)
	{
		case COM0:
			pUsart_Buffer = pUSART0_BUFFER;
		break;
		case COM1:
			pUsart_Buffer = pUSART1_BUFFER;
		break;
	}
	pUsart_Buffer->RxCurIndex = 0;	
	pUsart_Buffer->RxHead = pUsart_Buffer->RxBuffer;
	pUsart_Buffer->RxTail = pUsart_Buffer->RxBuffer;	
	UsOverCnt = 0;
}
void ResetTxBuffer(char UsartNo)
{
	PS_USART_BUFFER pUsart_Buffer;
	switch(UsartNo)
	{
		case COM0:
			pUsart_Buffer = pUSART0_BUFFER;
		break;
		case COM1:
			pUsart_Buffer = pUSART1_BUFFER;
		break;
	}
	pUsart_Buffer->TxCurIndex = 0;
	pUsart_Buffer->TxHead = pUsart_Buffer->TxBuffer;
	pUsart_Buffer->TxTail = pUsart_Buffer->TxBuffer;
	flagUsTxEmpty = TRUE;
}

//串口0初始化
void Usart0_Init ( void )
{
	AT91PS_USART pUSART;

	//串口0	
	pUSART= AT91C_BASE_US0;
	//設置串口引腳
	AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA,AT91C_PA16_RXD0 | AT91C_PA15_TXD0,0);
	//使能串口設備時鐘
	AT91F_APMC_EnablePeriphClock ( AT91C_BASE_APMC, 1<<AT91C_ID_US0 ) ;
	//串口模式設置,時鐘源,波特率,無超時
	AT91F_US_Configure (pUSART, MCK,AT91C_US_ASYNC_MODE, 38400, 0);
	//允許收發
	pUSART->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;
	//設置串口的中斷方式 收|發
	AT91F_US_EnableIt(pUSART, AT91C_US_RXRDY | AT91C_US_TXRDY | AT91C_US_OVRE );
	//設置中斷句柄* open Usart 0 interrupt
	AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_US0, USART0_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE, usart0_asm_irq_handler); 
	//允許中斷
	AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US0); 
}
//串口1初始化
void Usart1_Init ( void )
{
	AT91PS_USART pUSART;

	//串口1	
	pUSART= AT91C_BASE_US1;
	//設置串口引腳
	AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA,AT91C_PA19_RXD1 | AT91C_PA18_TXD1,0);
	//使能串口設備時鐘
	AT91F_APMC_EnablePeriphClock ( AT91C_BASE_APMC, 1<<AT91C_ID_US1 ) ;
	//串口模式設置,時鐘源,波特率,無超時
	AT91F_US_Configure (pUSART, MCK,AT91C_US_ASYNC_MODE, 38400, 0);
	//允許收發
	pUSART->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;
	//設置串口的中斷方式 收|發
	AT91F_US_EnableIt(pUSART, AT91C_US_RXRDY | AT91C_US_TXRDY | AT91C_US_OVRE );
	//設置中斷句柄* open Usart 0 interrupt
	AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_US1, USART1_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_LEVEL_SENSITIVE, usart1_asm_irq_handler); 
	//允許中斷
	AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US1); 
}
//--------------------------- 中斷函數 ------------------------------------
//串口中斷處理,目前為3個串口共用
//入口參數: 串口號指針,如AT91C_BASE_US0,AT91C_BASE_US1,AT91C_BASE_US2
void Usart_c_irq_handler(AT91PS_USART USART_pt)
{
	unsigned int status;
	int RxTxData;//收到的,或待發送的一字節數據
	//unsigned char RxChar;
	PS_USART_BUFFER pUsart_Buffer;

	if(USART_pt == AT91C_BASE_US0)
		pUsart_Buffer = pUSART0_BUFFER;
	else if(USART_pt == AT91C_BASE_US1)
		pUsart_Buffer = pUSART1_BUFFER;	
	else
		pUsart_Buffer = pUSART2_BUFFER;	

	//* get Usart status register 	
	status = USART_pt->US_CSR;
	if( status & AT91C_US_RXRDY)				//US_RHR內有數據待讀取
	{
		RxTxData = AT91F_US_GetChar(USART_pt);	//讀US_RHR
		*(pUsart_Buffer->RxTail++) = RxTxData;							//入隊,寫入接收緩沖
		if( pUsart_Buffer->RxTail >= (pUsart_Buffer->RxBuffer+RX_MAX) )
			pUsart_Buffer->RxTail = pUsart_Buffer->RxBuffer;//隊列指針調整
		pUsart_Buffer->RxCurIndex++;									//隊列長度更新
		OSSemPost(SemNewRx);//add for ucos sample
	}
	if( status & AT91C_US_TXRDY)				//US_THR空,可以寫入下一個待發數據
	{
		if(pUsart_Buffer->TxCurIndex>0)						//如果發送緩沖非空,則發送數據
		{
			RxTxData = *(pUsart_Buffer->TxHead++);				//出隊,讀取發送緩沖
			if( pUsart_Buffer->TxHead >= (pUsart_Buffer->TxBuffer+TX_MAX) )
				pUsart_Buffer->TxHead = pUsart_Buffer->TxBuffer;//隊列指針調整
			pUsart_Buffer->TxCurIndex--;									//隊列長度更新
			AT91F_US_PutChar (USART_pt,RxTxData);//寫US_THR
		}
		else
		{
			AT91F_US_DisableTx(USART_pt);
			flagUsTxEmpty = TRUE;				//發送緩沖已空
		}
	}
	if( status & AT91C_US_OVRE)					//US_RHR未及時讀取,被新到數據覆蓋
	{
		RxTxData = AT91F_US_GetChar(USART_pt);	//讀US_RHR
		*(pUsart_Buffer->RxTail++) = RxTxData;							//入隊,寫入接收緩沖
		if( pUsart_Buffer->RxTail >= (pUsart_Buffer->RxBuffer+RX_MAX) )
			pUsart_Buffer->RxTail = pUsart_Buffer->RxBuffer;//隊列指針調整
		pUsart_Buffer->RxCurIndex++;									//隊列長度更新
		flagUsOVRE = TRUE;						//設覆蓋標記
		UsOverCnt++;							//覆蓋次數++
	}
	//以下中斷未開放
	if( status & AT91C_US_TIMEOUT)	//超時
	{
		flagUsTimeOut = TRUE;
		//USART_pt->US_CR = AT91C_US_STTTO;//繼續計超時?
		//...
	}
	if( status & AT91C_US_TXEMPTY)	//US_THR和發送寄存器均為空
	{
		flagUsTxEmpty = TRUE;
	}
	if( status & AT91C_US_ENDRX)	//PDC通道接收結束
	{
		//flagUsFrameReceived = TRUE;
	}
	if( status & AT91C_US_ENDTX)	//PDC通道發送結束
	{
		//flagUsFrameTransmitted = TRUE;flagUsTxEmpty = TRUE;
	}
	//* Reset the status bit
	USART_pt->US_CR = AT91C_US_RSTSTA;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美亚洲自拍偷拍| 色噜噜狠狠成人网p站| 亚洲一级二级三级在线免费观看| 久久精品人人做人人爽人人| 久久综合九色欧美综合狠狠 | 高清不卡在线观看| 国产毛片精品视频| 国产精品一区二区你懂的| 国产一区二区三区国产| 成人精品一区二区三区四区| 风间由美一区二区三区在线观看| bt7086福利一区国产| 成人av资源在线| 91麻豆国产在线观看| 欧美亚洲日本国产| 精品免费视频.| 国产精品午夜在线观看| 一区二区三区免费在线观看| 亚洲国产综合91精品麻豆| 婷婷丁香激情综合| 国内精品国产三级国产a久久| 国产丶欧美丶日本不卡视频| 成人黄色综合网站| 欧美日韩另类国产亚洲欧美一级| 欧美日韩日日摸| 久久久99精品免费观看不卡| 国产精品久久久久久久久久久免费看 | 欧美日韩视频不卡| 日韩一区二区三区精品视频| 久久久久久久久一| 一区二区三区在线观看国产| 青青草国产精品97视觉盛宴| 国产很黄免费观看久久| 色婷婷久久综合| 精品国产免费一区二区三区四区| 中文字幕在线一区免费| 日韩1区2区3区| 99re热视频精品| 日韩视频一区二区在线观看| 1000精品久久久久久久久| 丝袜美腿亚洲一区二区图片| 成人国产精品免费| 欧美一区永久视频免费观看| 中文字幕在线一区免费| 青青青伊人色综合久久| 91久久精品午夜一区二区| 欧美精品一区二区三区视频| 亚洲成人久久影院| 成人激情综合网站| 久久综合九色综合欧美亚洲| 一区二区成人在线视频| 国产成人鲁色资源国产91色综| 欧美猛男超大videosgay| 国产精品无码永久免费888| 日本免费在线视频不卡一不卡二| 99精品欧美一区二区蜜桃免费 | 1024成人网色www| 国产精品一区二区在线观看网站| 欧美电影一区二区| 夜夜精品视频一区二区| 成人免费视频一区| 久久久天堂av| 国内久久婷婷综合| 日韩欧美的一区| 免费的成人av| 日韩午夜电影av| 丝袜美腿一区二区三区| 色婷婷av一区二区三区软件| 中文字幕av一区二区三区高| 国产一区二区三区日韩| 日韩视频免费直播| 麻豆精品一二三| 日韩一区二区麻豆国产| 秋霞电影网一区二区| 91精品国产黑色紧身裤美女| 午夜视频在线观看一区二区| 欧美日韩中文一区| 舔着乳尖日韩一区| 欧美一区二区三区影视| 日本sm残虐另类| 欧美va天堂va视频va在线| 伦理电影国产精品| 久久伊99综合婷婷久久伊| 国产精品91xxx| 国产精品乱码妇女bbbb| 99re8在线精品视频免费播放| 亚洲女同ⅹxx女同tv| 91搞黄在线观看| 图片区小说区区亚洲影院| 欧美一区二区观看视频| 国模无码大尺度一区二区三区| 久久精品免视看| 91视视频在线观看入口直接观看www| 亚洲免费在线看| 欧美精品电影在线播放| 狠狠色丁香婷婷综合| 欧美国产日韩a欧美在线观看 | 欧美综合亚洲图片综合区| 五月综合激情日本mⅴ| 亚洲精品在线观| a4yy欧美一区二区三区| 亚洲午夜免费电影| 精品欧美乱码久久久久久1区2区| 国产成+人+日韩+欧美+亚洲| 亚洲视频 欧洲视频| 制服丝袜一区二区三区| 成人涩涩免费视频| 亚洲成人一区二区在线观看| 久久久一区二区| 欧美熟乱第一页| 国产ts人妖一区二区| 亚洲国产综合色| 亚洲国产精品二十页| 欧美亚洲国产怡红院影院| 国内精品久久久久影院色| 一区二区欧美在线观看| 欧美成人在线直播| 欧美在线视频你懂得| 国产精品影视在线| 日本系列欧美系列| 亚洲欧美日韩国产手机在线 | 国产传媒一区在线| 午夜久久久久久电影| 国产精品拍天天在线| 欧美一区二区精品| 欧美性受xxxx黑人xyx| 成人精品视频一区二区三区| 免费国产亚洲视频| 亚洲成人精品影院| 亚洲精选在线视频| 中文字幕欧美激情| 久久精品夜夜夜夜久久| 日韩一区二区三区视频在线| 欧美三级韩国三级日本一级| 成人自拍视频在线| 国产毛片精品国产一区二区三区| 天堂成人国产精品一区| 亚洲精品成a人| 国产精品二三区| 国产精品欧美一级免费| 久久久国际精品| 精品免费国产一区二区三区四区| 欧美伦理电影网| 欧美精品一二三四| 欧美日韩精品一区二区三区四区 | 国产精品一区二区免费不卡| 日韩精品电影一区亚洲| 亚洲综合无码一区二区| 亚洲三级小视频| 亚洲天天做日日做天天谢日日欢| 国产精品你懂的在线欣赏| 国产精品欧美一区喷水| 国产精品乱码一区二三区小蝌蚪| 欧美国产1区2区| 国产精品视频在线看| 国产精品久久网站| 中文字幕一区不卡| 亚洲精品videosex极品| 亚洲午夜一区二区三区| 日韩电影一二三区| 日本欧美大码aⅴ在线播放| 伦理电影国产精品| 国产成人午夜精品影院观看视频 | 国产精品麻豆99久久久久久| 国产视频一区在线播放| 国产精品私人自拍| 亚洲精品成a人| 日本不卡免费在线视频| 韩国三级中文字幕hd久久精品| 国精产品一区一区三区mba视频 | 亚洲激情第一区| 午夜精品久久久久久久99水蜜桃 | 国产成人亚洲精品青草天美| 成人av资源在线观看| 色婷婷亚洲精品| 日韩一区二区在线观看| 久久久久久久久久久电影| 国产精品电影一区二区三区| 午夜伊人狠狠久久| 国产呦萝稀缺另类资源| 91丝袜高跟美女视频| 在线综合亚洲欧美在线视频| 久久久国际精品| 亚洲丰满少妇videoshd| 黄网站免费久久| 91久久精品日日躁夜夜躁欧美| 日韩欧美一二三区| 亚洲色图.com| 国产中文字幕精品| 欧美性xxxxxxxx| 久久精品男人天堂av| 午夜激情综合网| 成人白浆超碰人人人人| 777精品伊人久久久久大香线蕉| 国产精品日产欧美久久久久| 日韩中文字幕不卡| 成人高清视频免费观看| 日韩三级视频中文字幕| 亚洲精品欧美二区三区中文字幕| 国产乱一区二区|