sam3s中的uart串列埠是乙個兩線非同步收發器。這個串列埠能用來通訊或者跟蹤。有兩個dma通道與uart串列埠關聯,可通過使用dma處理串列埠傳輸以節省cpu時間。
sam3s4c中有兩個uart。與外設引腳的對應關係如下:
板子上使用的是uart0,及pa9和pa10引腳。
sam3s的uart結構框圖
串列埠初始化,收發資料 的步驟如下:
1、配置相應io口的引腳(設定io時鐘及引腳工作模式)
2、開啟uart時鐘
3、復位並停止uart
4、設定uart功能(奇偶校驗uart_mr、波特率uart_brgr、dma uart_ptcr、收發使能uart_cr 等)
5、收發資料 uart_thr uart_rhr
串列埠的初始化程式如下:
//引腳巨集定義,串列埠0收發引腳分別對因pa9 pa10
#define pins_uart
#define console_pins
//使用的串列埠的巨集定義,使用uart0
#define console_usart uart0
extern void uart_configure( uint32_t baudrate, uint32_t masterclock)
串列埠傳送乙個字元:
extern void uart_putchar( uint8_t c )
uart *puart=console_usart ;
if ( !_ucisconsoleinitialized )//每次傳送資料都先判斷一下串列埠是否已經被初始化了
uart_configure(console_baudrate, board_mck);
/* wait for the transmitter to be ready */
while ( (puart->uart_sr & uart_sr_txempty) == 0 ) ;//等待串列埠狀態暫存器中,傳送暫存器為空的標誌
/* send character */
puart->uart_thr=c ; //傳送狀態為空時,即可將字元丟到傳送暫存器中。
串列埠接收乙個字元:
extern uint32_t uart_getchar( void )
uart *puart=console_usart ;
if ( !_ucisconsoleinitialized ) //每次接收資料都要判斷下串列埠是否被初始化了
uart_configure(console_baudrate, board_mck);
while ( (puart->uart_sr & uart_sr_rxrdy) == 0 ) ; //等待串列埠狀態暫存器中的rxrdy置位,這個為表示串列埠完整地接收了乙個資料
return puart->uart_rhr ; //讀取接收到的資料並返回。同時硬體自動復位rxrdy位。
之後就可以使用了,我在主函式中只用了一句來驗證串列埠的狀態:
uart_putchar(uart_getchar());
即,將電腦端來的資料發回去。驗證下,完全正常了。
當然,這裡使用的是查詢方式接收資料。至於中斷方式接收資料,在學會了使用中斷之後會補上來的。
S3C2440 UART串列埠驅動
通用非同步接收器和傳送器 universal asynchronous receiver and transmitter 簡稱uart。通常是嵌入式裝置中預設都會配置的通訊介面。這是因為,很多嵌入式裝置沒有顯示屏,無法獲得嵌入式裝置實時資料資訊,通過uart串列埠和超級終端相連,列印嵌入式裝置輸出資...
s3c2440裸機串列埠UART
串列埠收發資料 115200,8n1。每一位的時間是t 1 115200。傳輸乙個位元組需要10位 包括起始位1位,資料位8位,停止位1位,需要的時間是t 10 115200。每秒傳輸的的位元組數 1 t 115200 10 11520byte。回環模式 一發出資料就立刻收到,用於測試。main.c...
關於AT91SAM7S64的PIOA中斷觸發問題!
這是實驗 void irq key isr handler void else if 1 16 at91c pioa pdsr else if 1 20 at91c pioa pdsr else if 1 23 at91c pioa pdsr at91c aic eoicr 1 void keyir...