新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > ARM11-S3C6410 UART

        ARM11-S3C6410 UART

        作者: 時間:2016-11-10 來源:網絡 收藏
        我想串口程序應該是ARM程序中最簡單的了吧。盡管如此,做個記錄吧 。
        具體設置如下:

        本文引用地址:http://www.104case.com/article/201611/317136.htm
        #define ULCON0 (*((volatile unsigned long *)0x7F005000))
        #define UCON0 (*((volatile unsigned long *)0x7F005004))
        #define UFCON0 (*((volatile unsigned long *)0x7F005008))
        #define UMCON0 (*((volatile unsigned long *)0x7F00500C))
        #define UTRSTAT0 (*((volatile unsigned long *)0x7F005010))
        #define UFSTAT0 (*((volatile unsigned long *)0x7F005018))
        #define UTXH0 (*((volatile unsigned char *)0x7F005020))
        #define URXH0 (*((volatile unsigned char *)0x7F005024))
        #define UBRDIV0 (*((volatile unsigned short *)0x7F005028))
        #define UDIVSLOT0 (*((volatile unsigned short *)0x7F00502C))
        #define GPACON (*((volatile unsigned long *)0x7F008000))
        void init_uart(void)
        {
        GPACON &= ~0xff;
        GPACON |= 0x22;
        /* ULCON0 */
        ULCON0 = 0x3; /* 數據位:8, 無較驗, 停止位: 1, 8n1 */
        UCON0 = 0x5; /* 使能UART發送、接收 */
        UFCON0 = 0x01; /* FIFO ENABLE */
        UMCON0 = 0;
        /* 波特率 */
        /* DIV_VAL = (PCLK / (bps x 16 ) ) - 1
        *PCLK = 66.5MHz
        * bps = 115200
        * DIV_VAL = (66500000 / (115200 x 16 ) ) - 1
        * = 35.08
        */
        UBRDIV0 = 35;
        /* x/16 = 0.08
        * x = 1
        */
        UDIVSLOT0 = 0x1;
        }
        char getchar(void)
        {
        while ((UFSTAT0& (1<<6)) == 0 && (UFSTAT0& 0x3f) == 0);
        return URXH0;
        }
        void putchar(char c)
        {
        while ((UFSTAT0 & (1<<14)) );
        UTXH0 = c;
        }

        在主函數中調用上面的串口初始化函數,接收字符串函數和發送字符穿函數,如下,通過鍵盤在串口助手中向串口發送字符,則會有“輸入字符+1”顯示在終端上。

        int main()

        {
        char c;
        init_uart();
        while (1)
        {
        c = getchar();
        putchar(c+1);
        }
        return 0;

        }
        更改主函數與Uart.c函數,實現你想要的功能:

        int main()
        {
        char c;
        char* str = "---hello uart-arm-----rn";
        char* addition ="---addition operation----rn";
        char* of1 = "a. hellorn";
        char* of2 = "b. what is your namern";
        char* of3 = "c. beliefrn";
        char a,b ; char sum;
        char choice;
        init_uart();
        //print str
        c = getchar();
        putchar(c+1);
        putstr(str);
        //addition operation
        putstr(addition);
        putstr(of1);
        putstr(of2);
        putstr(of3);
        while(1){
        choice = getchar();
        if(choice ==a)
        putstr("hellorn");
        else
        if (choice ==b)
        putstr("what is your namern");
        else
        if (choice ==c)
        putstr("beliefrn");
        else
        putstr("no optionrn");
        }}


        上面函數相當于一個簡單的菜單選擇。 輸出如下,以下結果是依次從鍵盤輸入a,b,c,d,e之后的結果


        關鍵詞: ARM11S3C6410UAR

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 鄢陵县| 三原县| 太保市| 海口市| 襄城县| 大安市| 枝江市| 四子王旗| 昭觉县| 宁都县| 津市市| 堆龙德庆县| 中牟县| 鹰潭市| 东安县| 博兴县| 余姚市| 左权县| 通化县| 辽宁省| 平湖市| 容城县| 隆化县| 拜城县| 长葛市| 舒兰市| 周至县| 阜宁县| 台东县| 安福县| 安多县| 虹口区| 仁化县| 花莲县| 靖宇县| 庆云县| 京山县| 萨嘎县| 新宾| 禄劝| 洛扎县|