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

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

?? uart1.c

?? 基于ARM7處理器的中斷與串口在ucos下切換的演示程序
?? C
字號:
/* ----------------------------------------------------
   模塊名: Uart1.c:
   描  述: 串口1接口函數  
--------------------------------------------------------*/
#include "config.h"


#define USE_SEMAPHORE_RX  1              /* 打開后不穩定問題解決 */





static OS_EVENT *Uart1TxSem;

#if USE_SEMAPHORE_RX
static OS_EVENT *Uart1RxSem;
#else
volatile uint8 uart1_inbufsign;          /* 接收緩沖區非空標志-有=1 */
#endif



//volatile char  RxBuf12[uart1_LenRxBuf];	/* just test */
volatile char  RxBuf1[uart1_LenRxBuf];
volatile int  rxHead1;         /* 收發緩沖區讀寫指針 */
volatile int  rxTail1;
volatile int   nUart1RxLen;

volatile char  TxBuf1[uart1_LenTxBuf]; /* 收發緩沖區實體 */
volatile int  txHead1;         /* 收發緩沖區讀寫指針 */
volatile int  txTail1;
volatile int  nUart1TxLen;	


void UART1_data_transfer(void*);
/*------------------------------------------------------------
名    稱:UART1_Ini()
功    能:初始化串口0。設置其工作模式及波特率。
入口參數:set  模式設置(UARTMODE數據結構)
出口參數:返回值為1時表示初化成功,為0表除參數出錯
------------------------------------------------------------*/
uint8  UART1_Ini(UARTMODE *set)
{  
	uint32  bak;
	
    VICIntEnClr = 1 << 7;   //禁止uart1中斷

    /* 參數過濾 */
    if((0 == set->baudrate)||(set->baudrate > 115200) ) return(0);
    if((set->datab < 5) ||(set->datab > 8) ) return(0);
    if((0 == set->stopb)||(set->stopb > 2) ) return(0);
    if( set->parity > 2 ) return(0);

    /* 設置I/O連接到UART1 */
    PINSEL0 = (PINSEL0 & 0xfff0ffff) | 0x00050000;
    //PINSEL0 = (PINSEL0 & 0x0000ffff) | 0x55550000;

    /* 設置串口波特率 */
    U1LCR = 0x80;                    // DLAB位置1
    bak = (FPCLK>>4)/set->baudrate;
    U1DLM = bak>>8;
    U1DLL = bak&0xff;
     
    /* 設置串口模式 */
    bak = set->datab - 5;            // 設置字長度
    if(2 == set->stopb) bak |= 0x04; // 判斷是否為2位停止位  
    
    if(0 != set->parity) 
    {
		if(set->parity == 1)
		{
            bak |= 0x08;             // 設置為奇校驗
		}
		else
		{
			bak |= 0x18;             // 設置為偶校驗
		}
    }
    U1LCR = bak;	
    //U1FCR = 0x01;                    	// 每接收到一個字符就產生一次中斷   
	U1FCR = 0xc1;
    U1IER = 0x03;                    	// 允許RBR和THRE中斷,即接收中斷
    
    /* 初始化串口所用到的全局變量 */   
	nUart1RxLen = 0;
    rxHead1 = 0;
    rxTail1 = 0;

	nUart1TxLen = 0;
    txHead1 = 0;
    txTail1 = 0;

    //memset(RxBuf12, 0, sizeof(RxBuf12));
    
    Uart1TxSem = OSSemCreate(1);     // 信號量用于發送緩沖區滿后等待發送
	
#if USE_SEMAPHORE_RX
    Uart1RxSem = OSSemCreate(0);     // 信號量用于等待串口接收字符中斷
#else
    uart1_inbufsign = 0;
#endif
    
    //VICIntEnable = 1 << 7;           // 允許uart0中斷
    
    return 0;
}

//
// 向硬件發送一個字節
//
void uart1PhySend(void)
{
	
    if( nUart1TxLen )
	{      	
		if( txHead1 == uart1_LenTxBuf)
		{
			txHead1 = 0;
		}

		OS_ENTER_CRITICAL();
		if( LSR_TEMT & U1LSR )
		{           
		   U1THR = TxBuf1[txHead1++] ;
		   nUart1TxLen--;          
		}
	    OS_EXIT_CRITICAL();	
	}
}

//
// 從硬件獲取數據
//
void uart1PhyRecv(void)
{
	char c;
	//int i;

	//for( i = 0; i < 16; i++ )
	while(1)
	{
		if( U1LSR & LSR_RDR )	// 有數據
		{
			c = U1RBR;
			OS_ENTER_CRITICAL();
			if( nUart1RxLen < uart1_LenRxBuf )
			{
				// if reach the end, turn round
				if( rxTail1 == uart1_LenRxBuf)
				{
					rxTail1 = 0;
				}
				RxBuf1[rxTail1++] = c;
				nUart1RxLen++;
			}
		    OS_EXIT_CRITICAL();	
		}
		else break;
	}
}

/*------------------------------------------------------------
名    稱:UART1_Exception()
功    能:串口UART1接收中斷。
入口參數:無
出口參數:無
------------------------------------------------------------*/
void   Uart1_Exception(void)
{
    uint8 Uart1Int;	

	OS_ENTER_CRITICAL();
    if(((Uart1Int = U1IIR)&0x01) == 0)
    {
        switch(Uart1Int & 0x0e)
        {
            case 0x02:  /* 發送中斷處理 */           
                OSSemPost(Uart1TxSem);                
                //uart1PhySend();
          
            	break;

            case 0x04:  /* 接收中斷處理 */
            {
            	uart1PhyRecv();
				
				//if(nUart1RxLen!=1)
				//	OSUntimeout(UART1_data_transfer, NULL);
				//OSTimeout(UART1_data_transfer, NULL, 1);													
            }
            break;
            
            case 0x06: /* 串口接收線路狀態錯誤中斷 */
            {
                Uart1Int = U1LSR; /* 一定要進行該操作,用以清除中斷標志,否則串口會死掉! */       

            }
            break;
            
            case 0x0c: /* 串口字符超時指示(CTI)中斷 */
            {
            	uart1PhyRecv();
				//OSUntimeout(UART1_data_transfer, NULL);
            	//UART1_data_transfer((void*)0);

                //Uart1Int = U1RBR; /* 一定要進行該操作,用以清除中斷標志,否則串口會死掉! */

            }
            break;
            
            default:
                Uart1Int = U1LSR;

            break;
        }
    }
    OS_EXIT_CRITICAL();
    
    VICVectAddr = 0x00;                          // 中斷處理結束
}               

/*------------------------------------------------------------
** 函數名稱: UART1_PutChar
** 功能描述: 從UART1往外發送一字節
** 輸   入: 待發送數據
** 輸   出: 無
** 返    回: 待發送數據 
------------------------------------------------------------*/

char UART1_PutChar(char c)
{
	UART1_PutData( &c, 1 );
	return c;
}

/*------------------------------------------------------------
** 函數名稱: UART1_PutChar
** 功能描述: 從UART1往外發送一指定長度字符串
** 輸   入: 待發送數據
** 輸   出: 無
** 返    回: 無 
------------------------------------------------------------*/
int UART1_PutData(char *str, int len)
{
	int i;
	int nTempLen;
	//int nNeedToSend = FALSE;
	//uint8 err;

	if( nUart1TxLen >= uart1_LenTxBuf )
		return 0;
	
    OS_ENTER_CRITICAL();

	nTempLen = min(len, uart1_LenTxBuf - nUart1TxLen );
	for( i = 0; i < nTempLen; i++ )
	{
		if( txTail1 == uart1_LenTxBuf )
			txTail1 = 0;
		TxBuf1[txTail1++] = str[i];
		nUart1TxLen ++;
	}

    OS_EXIT_CRITICAL();
    return len;
}

//
// read data direct
//
int ReadDataNowait(char *buffer,int limit)
{
	int i;
	int templen;

	templen = min(limit, nUart1RxLen);
	for( i = 0; i < templen; i++ )
	{
		if( rxHead1 == uart1_LenRxBuf )
			rxHead1 = 0;
		buffer[i] = RxBuf1[rxHead1++];
	}
	
	OS_ENTER_CRITICAL();
	nUart1RxLen -= templen;
	OS_EXIT_CRITICAL();

	return templen;
}

//
// 讀取串口數據
// buf: 緩沖地址
// len: 緩沖長度
// timeout: 超時時間
// 返回: 數據長度
//
int ReadData(char *buffer,int limit,int timeout)
{	
	//uint8 err;	
	
	//OSSemPend(Uart1RxSem, timeout, &err);
	//if(OS_NO_ERR != err)
   	//{
   	//    return 0;
   	//}		

	return ReadDataNowait(buffer, limit);
}

//
// check if there any data to read
//
int ReadDataWaiting(void)
{
	return nUart1RxLen;	
}

//
// notify the application to read data
//
void UART1_data_transfer(void* p)
{
	OSSemPost(Uart1RxSem);	
}

//
// 發送數據
// buffer: 數據緩沖地址
// size:   緩沖大小
// 返回: 已發送數據長度
//
int SendData(char* buffer, int size)
{
	UART1_PutData( buffer, size );	
	return size;
}

//
// 清空串口緩沖
//
void ClearComm(void)
{
	OS_ENTER_CRITICAL();	
	nUart1RxLen = 0;
    rxHead1 = 0;
    rxTail1 = 0;

	nUart1TxLen = 0;
    txHead1 = 0;
    txTail1 = 0;	
	OS_EXIT_CRITICAL();
}

unsigned char IsOpened(void)
{
	return 0;
}


//
// set the DTR control line
//
void uart1_set_dtr( int value )
{
	/*IODIR = IODIR | UART1_DTR;
	if( value )
		IOSET = IOSET | UART1_DTR;	// 置1 無效
	else		
		IOCLR = IOCLR | UART1_DTR;	// 置0, 有效 
		*/
}

int uart1_get_dcd(void)
{
   //P1.22
   if ((IO1PIN & 0x00400000) != 0)
   {
       return 1;
   }
   else
   {
       return 0;
   }
}

int uart1_get_cts(void)
{
   //P0.11

   if ((IO0PIN & 0x00000800) != 0)
   {
   	   return 1;
   }
   else
   {
   	   return 0;
   }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产另类ts人妖一区二区| 欧美三级日韩三级国产三级| 色综合久久精品| 日韩一区二区三区在线视频| 成人免费一区二区三区在线观看| 蜜桃精品在线观看| 色中色一区二区| 国产亚洲女人久久久久毛片| 舔着乳尖日韩一区| 暴力调教一区二区三区| 欧美不卡一区二区三区| 午夜精品久久久久| 91亚洲国产成人精品一区二三| 精品久久久久久久久久久久包黑料 | 日韩欧美国产1| 亚洲一区在线观看视频| 大尺度一区二区| 精品国产乱码久久久久久牛牛| 午夜一区二区三区视频| 一本色道亚洲精品aⅴ| 国产欧美一区二区精品忘忧草| 视频一区中文字幕国产| 欧美午夜影院一区| 亚洲免费观看高清完整版在线观看| 国产成人av自拍| 精品国产乱码久久久久久久| 另类小说欧美激情| 欧美一区二区三区视频免费播放| 一区二区三区四区不卡视频| youjizz国产精品| 国产精品三级电影| 不卡一区二区三区四区| 国产农村妇女精品| 成人一区二区在线观看| 精品国产一区二区三区四区四| 看电视剧不卡顿的网站| 欧美一区午夜精品| 男人操女人的视频在线观看欧美| 777亚洲妇女| 日韩vs国产vs欧美| 日韩视频免费观看高清完整版在线观看| 手机精品视频在线观看| 日韩欧美激情一区| 国产精品 欧美精品| 亚洲国产精品成人综合色在线婷婷| 成人午夜伦理影院| 国产精品久久久久久久久免费相片| www.欧美日韩国产在线| 亚洲欧美视频在线观看视频| 欧美日韩卡一卡二| 激情欧美日韩一区二区| 国产清纯美女被跳蛋高潮一区二区久久w| 国产一区二区三区美女| 国产精品福利一区| 欧美日韩1区2区| 国产一区二区在线视频| ㊣最新国产の精品bt伙计久久| 欧美在线一二三四区| 日韩av电影免费观看高清完整版| 久久久三级国产网站| 91啦中文在线观看| 奇米精品一区二区三区四区| 国产日韩欧美一区二区三区综合| 欧洲生活片亚洲生活在线观看| 日本午夜一区二区| 国产精品全国免费观看高清| 欧美色图天堂网| 韩国理伦片一区二区三区在线播放| 国产精品超碰97尤物18| 91.麻豆视频| 不卡欧美aaaaa| 久久精品国产精品亚洲综合| 亚洲丝袜精品丝袜在线| 日韩午夜小视频| 91蜜桃网址入口| 久久超级碰视频| 一区二区三区av电影| 日韩女同互慰一区二区| 色综合久久天天| 韩国毛片一区二区三区| 亚洲专区一二三| 国产精品你懂的在线| 日韩一区二区三区精品视频| 91色porny蝌蚪| 国产九九视频一区二区三区| 亚洲第一福利一区| 中文字幕一区在线观看| 日韩一区二区免费电影| 欧美日韩亚洲另类| 99免费精品视频| 国产一区在线观看视频| 日韩av在线发布| 亚洲一二三级电影| 亚洲三级视频在线观看| 久久午夜国产精品| 日韩视频免费观看高清完整版| 欧洲一区在线电影| 99精品偷自拍| 国产成人免费视频一区| 麻豆国产欧美一区二区三区| 亚洲va在线va天堂| 亚洲免费观看高清完整版在线| 中文字幕亚洲视频| 国产欧美日产一区| 久久久高清一区二区三区| 日韩欧美成人一区| 欧美一级二级三级蜜桃| 欧美日韩mp4| 91精品午夜视频| 欧美人动与zoxxxx乱| 欧美综合天天夜夜久久| 97se亚洲国产综合自在线观| 欧美综合视频在线观看| 久久精品视频免费观看| 97久久超碰国产精品| 一区二区三区高清不卡| 亚洲免费电影在线| 中文字幕在线观看不卡| 中文字幕一区二区三区不卡 | 国产精品麻豆网站| 久久精品无码一区二区三区| 国产视频亚洲色图| 国产亚洲一区二区三区| 国产精品视频你懂的| 亚洲乱码精品一二三四区日韩在线| 亚洲欧美韩国综合色| 亚洲一区二区av电影| 亚洲chinese男男1069| 蜜臀精品久久久久久蜜臀| 美女网站视频久久| 国产精品一区二区无线| 成人黄色免费短视频| 欧洲av一区二区嗯嗯嗯啊| 欧美色男人天堂| 精品国产精品一区二区夜夜嗨| 国产亚洲一二三区| 亚洲欧美日韩国产另类专区| 五月天欧美精品| 国产一区二区三区精品欧美日韩一区二区三区 | 3751色影院一区二区三区| 日韩三级精品电影久久久 | 成人黄色软件下载| 97久久精品人人做人人爽| 在线观看免费成人| 日韩欧美国产一二三区| 国产网站一区二区三区| 一区二区在线观看视频在线观看| 午夜欧美在线一二页| 国产精品综合二区| 91麻豆免费观看| 欧美大片顶级少妇| 亚洲欧洲国产日韩| 日本亚洲天堂网| 成人网在线播放| 在线综合+亚洲+欧美中文字幕| 久久这里只有精品6| 亚洲在线观看免费视频| 蜜臀久久99精品久久久久宅男| 成人国产电影网| 欧美一区二区三区免费在线看| 国产精品麻豆网站| 美女视频免费一区| 91精品1区2区| 欧美激情一区二区在线| 日韩黄色一级片| 色老综合老女人久久久| 精品精品欲导航| 亚洲韩国一区二区三区| 高清不卡一二三区| 日韩一区二区中文字幕| 亚洲人123区| 国产成人午夜电影网| 日韩欧美色电影| 亚洲国产精品影院| 91丨九色丨国产丨porny| 精品久久人人做人人爱| 午夜久久久久久久久| 91电影在线观看| 中文字幕第一区| 国产一区美女在线| 日韩女同互慰一区二区| 婷婷久久综合九色国产成人| 欧亚一区二区三区| 亚洲免费成人av| 色综合一个色综合亚洲| 国产女人水真多18毛片18精品视频| 麻豆精品视频在线观看免费| 欧美日韩精品一区二区| 一区二区三区四区在线播放| 99国产精品久| ...中文天堂在线一区| 成人黄色综合网站| 日本一区二区免费在线观看视频 | 在线亚洲一区观看| 日韩美女视频19| av在线这里只有精品| 国产精品久久久久婷婷| 99久久国产免费看| 日韩伦理av电影| 91国在线观看|