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