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

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

?? 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器件的結構體,有多個器件就需要聲明多個結構體
*********************************************************************************************************/
static __UART_INFO    __UART0Info;                                      /*  定義UART0的一個結構體       */
static __UART_INFO    __UART1Info;
static __UART_INFO    __UART2Info;
static __UART_INFO    __UART3Info;

/*********************************************************************************************************
   下面使用指針數組來保存結構體指針,方便對該驅動的擴展
*********************************************************************************************************/
 __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數組
*********************************************************************************************************/ 
uint32 uiUatr0RxBuf[QUEUE0REVICEFIFOLENFUN];
uint32 uiUatr0TxBuf[QUEUE0SENDFIFOLENFUN];    

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

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

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

/*********************************************************************************************************
   下面使用指針數組來保存UART軟件FIFO數組的首地址
*********************************************************************************************************/ 
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波特率參數
** 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;	                            /*  獲取結構體參數              */
	uiOffBase   = PUartInfo->uiOffBase;
	
	if ((uibps <= 115200) && (uibps >= 9600)) {							/*  參數過濾                    */
	    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的模式參數
** input parameters:		PUartInfo:          指向uart信息結構體的指針
**                          uiParaData:         參數指針
** 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;	                            /*  獲取結構體參數              */
	uiOffBase   = PUartInfo->uiOffBase;

                                                                        /*  參數過濾                    */ 
	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,此函數供UartInit調用,不提供給用戶
** input parameters:		PUartInfo:          指向uart信息結構體的指針
**                          uiParaData:         參數指針
**                          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();                                                /*  關中斷                     */     	
    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ā)送中斷         */
										
	                                                                    /*  參數過濾                   */
	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:            串口初始化及中斷設置
** input parameters:        uiId:       子設備號
**                          pcArg:      字符串指針
**                          pRsv:       保留參數
** 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個參數         */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美伊人久久久久久久久影院 | 国产清纯白嫩初高生在线观看91| 精品日韩在线一区| 欧美精品久久天天躁| 欧美日韩三级在线| 欧美日本在线视频| 91精品中文字幕一区二区三区| 欧美日韩在线一区二区| 在线观看视频一区| 欧美日韩色一区| 日韩精品一区二区三区swag | 不卡区在线中文字幕| 成人免费视频app| www.日韩av| 91美女片黄在线观看| 欧美综合天天夜夜久久| 717成人午夜免费福利电影| 日韩欧美一级特黄在线播放| 久久综合色一综合色88| 亚洲国产成人在线| 亚洲最快最全在线视频| 日韩福利视频导航| 国产精品一区二区免费不卡| 99久久综合狠狠综合久久| 色偷偷久久人人79超碰人人澡| 欧美三级日韩三级国产三级| 日韩欧美不卡在线观看视频| 国产欧美日韩精品在线| 亚洲精品水蜜桃| 美腿丝袜亚洲综合| 97se亚洲国产综合自在线观| 91精品国产综合久久久蜜臀粉嫩| 精品久久久三级丝袜| 亚洲欧美国产毛片在线| 男人的天堂亚洲一区| 97久久精品人人澡人人爽| 欧美精品九九99久久| 亚洲国产精品av| 午夜激情综合网| 成人aaaa免费全部观看| 在线播放视频一区| 亚洲欧美自拍偷拍色图| 久久精品国产第一区二区三区| 99视频热这里只有精品免费| 日韩一区和二区| 亚洲一区二区三区四区五区黄 | 中文字幕一区av| 另类小说图片综合网| 欧美亚洲日本国产| 欧美国产乱子伦| 久久99精品久久久久久动态图| 色综合久久久久综合体| 国产亚洲一区二区三区| 美女脱光内衣内裤视频久久网站| 99久久精品免费看| 久久蜜桃一区二区| 麻豆91在线播放免费| 欧美日韩一级二级三级| 亚洲色图欧美在线| 丁香另类激情小说| 国产午夜精品福利| 国内精品国产三级国产a久久| 欧美人妇做爰xxxⅹ性高电影| 中文字幕亚洲电影| 成人av小说网| 国产精品素人一区二区| 国产福利一区二区三区视频 | 色综合网色综合| 国产精品久久久一区麻豆最新章节| 卡一卡二国产精品 | 欧美久久一二区| 亚洲自拍另类综合| 91黄色免费观看| 一区二区三区在线视频观看58 | 国产一区二区三区综合| 日韩精品一区二区三区在线| 日本不卡一区二区三区 | 麻豆视频观看网址久久| 日韩亚洲欧美高清| 国产在线精品免费av| 26uuu另类欧美| 国产91露脸合集magnet | 69精品人人人人| 视频在线观看国产精品| 欧美日韩精品免费观看视频| 性久久久久久久| 日韩视频国产视频| 国产在线精品免费| 国产精品久久久久久亚洲伦| 成人黄色av电影| 洋洋av久久久久久久一区| 91精彩视频在线| 五月天视频一区| 精品国产自在久精品国产| 国产ts人妖一区二区| 国产精品久久久一本精品| 91福利在线导航| 日韩av电影免费观看高清完整版在线观看 | 国产精品一区二区三区四区| 欧美国产在线观看| 欧美视频日韩视频在线观看| 热久久久久久久| 国产精品电影一区二区三区| 欧美做爰猛烈大尺度电影无法无天| 天涯成人国产亚洲精品一区av| 欧美不卡一区二区三区四区| 成人激情av网| 美女免费视频一区| 国产精品乱码妇女bbbb| 欧美日韩精品是欧美日韩精品| 国产麻豆9l精品三级站| 亚洲精品视频自拍| 亚洲精品在线免费播放| 欧美亚洲国产bt| 国产酒店精品激情| 亚洲国产精品一区二区久久| 欧美精品一区二区三区高清aⅴ | 激情小说欧美图片| 一区二区三区四区乱视频| xfplay精品久久| 欧美日高清视频| 一本久久a久久免费精品不卡| 免费人成精品欧美精品| 一区二区三区四区视频精品免费 | av欧美精品.com| 精品一区二区免费看| 亚洲精品视频在线看| 日本一区二区在线不卡| 精品久久久久香蕉网| 欧美日韩亚洲综合一区| 91亚洲精品久久久蜜桃| 国产成人精品三级| 精品一二线国产| 日韩黄色片在线观看| 亚洲精品乱码久久久久久黑人| 国产拍欧美日韩视频二区| 欧美videossexotv100| 69精品人人人人| 欧美丰满美乳xxx高潮www| 欧美午夜精品久久久久久孕妇| 99久久er热在这里只有精品66| 国产老肥熟一区二区三区| 极品美女销魂一区二区三区| 免费观看久久久4p| 日日夜夜精品视频天天综合网| 一区二区三区中文字幕在线观看| 国产精品少妇自拍| 国产精品沙发午睡系列990531| 久久精品一区二区三区不卡牛牛| 精品日产卡一卡二卡麻豆| 欧美xxxx老人做受| 精品欧美一区二区久久 | 欧美性xxxxxxxx| 精品视频一区三区九区| 欧美视频中文一区二区三区在线观看| 91免费版在线| 91福利视频网站| 欧美天天综合网| 日韩一级二级三级精品视频| 日韩欧美美女一区二区三区| 精品国产制服丝袜高跟| 久久久久久久久久久久久女国产乱| 久久天堂av综合合色蜜桃网| 国产欧美视频一区二区| 综合久久国产九一剧情麻豆| 亚洲天堂免费在线观看视频| 亚洲综合一区在线| 丝袜诱惑制服诱惑色一区在线观看| 日本 国产 欧美色综合| 国产乱码精品一区二区三| 北条麻妃一区二区三区| 欧美综合一区二区| 精品国产凹凸成av人网站| 国产日韩欧美精品电影三级在线| 中文字幕佐山爱一区二区免费| 亚洲最大成人综合| 久久99精品国产麻豆婷婷洗澡| 成人免费黄色在线| 欧美日韩一区二区三区免费看| 精品久久久三级丝袜| 国产精品不卡在线观看| 亚州成人在线电影| 国产一区二区三区在线观看免费视频 | 久久精品国产亚洲5555| 不卡av免费在线观看| 欧美高清精品3d| 国产精品久久久久影院色老大| 亚洲成a人在线观看| 国产成人在线免费观看| 在线免费视频一区二区| 亚洲精品在线电影| 亚洲成人av一区| 成人污视频在线观看| 宅男在线国产精品| 国产精品国产三级国产普通话99| 日韩精品电影在线| 91美女蜜桃在线| 中文av字幕一区| 看电视剧不卡顿的网站| 欧美性大战久久|