activiti高亮显示图片_【正点原子FPGA连载】第二十章SD卡读BMP图片HDMI显示实验领航者 ZYNQ 之嵌入式开发指南...
1)實(shí)驗(yàn)平臺(tái):正點(diǎn)原子領(lǐng)航者ZYNQ開發(fā)板
2)平臺(tái)購買地址:https://item.taobao.com/item.htm?&id=606160108761
3)全套實(shí)驗(yàn)源碼+手冊+視頻下載地址:http://www.openedv.com/docs/boards/fpga/zdyz_linhanz.html
4)對正點(diǎn)原子FPGA感興趣的同學(xué)可以加群討論:876744900
5)關(guān)注正點(diǎn)原子公眾號(hào),獲取最新資料
http://weixin.qq.com/r/hEhUTLbEdesKrfIv9x2W (二維碼自動(dòng)識(shí)別)
第二十章SD卡讀BMP圖片HDMI顯示實(shí)驗(yàn)
我們在“SD卡讀BMP圖片LCD顯示實(shí)驗(yàn)”中,成功地將SD卡中的BMP圖片讀出,并將其顯示在了LCD屏上。本章我們將學(xué)習(xí)如何SD卡中的BMP圖片顯示在HDMI顯示器上。
本章包括以下幾個(gè)部分:
2020.1簡介
20.2實(shí)驗(yàn)任務(wù)
20.3硬件設(shè)計(jì)
20.4軟件設(shè)計(jì)
20.5下載驗(yàn)證
20.1簡介
在“SD卡讀BMP圖片LCD顯示實(shí)驗(yàn)”的簡介部分,我們詳細(xì)介紹了BMP圖片的數(shù)據(jù)格式;另外在《領(lǐng)航者FPGA開發(fā)指南》中的“HDMI彩條顯示實(shí)驗(yàn)”一章,我們介紹了HDMI接口。如果大家對這兩部分的內(nèi)容不熟悉的話,可以參考相應(yīng)的章節(jié),此處就不再贅述了。
20.2實(shí)驗(yàn)任務(wù)
本章的實(shí)驗(yàn)任務(wù)是使用領(lǐng)航者ZYNQ開發(fā)板讀取SD卡中存放的BMP格式圖片,分辨率為1920*1080,并將其顯示在HDMI顯示器上。
20.3硬件設(shè)計(jì)
根據(jù)實(shí)驗(yàn)任務(wù)我們可以畫出本次實(shí)驗(yàn)的系統(tǒng)框圖,如下圖所示:
圖 20.3.1 系統(tǒng)框圖
圖 5.3.1與“SD卡讀BMP圖片LCD顯示實(shí)驗(yàn)”中的系統(tǒng)框圖基本相同,只是將驅(qū)動(dòng)LCD顯示的rgb2lcd模塊替換成了本次實(shí)驗(yàn)中的DVI Transmitter,用于驅(qū)動(dòng)HDMI接口;另外還刪除了用于讀取LCD ID信息的AXI GPIO模塊。因此本次實(shí)驗(yàn)的硬件設(shè)計(jì)部分在“SD卡讀BMP圖片LCD顯示實(shí)驗(yàn)”的基礎(chǔ)上稍作修改即可。
首先要?jiǎng)h除《SD卡讀BMP圖片LCD顯示實(shí)驗(yàn)》工程中的rgb to lcd和AXI GPIO兩個(gè)模塊,以及LCD相關(guān)的接口。如圖 20.3.2所示,我們要?jiǎng)h除圖中橙色高亮的兩個(gè)模塊和3個(gè)接口:
圖 20.3.2 刪除LCD相關(guān)模塊
接下來添加DVI Transmitter IP核。該IP核位于工程目錄下的ip_repo文件夾中,名為“DVI_TX”。我們需要將其添加到工程的IP庫中,添加IP核的方法請大家參考“自定義IP核-呼吸燈實(shí)驗(yàn)”。添加完成后,我們要在Block Design中連接DVI Transmitter模塊的接口信號(hào),并引出外部端口,具體的連接方式如圖 20.3.3所示:
圖 20.3.3 添加并連接DVI_Transmitter IP核
至此本次實(shí)驗(yàn)的硬件框圖已經(jīng)搭建好了。需要說明的是,本次實(shí)驗(yàn)的硬件框圖是基于《SD卡讀BMP圖片LCD顯示實(shí)驗(yàn)》搭建的,VDMA的AXI Stream格式數(shù)據(jù)流和Memory Map格式數(shù)據(jù)流的時(shí)鐘頻率設(shè)置的較低,為100Mhz,因此VDMA和DDR3的數(shù)據(jù)交互速率會(huì)受到限制,即支持的HDMI顯示分辨率無法達(dá)到很高,實(shí)測最大能達(dá)到的分辨率為1280x800。
對于LCD屏的顯示實(shí)驗(yàn)來說,達(dá)到1280x800的分辨率已經(jīng)夠用了,但是考慮到目前大多數(shù)的HDMI顯示器支持1080P(1920x1080)的分辨率,我們需要對底層搭建的硬件環(huán)境做修改,才能支持1080P分辨率。考慮到本手冊HDMI顯示相關(guān)的例程不需要1080P分辨率,且大多數(shù)HDMI顯示例程是基于LCD例程修改而來,如果每次都為了兼容1080P分辨率而修改底層硬件環(huán)境比較麻煩,因此本手冊僅本章實(shí)驗(yàn)的底層硬件環(huán)境支持1080P分辨率,其它HDMI實(shí)驗(yàn)大家如果有1080P分辨率的顯示需求,可以按照本章實(shí)驗(yàn)進(jìn)行修改。
底層硬件修改的方法是將VDMA的AXI Stream格式數(shù)據(jù)流和Memory Map格式數(shù)據(jù)流的時(shí)鐘頻率改為150Mhz,而VDMA的配置端口不需要太高的頻率,可以仍然保持100Mhz。
首先雙擊打開“ZYNQ7 Processing System”框圖,點(diǎn)擊“Clock Configuration”,在“PL Fabric Clocks”一欄下勾選FCLK_CLK1,時(shí)鐘頻率設(shè)置為150Mhz。設(shè)置完成后,點(diǎn)擊“OK”按鈕,如下圖所示:
圖 20.3.4 添加“FCLK_CLK1”時(shí)鐘
修改完成后,可以發(fā)現(xiàn)“ZYNQ7 Processing System”框圖多了一個(gè)FCLK_CLK1端口。接下來刪除FCLK_CLK0連線,首先選中FCLK_CLK0的連線使其高亮,然后按下鍵盤的“Delete”進(jìn)行刪除,如圖 20.3.5和圖 20.3.6所示:
圖 20.3.5 選中FCLK_CLK0連線
圖 20.3.6 刪除FCLK_CLK0連線
然后刪除框圖中的AXI Interconnect IP核(ps7_0_axi_periph)、AXI SmartConnect IP核(axi_smc)和Processor System Reset IP核(rst_ps7_0_100M),框圖刪除后,如下圖所示。
圖 20.3.7 刪除IP核
接下來連接FCLK_CLK1的時(shí)鐘,如下圖所示。
然后點(diǎn)擊“Run Connnection Automation”,下面列出了會(huì)自動(dòng)連接的模塊及其接口,勾選“All Automation”,然后點(diǎn)擊“OK”按鈕。
此時(shí)系統(tǒng)會(huì)自動(dòng)生成 AXI Interconnect 和 AXI Smartconnect。AXI Interconnect(ps7_0_axi_periph)用于橋接ZYNQ處理器M_AXI_GP0總線和外部低速外設(shè)的AXI_LITE總線;AXI Smartconnect(axi_smc)用于連接ZYNQ處理器的HP0接口和VDMA的M_AXI_MM2S總線。另外系統(tǒng)也自動(dòng)生成了兩個(gè) reset模塊(rst_ps7_0_100M和rst_ps7_0_150M),用于復(fù)位總線上的外設(shè)。
整體系統(tǒng)架構(gòu)圖如下:
圖 20.3.8 整體系統(tǒng)架構(gòu)連接圖
block design修改完成后保存,然后重新Generate Output Products和“Create HDL Wrapper”。接下來我們還要修改約束文件,為HDMI接口分配引腳。打開工程中名為“system_wrapper.xdc”的約束文件,并將原先LCD相關(guān)的約束語句刪除,替換成以下內(nèi)容:
set_property -dict {PACKAGE_PIN G17 IOSTANDARD LVCMOS33} [get_ports tmds_oen_0]
set_property PACKAGE_PIN L16 [get_ports {TMDS_0_tmds_data_p[2]}]
set_property PACKAGE_PIN M14 [get_ports {TMDS_0_tmds_data_p[1]}]
set_property PACKAGE_PIN K19 [get_ports {TMDS_0_tmds_data_p[0]}]
set_property PACKAGE_PIN L14 [get_ports TMDS_0_tmds_clk_p]
保存約束文件,然后選擇“Generate Bitstream”重新生成BIT文件。
20.4軟件設(shè)計(jì)
本次實(shí)驗(yàn)的軟件工程與“SD卡讀BMP圖片LCD顯示實(shí)驗(yàn)”略有不同,如下圖所示:
圖 20.4.1 軟件工程
圖 20.4.1左側(cè)紅色方框中的文件夾名為“display_ctrl_hdmi”,它在前面實(shí)驗(yàn)中“display_ctrl”的基礎(chǔ)上刪除了GPIO相關(guān)的函數(shù)及變量。在本次實(shí)驗(yàn)中刪除了AXI GPIO模塊,因此要?jiǎng)h除這些函數(shù)和變量,否則會(huì)報(bào)錯(cuò)。
本次實(shí)驗(yàn)的代碼如下所示:
可以看出,本次實(shí)驗(yàn)的程序與“SD卡讀BMP圖片LCD顯示實(shí)驗(yàn)”非常相似,只是刪除了讀取LCD ID相關(guān)的內(nèi)容。有關(guān)這部分代碼的詳細(xì)介紹請大家參考“SD卡讀BMP圖片LCD顯示實(shí)驗(yàn)”,此處不再贅述。需要注意的是,本次實(shí)驗(yàn)在SD卡中放置的圖片分辨率為1920*1080,因此在程序的第35行,視頻參數(shù)設(shè)置成VMODE_1920x1080。
20.5下載驗(yàn)證
首先我們將下載器與領(lǐng)航者底板上的JTAG接口連接,下載器另外一端與電腦連接。然后使用Mini USB連接線將開發(fā)板左側(cè)的USB_UART接口與電腦連接,用于串口通信。
我們在工程目錄下新建了一個(gè)名為“風(fēng)景圖片”的文件夾,把其中名為“fengjing.bmp”的圖片拷貝到SD卡的根目錄下,然后將SD卡插入領(lǐng)航者底板背面的卡槽中。另外還需要使用HDMI連接線將HDMI顯示器連接到領(lǐng)航者底板上的HDMI接口。最后連接開發(fā)板的電源,并打開電源開關(guān)。
在SDK軟件下方的SDK Terminal窗口中點(diǎn)擊右上角的加號(hào)來設(shè)置并連接串口。然后下載本次實(shí)驗(yàn)硬件設(shè)計(jì)過程中所生成的BIT文件,來對PL進(jìn)行配置。最后下載軟件程序,下載完成后,在下方的SDK Terminal中可以看到應(yīng)用程序打印的信息,如下圖所示:
圖 20.5.1 串口打印信息
圖 20.5.1中打印出了BMP文件的文件頭和信息頭等信息,同時(shí)從數(shù)據(jù)中計(jì)算出BMP圖片的寬度為1920,高度為1080,與我們存入SD卡中的BMP圖片一致。
同時(shí)HDMI顯示器上顯示存入SD卡中的示例圖片,如圖 20.5.2所示,說明本次實(shí)驗(yàn)在領(lǐng)航者ZYNQ開發(fā)板上面下載驗(yàn)證成功。
圖 20.5.2 下載驗(yàn)證
總結(jié)
以上是生活随笔為你收集整理的activiti高亮显示图片_【正点原子FPGA连载】第二十章SD卡读BMP图片HDMI显示实验领航者 ZYNQ 之嵌入式开发指南...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 100个网络基础知识,赶紧收藏吧!
- 下一篇: JavaWeb播放视频实现断点续传、分片
