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

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

?? uart0.c

?? void __irq Uart0_TxInt(void) void __irq Uart0_RxIntOrErr(void) void __irq Uart0_TxDmaDone(void)
?? 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一区二区三区免费野_久草精品视频
久久国产精品色| 日韩精彩视频在线观看| 精品美女被调教视频大全网站| 91天堂素人约啪| av亚洲精华国产精华精华| 国产99一区视频免费| 成人一级黄色片| 国产99久久久久| 99久久精品国产一区二区三区| 成人免费高清在线| 99久久免费精品| 欧美性色黄大片手机版| 欧美日韩亚洲综合在线 | 国产精品久久看| 国产精品久久久久一区| 亚洲免费高清视频在线| 亚洲成av人影院| 国内精品国产成人国产三级粉色| 久久精品久久综合| 国产99久久久国产精品| 色婷婷av一区| 日韩欧美电影在线| 中文字幕第一区| 亚洲午夜成aⅴ人片| 日韩av中文字幕一区二区| 韩国av一区二区| 91在线视频播放| 在线播放中文字幕一区| 国产日韩成人精品| 一区二区三区成人| 久久成人综合网| av福利精品导航| 日韩午夜激情免费电影| 亚洲国产精品av| 香蕉影视欧美成人| 国产精品伊人色| 色综合久久综合网97色综合| 欧美久久久久中文字幕| 国产精品午夜电影| 婷婷综合另类小说色区| 国产精品一品视频| 欧美日韩国产美| 国产精品剧情在线亚洲| 琪琪一区二区三区| a在线播放不卡| 日韩一区二区三区视频| 亚洲丝袜制服诱惑| 韩国成人在线视频| 欧美久久一二区| 亚洲欧洲精品一区二区三区| 日本视频在线一区| 色88888久久久久久影院按摩| 日韩美一区二区三区| 亚洲伊人色欲综合网| 国产99久久久国产精品免费看| 色狠狠综合天天综合综合| 久久久久国产精品人| 婷婷开心激情综合| 91亚洲精品久久久蜜桃网站 | 亚洲国产精品成人综合色在线婷婷| 亚洲精品欧美二区三区中文字幕| 韩国女主播成人在线| 在线一区二区三区做爰视频网站| 久久精品人人做人人综合| 日本美女视频一区二区| 欧美日韩色综合| 亚洲男同1069视频| 91亚洲永久精品| 国产精品久久一卡二卡| 国产精品538一区二区在线| 日韩视频国产视频| 日韩成人午夜精品| 欧美日韩在线播放一区| 亚洲国产cao| 欧美色中文字幕| 香蕉加勒比综合久久| 欧美专区日韩专区| 亚洲线精品一区二区三区八戒| 94-欧美-setu| 亚洲精品国产视频| 欧美自拍丝袜亚洲| 婷婷国产v国产偷v亚洲高清| 欧美日韩久久久久久| 日韩经典一区二区| 亚洲精品在线电影| 成人午夜激情片| 成人欧美一区二区三区视频网页 | 中文字幕日韩精品一区| 不卡影院免费观看| 亚洲精品视频观看| 欧美精品国产精品| 美腿丝袜亚洲三区| www日韩大片| 99re热这里只有精品视频| 亚洲欧洲一区二区三区| 在线亚洲免费视频| 蜜臀91精品一区二区三区| 久久久久久综合| 91热门视频在线观看| 天天操天天干天天综合网| 欧美一二三四区在线| 国产乱子伦一区二区三区国色天香| 精品国产免费久久| av中文一区二区三区| 亚洲h在线观看| 国产亲近乱来精品视频| 色婷婷久久久久swag精品 | 久久综合久色欧美综合狠狠| 国产一区二区在线影院| 亚洲精品一二三四区| 日韩欧美www| av在线综合网| 男男视频亚洲欧美| 亚洲天堂网中文字| 日韩欧美国产高清| 色综合网色综合| 精品一区二区三区蜜桃| 一区二区在线观看免费视频播放| 欧美精品粉嫩高潮一区二区| 大胆亚洲人体视频| 免费日韩伦理电影| 亚洲日本在线天堂| 26uuu国产电影一区二区| 91麻豆高清视频| 成人三级在线视频| 免费视频最近日韩| 亚洲综合久久久| 国产精品久久久久久久久免费桃花 | 男人操女人的视频在线观看欧美| 国产精品第一页第二页第三页| 91精品在线观看入口| 91丨porny丨在线| 国产精品一区二区三区乱码| 天堂午夜影视日韩欧美一区二区| 国产精品久久久久永久免费观看 | 国产成人免费在线视频| 男男gaygay亚洲| 亚洲国产精品一区二区久久恐怖片 | 欧美大片拔萝卜| 欧美影视一区在线| 91在线观看高清| 99re亚洲国产精品| av高清久久久| 91小视频免费看| 99re视频精品| 不卡视频免费播放| 成人av在线电影| 成人午夜精品在线| av综合在线播放| 色综合久久久久| 欧美亚洲自拍偷拍| 欧美在线免费视屏| 日本精品一区二区三区高清 | 精品国产电影一区二区| 在线不卡中文字幕播放| 在线观看视频一区| 色综合中文字幕国产 | 亚洲小说欧美激情另类| 亚洲国产日韩a在线播放| 亚洲精品乱码久久久久| 亚洲无人区一区| 亚洲一级在线观看| 天堂一区二区在线| 久久99国内精品| 久久99精品一区二区三区三区| 免费高清成人在线| 国产成人综合在线观看| 成人永久免费视频| 一本久久a久久免费精品不卡| 91在线视频网址| 欧美日韩一区小说| 日韩精品中文字幕一区| 日本一区二区三级电影在线观看| 久久久www成人免费毛片麻豆| 久久久不卡影院| 亚洲精品日韩专区silk| 日韩中文欧美在线| 国产一区二区三区四区五区美女 | 这里只有精品视频在线观看| 欧美一级二级在线观看| 精品国产精品一区二区夜夜嗨| 欧美激情在线一区二区三区| 亚洲黄色小说网站| 香蕉成人伊视频在线观看| 国产乱码字幕精品高清av | 日韩一区和二区| 欧美国产日本视频| 亚洲电影一区二区三区| 国产乱子轮精品视频| 欧美日韩综合不卡| 国产偷国产偷精品高清尤物| 一区二区三区加勒比av| 久久99国产精品尤物| 色欧美日韩亚洲| 久久午夜电影网| 日韩激情视频网站| 91在线视频免费91| 久久免费视频一区| 日韩国产欧美一区二区三区| av电影一区二区|