一. 簡介
這是FPGA之旅設計的第十例啦,在上一例中,已經成功驅動了OLED屏幕,本例將結合上一例,以及第四例多bytes串口通信做一個有趣的例程。
簡單來說,就是利用Qt編寫上位機,通過串口與FPGA進行通信,然后FPGA將接收到的數據,通過IIC接口發送給OLED,就這么一個流程。
二. QT上位機
大家可能對QT部分不感興趣,也不熟悉,這里就只對上位機的功能進行說明,實現過程就不敘述了,想了解的可以點個贊,人多的話,就專門介紹一下。
上位機目前一共只實現了兩個功能,一個是添加文字,另外一個是添加圓。添加過后,會在OLED預覽區域中進行顯示。等編輯好之后,就可以點擊執行,這時候,上位機會解析這部分的數據,然后通過串口發送給FPGA,接下來的就是FPGA里面的處理了。
上位機可以更加完善。例如字體的大小可調,字體可選,圓的線寬可調,像其他圖形矩形,橢圓,線等等,都是可以的。也可以擴展功能,如添加圖片等等。上位機的介紹就到這里。
三. FPGA部分實現
(一). 串口部分
在第四例,多byte串口接收模塊中,默認為每次接收到三個byte就使能一次。剛好這里發送給OLED的數據也是三個byte,就對應上了,不需要修改任何程序,直接在top模塊里面例化即可。
UART_MulRX UART_MulRXHP(
.sys_clk (sys_clk), /*系統時鐘 50M*/
.rst_n (rst_n), /*復位信號*/
.uart_rxs_done (uart_rxs_done), /*串口接收完成*/
.odats (uart_rxs_data), /*接收數據*/
.uartrx (UART_RX) /*uart rx信號線*/
);
二
OLED部分
在上一例中,程序對OLED進行初始化之后,就進入了空閑態,在空閑態的時候,是沒有任何處理的。但在本例中,需要對串口接收到的數據進行處理,通過IIC發送給OLED,這部分也很簡單,代碼如下。
module OLED_SelData(
input sys_clk,
input rst_n,
input init_req,
input[23:0] init_data,
input uart_req,
input[23:0] uart_data,
output IICWriteReq,
output[23:0] IICWriteData
);
reg IICWriteReqReg;
reg[23:0] IICWriteDataReg;
assign IICWriteReq = init_req | uart_req;
assign IICWriteData = (init_req == 1'b1) ? init_data : uart_data;
endmodule
這個例程,就是將前面的串口多byte串口通信和這個結和起來了,設計難點在上位機的編寫,對上位機感興趣的可以多了解一下,不感興趣的可以參考一下,例如說,將IIC模塊上包一個串口模塊,就可以將IIC接口變為串口了,就可以通過串口來配置OLED了。效果如下。
更多信息可以來這里獲取==>>電子技術應用-AET<<
電子技術應用專欄作家 FPGA之旅
原文鏈接:https://mp.weixin.qq.com/s/_6IMXK_hM0udLnciTAc75A