s3c2440之UART學習筆記

2021-09-01 19:36:45 字數 2955 閱讀 1571

uart(universal asynchronous receiver/transmitter,通用非同步接收/傳送裝置)用於非同步通訊,可以實現全雙工傳送和接收。它不僅可以實現不同嵌入式系統之間的通訊,還可以實現與pc之間的通訊。

資料傳輸流程如下:

(1)平時資料線處於空閒狀態(1狀態);

(2)當要傳送資料時,uart改變txd資料線的狀態(變為0狀態)並維持1位的時間,這樣接收方檢測到開始位後,在等待1.5位的時間就開始一位一位地檢測資料線的狀態得到所傳輸的資料;

(3)uart一幀中可以有5、6、7或8位的資料,傳送方一位一位地改變資料線的狀態將他們傳送出去,首先傳送最低位;

(4)如果使用校驗功能,uart在傳送完資料後,還要傳送1位校驗位。有兩種校驗方法:奇校驗、偶校驗——資料位連同校驗位中,1的資料等於奇數或偶數;

(5)最後,傳送停止位,資料線恢復到空閒狀態(1狀態)。停止位的長度有3種:1位、1.5位、2位。

下圖演示了uart使用7個資料位、偶校驗、2個停止位的格式傳輸字元『a』(二進位制值為0b1000001)時,ttl/com邏輯電平對應的波形。

s3c2440提供了三個uart埠,它們都可以通過查詢、中斷和dma方式傳輸資料,而且每個uart都分別有乙個64個位元組的接收fifo和乙個64個位元組的傳送fifo。如下圖所示:每個uart包含乙個波特率發生器、傳送器、接收器和乙個控制單元。波特率發生器可以由pclk、fclk/n或uextclk(外部輸入時鐘)時鐘驅動。uart通過使用系統時鐘可以支援最高115.2kbps的位元率。如果是使用外部器件提供uextclk的uart,則uart可以執行在更高的速度。傳送器和接收器各包含乙個64位元組的fifo和資料移位器。要傳送資料時,先將資料寫入到fifo接著在傳送前複製到傳送移位器中,隨後將資料從傳送資料引腳(txdn)移出;接收資料時,從接收資料引腳(rxdn)移入接收移位器,接著從移位器複製到fifo。

1、配置串列埠引腳(gphcon)及內部上拉(gphup)

注:在串列埠開始前的空閒狀態處於高電平,開始位為低電平,需要進行內部上拉保證空閒狀態為高電平。

2、設定波特率及選擇時鐘源

3、設定資料格式

4、程式

uart.h

1 #ifndef     _uart_h                // 如果某個檔案第一次包含這個標頭檔案,_uart_h這個巨集沒有定義時

2 #define _uart_h // 定義_uart_h這個巨集

3 4 void uart0_init(void);

5 int putchar(int c);

6 int getchar(void);

7 int puts(const char *s);

8 9 #endif

uart.c

#include "s3c2440_soc.h"

/* 115200,8n1 */

void uart0_init()

int putchar(int c)

int getchar(void)

int puts(const char *s)

}

main.c

1 #include "s3c2440_soc.h"

2 #include "uart.h"

3 int main(void)

4 14 if (c == '\n')

15

18 putchar(c); // 輸出得到的字元(串 )到pc,pc螢幕會顯示串列埠傳過來的字元(串 )

19 }

20 return 0;

21 }

makefile

all:

arm-linux-gcc -c -o led.o led.c

arm-linux-gcc -c -o uart.o uart.c

arm-linux-gcc -c -o main.o main.c

arm-linux-gcc -c -o start.o start.s

arm-linux-ld -ttext 0 start.o led.o uart.o main.o -o uart.elf

arm-linux-objcopy -o binary -s uart.elf uart.bin

arm-linux-objdump -d uart.elf > uart.dis

clean:

rm *.bin *.o *.elf *.dis

部分參考的部落格

本文章是基於韋東山jz2440開發版的學習筆記,日後會不斷更新與完善。

s3c2440裸機串列埠UART

串列埠收發資料 115200,8n1。每一位的時間是t 1 115200。傳輸乙個位元組需要10位 包括起始位1位,資料位8位,停止位1位,需要的時間是t 10 115200。每秒傳輸的的位元組數 1 t 115200 10 11520byte。回環模式 一發出資料就立刻收到,用於測試。main.c...

基於S3C2440的UART傳輸小結

這裡簡單地介紹一下通過暫存器來控制s3c2440的uart傳輸。檢視s3c2440的晶元手冊可以發現uart有著傳送和接收的快取區,在快取區有資料後其便乙個位元組乙個位元組地將資料傳輸到對應埠處。這裡介紹其中使用到的幾個暫存器。ulconx 用於設定資料的資料位 校驗位 停止位之類的資訊。uconx...

求教 s3c2440問題

趙老師您好,我把您的程式新增到我的程式中去了,下面是主要 1 main函式 int main void a a b rgpbdat liushui delay 20 liushui liushui 0xffe 2 pwm初始化 void pwm init void 3 定時器中斷 static vo...