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

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

?? uart.c

?? SmartARM2400開發(fā)平臺配套例程
?? 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器件的結(jié)構(gòu)體,有多個器件就需要聲明多個結(jié)構(gòu)體
*********************************************************************************************************/
static __UART_INFO    __UART0Info;                                      /*  定義UART0的一個結(jié)構(gòu)體       */
static __UART_INFO    __UART1Info;
static __UART_INFO    __UART2Info;
static __UART_INFO    __UART3Info;

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

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

/*********************************************************************************************************
   下面定義了UART軟件發(fā)送FIFO值,如果有想增加UART器件可以在該位置添加相應(yīng)的值即可
*********************************************************************************************************/
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信息結(jié)構(gòu)體的指針
**                          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;	                            /*  獲取結(jié)構(gòu)體參數(shù)              */
	uiOffBase   = PUartInfo->uiOffBase;
	
	if ((uibps <= 115200) && (uibps >= 9600)) {							/*  參數(shù)過濾                    */
	    puiAddrBase[__B_UART_LCR << uiOffBase] |= 0x80;        		    /*  允許訪問分頻因子寄存器      */
	    			                                                    /*  設(shè)置波特率                  */
	    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信息結(jié)構(gòu)體的指針
**                          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;	                            /*  獲取結(jié)構(gòu)體參數(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;							        /*  設(shè)置奇偶校驗                */						 
    puiAddrBase[__B_UART_LCR << uiOffBase] = uiBak;           		    /*  禁止訪問分頻因子寄存器      */
    
	return UART_OK;
}                                                 
/*********************************************************************************************************
** Function name:			__uartInit
** Descriptions:			初始化UART,此函數(shù)供UartInit調(diào)用,不提供給用戶
** input parameters:		PUartInfo:          指向uart信息結(jié)構(gòu)體的指針
**                          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;
	
	puiAddrBase = PUartInfo->puiAddrBase;
	uiOffBase   = PUartInfo->uiOffBase;
	uiId = PUartInfo->uiUartId;
	
    OS_ENTER_CRITICAL();                                                /*  關(guān)中斷                     */     	
    if (QueueCreate((void *)PUartInfo->PdqReviceBuf, uiReBufSize, NULL, NULL) == NOT_OK) {	
                                                                        /*  創(chuàng)建接收緩沖區(qū)             */
    	return UART_NOK;  
    } 			
    if (QueueCreate((void *)PUartInfo->PdqSendBuf, uiSeBufSize, NULL, NULL) == NOT_OK) { 	
                                                                        /*  創(chuàng)建發(fā)送緩沖區(qū)             */
        return UART_NOK;
    }                                                               
	PUartInfo->uiUartFlag = 0x80;									    /*  7位置位表示不用發(fā)送隊列緩沖
	                                                                        也就是禁止發(fā)送中斷         */
										
	                                                                    /*  參數(shù)過濾                   */
	if ((uiParaData[BaudRate] < 9600 ) || (uiParaData[BaudRate] > 115200)) {	
		uiParaData[BaudRate] = 115200;
	}
	if ((uiParaData[DataBits] < 5) || (uiParaData[DataBits] > 8)) {	
		uiParaData[DataBits] = 8;
	}
	if ((uiParaData[StopBits] == 0) || (uiParaData[StopBits] > 2)) { 	
		uiParaData[StopBits] = 1;
	}
	if (uiParaData[Parity] > 4) {
		uiParaData[Parity] = 0;
	}
	if (uiParaData[RtsControl] != 0) {	
		uiParaData[RtsControl] = 0;
	}
			
    if (OPERATE_FAIL == (__uartBandRate(PUartInfo,uiParaData[BaudRate]))) {
    	return UART_NOK;
    }
    if(OPERATE_FAIL == (__uartMode(PUartInfo,uiParaData))) {
    	return UART_NOK;
    }    
                             
    puiAddrBase[__B_UART_FCR << uiOffBase] = ((__GuiUartFifoTab[uiId] << 6) | 0x07);       
                                                                        /*  初始化FIFO為N個字節(jié)觸發(fā),WO
                                                                            發(fā)送和接收的FIFO都使能      */                                                                        
    puiAddrBase[__B_UART_IER << uiOffBase] = 0x05;                      /*  使能接收中斷,不使能發(fā)送中斷 */

    PUartInfo->uiUartFlag |= 0x10;                                      /*  4位置位表示發(fā)送隊列使能     */                       
	
    OS_EXIT_CRITICAL();
    
    return UART_OK;
}
/*********************************************************************************************************
** Function name:           uartInit
** Descriptions:            串口初始化及中斷設(shè)置
** input parameters:        uiId:       子設(shè)備號
**                          pcArg:      字符串指針
**                          pRsv:       保留參數(shù)
** Output parameters:       NONE
** Returned value:			OPERATE_SUCCESS:    操作成功
**                          OPERATE_FAIL:       操作失敗
** Example:                 char pUart[]="BaudRate=9600,DataBits=8,StopBits=1,Parity=NONE,RtsControl=NONE"; 
**                          uartInit(0,pUart,0); 
*********************************************************************************************************/
#define MAX_UART_STR_NUM   5                                            /*  字符串中包含5個參數(shù)         */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人午夜av在线| 亚洲国产精品传媒在线观看| 青草av.久久免费一区| 精品免费视频一区二区| 国产99精品在线观看| 日韩高清在线电影| 午夜私人影院久久久久| 一区二区成人在线视频| 亚洲视频资源在线| 亚洲蜜臀av乱码久久精品| 一区二区三区中文字幕在线观看| 亚洲女爱视频在线| 性欧美大战久久久久久久久| 偷拍日韩校园综合在线| 日本在线不卡一区| 久久99精品国产麻豆婷婷洗澡| 一级日本不卡的影视| 午夜不卡av免费| 国产激情一区二区三区| 日本高清不卡在线观看| 日本乱人伦aⅴ精品| 99九九99九九九视频精品| 亚洲男人的天堂在线观看| 国产视频一区在线观看| 欧美二区乱c少妇| 色婷婷国产精品久久包臀| av电影天堂一区二区在线观看| 亚洲国产aⅴ天堂久久| 中文字幕中文字幕中文字幕亚洲无线| 中文字幕在线一区| 亚洲午夜电影在线观看| 精品在线一区二区| av不卡免费电影| 91.com在线观看| 午夜影院久久久| 久久成人18免费观看| 国产91精品一区二区| 欧美又粗又大又爽| 欧美成人aa大片| 久久综合国产精品| 中文字幕日韩一区二区| 午夜久久久久久电影| 国产成人免费视频一区| 91丨porny丨首页| 欧美精品自拍偷拍动漫精品| 日韩欧美国产精品一区| 亚洲v日本v欧美v久久精品| 国产一区不卡精品| 91精品国产91综合久久蜜臀| 亚洲欧洲av另类| 日本在线不卡一区| 成人精品小蝌蚪| 日韩午夜小视频| 中文字幕免费一区| 国产福利视频一区二区三区| 欧洲精品一区二区三区在线观看| 久久综合久久久久88| 日韩精品成人一区二区在线| 在线观看国产精品网站| 国产偷国产偷亚洲高清人白洁| 蜜桃av一区二区在线观看| 在线观看亚洲精品| 亚洲免费色视频| 91污在线观看| 综合欧美亚洲日本| 在线观看日韩av先锋影音电影院| 综合激情成人伊人| 成人av电影观看| 欧美国产欧美综合| 国产98色在线|日韩| 亚洲视频精选在线| 99久久国产综合精品色伊| 国产欧美一区二区在线| 国产精品996| 亚洲天堂久久久久久久| 99re这里都是精品| 亚洲精品视频在线| 日本久久精品电影| 午夜亚洲国产au精品一区二区| 欧美性感一类影片在线播放| 精品午夜一区二区三区在线观看| 久久蜜桃av一区精品变态类天堂 | 亚洲欧洲国产日韩| 欧美xxxxx裸体时装秀| av亚洲精华国产精华| 一区二区三区资源| 久久综合av免费| 色欧美片视频在线观看在线视频| 日韩电影一二三区| 亚洲欧美日韩人成在线播放| 欧美精品久久久久久久多人混战| www.色精品| 国产一区二区主播在线| 亚洲不卡av一区二区三区| 久久精品人人爽人人爽| 色94色欧美sute亚洲线路二| www.亚洲国产| 极品尤物av久久免费看| 日韩国产在线一| 国产亚洲自拍一区| 久久人人超碰精品| www成人在线观看| 在线视频观看一区| 色哟哟国产精品| 成人一区在线观看| 成人av在线资源网站| 成人av片在线观看| 99国产麻豆精品| 激情五月婷婷综合| 综合久久给合久久狠狠狠97色 | 久久综合色婷婷| 精品久久久久av影院| 欧美日韩国产乱码电影| 91国产视频在线观看| 99久久久无码国产精品| 成a人片亚洲日本久久| 99国产欧美另类久久久精品 | 国产激情偷乱视频一区二区三区| 国产精品一区二区在线看| 国内久久婷婷综合| 成人午夜电影网站| 欧美男人的天堂一二区| 欧美精品乱人伦久久久久久| 久久精品日产第一区二区三区高清版| 亚洲欧美在线视频观看| 久久成人精品无人区| 欧日韩精品视频| 国产午夜精品一区二区| 久久av老司机精品网站导航| 欧美丝袜自拍制服另类| 一区二区国产盗摄色噜噜| 成人a区在线观看| 欧美国产精品v| 国产在线精品一区在线观看麻豆| 欧美日韩一级二级三级| 自拍偷拍亚洲激情| 色狠狠色狠狠综合| 麻豆一区二区在线| 国产亚洲欧美日韩俺去了| 国产精品一二三四| 国产精品国产自产拍高清av| 成人的网站免费观看| 综合网在线视频| 欧美色图第一页| 狠狠色丁香婷婷综合| 中文字幕色av一区二区三区| 日韩一区二区在线看| 国产69精品久久99不卡| 亚洲色图视频网| 日韩欧美一区二区三区在线| 国产精品白丝av| 亚洲美女视频一区| 精品久久一二三区| 91啪亚洲精品| 精品综合免费视频观看| 国产精品久久网站| 欧美一卡2卡三卡4卡5免费| 成人免费毛片片v| 亚洲国产精品尤物yw在线观看| 26uuu亚洲| 欧美亚洲丝袜传媒另类| 成人美女视频在线观看18| 国产精品一色哟哟哟| 青青青爽久久午夜综合久久午夜| 依依成人综合视频| 中文字幕一区二区三区四区不卡| 欧美肥胖老妇做爰| 欧美视频一二三区| 成人av一区二区三区| 精品中文av资源站在线观看| 亚洲1区2区3区视频| 国产免费久久精品| 久久久国际精品| 久久综合成人精品亚洲另类欧美 | 91精品啪在线观看国产60岁| av电影天堂一区二区在线观看| 国产99一区视频免费| 七七婷婷婷婷精品国产| 强制捆绑调教一区二区| 日韩av在线发布| 免费观看日韩电影| 丰满少妇在线播放bd日韩电影| 国产福利91精品| 国产精品亚洲а∨天堂免在线| 成人黄色在线视频| 午夜激情一区二区三区| 一区二区三区四区五区视频在线观看| 日韩一级视频免费观看在线| 欧美一级片在线| 日韩欧美在线123| 日韩三级高清在线| 欧美日韩亚洲丝袜制服| 91精品国产色综合久久不卡电影 | 国产精品福利av| 亚洲图片欧美色图| 国产精品美女www爽爽爽| 国产精品国产三级国产普通话三级| 精品国产成人在线影院 | 久久av资源网| 久久精品国产77777蜜臀|