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

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

?? uart0.c

?? WINCE下,s3c2440 bootloader
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*****************************************
  NAME: uart0.c
  DESC: UART0 test
  WWW.YCTEK.COM
 *****************************************/
#include <string.h>
#include <stdlib.h>
#include "def.h"
#include "2410addr.h"
#include "2410lib.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 __irq Uart0_RxOverrunErr(void);

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

void Uart_Fclkn_Dis(void); // for 2440A


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 *dbg_data;
U8 temp_exit;


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

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

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

//extern U32 Fclk=200000000, Pclk=50000000;

U32 Fclk=200000000, Pclk=50000000;
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|=0x2aaaa;	// enable all uart channel
    rGPHUP|=0x1ff;	//Uart port pull-up disable
	rGPGCON|=(0xf<<18); // nRTS1, nCTS1
	rGPGUP|=(0x3<<9);	
    //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;		
	save_UBRDIV0=rUBRDIV0;
	save_UBRDIV1=rUBRDIV1;
	save_UBRDIV2=rUBRDIV2;
    //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;
	rUBRDIV0=save_UBRDIV0;
	rUBRDIV1=save_UBRDIV1;
	rUBRDIV2=save_UBRDIV2;
	Uart_Fclkn_Dis();
}

// 2440X usage enable
void Uart_Uextclk_En(int ch,int baud, int clock)
{
    if(ch == 0) {
	   	rUCON0  = rUCON0 & ~(1<<11) |(1<<10);	// Select UEXTCLK
     	rUBRDIV0=( (int)(clock/16./baud) -1 );	//Baud rate divisior register
    }
    else if(ch==1){
	   	rUCON1  = rUCON1 & ~(1<<11) |(1<<10);	// Select UEXTCLK
    	rUBRDIV1=( (int)(clock/16./baud) -1 );	//Baud rate divisior register
    }
    else {
	   	rUCON2  = rUCON2 & ~(1<<11) |(1<<10);	// Select UEXTCLK
       rUBRDIV2=( (int)(clock/16./baud) -1 );	//Baud rate divisior register
    }
}

//2440X usage enable
void Uart_Pclk_En(int ch, int baud)
{
    if(ch == 0) {
    	rUCON0 &= ~(3<<10);	// Select PCLK
		rUBRDIV0=( (int)(Pclk/16./baud+0.5) -1 );	//Baud rate divisior register
   }
    else if(ch==1){
    	rUCON1 &= ~(3<<10);	// Select PCLK
		rUBRDIV1=( (int)(Pclk/16./baud+0.5) -1 );	//Baud rate divisior register
   }
    else {
    	rUCON2 &= ~(3<<10);	// Select PCLK
	   	rUBRDIV2=( (int)(Pclk/16./baud+0.5) -1 );	//Baud rate divisior register
   }
}

void Uart_Fclkn_En(int ch, int baud) // for 2440A
{	
	int clock = PCLK;//Pclk;

	Uart_Printf("Current FCLK is %d\n", Fclk);
#if 1
	// input clock divider setting.
	if ( (Fclk>290000000) && (Fclk<300000000) ) // for 296MHz
	{
		rUCON0 = (rUCON0 & ~(0xf<<12)) | (0xe<<12);  // FCLK divider 14(n=20), for max 921.6kbps
		rUCON1 &= ~(0xf<<12); // 0 setting
		rUCON2 &= ~(0xf<<12); // 0 setting
		clock = Fclk / 20;
		Uart_Printf("1 : %d\n", clock);
	}
	else if ( (Fclk>395000000) && (Fclk<405000000) ) // for 399MHz
	{
		rUCON1 = (rUCON1 & ~(0xf<<12)) | (0x6<<12);  // FCLK divider 6(n=27), for max 921.6kbps
		rUCON0 &= ~(0xf<<12); // 0 setting
		rUCON2 &= ~(0xf<<12); // 0 setting
		clock = Fclk / 27;
		Uart_Printf("2 : %d\n", clock);
	}
	else if ( (Fclk>525000000) && (Fclk<535000000) ) // for 530MHz
	{
		rUCON1 |= (0xf<<12);  // FCLK divider 15(n=36), for max. 921.6kbps
		rUCON0 &= ~(0xf<<12); // 0 setting
		rUCON2 &= ~(0xf<<12); // 0 setting
		clock = Fclk / 36;
		Uart_Printf("3 : %d\n", clock);
	}
	rUCON2 |= (1<<15); // enable FCLK/n
#else
	// In 921.6kbps case of following code, Fclk must be 296352000
	rUCON0 = rUCON0 & ~(0xf<<12) | (0xe<<12);  // FCLK divider 14(n=20), for max 921.6kbps
	rUCON1 &= ~(0xf<<12); // 0 setting
	rUCON2 &= ~(0xf<<12); // 0 setting
	clock = Fclk / 20;
	rUCON2 |= (1<<15); // enable FCLK/n
#endif 

	// select buadrate.
    if(ch == 0) {
    	rUCON0 |= (3<<10);	// Select FCLK/n
		rUBRDIV0=( (int)(clock/16./baud+0.5) -1 );	//Baud rate divisior register
   }
    else if(ch==1){
    	rUCON1 |= (3<<10);	// Select FCLK/n
		rUBRDIV1=( (int)(clock/16./baud+0.5) -1 );	//Baud rate divisior register
   }
    else {
    	rUCON2 |= (3<<10);	// Select FCLK/n
	   	rUBRDIV2=( (int)(clock/16./baud+0.5) -1 );	//Baud rate divisior register
   }

	// S/W work-around for using FCLK/n
	rGPHCON = rGPHCON & ~(3<<16); //GPH8(UEXTCLK) input 
	Delay(1);
	rGPHCON = rGPHCON & ~(3<<16) | (1<<17); //GPH8(UEXTCLK) UEXTCLK
}

void Uart_Fclkn_Dis(void) // for 2440A
{
	// S/W work-around for using FCLK/n
	rGPHCON = rGPHCON & ~(3<<16); //GPH8(UEXTCLK) input 
	Delay(1);
	rGPHCON = rGPHCON & ~(3<<16) | (1<<17); //GPH8(UEXTCLK) UEXTCLK
}

//---------------------------------------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)
{
	U32 iStatus;

	iStatus = rUERSTAT0;
	
    switch(iStatus)//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 6:
	    Uart_Printf("Parity, Frame error!\n");
	    break;
	case 8:
		Uart_Printf("Breake detect\n");
		break;
	case 0xa:
		Uart_Printf("Parity error & Break detect!\n");
		break;
	case 0xc:
		Uart_Printf("Frame error & Breake detect\n");
		break;
	case 0xe:
		Uart_Printf("Parity, Frame error & Break detect!\n");
		break;
	default :
		Uart_Printf("Unknown error : 0x%x\n", iStatus);
	    break;
    }
	
   	isRxInt=0;
}


void Test_Uart0_Int(void)
{
	U8 ch;
	int iBaud;
	Uart_Printf("Change serial cable to UART0,then press any key to continue......\n");
    Uart_Port_Set(); 

//    Uart_Select(1);    
//    Uart_Printf("\nConnect PC[COM1 or COM2] and UART0 of SMDK2440 with a serial cable!!! \n");
//    Uart_Printf("Then, press any key........\n");
    Uart_Select(0);
    Uart_Getch();

	/******** For operating clock test *********/
#if 0
	Uart_Printf("[Uart channel 0 Interrupt test]\n");
	Uart_Printf("Select operating clock 1. PCLK(D)    2. UCLK     3. FCLK/n  \nChoose : ");
	ch = Uart_Getch();	
	switch (ch)
	{
	case '2' :
		rMISCCR = rMISCCR & ~(7<<8) | (1<<10); // CLKOUT1 = PCLK
		Uart_Uextclk_En(0, 115200, Pclk);
		break;
	case '3' :
		Uart_Printf("Type the baudrate and then change the same baudrate of host, too.\n");
			 Uart_Printf("Baudrate (ex 9600, 115200[D], 921600) : ");
		iBaud = Uart_GetIntNum();
		if (iBaud == -1) iBaud = 115200;
		Uart_Fclkn_En(0, iBaud);
		Uart_Getch();
		break;
	default :
		Uart_Pclk_En(0, 115200);
	}
#endif
	Uart_Pclk_En(0, 115200);
#if 0       
	/******** Select UART or IrDA *********/
	Uart_Printf("Select 1. UART(D) or  2. IrDA mode\nChoose : ");
	if (Uart_Getch() == '2')
		rULCON0 |= (1<<6); // IrDA mode
	else
		rULCON0 &= ~(1<<6); // UART mode
#endif
#if 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");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产高清一区二区三区| 欧美日韩国产另类一区| 一区二区三区四区五区视频在线观看| 91视频观看视频| 亚欧色一区w666天堂| 久久蜜桃av一区精品变态类天堂 | 亚洲成人www| 日韩女同互慰一区二区| 成人aa视频在线观看| 综合久久久久久久| 欧美日韩日日摸| 国产成人av电影在线| 亚洲午夜激情网站| 国产日本欧洲亚洲| 欧美日韩一级视频| 成人性视频网站| 免费高清在线视频一区·| 亚洲欧洲av色图| 日韩精品一区二区三区在线 | 成人一区二区三区中文字幕| 亚洲成人资源在线| 日本一区二区免费在线观看视频 | 日韩一区二区电影网| 成人av动漫网站| 久久国内精品自在自线400部| 亚洲精品一二三四区| 久久蜜桃av一区二区天堂| 欧美中文字幕不卡| 韩国一区二区视频| 香蕉久久一区二区不卡无毒影院| 国产精品女同互慰在线看| 日韩情涩欧美日韩视频| 欧美视频中文一区二区三区在线观看| 国产一区二区在线视频| 无吗不卡中文字幕| 亚洲乱码一区二区三区在线观看| 中文字幕日韩精品一区| 国产精品日韩成人| 国产精品美女久久久久aⅴ| 久久久美女毛片| 久久九九99视频| 欧美国产激情二区三区| 国产日韩欧美高清| 国产精品色噜噜| 成人欧美一区二区三区视频网页| 国产精品国产三级国产aⅴ入口| 中文字幕中文字幕一区| 中文字幕亚洲区| 亚洲人成网站在线| 一区二区三区四区av| 亚洲国产sm捆绑调教视频| 五月天激情综合| 毛片av中文字幕一区二区| 美国精品在线观看| 国产激情精品久久久第一区二区| 国产剧情av麻豆香蕉精品| 成人一区二区视频| 色婷婷久久一区二区三区麻豆| 色噜噜狠狠成人中文综合| 色综合久久久网| 欧美色成人综合| 日韩欧美在线不卡| 久久亚洲精品国产精品紫薇| 日本一区二区在线不卡| 亚洲少妇30p| 亚洲成人久久影院| 久久国产人妖系列| 成人亚洲精品久久久久软件| 色哟哟国产精品| 欧美肥大bbwbbw高潮| 精品奇米国产一区二区三区| 国产亚洲一区二区三区在线观看 | 久久久高清一区二区三区| 国产日韩一级二级三级| 一区二区三区 在线观看视频| 麻豆精品视频在线观看| 国产精选一区二区三区| 色哦色哦哦色天天综合| 日韩午夜在线观看| 国产精品家庭影院| 午夜精品福利视频网站| 国产老女人精品毛片久久| 色婷婷久久久久swag精品| 欧美一级国产精品| 国产精品欧美久久久久无广告 | 国产一区二区三区蝌蚪| 91免费视频网址| 日韩欧美另类在线| 亚洲欧美一区二区三区孕妇| 日本中文在线一区| av网站一区二区三区| 日韩欧美第一区| 亚洲麻豆国产自偷在线| 精品一区二区三区在线观看国产 | 91精品久久久久久久91蜜桃| 国产日韩欧美制服另类| 午夜视黄欧洲亚洲| 99精品视频一区| 欧美tickling挠脚心丨vk| 亚洲免费伊人电影| 丰满少妇久久久久久久| 欧美二区乱c少妇| 亚洲另类春色国产| 国产精品一二二区| 欧美一区二区国产| 亚洲一线二线三线视频| 国产成人av电影在线观看| 在线观看91av| 亚洲一区二区免费视频| 成人av免费在线观看| 日韩精品专区在线| 午夜精品久久久| 欧洲精品一区二区| 亚洲欧美综合色| 美女高潮久久久| 在线看一区二区| 亚洲视频免费看| 国产999精品久久| 精品久久久久久亚洲综合网 | 欧美日韩视频在线一区二区| 国产日韩v精品一区二区| 午夜精品在线看| 欧美在线观看一二区| 一区二区日韩av| 91麻豆自制传媒国产之光| 国产欧美va欧美不卡在线| 久久精品99久久久| 欧美一区二区三区视频| 日韩国产在线一| 7777精品伊人久久久大香线蕉| 一区二区三区日韩在线观看| av午夜精品一区二区三区| 中文字幕第一区综合| 国产一区二区伦理片| 亚洲精品一区二区三区蜜桃下载| 蜜桃视频在线观看一区二区| 欧美一级在线观看| 久久精品久久99精品久久| 91精品国产综合久久精品图片 | 亚洲欧洲日产国产综合网| 成人激情综合网站| 中文字幕欧美一| 日本电影欧美片| 一区二区三区中文免费| 欧美综合在线视频| 午夜私人影院久久久久| 日韩一区二区在线观看视频| 美国三级日本三级久久99| 精品国产免费人成电影在线观看四季| 久久精品国产亚洲高清剧情介绍| 久久影院电视剧免费观看| 国产在线精品一区二区夜色| 久久久久久久久久久电影| 国产成人av在线影院| 中文字幕中文字幕在线一区 | 在线播放亚洲一区| 日韩精品成人一区二区三区| 日韩视频一区二区在线观看| 国产盗摄女厕一区二区三区| 中文字幕中文字幕在线一区| 91极品视觉盛宴| 免费观看在线综合色| 久久久不卡网国产精品二区| 成人av免费网站| 亚洲国产成人tv| 精品美女在线播放| 99久精品国产| 日韩激情中文字幕| 日韩视频免费观看高清完整版在线观看| 美女精品自拍一二三四| 国产精品视频观看| 欧洲视频一区二区| 久久国产尿小便嘘嘘| 国产精品久久久久久久久免费丝袜 | 亚洲精品一区二区在线观看| 成人动漫中文字幕| 亚洲高清三级视频| 久久亚洲一区二区三区明星换脸| 91玉足脚交白嫩脚丫在线播放| 首页国产欧美日韩丝袜| 国产女同互慰高潮91漫画| 欧美性猛交xxxxxx富婆| 国产一区欧美一区| 亚洲图片欧美一区| 久久久久国产精品麻豆| 欧美日韩一区二区三区在线看| 韩国av一区二区| 亚洲国产综合色| 国产欧美综合在线观看第十页 | 国产视频不卡一区| 欧美日韩日日骚| 成人av动漫在线| 狠狠狠色丁香婷婷综合激情 | 亚洲成人精品一区| 国产精品视频观看| 日韩欧美二区三区| 欧美三级电影在线看| 成人18精品视频| 久久99久久精品欧美| 亚洲国产综合人成综合网站|