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

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

?? uart1.c

?? 三星2410 硬件功能測試程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
#include <string.h>
#include <stdlib.h>
#include "2410addr.h"
#include "2410lib.h"
#include "def.h"
#include "uart0.h"
#include "uart1.h"

void __irq Uart1_TxInt(void);
void __irq Uart1_RxIntOrErr(void);
void __irq Uart1_TxDmaDone(void);
void __irq Uart1_RxDmaDone(void);
void __irq Uart1_RxDmaOrErr(void);
void __irq Uart1_TxFifo(void);
void __irq Uart1_RxFifoOrErr(void);
void __irq Uart1_AfcTx(void);
void __irq Uart1_AfcRxOrErr(void);

void __sub_Uart1_RxInt(void);
void __sub_Uart1_RxFifo(void);
void __sub_Uart1_RxAfc(void);
void __sub_Uart1_RxErrInt(void);

volatile static char *uart1TxStr;
volatile static char *uart1RxStr;

//---------------------------------------UART1 test function-------------------------------------
void __irq Uart1_TxInt(void)
{
    rINTSUBMSK|=(BIT_SUB_RXD1|BIT_SUB_TXD1|BIT_SUB_ERR1);	// Just for the safety
    if(*uart1TxStr != '\0')
    {
    	WrUTXH1(*uart1TxStr++);
        ClearPending(BIT_UART1);	// Clear master pending
        rSUBSRCPND=(BIT_SUB_TXD1);
        rINTSUBMSK&=~(BIT_SUB_TXD1);	// Unmask sub int
    }
    else
    {
    	isTxInt=0;
        ClearPending(BIT_UART1);	// Clear master pending
        rSUBSRCPND=(BIT_SUB_TXD1);
        rINTMSK|=(BIT_UART1);		// Unmask sub int
    }
}

void __irq Uart1_RxIntOrErr(void)
{
    rINTSUBMSK|=(BIT_SUB_RXD1|BIT_SUB_TXD1|BIT_SUB_ERR1);
    if(rSUBSRCPND&BIT_SUB_RXD1) __sub_Uart1_RxInt();
    else __sub_Uart1_RxErrInt();

    ClearPending(BIT_UART1);
    rSUBSRCPND=(BIT_SUB_RXD1|BIT_SUB_ERR1);	// Clear Sub int pending    
    rINTSUBMSK&=~(BIT_SUB_RXD1|BIT_SUB_ERR1);    
}

void __irq Uart1_TxDmaDone(void)
{
    rDMASKTRIG1=0x0;	// Stop Dma1
    isDone=0;
    rINTMSK |= BIT_DMA1;
    ClearPending(BIT_DMA1);
}

void __irq Uart1_RxDmaDone(void)
{
    rDMASKTRIG1=0x0;	//DMA1 Channel Off
    isDone=0;
    *(uart1RxStr+5)='\0';
    rINTMSK|=(BIT_DMA1);
    ClearPending(BIT_DMA1);
}

void __irq Uart1_RxDmaOrErr(void)
{
    rINTSUBMSK|=(BIT_SUB_RXD1|BIT_SUB_TXD1|BIT_SUB_ERR1);
    if(rSUBSRCPND&BIT_SUB_RXD1) Uart_Printf("Error : UART1 Rx Interrupt is occured!!!\n");
    else __sub_Uart1_RxErrInt();

    ClearPending(BIT_UART1);
    rSUBSRCPND=(BIT_SUB_ERR1);	// Clear Sub int pending    
    rINTSUBMSK&=~(BIT_SUB_ERR1);    
}

void __irq Uart1_TxFifo(void)
{
    rINTSUBMSK|=(BIT_SUB_RXD1|BIT_SUB_TXD1|BIT_SUB_ERR1);	// Just for the safety
    while (!(rUFSTAT1 & 0x200) && (*uart1TxStr != '\0')) 	//until tx fifo full or end of string
    	WrUTXH1(*uart1TxStr++);	

    if(*uart1TxStr == '\0') 
    {
    	rINTMSK|=BIT_UART1;
        rSUBSRCPND=BIT_SUB_TXD1;	// Clear Sub int pending
        ClearPending(BIT_UART1);	// Clear master pending
    }
    else 
    {
        ClearPending(BIT_UART1);	// Clear master pending
        rSUBSRCPND=BIT_SUB_TXD1;	// Clear Sub int pending
        rINTSUBMSK&=~(BIT_SUB_TXD1);	// Unmask sub int
    }
}

void __irq Uart1_RxFifoOrErr(void)
{
    rINTSUBMSK|=(BIT_SUB_RXD1|BIT_SUB_TXD1|BIT_SUB_ERR1);
    if(rSUBSRCPND&BIT_SUB_RXD1) __sub_Uart1_RxFifo();
    else __sub_Uart1_RxErrInt();
    ClearPending(BIT_UART1);
    rSUBSRCPND=(BIT_SUB_RXD1|BIT_SUB_ERR1);
    rINTSUBMSK&=~(BIT_SUB_RXD1|BIT_SUB_ERR1);
}

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

void __sub_Uart1_RxFifo(void)
{
    while((rUFSTAT1&0x100)||(rUFSTAT1&0xf))	//During the Rx FIFO is not empty
    {
	rx_point++;
	if(rx_point<5)
		 rx_filesize |= (RdURXH1()<<(8*(rx_point-1))); // First 4-bytes mean file size
	else if(rx_point>(rx_filesize-2))	
	{
		rx_dncs |= (RdURXH1()<<(8*(1-(rx_filesize-rx_point)))); //Last 2-bytes mean checksum.
		if(rx_point==rx_filesize) rx_isdone=0;
	}
	else
		rx_checksum+=RdURXH1();
    }
}

  
void __sub_Uart1_RxErrInt(void)
{
    switch(rUERSTAT1)//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_Uart1_Int(void)
{
    Uart_Port_Set(); 
    Uart_Select(0);    
    /*********** UART1 Tx test with interrupt ***********/  
    isTxInt=1;
    uart1TxStr="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890->UART1 Tx interrupt test is good!!!!\r\n";
    Uart_Printf("[Uart channel 1 Tx Interrupt Test]\n");

    //-------------------------------------------------------------------------------------------->
    Uart_Printf("\nConnect PC[COM1 or COM2] and UART1 of SMDK241S0 with a serial cable!!! \n");
    Uart_Printf("Then, press any key........\n");
    Uart_Select(1);	// Change the uart port    
    Uart_Getch();
    //----------------------------------------->

    pISR_UART1=(unsigned)Uart1_TxInt;

    rULCON1=(0<<6)|(0<<3)|(0<<2)|(3);	// Normal,No parity,One stop bit, 8bit
    rUCON1 &= 0x400;	// For the PCLK <-> UCLK fuction
    rUCON1 |= (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_UART1);
    rINTSUBMSK=~(BIT_SUB_TXD1);

    while(isTxInt);

    /*********** UART1 Rx test with interrupt ***********/
    isRxInt=1;
    uart1RxStr=(volatile char *)UARTBUFFER;
    Uart_Printf("\n[Uart channel 1 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");
    
    pISR_UART1 =(unsigned)Uart1_RxIntOrErr;

    rULCON1=(0<<6)|(0<<3)|(0<<2)|(3);	// Normal,No parity,One stop bit, 8bit
    rUCON1 &= 0x400;	// For the PCLK <-> UCLK fuction
    rUCON1 |= (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_UART1);
    rINTMSK=~(BIT_UART1);
    rSUBSRCPND=(BIT_SUB_RXD1|BIT_SUB_ERR1);
    rINTSUBMSK=~(BIT_SUB_RXD1|BIT_SUB_ERR1);
    
    while(isRxInt);

    rINTSUBMSK|=(BIT_SUB_RXD1|BIT_SUB_TXD1|BIT_SUB_ERR1);
    rINTMSK|=(BIT_UART1);

    Uart_Printf("%s\n",(char *)UARTBUFFER);


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


    Uart_Port_Return();
}

void Test_Uart1_Dma(void)
{
    Uart_Port_Set(); 
    Uart_Select(0);    
    /*********** UART1 Tx test with DMA1 ***********/ 
    isDone=1;
    uart1TxStr="ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890->UART1 Tx Test by DMA1 is good!!!!\r\n";
    Uart_Printf("\n[Uart channel 1 DMA1 Tx Test]\n");
    Uart_TxEmpty(0);
    
    //-------------------------------------------------------------------------------------------->
    Uart_Printf("\nConnect PC[COM1 or COM2] and UART1 of SMDK241S0 with a serial cable!!! \n");
    Uart_Printf("Then, press any key........\n");
    Uart_Select(1);	// Change the uart port    
    Uart_Getch();
    //----------------------------------------->
    
    
    pISR_DMA1  =(unsigned)Uart1_TxDmaDone;

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

    /***DMA1 init***/
    rDISRC1=(U32)uart1TxStr;	// Start address
    rDISRCC1=(0<<1)|(0);		// AHB,Increment
    rDIDST1=(U32)UTXH1;			// Memory buffer Address
    rDIDSTC1=(1<<1)|(1);		// APB,Fixed
    rDCON1=(1<<31)|(0<<30)|(1<<29)|(0<<28)|(0<<27)|(1<<24)|(1<<23)|(1<<22)|(0<<20)|strlen((char*)uart1TxStr);
    //handshake, sync PCLK, TC int, single tx, single service, Uart1, H/W request,auto-reload off, Byte size Tx, Tx count value
    rINTMSK=~(BIT_DMA1);
    rDMASKTRIG1=(0<<2)|(1<<1)|(0);    //no-stop, DMA1 channel on, no-SW trigger 

    while(isDone);

    /*********** UART1 Rx test with DMA1 ***********/ 
    isDone=1;
    uart1RxStr=(char *)UARTBUFFER;
    Uart_Printf("\n[Uart channel 1 DMA1 Rx Test]\n");
    Uart_Printf("Type any five keys!!!\n");    
    Uart_Printf("Then you will see what you typed.\n");

    pISR_DMA1=(unsigned)Uart1_RxDmaDone;
    pISR_UART1=(unsigned)Uart1_RxDmaOrErr;
    

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91丨九色丨蝌蚪富婆spa| 国产午夜精品福利| 久久久综合视频| 自拍av一区二区三区| 欧美a级理论片| 成人国产精品免费观看| 日韩一区二区三区在线观看| 亚洲卡通动漫在线| 国产精品亚洲综合一区在线观看| 欧日韩精品视频| 国产欧美精品国产国产专区 | 欧美日韩五月天| 中文字幕不卡的av| 久久99国产精品久久99果冻传媒| 色爱区综合激月婷婷| 国产欧美一区二区精品仙草咪| 日韩影院免费视频| 在线欧美小视频| 欧美激情一区在线| 国产乱码字幕精品高清av| 91精品国产91热久久久做人人 | 不卡的av电影| 国产欧美一二三区| 国产乱人伦偷精品视频不卡| 欧美电影免费观看高清完整版在线观看| 亚洲精品欧美综合四区| av一二三不卡影片| 国产日产欧美一区| 国产精品1区2区| 久久久久国产精品人| 国产麻豆91精品| 欧美精品一区二区三区一线天视频 | 日韩精品一区在线| 免费人成精品欧美精品| 欧美成人伊人久久综合网| 日韩av中文字幕一区二区三区| 欧美日韩精品欧美日韩精品一综合| 亚洲精品少妇30p| 在线视频一区二区三| 一区二区三区在线高清| 欧美三级三级三级| 日韩影院精彩在线| 精品va天堂亚洲国产| 国产高清亚洲一区| 国产精品激情偷乱一区二区∴| 不卡欧美aaaaa| 亚洲精品乱码久久久久| 欧美日韩亚洲综合一区| 粉嫩在线一区二区三区视频| 欧美激情一区二区三区全黄| 不卡一卡二卡三乱码免费网站| 亚洲欧美激情在线| 在线不卡欧美精品一区二区三区| 美国毛片一区二区三区| 久久久久久亚洲综合| 成人高清在线视频| 亚洲高清久久久| 在线播放中文一区| 精品一区二区三区在线播放| 欧美电影免费观看高清完整版在| 久久99精品一区二区三区| 日韩精品中文字幕在线不卡尤物| 日韩激情视频网站| 精品久久久久久久久久久久久久久 | 亚洲欧美激情插| 欧美在线免费视屏| 亚洲二区在线视频| 欧美一级生活片| 免费观看成人鲁鲁鲁鲁鲁视频| 日韩三级视频在线观看| 国产一区二区不卡在线| 亚洲欧美日韩小说| 亚洲国产精品av| 欧美亚日韩国产aⅴ精品中极品| 亚洲天堂2014| 成人免费看的视频| 视频一区二区中文字幕| 久久久亚洲欧洲日产国码αv| 国产成人精品午夜视频免费| 亚洲最大成人综合| 日韩欧美综合在线| av一区二区三区四区| 狠狠色狠狠色综合系列| 国产精品免费视频观看| 欧美麻豆精品久久久久久| 国产在线不卡一区| 一个色综合网站| 日韩欧美国产精品一区| 99久免费精品视频在线观看| 日本一道高清亚洲日美韩| 国产精品丝袜一区| 欧美精品免费视频| 本田岬高潮一区二区三区| 午夜精品福利一区二区三区蜜桃| 久久毛片高清国产| 91麻豆精品国产91久久久资源速度 | 国产麻豆成人精品| 亚洲最新视频在线播放| 久久久99精品免费观看不卡| 在线精品观看国产| 成人久久18免费网站麻豆| 亚洲国产wwwccc36天堂| 欧美va亚洲va| 日本高清不卡在线观看| 精品影院一区二区久久久| 亚洲丝袜另类动漫二区| 精品对白一区国产伦| 欧美日韩亚洲综合一区 | 亚洲色图视频网| 久久在线免费观看| 91精品国产91热久久久做人人| 91麻豆蜜桃一区二区三区| 成人一区二区三区在线观看| 久久99久久久久| 午夜一区二区三区在线观看| 亚洲美女视频一区| 中文字幕在线不卡一区| 国产片一区二区三区| 精品国产乱码久久久久久牛牛| 欧美体内she精高潮| 欧美午夜视频网站| 日本高清不卡在线观看| 91婷婷韩国欧美一区二区| 成人aa视频在线观看| 黄色精品一二区| 精品制服美女久久| 久久精品久久精品| 一区二区高清免费观看影视大全 | 国产不卡免费视频| 国产乱子轮精品视频| 天天色天天爱天天射综合| 亚洲国产cao| 午夜日韩在线电影| 一区二区不卡在线视频 午夜欧美不卡在| 欧美极品少妇xxxxⅹ高跟鞋| 国产亚洲成aⅴ人片在线观看| 欧美精品一区二区三区在线| 精品少妇一区二区三区日产乱码 | 91精品国产黑色紧身裤美女| 欧美日韩亚洲丝袜制服| 欧美在线看片a免费观看| 日韩视频永久免费| 2014亚洲片线观看视频免费| 久久久久久久久久久99999| 精品伦理精品一区| 国产亚洲欧美一区在线观看| 国产精品免费视频网站| 亚洲卡通欧美制服中文| 最好看的中文字幕久久| 免费观看久久久4p| 国产成人av电影在线播放| 波多野结衣亚洲| 在线免费精品视频| 51精品视频一区二区三区| 久久久久久麻豆| 亚洲日本免费电影| 老司机精品视频在线| 国产999精品久久久久久绿帽| 99国内精品久久| 欧美日韩一级二级三级| 日韩午夜精品视频| 久久久久久久久久久电影| 亚洲美女屁股眼交| 蜜桃av噜噜一区二区三区小说| 国产盗摄一区二区三区| 成人av免费观看| 99国产精品99久久久久久| 性欧美大战久久久久久久久| 国产精品一区二区你懂的| 色呦呦国产精品| 久久精品视频一区二区三区| 依依成人精品视频| 久久精品国产亚洲5555| 91麻豆6部合集magnet| 精品婷婷伊人一区三区三| 久久综合九色综合欧美98| 一区二区三区四区中文字幕| 狠狠网亚洲精品| 色狠狠色狠狠综合| 久久久午夜电影| 亚洲男女一区二区三区| 菠萝蜜视频在线观看一区| 欧美老肥妇做.爰bbww| 中文字幕精品一区 | 欧美人成免费网站| 国产精品久久久久久久久动漫| 日韩主播视频在线| 久久狠狠亚洲综合| 欧美一区二区在线免费观看| 亚洲人午夜精品天堂一二香蕉| 麻豆一区二区99久久久久| 色狠狠一区二区三区香蕉| 国产精品人成在线观看免费 | 国产麻豆91精品| 欧美日韩成人一区| 一区av在线播放| av午夜一区麻豆| 久久影院视频免费| 日本怡春院一区二区| 欧美一区二区三区四区久久|