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

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

?? uart0.c

?? S3C2410_TEST.rar
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include <string.h>
#include <stdlib.h>
#include "2410addr.h"
#include "2410lib.h"
#include "def.h"
#include "uart0.h"

void Uart_Port_Set(void);
void Uart_Port_Return(void);

void __irq Uart0_TxInt(void);
void __irq Uart0_RxIntOrErr(void);
void __irq Uart0_TxDmaDone(void);
void __irq Uart0_RxDmaDone(void);
void __irq Uart0_RxDmaOrErr(void);
void __irq Uart0_TxFifo(void);
void __irq Uart0_RxFifoOrErr(void);
void __irq Uart0_AfcTx(void);
void __irq Uart0_AfcRxOrErr(void);

void __sub_Uart0_RxInt(void);
void __sub_Uart0_RxFifo(void);
void __sub_Uart0_RxAfc(void);
void __sub_Uart0_RxErrInt(void);


volatile U16 rx_dncs;
volatile U32 rx_point,rx_isdone,rx_filesize,rx_checksum;
volatile U32 isDone,isTxInt,isRxInt,tx_cnt,tx_end,rx_cnt,rx_end,afc_err;
volatile U8 *txdataPt;
volatile U8 *txdataFl;
volatile U8 *rxdataPt;
volatile U8 *rxdataCk;


volatile U32 save_rGPHCON,save_rGPHDAT,save_rGPHUP;
volatile U32 save_ULCON0,save_UCON0,save_UFCON0,save_UMCON0;
volatile U32 save_ULCON1,save_UCON1,save_UFCON1,save_UMCON1;
volatile U32 save_ULCON2,save_UCON2,save_UFCON2,save_UMCON2;

volatile static char *uart0TxStr;
volatile static char *uart0RxStr;

volatile static char *uart2TxStr;
volatile static char *uart2RxStr;

void Uart_Port_Set(void)
{
    //Push UART GPIO port configuration
    save_rGPHCON=rGPHCON; 
    save_rGPHDAT=rGPHDAT;
    save_rGPHUP=rGPHUP;
    //Configure UART port
    rGPHCON&=0x3c0000;
    rGPHCON|=0x2faaa;	// nRTS1,nCTS1
    rGPHUP|=0x1ff;	//Uart port pull-up disable
    //rINTSUBMSK=0x7ff;   //SUBINT ALL MASK
    //Push Uart control registers 
    save_ULCON0=rULCON0;   		
    save_UCON0=rUCON0;	   	
    save_UFCON0=rUFCON0;   		
    save_UMCON0=rUMCON0;   		
    save_ULCON1=rULCON1;		
    save_UCON1 =rUCON1;		
    save_UFCON1=rUFCON1;		
    save_UMCON1=rUMCON1;	
    save_ULCON2=rULCON2;		
    save_UCON2 =rUCON2;		
    save_UFCON2=rUFCON2;		
    save_UMCON2=rUMCON2;		
    //Initialize UART1,2 port
}       
        
void Uart_Port_Return(void)
{       
    //Pop UART GPIO port configuration
    rGPHCON=save_rGPHCON;
    rGPHDAT=save_rGPHDAT;
    rGPHUP=save_rGPHUP;
    //Pop Uart control registers 
    rULCON0=save_ULCON0;   		
    rUCON0 =save_UCON0;   	
    rUFCON0=save_UFCON0;   		
    rUMCON0=save_UMCON0;   		
    rULCON1=save_ULCON1;		
    rUCON1 =save_UCON1;	
    rUFCON1=save_UFCON1;		
    rUMCON1=save_UMCON1;
    rULCON2=save_ULCON2;		
    rUCON2 =save_UCON2;	
    rUFCON2=save_UFCON2;		
    rUMCON2=save_UMCON2;		
}

void Uart_Uclk_En(int ch,int baud)
{
    /*
    int ch, baud;
    Uart_Printf("\nSelect UART channel[0:UART0/1:UART1/2:UART2]:\n");
    ch=Uart_GetIntNum();
    Uart_Printf("\nSelect baud rate :\n");
    baud=Uart_GetIntNum();
    */
    if(ch == 0) {
   	Uart_Select(0);
    	rUCON0|=0x400;	// Select UCLK
     	rUBRDIV0=( (int)(UCLK/16./baud) -1 );	//Baud rate divisior register
    	Uart_Printf("UCLK is enabled by UART0.\n"); 
    	}
    else if(ch==1){
    	Uart_Select(1);
    	rUCON1|=0x400;	// Select UCLK
        rUBRDIV1=( (int)(UCLK/16./baud) -1 );	//Baud rate divisior register
        Uart_Select(0);
        Uart_Printf("UCLK is enabled by UART1.\n");
    	}
    else {
    	Uart_Select(2);
    	rUCON2|=0x400;	// Select UCLK
        rUBRDIV2=( (int)(UCLK/16./baud) -1 );	//Baud rate divisior register
        Uart_Select(0);
        Uart_Printf("UCLK is enabled by UART2.\n");
    	}
    //for(i=0;i<100;i++);	// For the satble operation
}

void Uart_Pclk_En(int ch, int baud)
{
    /*
    int ch, baud;
    Uart_Printf("\nSelect UART channel[0:UART0/1:UART1/2:UART2]:\n");
    ch=Uart_GetIntNum();
    Uart_Printf("\nSelect baud rate :\n");
    baud=Uart_GetIntNum();
    */
    
    if(ch == 0) {
    	Uart_Select(0);
    	rUCON0&=0x3ff;	// Select PCLK
   	rUBRDIV0=( (int)(PCLK/16./baud) -1 );	//Baud rate divisior register
   	Uart_Printf("PCLK is enabled by UART0.\n"); 
    	}
    else if(ch==1){
    	Uart_Select(1);
    	rUCON1|=0x3ff;	// Select PCLK
   	rUBRDIV1=( (int)(PCLK/16./baud) -1 );	//Baud rate divisior register
   	Uart_Select(0);
   	Uart_Printf("PCLK is enabled by UART1.\n");
    	}
    else {
    	Uart_Select(2);
    	rUCON2|=0x3ff;	// Select PCLK
   	rUBRDIV2=( (int)(PCLK/16./baud) -1 );	//Baud rate divisior register
   	Uart_Select(0);
   	Uart_Printf("PCLK is enabled by UART2.\n");
    	}
    //for(i=0;i<100;i++);	// For the satble operation
}

//---------------------------------------UART0 test function-------------------------------------
void __irq Uart0_TxInt(void)
{
    rINTSUBMSK|=(BIT_SUB_RXD0|BIT_SUB_TXD0|BIT_SUB_ERR0);	// Just for the safety
    if(*uart0TxStr != '\0') 
    {
        WrUTXH0(*uart0TxStr++);
	    ClearPending(BIT_UART0);		// Clear master pending
	    rSUBSRCPND=(BIT_SUB_TXD0);		// Clear Sub int pending
	    rINTSUBMSK&=~(BIT_SUB_TXD0);	// Unmask sub int
    }
    else
    {
    	isTxInt=0;
    	ClearPending(BIT_UART0);		// Clear master pending
        rSUBSRCPND=(BIT_SUB_TXD0);		// Clear Sub int pending
        rINTMSK|=(BIT_UART0);
    }
}

void __irq Uart0_RxIntOrErr(void)
{
    rINTSUBMSK|=(BIT_SUB_RXD0|BIT_SUB_TXD0|BIT_SUB_ERR0);
    if(rSUBSRCPND&BIT_SUB_RXD0) __sub_Uart0_RxInt();
    else __sub_Uart0_RxErrInt();
    ClearPending(BIT_UART0); 
    rSUBSRCPND=(BIT_SUB_RXD0|BIT_SUB_ERR0);	// Clear Sub int pending    
    rINTSUBMSK&=~(BIT_SUB_RXD0|BIT_SUB_ERR0);    
}

void __sub_Uart0_RxInt(void)
{
    if(RdURXH0()!='\r') 
    {
    	Uart_Printf("%c",RdURXH0());
    	*uart0RxStr++ =(char)RdURXH0();
    }
    else
    {
    	isRxInt=0;
    	*uart0RxStr='\0';
    	Uart_Printf("\n");
    }
}

void __sub_Uart0_RxErrInt(void)
{
    switch(rUERSTAT0)//to clear and check the status of register bits
    {
	case '1':
	    Uart_Printf("Overrun error\n");
	    break;
	case '2':
	    Uart_Printf("Parity error\n");
	    break;
	case '4':
	    Uart_Printf("Frame error\n");
	    break;
	case '8':
	    Uart_Printf("Breake detect\n");
	    break;
	default :
	    break;
    }
}


void Test_Uart0_Int(void)
{
    Uart_Port_Set(); 
    Uart_Select(0);    
    /*********** UART0 Tx test with interrupt ***********/  
    isTxInt=1;
    uart0TxStr="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890->UART0 Tx interrupt test is good!!!!\r\n";
    Uart_Printf("[Uart channel 0 Tx Interrupt Test]\n");

    pISR_UART0=(unsigned)Uart0_TxInt;

    rULCON0=(0<<6)|(0<<3)|(0<<2)|(3);	// Normal,No parity,One stop bit, 8bit
    rUCON0 &= 0x400;	// For the PCLK <-> UCLK fuction
    rUCON0 |= (TX_INTTYPE<<9)|(RX_INTTYPE<<8)|(0<<7)|(0<<6)|(0<<5)|(0<<4)|(1<<2)|(1);
    //Clock,Tx:Def,Rx:Def,Rx timeout:x,Rx error int:x,Loop-back:x,Send break:x,Tx:int,Rx:int
    Uart_TxEmpty(0); //wait until tx buffer is empty.
    rINTMSK=~(BIT_UART0);
    rINTSUBMSK=~(BIT_SUB_TXD0);

    while(isTxInt);
    
    /*********** UART0 Rx test with interrupt ***********/
    isRxInt=1;
    uart0RxStr=(char *)UARTBUFFER;
    Uart_Printf("\n[Uart channel 0 Rx Interrupt Test]:\n");
    Uart_Printf("After typing ENTER key, you will see the characters which was typed by you.");
    Uart_Printf("\nTo quit, press ENTER key.!!!\n");
    Uart_TxEmpty(0); //wait until tx buffer is empty.
    pISR_UART0 =(unsigned)Uart0_RxIntOrErr;
    rULCON0=(0<<6)|(0<<3)|(0<<2)|(3);	// Normal,No parity,One stop bit, 8bit
    rUCON0 &= 0x400;	// For the PCLK <-> UCLK fuction
    rUCON0 |= (TX_INTTYPE<<9)|(RX_INTTYPE<<8)|(0<<7)|(1<<6)|(0<<5)|(0<<4)|(1<<2)|(1);
    //Clock,Tx:pulse,Rx:pulse,Rx timeout:x,Rx error int:o,Loop-back:x,Send break:x,Tx:int,Rx:int

    // Clear Int Pending and Unmask    
    ClearPending(BIT_UART0);
    rINTMSK=~(BIT_UART0);
    rSUBSRCPND=(BIT_SUB_TXD0|BIT_SUB_RXD0|BIT_SUB_ERR0);    
    rINTSUBMSK=~(BIT_SUB_RXD0|BIT_SUB_ERR0);
    
    while(isRxInt);
    
    rINTSUBMSK|=(BIT_SUB_RXD0|BIT_SUB_ERR0);
    rINTMSK|=(BIT_UART0);
 
    Uart_Printf("%s\n",(char *)UARTBUFFER);
    Uart_Port_Return();
}


void __irq Uart0_TxDmaDone(void)
{
    rDMASKTRIG0=0x0;	// Stop Dma0
    isDone=0;
    rINTMSK |= BIT_DMA0;
    ClearPending(BIT_DMA0);
}

void __irq Uart0_RxDmaOrErr(void)
{
    rINTSUBMSK|=(BIT_SUB_RXD0|BIT_SUB_TXD0|BIT_SUB_ERR0);
    if(rSUBSRCPND&BIT_SUB_ERR0) Uart_Printf("Error : UART0 Rx Interrupt is occured!!!\n");
    else __sub_Uart0_RxErrInt();
    
    ClearPending(BIT_UART0);
    rSUBSRCPND=(BIT_SUB_ERR0);	// Clear Sub int pending    
    rINTSUBMSK&=~(BIT_SUB_ERR0);    
}

void __irq Uart0_RxDmaDone(void)
{
    rDMASKTRIG0=0x0;	//DMA0 Channel Off
    isDone=0;
    *(uart0RxStr+5)='\0';
    rINTMSK|=(BIT_DMA0);
    ClearPending(BIT_DMA0);
}

void Test_Uart0_Dma(void)
{
    Uart_Port_Set(); 
    Uart_Select(0);    
    /*********** UART0 Tx test with DMA0 ***********/ 
    isDone=1;
    uart0TxStr="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890->UART0 Tx Test by DMA0 is good!!!!\r\n";
    Uart_Printf("\n[Uart channel 0 DMA0 Tx Test]\n");
    Uart_TxEmpty(0);
    
    pISR_DMA0  =(unsigned)Uart0_TxDmaDone;

    rULCON0=(0<<6)|(0<<3)|(0<<2)|(3);	// Normal,No parity,One stop bit, 8bit
    rUCON0 &= 0x400;	// For the PCLK <-> UCLK fuction    
    rUCON0 |= (TX_INTTYPE<<9)|(RX_INTTYPE<<8)|(0<<7)|(0<<6)|(0<<5)|(0<<4)|(2<<2)|(0);
    //Clock,Tx:Def,Rx:Def,Rx timeout:x,Rx error int:x,Loop-back:x,Send break:x,Tx:dma0,Rx:x

    /***DMA0 init***/
    rDISRC0=(U32)uart0TxStr;	// Start address
    rDISRCC0=(0<<1)|(0);		// AHB,Increment
    rDIDST0=(U32)UTXH0;			// Memory buffer Address
    rDIDSTC0=(1<<1)|(1);		// APB,Fixed

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品日韩综合在线| 国产精品成人免费在线| 亚洲欧美日韩国产一区二区三区| 亚洲福中文字幕伊人影院| 国产精品系列在线观看| 欧美精品自拍偷拍| 亚洲人精品午夜| 国产不卡在线播放| 欧美成人a∨高清免费观看| 亚洲国产婷婷综合在线精品| 色综合久久久久综合体| 国产精品视频看| 国产一区二区免费在线| 欧美成人高清电影在线| 天堂蜜桃91精品| 欧美久久久久久久久久 | 99精品在线免费| 欧美激情艳妇裸体舞| 国产精品一二三| 国产午夜精品一区二区三区视频| 久久国内精品视频| 精品国产91洋老外米糕| 韩国av一区二区| 欧美精品一区二区在线观看| 国产一区三区三区| 国产亚洲福利社区一区| 成人禁用看黄a在线| 国产精品私人影院| 97久久精品人人做人人爽50路| 亚洲欧洲国产日韩| 91黄色免费网站| 奇米精品一区二区三区四区 | 99vv1com这只有精品| 亚洲成人免费电影| av色综合久久天堂av综合| 在线观看91精品国产入口| 精品国产亚洲一区二区三区在线观看 | 美国欧美日韩国产在线播放| 日韩视频一区在线观看| 国内精品久久久久影院一蜜桃| 国产亚洲精品中文字幕| 在线免费亚洲电影| 久久se精品一区二区| 久久久久久久免费视频了| 91网站最新网址| 国产伦精品一区二区三区免费迷 | 热久久免费视频| 中文一区在线播放| 欧美人与性动xxxx| 豆国产96在线|亚洲| 午夜av一区二区三区| 国产精品国产三级国产| 欧美精品久久久久久久多人混战 | 久久精品一区二区三区av| 91黄色激情网站| 国产成人av电影在线观看| 天天av天天翘天天综合网| www久久精品| 777色狠狠一区二区三区| 91麻豆国产自产在线观看| 韩国av一区二区三区| 日本人妖一区二区| 亚洲国产欧美一区二区三区丁香婷| 亚洲国产精品ⅴa在线观看| 777久久久精品| 色婷婷精品久久二区二区蜜臀av | 一区在线观看免费| 久久久亚洲国产美女国产盗摄 | 欧美精品一级二级| 91国内精品野花午夜精品| 成人三级伦理片| 国产精品一区二区黑丝| 蜜桃av一区二区在线观看 | 国产精品久久久久久久久免费丝袜| 国产91精品露脸国语对白| 国产一区二区不卡| 国产大片一区二区| 成人少妇影院yyyy| 91污在线观看| 欧美性xxxxxxxx| 91精品国产色综合久久不卡电影| 欧美色倩网站大全免费| 欧美日韩中文字幕一区| 69堂亚洲精品首页| 精品成人一区二区三区四区| 国产农村妇女毛片精品久久麻豆| 中文字幕欧美激情| 亚洲综合色网站| 国产精品1区2区| 国产一区二区女| 麻豆精品视频在线观看| 亚洲欧洲制服丝袜| 成人欧美一区二区三区白人| 欧美va日韩va| 色噜噜狠狠成人中文综合| 老司机精品视频线观看86| 免费观看在线色综合| 老司机精品视频导航| 国产精品一区二区久激情瑜伽| 99久久亚洲一区二区三区青草| 91亚洲精品乱码久久久久久蜜桃 | 欧美一区二区久久久| 中文字幕在线不卡| 韩国理伦片一区二区三区在线播放 | 日韩综合一区二区| 国产乱码精品1区2区3区| 在线观看国产精品网站| 亚洲精品一区二区三区蜜桃下载 | 色综合中文字幕国产 | 制服丝袜日韩国产| 欧美经典三级视频一区二区三区| 天天综合日日夜夜精品| av成人免费在线| 久久免费精品国产久精品久久久久 | 中文在线一区二区| 奇米影视7777精品一区二区| www..com久久爱| 欧美成人三级在线| 亚洲成人一二三| 99精品视频一区二区| 日韩三级在线观看| 一区二区三区av电影 | 色婷婷久久久亚洲一区二区三区| 欧美精彩视频一区二区三区| 美女视频黄免费的久久 | 粉嫩嫩av羞羞动漫久久久| 欧美本精品男人aⅴ天堂| 亚洲午夜精品在线| 色一情一乱一乱一91av| 国产性做久久久久久| 蜜乳av一区二区| 91精品国产综合久久香蕉麻豆 | 亚洲成av人片| 在线观看区一区二| 亚洲欧美激情一区二区| 高清不卡一二三区| ww久久中文字幕| 国产一区视频导航| 国产精品激情偷乱一区二区∴| 久久97超碰色| 日韩免费观看2025年上映的电影 | 久久久久88色偷偷免费| 国产一区二区三区在线观看精品| 日韩精品一区二区三区视频播放| 精一区二区三区| 久久人人爽人人爽| 91免费国产视频网站| 亚洲精品videosex极品| 欧美日韩免费观看一区三区| 日韩电影一区二区三区四区| 欧美α欧美αv大片| 国产不卡视频一区| 亚洲人成网站影音先锋播放| 欧美精品在线观看播放| 成人妖精视频yjsp地址| 一区二区三区中文在线观看| 欧美色视频一区| 理论电影国产精品| 亚洲国产精品成人综合| 欧美日韩一区二区在线观看| 韩国一区二区视频| 亚洲精品视频在线看| 日韩免费观看高清完整版在线观看| 成人三级在线视频| 午夜精品一区二区三区三上悠亚| 91精品国产品国语在线不卡| 美女免费视频一区二区| 中文字幕永久在线不卡| 3d成人动漫网站| 色综合久久中文字幕| 国内欧美视频一区二区| 一区二区三区丝袜| 久久精品亚洲一区二区三区浴池| 色综合久久综合中文综合网| 国产一区二区三区| 石原莉奈在线亚洲三区| 亚洲人成网站色在线观看| 国产精品久久久久影院亚瑟| 欧美v亚洲v综合ⅴ国产v| 欧美三级中文字幕| 日本高清不卡aⅴ免费网站| 国产乱子伦一区二区三区国色天香| 亚洲国产综合在线| 一区二区三区影院| 日本一区二区免费在线观看视频 | 久久精品国产成人一区二区三区| 亚洲男人的天堂在线观看| 精品国产一区二区三区不卡| 日韩一区二区在线观看视频播放| 欧美又粗又大又爽| 一本到三区不卡视频| 一本色道亚洲精品aⅴ| 成人午夜视频网站| 91色视频在线| 色婷婷av一区二区三区gif | 久久久综合九色合综国产精品| 欧美成人r级一区二区三区| 777色狠狠一区二区三区| 91麻豆精品国产91久久久资源速度 | k8久久久一区二区三区|