新聞中心

        S3C2440-UART

        作者: 時間:2016-12-02 來源:網絡 收藏
        S3C2440通用異步接收器和發送器(UART)提供了3個獨立的異步串行IO端口,每個端口可以在中斷模式或DMA模式下操作。換言之,UART可以生成一個中斷或DMA請求進行CPU和UART之間數據的傳輸。如果一個外部設備提供UEXTLCK給UART,UART可以在更高的速度下工作。每個UART通道對于接受器和發送器包括2個64字節的FIFO和移位器。數據拷貝到FIFO然后在傳送之前拷貝到發送移位器。數據通過發送引腳(TxDn)被發出。同時,接受數據通過接受數據引腳(RxDn)移入,然后從移位寄存器拷貝到FIFO。波特率由時鐘源(PCLK,FCLK/n,UEXTCLK)16分頻和UART波特率除數寄存器UBRDIVn指定的16位除數決定。波特率除數因子UBRDIVn的計算公式為,UBRDIVn=(int)(UART clock)/(buad rate * 16)) - 1。

        這個程序可以通過串口調試助手發送一個字符,然后在接受的地方顯示出來。

        #define rULCON0 (*(volatile unsigned*) 0x50000000)
        #define rUCON0 (*(volatile unsigned*) 0x50000004)
        #define rUTRSTAT0 (*(volatile unsigned*) 0x50000010)
        #define rUTXH0 (*(volatile unsigned*) 0x50000020)
        #define rURXH0 (*(volatile unsigned*) 0x50000024)
        #define rUBRDIV0 (*(volatile unsigned*) 0x50000028)
        int Main(){
        char buf;
        rULCON0 = 0xfff00;
        rULCON0 |= 0x3;
        rUCON0 = 0x0805;
        rUBRDIV0 = 26;
        while(1){
        if(rUTRSTAT0&0x1){
        buf = rURXH0;
        while(!(rUTRSTAT0&0x04));
        rUTXH0 = buf;
        }
        }
        return 0;
        }


        這是通過向串口發送數據,根據發送的數據控制led哪個燈亮的程序。注意事項是:我使用的是串口調試助手,發送數據前首先要設置波特率為115200,否則沒有任何顯示。void Delay(unsigned int x);這句話要在Main函數內聲明,在外面聲明就不好使,不知為什么。


        #define GPFCON (*(volatile unsigned*) 0x56000050)
        #define GPFDAT (*(volatile unsigned*) 0x56000054)
        #define GPFUP (*(volatile unsigned*) 0x56000058)
        #define ULCON0 (*(volatile unsigned*) 0x50000000)
        #define UCON0 (*(volatile unsigned*) 0x50000004)
        #define UTRSTAT0 (*(volatile unsigned*) 0x50000010)
        #define UTXH0 (*(volatile unsigned*) 0x50000020)
        #define URXH0 (*(volatile unsigned*) 0x50000024)
        #define UBRDIV0 (*(volatile unsigned*) 0x50000028)
        int Main(){
        void Delay(unsigned int x);
        char buf;
        GPFCON &= 0xc03f;
        GPFCON |= 0x1540;
        GPFUP &= 0x87;
        ULCON0 |= 0x3;
        UCON0 &= 0x0800;
        UCON0 |= 0x05;
        while(1){
        if(UTRSTAT0 & 0x1){
        buf = URXH0;
        while(!(UTRSTAT0 & 0x4));
        UTXH0 = buf;
        switch(buf){
        case 0x11:
        GPFDAT = 0xf7;
        Delay(100);
        break;
        case 0x22:
        GPFDAT = 0xef;
        Delay(100);
        break;
        case 0x33:
        GPFDAT = 0xdf;
        Delay(100);
        break;
        case 0x44:
        GPFDAT = 0xbf;
        Delay(100);
        break;
        }
        }
        }
        }
        void Delay(unsigned int x){
        int i,j,k;
        for(i = 0; i <= x; i++)
        for(j = 0; j <= 0xff; j++)
        for(k = 0; k <= 0xff; k++)
        ;
        }


        關鍵詞: S3C2440UART波特

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 青神县| 昌乐县| 尚志市| 临澧县| 孙吴县| 郸城县| 黄山市| 筠连县| 彝良县| 张家川| 玛多县| 偏关县| 西丰县| 松原市| 嵊州市| 牙克石市| 万盛区| 晋宁县| 苍溪县| 定南县| 杭锦后旗| 蕲春县| 石城县| 汪清县| 略阳县| 铅山县| 文山县| 灵璧县| 留坝县| 突泉县| 玉林市| 吴忠市| 农安县| 冷水江市| 北京市| 浮山县| 祁门县| 郧西县| 平罗县| 桃园县| 柏乡县|