FPGA点灯程序

点灯实验:
(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进行处理,非常感谢!

上一篇 2012年11月15日
下一篇 2012年11月15日

相关推荐