点灯实验:
(1)数字设计:由verilog设计电路,输出引脚连到FPGA对应的LED的引脚
(2)嵌入式设计:软件实现——-XPS:PLB总线上添加GPIO,GPIO输出连接到FPGA对应的LED引脚,SDK:软件通过对GPIO的地址对应的寄存器赋值来点灯
硬件实现——-XPS:基于PLB总线添加自定义IP核实现点灯的功能,软件可实现调试功能
硬件系统的构建:XPS下的BSB向导,添加GPIO的IP核,端口设置为输出,并连上FPGA对应于LED灯的引脚
存储器映射及软件开发:(Lib and BSP) xparameters.h(由Liben生成) 定义一些宏,指明各硬件模块的属性和地址(驱动配置和存储器映射的标示符及地址分配)
应用程序开发:(1)EDK提供的应用程序接口API;(2)采用访问硬件的通用方式即简单的对地址赋值的方式
#include “xparameters.h”
#include “xutil.h”
#include “xgpio_l.h”
#define LED_DELAY 2000000
void main()
{
Xuint32 Data=0xaa; //XPS对基本数据类型进行了重定义,Xuint32相当于unsigned long
int Delay;
int count=0;
Xuint32 *ledptr; //设定一个指针变量,将系统分配给GPIO的地址赋给指针变量
ledptr=(int *)0x81400000; //GPIO的基地址
*(ledptr+4)=0x00000000; //接着向GPIO三态控制寄存器写零(基地址+4),将GPIO设置为输出
print(“Hello , starting……nr”);
while(1)
{
count++;
if(count%2==0)
{
*ledptr=0x55; //往GPIO数据寄存器送数,控制8个LED的状态
}
else
{
*ledptr=0xaa;
}
for(Delay=0;Delay<LED_DELAY;Delay++);
if(count%2==0)
{
*ledptr=0x0f;
}
else
{
*ledptr=0xf0;
}
for(Delay=0;Delay<LED_DELAY;Delay++);
}
}
同时附上dip拨键控制led灯的C代码:
#include “xutil.h”
int main()
{
XGpio dip,led;
int i,dip_check;
xil_printf(“——-start of the program———-rn”);
XGpio_Initialize(&dip,0);
XGpio_SetDataDirection(&dip,1,0xffffffff);
XGpio_Initialize(&led,1);
XGpio_SetDataDirection(&led,1,0×00000000);
while(1)
{
dip_check=XGpio_DiscreteRead(&dip,1);
xil_printf(“DIP Switch Status %xrn”,dip_check);
XGpio_DiscreteWrite(&led,1,dip_check);
for(i=0;i<99999999;i++);
}
return 0;
}
摘自:http://hi.baidu.com/westenboy88/item/5ab34e8b4191158d4414cf3d
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!