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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? uartlib.c

?? S3C2410上GPRS模塊的驅(qū)動源碼,ADS1.2編譯工程,已測試通過.附文檔.
?? C
字號:
#include <stdarg.h>
#include <stdio.h>
#include "def.h"
#include "touch.h"
#include "UartLib.h"
#include "2410lib.h"
#include "2410addr.h"
#include "Int.h"

UART_PORT UartPort0;		// 串口0對應(yīng)的結(jié)構(gòu)體
int UartRxEndFlag;

/*
|	函數(shù):	Receive_Uart0,	串口0接收中斷程序
|	參數(shù):	無
|	返回:	無
|
|	日期:	06/12/18
|	創(chuàng)建人:	ZengJC
*/
void __irq Receive_Uart0(void)
{
//	int temp;
	U8 receive;
	INT_ADC_Enable(FALSE);
	
	if (UartPort0.RxBufferStatus != BUFFER_FULL)
		do
		{
			receive = RxUart(UART0);
			UartPort0.RxBuffer[UartPort0.RxBufferWrite++] = receive;
		
			// 檢查緩沖區(qū)
			if (UartPort0.RxBufferWrite == UartPort0.bufferSize)
				UartPort0.RxBufferWrite = 0;
			if (UartPort0.RxBufferWrite == UartPort0.RxBufferRead)
				UartPort0.RxBufferStatus = BUFFER_FULL;
			else
				UartPort0.RxBufferStatus = BUFFER_DATA;
			
		} while (rUTRSTAT0 & 0x1);
		
	
	ClearInt();			// 清中斷
	INT_ADC_Enable(TRUE);
}

/*
|	函數(shù):	UartGetChar,		從串口緩沖區(qū)提取一個字符
|	參數(shù):	UART_PORT *port,	串口對應(yīng)結(jié)構(gòu)體
|	返回:	U8,					返回取得的字符,類型為U8(unsigned char)
|
|	日期:	06/12/18
|	創(chuàng)建人:	ZengJC
*/
U8 UartGetChar(UART_PORT *port)
{
	U8 ch = 0;
	
	if (port->RxBufferStatus != BUFFER_EMPTY) 
	{
		ch = port->RxBuffer[port->RxBufferRead++];
		
		if (port->RxBufferRead == port->bufferSize)
			port->RxBufferRead = 0;
		
		if (port->RxBufferRead == port->RxBufferWrite)
			port->RxBufferStatus = BUFFER_EMPTY;
		else
			port->RxBufferStatus = BUFFER_DATA;
	}
	
	Delay(2);
	return ch;
}

/*
|	函數(shù):	SetDefaultToUart,	把串口結(jié)構(gòu)體設(shè)為默認(rèn)值
|	參數(shù)1:	UART_PORT *port,	串口對應(yīng)結(jié)構(gòu)體
|	參數(shù)2:	int com,			目標(biāo)串口
|	返回:	無
|
|	日期:	06/12/18
|	創(chuàng)建人:	ZengJC
*/
void SetDefaultToUart(UART_PORT *port, int com)
{
	port->comPort	= com;		// 目標(biāo)串口
	port->baudRate	= 112500;	// 波特率
	port->dataBits	= 3;		// 8 bits per frame
	port->stopBits	= 0;		// One stop bit per frame
	port->parity	= 0;		// No parity
	port->dataMode	= 0;		// UART runs in normal operation
	port->communicationMode = 0;// ???
	port->bufferSize = 1024;	// 接收緩沖大小
}

/*
|	函數(shù):	InitUartPort,		初始化串口
|	參數(shù):	UART_PORT *port,	串口對應(yīng)結(jié)構(gòu)體
|	返回:	int,				保留(未使用)
|
|	日期:	06/12/18
|	創(chuàng)建人:	ZengJC
*/
int InitUartPort(UART_PORT *port)
{
//	int temp;
	
	if (port->comPort == UART0)
	{
		port->vector = 28;
		port->baseAddr = UART0_BASE;
	}
	else
		if (port->comPort == UART1)
		{
			port->vector = 23;
			port->baseAddr = UART1_BASE;
		}
		else
			if (port->comPort == UART2)
			{
				port->vector = 15;
				port->baseAddr = UART2_BASE;
			}
			else
				return 0;
	
	// Setup the RX SD buffer
	port->RxBufferRead = port->RxBufferWrite = 0;
	port->RxBufferStatus = BUFFER_EMPTY;
	
	// Clear Control registers
	SET_REGISTER(port->baseAddr + rULCON_OFFSET, 0);
	SET_REGISTER(port->baseAddr + rUCON_OFFSET, 0);
	SET_REGISTER(port->baseAddr + rUFCON_OFFSET, 0);
	SET_REGISTER(port->baseAddr + rUMCON_OFFSET, 0);
	
	// Setup baud rate
	SetBaudrate(port->baudRate, port->comPort);
	
	// Setup Mode, Parity, Stop Bits and Data Size in ULCON Reg.
	SET_REGISTER(port->baseAddr + rULCON_OFFSET
				,port->parity | port->dataBits | port->stopBits);
	rUCON0  = 0x245;
	
	//do{
	//	temp = GET_REGISTER(port->baseAddr + rURXH_OFFSET);
	//} while (GET_REGISTER(port->baseAddr + rUTRSTAT_OFFSET) & 1);
	
	UartInterrupt(TRUE, port->comPort);
	
	return 0;
}

/*
|	函數(shù):	SetBaudrate,	設(shè)置串口波特率
|	參數(shù)1:	U32 baudRate,	波特率
|	參數(shù)2:	int com,		目標(biāo)串口
|	返回:	無
|
|	日期:	06/12/18
|	創(chuàng)建人:	ZengJC
*/
void SetBaudrate(U32 baudRate, int com)
{
	int pclk = 202800000/4;
	switch(com)
	{
	case UART0:
		{
			rUBRDIV0 = (int)(pclk/16./baudRate + 0.5) - 1;
		}break;
	case UART1:
		{
			rUBRDIV1 = (int)(pclk/16./baudRate + 0.5) - 1;
		}break;
	case UART2:
		{
			rUBRDIV2 = (int)(pclk/16./baudRate + 0.5) - 1;
		}break;
	default:
		{
		}break;
	}
}

/*
|	函數(shù):	UartPutChar,		向串發(fā)送一個字符
|	參數(shù)1:	U8 ch,				將要發(fā)送的字符
|	參數(shù)2:	UART_PORT *port,	目標(biāo)串口
|	返回:	無
|
|	日期:	06/12/18
|	創(chuàng)建人:	ZengJC
*/
void UartPutChar(U8 ch, UART_PORT *port)
{
	int status;
	status = GET_REGISTER(port->baseAddr + rUTRSTAT_OFFSET);

	while(!(status & 0x2));
	Delay(2);
	
	switch(port->comPort)
	{
	case UART0:
		{
			WrUTXH0(ch);
		}break;
	case UART1:
		{
			WrUTXH1(ch);
		}break;
	case UART2:
		{
			WrUTXH2(ch);
		}break;
	}
}

void UartSimplePutChar(U8 ch, int com)
{
	switch(com)
	{
	case UART0:
		{
			while(rUFSTAT0 & 0x2);	//Wait until THR is empty.
			Delay(2);
			WrUTXH0(ch);
		}break;

	case UART1:
		{
			while(rUFSTAT1 & 0x2);	//Wait until THR is empty.
			Delay(2);
			WrUTXH1(ch);
		}break;

	case UART2:
		{
			while(rUFSTAT2 & 0x2);	//Wait until THR is empty.
			Delay(2);
			WrUTXH2(ch);
		}break;
	}
}

/*
|	函數(shù):	UartPutStr,			向串發(fā)送一個字符串
|	參數(shù)1:	char *str,			將要發(fā)送的字符
|	參數(shù)2:	UART_PORT *port,	目標(biāo)串口
|	返回:	無
|
|	日期:	06/12/18
|	創(chuàng)建人:	ZengJC
*/
void UartPutStr(char *str, UART_PORT *port)
{
	while(*str)
		UartPutChar(*str++, port);
}

void UartSimplePutStr(char *str, int com)
{
	while(*str)
		UartSimplePutChar(*str++, com);
}

void UartPrintf(int com, char *strFmt,...)
{
	va_list ap;
	char String[256];
	
	va_start(ap, strFmt);
	vsprintf(String, strFmt, ap);
	UartSimplePutStr(String,com);
	va_end(ap);
}

/*
|	函數(shù):	RxUart,		從串口接收一個字符
|	參數(shù):	int com,	目標(biāo)串口
|	返回:	U8			收到的字符
|
|	日期:	06/12/18
|	創(chuàng)建人:	ZengJC
*/
U8 RxUart(int com)
{
    switch(com)
    {
        case UART0:
                return (char)RdURXH0();
                break;
                
        case UART1:
                return (char)RdURXH1();
                break;
                
        case UART2:
                return (char)RdURXH2();
                break;
    }
    return 0;
}

/*
|	函數(shù):	RxUartS,	從串口接收一個字符(帶返回狀態(tài))
|	參數(shù):	char *data,	收到的字符
|	參數(shù):	int Uart,	目標(biāo)串口
|	返回:	int			返回狀態(tài);TRUE,成功;FALSE失敗
|
|	日期:	06/12/18
|	創(chuàng)建人:	ZengJC
*/
int RxUartS(char *data,int Uart)
{
	switch(Uart)
	{
		case UART0:
			if(rUFSTAT0 & 0x1)
			{
				*data = rURXH0;
				return TRUE;
			}break;
			
		case UART1:
			if(rUFSTAT1 & 0x1)
			{
				*data = rURXH1;
				return TRUE;
			}break;
			
		case UART2:
			if(rUFSTAT2 & 0x1)
			{
				*data = rURXH2;
				return TRUE;
			}break;
    }
    return FALSE;
}

void UartWaitForStr(char *str, int Uart)
{
	char *tempStr = str;
	char ch = 0;
	int flag = 1;
	
	UartRxEndFlag = FALSE;
	while(ch !='\r' && UartRxEndFlag == FALSE)
	{
		flag = RxUartS(&ch,Uart);
		if (flag == TRUE)
		{
			if (ch == '\b')
			{
				if ((int)tempStr < (int)str)
				{
					UartPrintf(Uart ,"\b \b");
					str--;
				}
			}
			else
			{
				*str = ch;
				str++;
				UartSimplePutChar(ch,Uart);
			}
		}
	}
	
	UartRxEndFlag = TRUE;
	str--;
	*str = '\0';
	UartPrintf(Uart ,"\n\n");
}

/*
|	函數(shù):	UartInterrupt,	串口中斷使能
|	參數(shù)1:	int enable,		使能
|	參數(shù)2:	int com,		目標(biāo)串口
|	返回:	無
|
|	日期:	06/12/18
|	創(chuàng)建人:	ZengJC
*/
void UartInterrupt(int enable, int com)
{
	switch(com)
	{
	case UART0:
		{
			if (enable == TRUE)
			{
				rINTMSK &= ~BIT_UART0;
				//rINTMOD &= ~BIT_UART0;
				rINTSUBMSK &= ~(BIT_SUB_RXD0 | BIT_SUB_RXD0);
			}else{
				rINTMSK |= BIT_UART0;
				rINTSUBMSK |= BIT_SUB_RXD0;
			}
		}break;
	case UART1:
		{
			if (enable == TRUE)
			{
				rINTMSK &= ~BIT_UART1;
				rINTSUBMSK &= ~BIT_SUB_RXD1;
			}else{
				rINTMSK |= BIT_UART1;
				rINTSUBMSK |= BIT_SUB_RXD1;
			}
		}break;
	case UART2:
		{
			if (enable == TRUE)
			{
				rINTMSK &= ~BIT_UART2;
				rINTSUBMSK &= ~BIT_SUB_RXD2;
			}else{
				rINTMSK |= BIT_UART2;
				rINTSUBMSK |= BIT_SUB_RXD2;
			}
		}break;
	default:
		{
		}break;
	}
}

void UartDefaultInit(int Uart)
{
	switch(Uart)
	{
	case UART0:
		{
			rUFCON0	= 0;
			rUMCON0	= 0;
			rULCON0	= 0x23;
			rUCON0	= 0x245;
		}break;
	case UART1:
		{
			rUFCON1	= 0;
			rUMCON1	= 0;
			rULCON1	= 0x23;
			rUCON1	= 0x245;
		}break;
	case UART2:
		{
			rUFCON2	= 0;
			rUMCON2	= 0;
			rULCON2	= 0x23;
			rUCON2	= 0x245;
		}break;
	}
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩一级黄色大片| 成人激情动漫在线观看| 亚洲一区在线视频观看| 视频一区视频二区中文| 韩国精品在线观看| 色一区在线观看| 欧美一区二区三区在线视频| 国产欧美精品区一区二区三区| 一区二区三区美女视频| 久草这里只有精品视频| 欧美日韩一区二区三区不卡| 亚洲精品在线免费观看视频| 一区二区三区蜜桃| 欧美亚洲丝袜传媒另类| 亚洲欧洲无码一区二区三区| 免费一级片91| 欧美日韩精品专区| 亚洲精品免费看| 99精品久久免费看蜜臀剧情介绍| 日韩精品一区二区三区视频| 丝袜诱惑亚洲看片| 久久亚洲一区二区三区明星换脸| 日韩高清中文字幕一区| 欧美日本一道本| 国产精品一区二区不卡| 精品国产一区a| 99在线热播精品免费| 亚洲欧洲日本在线| 欧美精品久久99| 日本伊人色综合网| 国产欧美1区2区3区| 欧美日韩在线不卡| 成人一二三区视频| 亚洲精品一区二区精华| 97精品国产97久久久久久久久久久久| 首页亚洲欧美制服丝腿| 国产日韩综合av| 欧美系列一区二区| 国产精品白丝av| 香蕉乱码成人久久天堂爱免费| 91成人国产精品| 午夜不卡av在线| 欧美v日韩v国产v| 岛国一区二区三区| 青青国产91久久久久久 | 日韩—二三区免费观看av| 国产午夜亚洲精品午夜鲁丝片 | 日韩成人午夜电影| 国产精品久久福利| 91久久免费观看| 国产传媒一区在线| 亚洲天堂久久久久久久| 欧美最猛黑人xxxxx猛交| 亚洲超碰精品一区二区| 亚洲欧美怡红院| 久久久天堂av| 99视频精品免费视频| 精品一区二区三区免费播放| 午夜欧美2019年伦理| 亚洲欧美日韩中文播放 | 91精品国产福利在线观看| 色综合视频一区二区三区高清| 国产乱码一区二区三区| 美腿丝袜亚洲一区| 国产精品毛片久久久久久| 日本道色综合久久| av欧美精品.com| 福利视频网站一区二区三区| 亚洲一二三区在线观看| 日韩精品一区二区三区老鸭窝| 色婷婷综合久久久| 99re热这里只有精品免费视频| 国产一区二区三区香蕉| 亚洲视频一区二区在线| 国产精品久久午夜夜伦鲁鲁| 久久久99精品久久| 久久精品夜夜夜夜久久| 精品国产乱码91久久久久久网站| 欧美伊人久久久久久午夜久久久久| 91在线小视频| 色偷偷88欧美精品久久久| 91黄色免费网站| 91国内精品野花午夜精品| 色吧成人激情小说| 色婷婷亚洲综合| 欧美在线你懂的| 欧美日韩国产系列| 欧美一区二区视频在线观看| 日韩视频123| 2014亚洲片线观看视频免费| 2024国产精品| 欧美国产精品劲爆| 日韩一级完整毛片| 精品国产一区二区三区久久影院| 精品成人免费观看| 欧美国产日韩精品免费观看| 亚洲视频资源在线| 无吗不卡中文字幕| 精品无人码麻豆乱码1区2区| 国产成人在线免费| 日本电影欧美片| 欧美一区二区三区日韩| 久久久久久一级片| 亚洲天堂av老司机| 日韩和的一区二区| 国产一区二区久久| 99re热视频这里只精品| 777a∨成人精品桃花网| 色av成人天堂桃色av| 欧美少妇一区二区| 欧美mv日韩mv亚洲| 国产精品免费网站在线观看| 一区二区三区中文字幕精品精品 | 亚洲欧洲在线观看av| 午夜精品一区二区三区免费视频 | 粉嫩一区二区三区性色av| 91美女在线观看| 国产成人免费网站| 欧美午夜不卡在线观看免费| 久久综合色8888| 亚洲欧美偷拍另类a∨色屁股| 日本aⅴ亚洲精品中文乱码| 成人免费看的视频| 欧美久久婷婷综合色| 亚洲国产精品成人久久综合一区| 夜夜嗨av一区二区三区网页| 国产综合久久久久久鬼色 | 日韩色在线观看| 一区二区三区国产精华| 激情综合色综合久久| 欧美系列日韩一区| 中文在线一区二区| 蜜桃精品视频在线| 色老汉一区二区三区| 中文字幕不卡三区| 精品综合久久久久久8888| 欧美日韩视频在线第一区| 国产精品久久久久永久免费观看 | 日韩精品中文字幕一区二区三区| 17c精品麻豆一区二区免费| 久久成人免费网站| 国产精品99久久久久久有的能看 | 国产综合色产在线精品| 欧美精品tushy高清| 一区二区三区波多野结衣在线观看| 国内精品视频一区二区三区八戒| 这里只有精品视频在线观看| 一区二区三区在线高清| 成人a免费在线看| 国产丝袜欧美中文另类| 精品制服美女久久| 欧美一区二区三区爱爱| 亚洲福利电影网| 在线免费亚洲电影| 日韩美女啊v在线免费观看| 成人黄色免费短视频| 久久综合狠狠综合久久激情| 奇米影视在线99精品| 欧美久久免费观看| 午夜电影久久久| 欧美精品乱码久久久久久按摩 | 亚洲欧洲日韩女同| 不卡电影一区二区三区| 欧美激情一区在线| 国产成人免费视频网站| 国产日韩三级在线| 国产激情一区二区三区桃花岛亚洲| 精品日产卡一卡二卡麻豆| 蜜桃av一区二区| 日韩午夜激情免费电影| 老司机午夜精品| 日韩亚洲欧美一区二区三区| 免费精品视频最新在线| 日韩一区国产二区欧美三区| 久久99国产精品久久99果冻传媒| 欧美一区二区三区四区高清| 精品一区二区三区免费播放| 亚洲精品在线观看网站| 国内精品国产成人国产三级粉色 | 日韩欧美一区二区久久婷婷| 日韩国产高清在线| 精品国产乱码久久久久久老虎 | jizz一区二区| 亚洲日本电影在线| 色综合久久久网| 五月婷婷综合在线| 精品伦理精品一区| 国产激情视频一区二区三区欧美 | 亚洲欧美激情一区二区| 91福利资源站| 蜜桃在线一区二区三区| 久久久亚洲午夜电影| 99re成人在线| 亚洲成av人在线观看| 精品久久久影院| av电影在线观看不卡| 亚洲一区二区三区四区在线免费观看| 91精品国产欧美一区二区成人| 久久精品国产一区二区| 国产精品免费视频观看|