久久ER99热精品一区二区-久久精品99国产精品日本-久久精品免费一区二区三区-久久综合九色综合欧美狠狠

新聞中心

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://cqxgywz.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()函數中;



評論


技術專區

關閉