分享一個蠻好的鏈接:https://blog.csdn.net/wordwarwordwar/article/details/73662379
今天在看的資料是S家的DW_apb_uart的官方文檔。該uart IP是掛在APB總線上面,CPU通過APB總線對uart進行訪問和數據讀寫操作。
結構如下:
PS: sir_in/out是在SIR_MODE Enable時有效,用在irDA紅外功能上。(紅外功能將UART的NRZ串行比特率調制為脈沖形式)
主要流程是:
1.CPU通過APB總線config UART內部寄存器(register block),包括中斷使能,charactor位寬,RX/TX FIFO 門限,同步時鍾配置等等
2.數據讀寫操作(implement with FIFO)(CPU Master):
- 讀:sin -> serial receiver -> sync -> FIFO -> register -> APB
- 寫:APB -> register -> FIFO -> sync -> serial transmitter -> sout
其中FIFO作為buffer,FIFO余量要與APB一次burst WR/RD操作的大小相配合。
UART串行數據格式:
上圖的sync時鍾為baudclk,其中16 baudclk 對應 1bit data。
其中parity是奇偶校驗位
波特率(baudout)由sclk和Divisor Latch Register決定。
UART可以有一個系統時鍾(pclk)或者兩個系統時鍾(pclk,sclk)
時鍾的計算方式看不懂= =略過
DMA:支撐兩種DMA方式,通過dma_tx_req_n和dma_rx_req_n來做DMA讀寫請求
mode0:支撐單次DMA數據傳輸 mode1:支撐multi-DMA數據傳輸
cts_n和rts_n分別表示寫ready和讀ready。在auto-mode下由TX/RX fifo water level決定;在關閉audo-mode的時候由usr通過Cfg register的方式調節。(optional)