亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
日韩精品成人一区二区三区| 欧美日韩一区二区三区不卡| 国产高清不卡一区| 激情丁香综合五月| 国产一区二区毛片| 国产激情视频一区二区三区欧美| 国产一区二区在线影院| 国产一区二区三区在线观看免费 | 国产精品水嫩水嫩| 国产精品青草久久| 亚洲天堂成人网| 一区二区三区中文免费| 亚洲成人在线网站| 美女视频免费一区| 国产精品一区二区免费不卡| 成人激情av网| 欧美亚一区二区| 日韩一级片在线播放| 久久婷婷国产综合精品青草| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 久久精子c满五个校花| 中文字幕电影一区| 一区二区三区丝袜| 蜜桃视频在线观看一区| 国产精品2024| 色综合天天天天做夜夜夜夜做| 在线这里只有精品| 欧美xxxxx牲另类人与| 亚洲国产精品成人久久综合一区| 亚洲日本va在线观看| 午夜欧美视频在线观看| 麻豆一区二区99久久久久| 国产成a人亚洲精| 欧美日韩一二区| 久久亚洲精华国产精华液| 国产精品福利一区二区| 香港成人在线视频| 国产精品一区二区久激情瑜伽| 97se亚洲国产综合自在线观| 91麻豆精品91久久久久同性| 久久久久久久久蜜桃| 亚洲在线视频网站| 国产精品中文字幕日韩精品 | 亚洲色图在线视频| 日韩福利电影在线| 成人久久18免费网站麻豆| 欧美日韩不卡一区| 国产精品久久一级| 日本欧美一区二区| 色哟哟一区二区在线观看| 精品免费日韩av| 亚洲激情图片小说视频| 国产在线视频一区二区三区| 91理论电影在线观看| 精品成a人在线观看| 亚洲综合在线免费观看| 国产91丝袜在线播放九色| 欧美午夜寂寞影院| 国产精品色在线| 蜜桃av一区二区| 欧洲精品在线观看| 欧美国产在线观看| 久久爱www久久做| 欧美日精品一区视频| 国产精品你懂的在线欣赏| 免费观看一级特黄欧美大片| 色综合久久综合网97色综合| 久久久蜜臀国产一区二区| 亚洲成av人综合在线观看| 成人免费视频视频| 久久午夜羞羞影院免费观看| 亚洲成av人**亚洲成av**| 99久久久无码国产精品| 久久蜜臀精品av| 日韩高清一区在线| 欧美日免费三级在线| 亚洲另类春色校园小说| 国产不卡在线视频| 久久午夜羞羞影院免费观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 91黄色免费版| 亚洲男人的天堂一区二区| 国产99久久久国产精品免费看| 欧美变态tickle挠乳网站| 五月婷婷久久丁香| 欧美日韩在线一区二区| 一区二区激情视频| 久久久精品免费网站| 美女视频网站久久| 日韩一区二区三区电影| 亚州成人在线电影| 欧美欧美午夜aⅴ在线观看| 艳妇臀荡乳欲伦亚洲一区| 一本色道亚洲精品aⅴ| 中文字幕免费在线观看视频一区| 国产福利一区在线| 国产视频视频一区| 丁香五精品蜜臀久久久久99网站| 久久久亚洲综合| 国产成人精品一区二区三区四区| 久久久久99精品一区| 国产另类ts人妖一区二区| 久久久噜噜噜久噜久久综合| 久久99热狠狠色一区二区| 日韩一区二区三区在线| 免费观看91视频大全| 欧美r级在线观看| 国内精品伊人久久久久av影院 | 久久精品人人做| 国产·精品毛片| 一区精品在线播放| 色激情天天射综合网| 亚洲福利视频三区| 欧美一区二区黄| 国产一区二区免费视频| 欧美极品另类videosde| 99re热视频这里只精品| 国产福利一区二区三区| 国产精品国产精品国产专区不片| 91麻豆成人久久精品二区三区| 亚洲精品成人天堂一二三| 欧美精品九九99久久| 精品一区二区在线看| 中文字幕av一区二区三区免费看| 色婷婷综合久久久久中文一区二区 | 欧美丰满美乳xxx高潮www| 秋霞电影一区二区| 久久久久久久久岛国免费| 99riav久久精品riav| 午夜av一区二区三区| 久久久久国产一区二区三区四区| 国产成人免费视| 亚洲一区二区免费视频| 日韩欧美一级精品久久| 成人91在线观看| 亚洲成人综合在线| 国产视频视频一区| 欧美日韩一级黄| 国产一区二区三区久久悠悠色av| 国产精品久久久久久亚洲毛片| 欧美视频一区二| 国产一区二区电影| 亚洲永久精品大片| 国产亚洲精品aa午夜观看| 色婷婷香蕉在线一区二区| 蜜桃视频在线一区| 亚洲欧洲综合另类| 精品免费视频.| 欧美在线免费播放| 国产大陆精品国产| 午夜电影一区二区三区| 国产欧美在线观看一区| 欧美三级电影一区| 成人激情图片网| 久久精品国产99国产精品| 亚洲欧美影音先锋| 精品裸体舞一区二区三区| 91久久人澡人人添人人爽欧美| 国产综合久久久久久鬼色 | 奇米精品一区二区三区在线观看一| 久久久精品国产免费观看同学| 欧美婷婷六月丁香综合色| 韩国女主播一区二区三区| 亚洲一区在线观看网站| 亚洲国产精品成人综合色在线婷婷| 欧美精品三级日韩久久| 91污片在线观看| 福利视频网站一区二区三区| 日韩激情视频网站| 一区二区三区色| 中文字幕中文字幕在线一区| 精品免费99久久| 91精品婷婷国产综合久久竹菊| 99精品视频在线观看| 国产麻豆欧美日韩一区| 日本不卡123| 午夜国产精品一区| 亚洲一区在线视频| 亚洲色图丝袜美腿| 国产精品嫩草影院com| 久久精品夜色噜噜亚洲aⅴ| 88在线观看91蜜桃国自产| 欧美亚洲综合色| 一道本成人在线| 成人国产亚洲欧美成人综合网| 激情偷乱视频一区二区三区| 丝瓜av网站精品一区二区| 亚洲欧美日本在线| 亚洲私人影院在线观看| 国产精品女同互慰在线看| 国产午夜亚洲精品理论片色戒| 日韩午夜三级在线| 日韩欧美在线不卡| 日韩午夜激情电影| 日韩欧美激情在线| 精品国产三级电影在线观看| 日韩视频免费观看高清在线视频| 91精品欧美综合在线观看最新| 欧美久久久久久久久久| 在线不卡欧美精品一区二区三区|