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

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

?? uart.c

?? C語言源代碼及相關資料
?? C
?? 第 1 頁 / 共 3 頁
字號:
/***********************************************Copyright (c)*********************************************
**                                Guangzou ZLG-MCU Development Co.,LTD.
**                                     
**                                       http://www.zlgmcu.com
**
**--------------File Info---------------------------------------------------------------------------------
** File name:			    uart.c
** Last modified Date:      2007-10-15
** Last Version:		    1.0
** Descriptions:		    串口的C文件
**
**--------------------------------------------------------------------------------------------------------
** Created by:			    wengshujie
** Created date:		    2007-10-15
** Version:				    1.0
** Descriptions:		    無
**
**--------------------------------------------------------------------------------------------------------
** Modified by:			    
** Modified Date:		    
** Version:				    
** Descriptions:		    
**
*********************************************************************************************************/
#include "Config.h"
#include "uart.h"

/*********************************************************************************************************
   定義操作UART器件的結構體,有多個器件就需要聲明多個結構體
*********************************************************************************************************/
static __UART_INFO    __UART0Info;                                      /*  定義UART0的一個結構體       */
static __UART_INFO    __UART1Info;
static __UART_INFO    __UART2Info;
static __UART_INFO    __UART3Info;

/*********************************************************************************************************
   下面使用指針數(shù)組來保存結構體指針,方便對該驅(qū)動的擴展
*********************************************************************************************************/
 __PUART_INFO    __GpuiUartInfoTab[__UART_MAX_NUM] = {&__UART0Info, &__UART1Info,
                                                      &__UART2Info, &__UART3Info};

/*********************************************************************************************************
   下面定義了UART基地址值,如果想增加UART器件可以在該位置添加相應的基地址即可
*********************************************************************************************************/
const uint32    __GuiUartBaseAddrTab[__UART_MAX_NUM] = {UART0_BASE_ADDR, UART1_BASE_ADDR,
                                                        UART2_BASE_ADDR, UART3_BASE_ADDR};
                                                         
/*********************************************************************************************************
   下面定義了UART硬件FIFO值,如果想增加UART器件可以在該位置添加相應的值即可
*********************************************************************************************************/
const uint32    __GuiUartFifoTab[__UART_MAX_NUM] = {UART0FIFOLENFUN, UART1FIFOLENFUN,
                                                    UART2FIFOLENFUN, UART3FIFOLENFUN};
                                                     
/*********************************************************************************************************
   下面定義了UART軟件接收FIFO大小值,如果有想增加UART器件可以在該位置添加相應的值即可
*********************************************************************************************************/
const uint32    __GuiQueueReviceFifoTab[__UART_MAX_NUM] = {QUEUE0REVICEFIFOLENFUN, 
                                                           QUEUE1REVICEFIFOLENFUN,
                                                           QUEUE2REVICEFIFOLENFUN,
                                                           QUEUE3REVICEFIFOLENFUN};  

/*********************************************************************************************************
   下面定義了UART軟件發(fā)送FIFO值,如果有想增加UART器件可以在該位置添加相應的值即可
*********************************************************************************************************/
const uint32    __GuiQueueSendFifoTab[__UART_MAX_NUM] = {QUEUE0SENDFIFOLENFUN, QUEUE1SENDFIFOLENFUN,
                                                         QUEUE2SENDFIFOLENFUN, QUEUE3SENDFIFOLENFUN};  
                                                              
 /*********************************************************************************************************
   下面定義了UART0的軟件FIFO數(shù)組
*********************************************************************************************************/ 
uint32 uiUatr0RxBuf[QUEUE0REVICEFIFOLENFUN];
uint32 uiUatr0TxBuf[QUEUE0SENDFIFOLENFUN];    

/*********************************************************************************************************
   下面定義了UART1的軟件FIFO數(shù)組
*********************************************************************************************************/ 
uint32 uiUatr1RxBuf[QUEUE1REVICEFIFOLENFUN];
uint32 uiUatr1TxBuf[QUEUE1SENDFIFOLENFUN]; 

/*********************************************************************************************************
   下面定義了UART2的軟件FIFO數(shù)組
*********************************************************************************************************/ 
uint32 uiUatr2RxBuf[QUEUE2REVICEFIFOLENFUN];
uint32 uiUatr2TxBuf[QUEUE2SENDFIFOLENFUN]; 

/*********************************************************************************************************
   下面定義了UART3的軟件FIFO數(shù)組
*********************************************************************************************************/ 
uint32 uiUatr3RxBuf[QUEUE3REVICEFIFOLENFUN];
uint32 uiUatr3TxBuf[QUEUE3SENDFIFOLENFUN];

/*********************************************************************************************************
   下面使用指針數(shù)組來保存UART軟件FIFO數(shù)組的首地址
*********************************************************************************************************/ 
 const	uint32 *GpuiUartReviceTab[__UART_MAX_NUM] = {uiUatr0RxBuf, uiUatr1RxBuf,  uiUatr2RxBuf, uiUatr3RxBuf};
 const	uint32 *GpuiUartSendTab[__UART_MAX_NUM] = {uiUatr0TxBuf, uiUatr1TxBuf,  uiUatr2TxBuf,uiUatr3TxBuf}; 




/*********************************************************************************************************
** Function name:			__uartBandRate
** Descriptions:			初始化UART波特率參數(shù)
** input parameters:		PUartInfo:          指向uart信息結構體的指針
**                          uibps:              波特率值
** Output parameters:       NONE
** Returned value:			OPERATE_SUCCESS:    操作成功
**                          OPERATE_FAIL:       操作失敗
*********************************************************************************************************/
static int32 __uartBandRate (__PUART_INFO PUartInfo, uint32 uibps)
{    
    volatile uint32  uiOffBase;
	volatile uint32 *puiAddrBase;
        
	puiAddrBase = PUartInfo->puiAddrBase;	                            /*  獲取結構體參數(shù)              */
	uiOffBase   = PUartInfo->uiOffBase;
	
	if ((uibps <= 115200) && (uibps >= 4800)) {							/*  參數(shù)過濾                    */
	    puiAddrBase[__B_UART_LCR << uiOffBase] |= 0x80;        		    /*  允許訪問分頻因子寄存器      */
	    			                                                    /*  設置波特率                  */
	    puiAddrBase[__B_UART_DLM << uiOffBase] = ((Fpclk / uibps) / 16) / 256;   
		puiAddrBase[__B_UART_DLL << uiOffBase] = ((Fpclk / uibps) / 16) % 256;		
 		puiAddrBase[__B_UART_LCR << uiOffBase] &= 0x7f;             	/*  禁止訪問分頻因子寄存器      */
	    return UART_OK;
	}
    return UART_NOK;
}

/*********************************************************************************************************
** Function name:			__uartMode
** Descriptions:			初始化UART的模式參數(shù)
** input parameters:		PUartInfo:          指向uart信息結構體的指針
**                          uiParaData:         參數(shù)指針
** Output parameters:       NONE
** Returned value:			OPERATE_SUCCESS:    操作成功
**                          OPERATE_FAIL:       操作失敗
*********************************************************************************************************/
static int32 __uartMode (__PUART_INFO PUartInfo, uint32 *uiParaData)
{
    volatile uint32 uiOffBase;
	volatile uint32 *puiAddrBase;
	
             uint32 uiBak;
             
	puiAddrBase = PUartInfo->puiAddrBase;	                            /*  獲取結構體參數(shù)              */
	uiOffBase   = PUartInfo->uiOffBase;

                                                                        /*  參數(shù)過濾                    */ 
	if ((uiParaData[DataBits] <5) || (uiParaData[DataBits] > 8)) {	
	    return UART_NOK;
	}
	if ((uiParaData[StopBits] == 0) || (uiParaData[StopBits] > 2)) { 	 
	    return UART_NOK;
	}
	if (uiParaData[Parity] > 4) {
	    return UART_NOK;
	}
	
	uiBak = uiParaData[DataBits] - 5;
	if (uiParaData[StopBits] == 2) {                                    /*  判斷是否為2位停止位         */
		uiBak |= 0x04;			
	}
	if (uiParaData[Parity] != 0) {
		uiParaData[Parity] = uiParaData[Parity] - 1;
		uiBak |= 0x08;                    					            /*  使能奇偶校驗	            */   
	}
	uiBak |= uiParaData[Parity] << 4;							        /*  設置奇偶校驗                */						 
    puiAddrBase[__B_UART_LCR << uiOffBase] = uiBak;           		    /*  禁止訪問分頻因子寄存器      */
    
	return UART_OK;
}                                                 
/*********************************************************************************************************
** Function name:			__uartInit
** Descriptions:			初始化UART,此函數(shù)供UartInit調(diào)用,不提供給用戶
** input parameters:		PUartInfo:          指向uart信息結構體的指針
**                          uiParaData:         參數(shù)指針
**                          uiReBufSize:        uart的接收緩沖區(qū)大小
**                          uiSeBufSize:        uart的發(fā)送緩沖區(qū)大小
** Output parameters:       NONE
** Returned value:			OPERATE_SUCCESS:    操作成功
**                          OPERATE_FAIL:       操作失敗
*********************************************************************************************************/
static uint32 __uartInit (__PUART_INFO PUartInfo,
                          uint32      *uiParaData, 
                          uint32      uiReBufSize, 
                          uint32      uiSeBufSize)
{
  volatile uint32 *puiAddrBase;
	volatile uint32 uiOffBase;
	         uint32 uiId;

#if defined(UART_SEMCONTROL)
	INT8U UartErr;
#endif // end #if defined(UART_SEMCONTROL)

	puiAddrBase = PUartInfo->puiAddrBase;
	uiOffBase   = PUartInfo->uiOffBase;
	uiId = PUartInfo->uiUartId;

#if defined(UART_SEMCONTROL)
	PUartInfo->pUartSem = OSSemCreate(1);
	if ( PUartInfo->pUartSem!=0 ) {
		OSSemPend(PUartInfo->pUartSem, 0, &UartErr);
#else
		OS_ENTER_CRITICAL();
#endif // end #if defined(UART_SEMCONTROL)
                                               /*  關中斷                     */     	
		if (QueueCreate((void *)PUartInfo->PdqReviceBuf, uiReBufSize, NULL, NULL) == NOT_OK) {	
	                                                                    /*  創(chuàng)建接收緩沖區(qū)             */
#if defined(UART_SEMCONTROL)
			OSSemPost(PUartInfo->pUartSem);
#else
			OS_EXIT_CRITICAL();
#endif // end #if defined(UART_SEMCONTROL)
			return UART_NOK;  
		}
		if (QueueCreate((void *)PUartInfo->PdqSendBuf, uiSeBufSize, NULL, NULL) == NOT_OK) { 	
	                                                                    /*  創(chuàng)建發(fā)送緩沖區(qū)             */
#if defined(UART_SEMCONTROL)
			OSSemPost(PUartInfo->pUartSem);
#else
			OS_EXIT_CRITICAL();
#endif // end #if defined(UART_SEMCONTROL)
			return UART_NOK;
		}
		PUartInfo->uiUartFlag = 0x80;									    /*  7位置位表示不用發(fā)送隊列緩沖
	                                                                      也就是禁止發(fā)送中斷         */
									
	                                                                  /*  參數(shù)過濾                   */
		if (uiParaData[BaudRate] < 9600  ) {	
			uiParaData[BaudRate] = 4800;
		}
		if (uiParaData[BaudRate] > 9600  ) {	
			uiParaData[BaudRate] = 115200;
		}
		if ((uiParaData[DataBits] < 5) || (uiParaData[DataBits] > 8)) {	
			uiParaData[DataBits] = 8;
		}
		if ((uiParaData[StopBits] == 0) || (uiParaData[StopBits] > 2)) { 	
			uiParaData[StopBits] = 1;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
26uuu久久天堂性欧美| 欧美精品一区二区精品网| 国产成人日日夜夜| 精品在线播放午夜| 日本不卡视频在线| 青草av.久久免费一区| 免费成人av在线| 日韩福利电影在线观看| 天使萌一区二区三区免费观看| 亚洲国产成人精品视频| 午夜精品一区二区三区三上悠亚| 亚洲成人黄色影院| 蜜臀av在线播放一区二区三区| 奇米影视一区二区三区| 韩日精品视频一区| 懂色av一区二区三区免费看| 99久久亚洲一区二区三区青草| 色综合天天综合狠狠| 欧洲一区在线电影| 4hu四虎永久在线影院成人| 日韩欧美的一区二区| 国产精品亲子伦对白| 亚洲综合激情另类小说区| 麻豆精品视频在线观看免费| 国产精品一区二区久久精品爱涩 | 91黄视频在线观看| 欧亚一区二区三区| 日韩区在线观看| 国产欧美综合在线| 亚洲另类一区二区| 麻豆精品视频在线观看免费| 成人精品视频一区二区三区| 欧美性xxxxx极品少妇| 欧美成人伊人久久综合网| 综合网在线视频| 无吗不卡中文字幕| 成人网在线播放| 欧美日韩不卡一区| 国产精品久久久久国产精品日日 | 免费在线看成人av| 国产成人综合在线播放| 在线观看国产日韩| 国产亚洲人成网站| 日韩不卡在线观看日韩不卡视频| 国产精品综合在线视频| 欧美日韩国产首页| 中日韩av电影| 麻豆一区二区三| 91久久精品一区二区三| 久久综合五月天婷婷伊人| 亚洲国产日韩在线一区模特| 国产精品一区二区在线看| 欧美美女喷水视频| 亚洲激情欧美激情| 成人免费视频一区二区| 欧美一级生活片| 一区二区三区精品在线| 国产精品77777竹菊影视小说| 欧美一区二区三区思思人 | 色婷婷综合视频在线观看| 精品日本一线二线三线不卡| 丝袜诱惑亚洲看片| 欧美性生交片4| 亚洲精品免费在线观看| 91玉足脚交白嫩脚丫在线播放| 久久在线观看免费| 久久精品av麻豆的观看方式| 91精品国产欧美一区二区成人| 亚洲国产成人va在线观看天堂| 91理论电影在线观看| 亚洲欧美影音先锋| a级高清视频欧美日韩| 中文无字幕一区二区三区| 国产一区二区不卡老阿姨| 日韩欧美一级二级| 久久精品久久99精品久久| 欧美一区二区三级| 久久精品国产999大香线蕉| 91精品国产一区二区三区香蕉| 日韩综合一区二区| 日韩欧美一区在线观看| 国内外成人在线视频| 久久精品视频免费| www.亚洲在线| 一区二区视频免费在线观看| 欧美亚洲综合一区| 污片在线观看一区二区| 欧美一区二区三区在线观看视频| 免费久久99精品国产| 久久综合九色综合欧美就去吻| 国产成人一级电影| 亚洲欧洲精品天堂一级 | 欧美一级理论性理论a| 免费久久精品视频| 国产日韩一级二级三级| proumb性欧美在线观看| 亚洲一二三级电影| 91精品久久久久久蜜臀| 国内外成人在线| 综合欧美亚洲日本| 欧美美女一区二区在线观看| 国产中文字幕一区| **性色生活片久久毛片| 56国语精品自产拍在线观看| 国产精品一区二区男女羞羞无遮挡| 中文字幕欧美国产| 欧美人狂配大交3d怪物一区| 精品亚洲国产成人av制服丝袜| 国产日产亚洲精品系列| 欧美视频日韩视频在线观看| 国产一区二区在线视频| 一区二区三区免费网站| 精品免费日韩av| 91福利国产成人精品照片| 九九热在线视频观看这里只有精品| 中文字幕日本乱码精品影院| 欧美一级黄色片| 色噜噜狠狠成人网p站| 久久精品噜噜噜成人88aⅴ| 亚洲丝袜美腿综合| 日韩精品一区二区三区四区 | 青青草91视频| 亚洲免费观看高清| 久久精品一区二区| 欧美久久久久久久久中文字幕| 成人免费看视频| 毛片av一区二区三区| 亚洲美女少妇撒尿| 久久在线观看免费| 日韩一区和二区| 欧美午夜不卡在线观看免费| 成人福利视频网站| 国产在线视频一区二区三区| 亚洲国产sm捆绑调教视频 | 麻豆精品在线看| 亚洲国产aⅴ天堂久久| 亚洲三级久久久| 国产日韩精品一区二区浪潮av| 欧美一级黄色片| 不卡一区二区三区四区| 国内久久精品视频| 捆绑调教一区二区三区| 日韩成人dvd| 亚洲福利一区二区| 一区二区三区产品免费精品久久75| 中文字幕国产一区| 国产欧美中文在线| 国产日韩av一区二区| 国产欧美一区二区三区鸳鸯浴 | 欧美日韩电影一区| 91性感美女视频| 99视频有精品| eeuss国产一区二区三区| 懂色av中文字幕一区二区三区| 国产一区二区三区黄视频| 久久精品99国产精品日本| 免费一级片91| 国产一区欧美一区| 国产成人99久久亚洲综合精品| 国产乱理伦片在线观看夜一区| 经典三级在线一区| 成人在线视频一区| 菠萝蜜视频在线观看一区| 成人av网站免费观看| 91麻豆精品在线观看| 欧美日韩一区二区三区在线看| 欧美亚一区二区| 91精品国产综合久久久久久| 日韩欧美精品在线| 国产欧美一区二区在线| 亚洲区小说区图片区qvod| 亚洲国产中文字幕| 秋霞午夜av一区二区三区| 久久se精品一区二区| 成人av中文字幕| 在线观看av一区| 日韩午夜在线观看| 欧美激情一区二区三区四区| 一区二区三区欧美视频| 免费精品视频最新在线| 成人午夜大片免费观看| 欧美中文字幕亚洲一区二区va在线 | 久久久久久久久伊人| 中文字幕在线观看一区| 亚洲成av人片| 国产一区二区三区高清播放| 91免费国产在线| 欧美一级专区免费大片| 欧美国产精品一区二区| 日韩一区欧美二区| 大桥未久av一区二区三区中文| 91精品1区2区| 久久精品网站免费观看| 亚洲成人免费视| 成人黄色免费短视频| 4438x成人网最大色成网站| 中文字幕欧美国产| 日韩高清不卡在线| 91免费国产在线| 久久精品在线观看|