微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 一步一步学ZedBoard Zynq(四):基于AXI Lite 总线的从设备IP设计

一步一步学ZedBoard Zynq(四):基于AXI Lite 总线的从设备IP设计

时间:02-10 来源:网络整理 点击:

系统信息system.xml中看到我们的系统信息。可以看到我们实例化连接到系统的ip是my_axi_ip_0,基地址是0x4000000。

建立软件工程后,修改main代码,如下
//@超群天晴
#include
#include "xparameters.h"
#include "xil_types.h"
#include "xstatus.h"
#include "xil_io.h"//包含xil_io头文件,完成对绝对地址的访问
#include "platform.h"

#define LED_DATA_REG 0x40000000

void print(char *ptr);
void delay(unsigned int delaytime);
void LED_Play(unsigned char led);

int main(void)
{

init_platform();

print("ZedBoard LAB4: MY_AXI_LEDs\n\r");
print("超群天晴 2012年10月8日22:12:31\n\r");

LED_Play(0x03);
while(1);

cleanup_platform();

return 0;
}

void delay(unsigned int delaytime)
{
int i;
for(i=0;i7);
Xil_Out32(LED_DATA_REG,led);
delay(50000000);
}
}

定义了两个函数
void delay(unsigned int delaytime);
void LED_Play(unsigned char led);

其中delay()为延时函数,参数为延时时间,100000000大约延时1s;

LED_Play()为LED流水灯函数,参数是流水初始值。在程序里面设定的是0x2,也就LD0、LD1最开始亮,然后流水。

其中第8行
#define LED_DATA_REG 0x40000000

使用宏定义,定义LED_DATA_REG,实际上就是自定义IP的基地址。

第44行
Xil_Out32(LED_DATA_REG,led);

使用了xil_io.h提供的绝对地址访问函数Xil_Out32(u32 OutAddress, u32 Value),定义如下
/*****************************************************************************/
/**
*
* Performs an output operation for a 32-bit memory location by writing the
* specified Value to the the specified address.
*
* @param OutAddress contains the address to perform the output operation
* at.
* @param Value contains the Value to be output at the specified address.
*
* @return None.
*
* @note None.
*
******************************************************************************/
void Xil_Out32(u32 OutAddress, u32 Value)
{
/* write the contents of the I/O location and then synchronize the I/O
* such that the I/O operation completes before proceeding on
*/
*(volatile u32 *) OutAddress = Value;
SYNCHRONIZE_IO;
}

可以看出,其实现的功能就是向32位绝对地址OutAddress中写入32位无符号值Value。参考这样的写法,可以将地址访问修改
1 #define LED_DATA_ADDR 0x40000000
2 #define LED_DATA_REG(x) *(volatile unsigned int *) LED_DATA_ADDR = x

然后修改寄存器的值,只需要修改LED_DATA_REG(x)参数x的值即可。

四、运行结果

编译下载之后,可以从超级终端看到调试信息

同时Zedboard上的 LD 流水

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top