基於正點原子開拓者fpga , 進行串列埠的除錯。發現與微控制器相比較,微控制器的庫函式開發, 一條語句解決的事情, fpga 可能要寫一二百行。廢話少說,記錄一些容易被忽視的點。
串列埠的**分為三部分,分別是串列埠的傳送,串列埠的接收,以及頂層的檔案。
串列埠的傳送部分易錯點:1:串列埠的傳送部分的訊號使能端使用的電平是高電平。 en_flag ,uart_send_d0, uart_send_d1;
2:串列埠的傳送資料要儲存在資料暫存器中,同時判斷tx_flag ,tx_flag 的變化依據
if(clk_cnt==bps_cnt/2&&tx_cnt==4'd9)
3: 關於系統的時鐘計數clk_cnt,位元組的計數tx_cnt,注意:此處的判斷條件是:
if(tx_flag)
if(clk_cnt4:串列埠資料傳送的核心階段: 初始化條件:rx_flag,
uart_send_d1 ,初始化的部分是高電平。case 中的tx_cnt 共包含10個數值,第乙個數值是低電平,最後乙個數值是高電平。 將tx_data(暫存器的數值傳遞到)uart_send_d1。
1: 按照串列埠的通訊協議,首先要做的start_flag 是低電平。
2: 按照start_flag ,獲取rx_flag, 獲取的方式
if(rx_cnt==bps_cnt/2&&rx_cnt==4'd9)
與串列埠的傳送階段不同的是:串列埠接受階段的標誌位rx_flag 形成的同時, 不需要將資料存到暫存器
3: 對系統計數clk_cnt 和 rx_cnt 進行計數.判斷 條件是if( rx_flag)
4: 接收到的資料,應該先儲存到暫存器去rxdata, 賦值語句:
rxdata[i]<=uart_recv_d1;
5: 傳送反饋訊號,uart_done,同時將資料 uart_data<=rxdata; 注意uart_done 最後形成的判決條件是if(rx_flag) FPGA 串列埠通訊協議
fpga 串列埠通訊協議 波特率 波特率就是串列埠的通訊速率,常見的波特率有12000bps 4800bps 9600bps 115200bps 256000bps 500000bps,這裡波特率的意思是每秒可以傳輸bit的個數,這裡的5207 500000000 9600 傳遞乙個位元組需要的時間...
FPGA視角 低速串列埠 UART
uart,只有一根資料通訊線,沒有伴隨時鐘線,屬於非同步通訊。這類介面的衍生諸如 rs232 rs422 rs485 spi等。資料互動時,一般做一收一發,通過固定頻率的高低電平的變換,傳遞資料。這裡只說明其邏輯特性,硬體特性不做說明。用於描述uart的通訊速率,單位bps,以最常見的9600bps...
Linux串列埠除錯
在第一次除錯linux串列埠驅動的時候,一定要保證與linux串列埠通訊的器件是沒有問題可以使用的,然後我們再進行串列埠操作的學習,否則也許可能碰到問 題的時候不知如何處理了。好了,在保證硬體已經沒有問題的情況下,我們開始學習串列埠驅動模組的使用。pc上的串列埠不比嵌入式,你可以在了解了暫存器之後操...