UART(串口)收發(fā)模塊設(shè)計(jì)- 02
整體架構(gòu)回顧
整體結(jié)構(gòu)如下圖,整個(gè)UART有兩個(gè)大模塊,一個(gè)接收模塊,一個(gè)發(fā)送模塊。具體大家可以回顧文章《UART(串口)收發(fā)模塊設(shè)計(jì)- 01》。
波特率時(shí)鐘產(chǎn)生模塊
收發(fā)模塊里面都有一個(gè)波特率時(shí)鐘產(chǎn)生模塊BuadRate_set,用于將系統(tǒng)時(shí)鐘clk進(jìn)行分頻,得到波特率時(shí)鐘Buad_clk,以控制數(shù)據(jù)的收發(fā)。
端口如下,通過CLK_Period指定當(dāng)前的clk時(shí)鐘頻率,比如50M,則為50000000。Buad_Rate為設(shè)定的波特率。
主要設(shè)計(jì)代碼如下,通過localparam DIV_PEREM指定分頻計(jì)數(shù)值。分頻計(jì)數(shù)器為cnt,當(dāng)enable為高時(shí),cnt開始循環(huán)的從0遞增到DIV_PEREM。Buad_clk在每次cnt==DIV_PEREM的時(shí)候就翻轉(zhuǎn)一次,從而得到clk時(shí)鐘的CLK_Period/Buad_Rate倍分頻。
數(shù)據(jù)接收模塊
狀態(tài)機(jī):數(shù)據(jù)接收模塊通過一個(gè)狀態(tài)機(jī)來控制。狀態(tài)機(jī)的跳轉(zhuǎn)由波特率時(shí)鐘下降沿控制。波特率時(shí)鐘Buad_clk起始為高電平。
IDLE:其中IDLE為空閑狀態(tài),只有當(dāng)檢測(cè)到起始位的時(shí)候,才進(jìn)入GET_DATA。
GET_DATA:在GET_DATA狀態(tài)下獲得8位數(shù)據(jù)位數(shù)據(jù),通過一個(gè)計(jì)數(shù)器來計(jì)數(shù)接收到的數(shù)據(jù)位數(shù)。當(dāng)cnt為‘d7時(shí)表明接收到了8位數(shù)據(jù),便跳到最后一個(gè)狀態(tài)END_BIT。
END_BIT:等待停止位的到來,然后回到IDLE狀態(tài),完成數(shù)據(jù)的接收。
起始位的檢測(cè):其實(shí)就是在IDLE狀態(tài)下,檢測(cè)uart_rx的下降沿,如下代碼所示。將uart_rx通過一個(gè)6bit的移位寄存器get_start_bit(uart_rx從低bit往高bit移動(dòng)),那么當(dāng)get_start_bit的,高3bit都為1,低3bit為0時(shí),表明uart_rx出現(xiàn)了下降沿,此時(shí)將start拉高,以便啟動(dòng)狀態(tài)機(jī)和波特率時(shí)鐘產(chǎn)生模塊BuadRate_set。
數(shù)據(jù)的接收:在GET_DATA狀態(tài)下,由波特率時(shí)鐘的下降沿控制,將uart_rx往一個(gè)8bit的移位寄存器送,uart_rx從高bit向低bit流動(dòng)(由于串口發(fā)送是先發(fā)低位數(shù)據(jù))。
數(shù)據(jù)發(fā)送模塊
狀態(tài)機(jī):數(shù)據(jù)接收模塊通過一個(gè)狀態(tài)機(jī)來控制。狀態(tài)機(jī)的跳轉(zhuǎn)由clk時(shí)鐘上升沿控制。
IDLE:IDLE為空閑狀態(tài),當(dāng)檢測(cè)到tx_en(發(fā)送使能信號(hào))為高,則進(jìn)入EN_TX模塊。
EN_TX:在EN_TX模塊發(fā)送10bit數(shù)據(jù)(起始位,數(shù)據(jù)位,停止位)。數(shù)據(jù)的發(fā)送由波特率時(shí)鐘Buad_clk上升沿控制。如下代碼,在cnt為0時(shí)將tx_data(待發(fā)送的數(shù)據(jù)位)與起始位(0),裝載到data_to_send中,然后對(duì)data_to_send做從高位向低位的移位操作,高位填1。將data_to_send的最低位接uart_tx,發(fā)送出去。利用cnt計(jì)數(shù)發(fā)送的位數(shù)。
上板實(shí)測(cè)
這里設(shè)計(jì)了一個(gè)實(shí)測(cè)設(shè)計(jì)(UART_TEST),功能如下:
上電復(fù)位后,通過串口向上位機(jī)發(fā)送數(shù)據(jù)8'h34,然后只要收到上位機(jī)發(fā)送過來的數(shù)據(jù),就將其返回給上位機(jī)。
大家可以把源碼下下來,自己新建工程,結(jié)合開發(fā)板上板測(cè)試一下。
文件里面提供了一個(gè)PC端串口調(diào)試上位機(jī)SSCOM。大家在上板測(cè)試時(shí),需要一個(gè)USB轉(zhuǎn)串口器(有的開發(fā)板上集成了這個(gè)),使得板子的串口可以通過USB端口與PC上位機(jī)通信。
-
寄存器
+關(guān)注
關(guān)注
31文章
5363瀏覽量
121006 -
計(jì)數(shù)器
+關(guān)注
關(guān)注
32文章
2261瀏覽量
94906 -
時(shí)鐘
+關(guān)注
關(guān)注
11文章
1746瀏覽量
131719
原文標(biāo)題:UART(串口)收發(fā)模塊設(shè)計(jì)- 02
文章出處:【微信號(hào):LF-FPGA,微信公眾號(hào):小魚FPGA】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論