在Vivado中,我成功地制作了一个简单的块图来控制Zybo板的LED。我可以观察到我的LEDs is: 0x4120 0000
和High Address is 0x4120 FFFF
的偏移地址。现在,当我去SDK时:
#include <xil_printf.h>
#include <xil_types.h>
#include "platform.h"
#include "xgpio_l.h"
volatile u32 *LED_DATA = (u32 *) 0x41200000 ;
int main()
{
init_platform();
xil_printf(" Writing to LEDs: \n\r");
Xil_Out32((&LED_DATA) + (0x00) , 0xFFFFFFFF); //All LEDs ON
cleanup_platform();
return 0;
}
我编程了FPGA并运行上面的代码。但仍然没有任何成功。有人可以指出我的错误吗?
提前致谢
你的错误是使用&LED_DATA
,它返回指针LED_DATA
的地址,而不是我认为你期望的0x41200000
。
尝试
Xil_out32(0x41200000, 0xFFFFFFFF);
要么
*LED_DATA = 0xFFFFFFFF;
尝试
#define ADDR 0x41200000 // write this before main() function.
然后你必须在main函数中添加以下行。
Xil_Out32(ADDR + 0x00000000) , 0xFFFFFFFF); //All LEDs ON
这应该工作。
这项工作
#define ADDRESS_GPIO_0 0x41200000 // vivado block diagram address editor
XGpioPs_Config * ConfigPtr1 = XGpioPs_LookupConfig(XPAR_PS7_GPIO_0_DEVICE_ID);
XGpioPs_CfgInitialize(&Gpio1, ConfigPtr1, ADDRESS_GPIO_0);
XGpioPs_SetDirection(&Gpio1, XGPIOPS_BANK0, 0x0F);
XGpioPs_Write(&Gpio1, XGPIOPS_BANK0, 0x0F);