前面我做了幾個實驗 都沒有用過 開關,這一次用一用
發現 vivado 真的挺方便 所以 使用 vivado 開發
1.建工程
我使用 vivado 2013.4
創建新工程 –》 next –》next
勾選 Do not specify sources at this time //這樣跳過后面兩個添加文件頁面
選擇 board –》 zedboard –》next –》finsh
就創建完了。
2.PL端 IP核添加與連線
創建一個空的 Diagram
Create Block Design -》點 ok
接下來 添加 IP核 可以點擊 提示 Add IP 也可以點擊 ![]()
搜索 zynq 點 第一個
然后 點擊 Run Block Automation 自動配置
接下來 會提示 Run Connection Automation 自動連線
選擇 S_AXI 變成下圖
系統自動添加了 一些IP核
繼續點擊 Run Connection Automation -》 GPIO
選擇 led_8bits -》 OK
同樣的方法 添加 GPIO IP核 -》 Run Connection Automation 兩次 選擇 sws_8bits
就完成了
點擊 紅圈處 驗證 一下。
3.生成 bit 的過程
點擊 Source -》 design_1 右鍵 –》 Create HDL Wrapper -》 OK
然后 Synthesis 、 Implementation 、Bitstream 依次過一遍
這個過程費時間。。 Synthesis 以后 一直點ok 最后 點擊 Generate Bitstream
4.輸出到SDK
選上 launch SDk 點 OK 就啟動SDK 了
我的 SDK 是
點擊 FILE –》 new –> Application project
選一個 helloworld
復制以下代碼
1 #include <stdio.h> 2 #include "platform.h" 3 #include "xparameters.h" 4 #include "xgpio.h" 5 #include "sleep.h" 6 #include "platform.h" 7 #include "xil_types.h" 8 #include "xgpiops.h" 9 10 11 /************************** Constant Definitions *****************************/ 12 13 /* 14 * The following constant maps to the name of the hardware instances that 15 * were created in the EDK XPS system. 16 */ 17 #define XPAR_LEDS_ID XPAR_AXI_GPIO_0_BASEADDR //AXI_GPIO_0 是添加的第一個 gpio 所以是 leds 18 #define XPAR_SWS_ID XPAR_AXI_GPIO_1_BASEADDR //那么 這個自然是 開關了 19 20 int main() 21 { 22 static XGpio LED_Ptr;//定義GPIO指針 23 static XGpio SWS_Ptr; 24 int XStatus; 25 int num = 0; 26 //初始化 LED 27 XStatus = XGpio_Initialize(&LED_Ptr,XPAR_AXI_GPIO_0_DEVICE_ID); 28 if(XST_SUCCESS != XStatus) 29 print("GPIO INIT FAILED\n\r"); 30 XGpio_SetDataDirection(&LED_Ptr, 1,0x00);//通道1;設置方向 0 輸出 1輸入, 0x00表示8位都是輸出 31 XGpio_DiscreteWrite(&LED_Ptr, 1,0x00); 32 33 //初始化 開關 34 XStatus = XGpio_Initialize(&SWS_Ptr,XPAR_AXI_GPIO_1_DEVICE_ID); 35 if(XST_SUCCESS != XStatus) 36 print("GPIO INIT FAILED\n\r"); 37 XGpio_SetDataDirection(&SWS_Ptr, 1,0xFF);//通道1;設置方向 0 輸出 1輸入 0xFF表示8位都是輸入 38 39 40 41 while(1){ 42 num = XGpio_DiscreteRead(&SWS_Ptr, 1); //從開關處 讀數據 43 printf("Numb %d\n\r", num); 44 XGpio_DiscreteWrite(&LED_Ptr, 1,num); //直接寫入 led 45 usleep(1000); //delay 1ms 46 } 47 48 printf("end\n\r \n\r"); 49 return 0; 50 }
確保 zedboard 已經連到電腦上 並打開電源
先 xilinx Tools –> ProgramFPGA
然后
-> Run As –> Launch on Hardware (GDB)
可以看到 結果 64 + 1
第 7 個 和 第 1 個 開關 是開的
表示 所以 led 也亮了
























