新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > s3c6410 s3c2440串口發送接收數據的實現(輪詢)及相關寄存器

        s3c6410 s3c2440串口發送接收數據的實現(輪詢)及相關寄存器

        作者: 時間:2016-11-11 來源:網絡 收藏
        1 6410與串口相關寄存器

        一 需要設置的寄存器(其實進入uboot后,串口已經設置好了,直接發送數據就行了,)
        1)模式
        UCON (輪詢,中斷,DMA等)
        2)相關參數
        ULCON0 定義了串口數據的幀格式,數據位長度,奇偶校驗位,停止位(8-N-1)
        BRDIV 定義了波特率的計算公式所得結果的整數部分
        UDIVSLOT0 定義了波特率的計算公式所得結果的小數部分
        3)高級選項(串口的發送接收緩沖的大小(fifo)默認是1B,可改成64B
        二 發送接收數據
        相關的寄存器
        UTXH0 UART channel 0 transmit buffer register
        URXH0UART channel 0 receive buffer register(這兩個寄存器和51的SBUF相似)

        本文引用地址:http://www.104case.com/article/201611/316679.htm

        UTRSTAT0 UART channel 0 Tx/Rx status register
        [2:0]中
        [2] 如果發送buffer空且發送移位器空時置1,反之置0
        [1] 如果發送buffer空則置1;
        [0] 如果接收buffer接收到有效數據,則置1,反之置0;
        發送時看2位,接收時看0位;
        2410下的發送接收函數(6410 和 2440 的串口實現基本一樣,改改地址就行,個別的寄存器值的計算不同)

        void uart_putchar(unsigned char k)
        {
        while(!(UTRSTAT0&0x04)); //如果UTRSTAT 2位是0,則一直循環,直到為1(transmit buffer is empty,can transmit data)


        UTXH0 = k;
        }
        unsigned char uart_getchar(void)
        {
        unsigned char c;
        while(!(UTRSTAT0&1<<0)); // 如果UTRSTAT 0位是0(表示沒有有效數據),則一直循環,
        c = URXH0;
        return c;
        }
        這樣就可以發送一字節和接收一字節了,可以在寫自己的gets()puts()函數;
        當然串口能工作是因為 uboot 已經做了很多工作(串口的初始化);現在可以讀出響應的寄存器值(都是正確的值,可以工作),
        寫到自己的uart_init()函數中;



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 灵石县| 鄱阳县| 柳林县| 镇雄县| 沅江市| 永安市| 县级市| 榆树市| 蓝山县| 常德市| 紫阳县| 彭山县| 囊谦县| 左云县| 泰顺县| 木兰县| 偏关县| 读书| 大埔区| 南郑县| 南澳县| 桐城市| 龙江县| 新源县| 皋兰县| 晴隆县| 诸暨市| 库车县| 阜南县| 同心县| 昌乐县| 桑日县| 宁河县| 达州市| 孟村| 耿马| 阿鲁科尔沁旗| 泗水县| 永德县| 肇源县| 安吉县|