ZedBoard學習手記(三)為自定義外設編寫裸奔控制軟件_第1頁
ZedBoard學習手記(三)為自定義外設編寫裸奔控制軟件_第2頁
ZedBoard學習手記(三)為自定義外設編寫裸奔控制軟件_第3頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

ZedBoard學習手記(三)為自定義外設編寫裸奔控制軟件由于Xilinx已經為我們做了大部分的鋪墊工作,因此裸奔控制外設這一步就顯得十分簡單了,如果不用Linux和圖形界面顯示,大概我的作品早早的就完成了吧。上一次我們已經成功生成了BitStream文件,下面繼續(xù)上次的操作,打開PlanAhead工程,選擇ExportHardwareforSDK,如下圖:在彈出的窗口中選上LaunchSDK,OK以后進入SDK界面。

SDK界面下編寫裸奔軟件的方法在ZedBoard_CTT文檔中已經悉數介紹了,這里和官方文檔中的唯一差異就是需要添加控制AXI總線設備的底層代碼。首先新建一個C工程。工程模板選擇HelloWorld,點擊Next。

BPS部分默認即可,點Finish完成。

之后添加我們自己建立的my_gpio外設的控制代碼。不會控制AXI總線設備?沒關系,由于之前在創(chuàng)建外設的時候勾選了生成driver的配置項,Xilinx已經自動生成了裸奔的控制代碼。代碼位于XPS工程的文件目錄下,兔子這里的路徑是“Hello_ZedHello_Zed.srcssources_1edkmodule_1driversmy_gpio_v1_00_asrc”,將里面的my_gpio.h直接拖進SDK左邊的hello_world工程里,并在helloworld.c文件里添加對my_gpio.h的引用:#include

"my_gpio.h"

有的童鞋可能在編譯的時候會遇到問題,提示找不到xbasic_types.h文件。同時在my_gpio.h文件的左下角會顯示一個小叉。

出現此問題時,可以手動添加這個頭文件的路徑,一般就在XilinxISE的安裝目錄中,我的電腦上就是:#include"D:Xilinx14.2ISE_DSEDKswXilinxProcessorIPLibdriverscommon_v1_00_asrcxbasic_types.h"

如果這個時候編譯工程不出問題,就可以開始寫測試代碼了。在my_gpio.h中定義了一些控制AXI總線設備寄存器的函數,如mReadSlaveReg和mWriteSlaveReg。通過這些函數就能夠讀寫寄存器內容了。需要注意的是,想要控制外設還需要知道它的設備物理地址,該地址可以在工程中的XML文件中查看,比如在這里my_gpio設備的地址就是0x75C00000。

這里附上一個簡單的測試例,可以測試我們的外設是否符合設計要求。其功能為:讀取兩個寄存器值,根據終端輸入修改寄存器,最后再次讀出驗證修改效果。代碼如下:#include#include

"platform.h"#include

"my_gpio.h"

#define

MY_GPIO_ADDR

0x75C00000

//設備物理地址int

reg0,reg1;

int

main(){

init_platform();

//讀取寄存器初始值

printf("=======My_GPIOTest=======");

printf("Readingmy_gpioregisters...");

reg0=MY_GPIO_mReadSlaveReg0(MY_GPIO_ADDR,0);

reg1=MY_GPIO_mReadSlaveReg1(MY_GPIO_ADDR,0);

printf("Reg0=0x%x,Reg1=0x%x",reg0,reg1);

//向寄存器寫入數據

printf("InputReg0.");

scanf("%d",®0);

printf("InputReg1.");

scanf("%d",®1);

printf("Writingtomy_gpioregisters...");

MY_GPIO_mWriteSlaveReg0(MY_GPIO_ADDR,0,reg0);

MY_GPIO_mWriteSlaveReg1(MY_GPIO_ADDR,0,reg1);

//讀取寄存器驗證修改結果

printf("Readmy_gpioregisters...");

reg0=MY_GPIO_mReadSlaveReg0(MY_GPIO_ADDR,0);

reg1=MY_GPIO_mReadSlaveReg1(MY_GPIO_ADDR,0);

printf("Reg0=0x%x,Reg1=0x%x",reg0,reg1);

cleanup_platform();

return

0;}

下面讓我們將代碼寫入Zynq,運行一下看看吧。首先編譯一下工程,完成后選擇ProgramFPGA,為PL部分載入邏輯配置。

因為從PlanAhead導出到SDK時,已經選擇了包含BitStream文件,因此這一欄已經自動完成了,未自動添加路徑的可以根據圖中的地址手動添加。點擊Program,開始下載配置數據。

稍等片刻,Program完成后,選擇RunConfigurations配置運行選項。

在彈出的窗口中,右擊XilinxC/C++Elf,選擇New,新建一個Debug項。

選擇新建的hello_world_0Debug項,點擊Run就可以運行代碼了。這里C/C++Application一欄已經自動填充了elf文件的路徑,如果沒有填充(可能是工程還未編譯完成),就從Debug文件夾中手動添加。RunConfigurations中的選項都采用了默認配置,這些選項的作用和設置方法請參見ZedBoard_CTT文檔,此處不再贅述。

代碼運行后,打開串口終端軟件(兔子用的是SecureCRT),在115200bps波特率下,串口開始輸出信息。首先會顯示兩個寄存器中的默認值(皆為0x0),然后將SW7、SW5、SW3、SW1向上撥,設為高電平,其他保持低電平。再通過鍵盤輸入兩次85和回車,即向兩個寄存器中都寫入0x55。由于寄存器0為只讀寄存器,其內容只根據Switch狀態(tài)改變,因此reg0結果為0xAA,即我們對開

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論