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......\n\r");
 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----------\r\n");
 
 XGpio_Initialize(&dip,0);
 XGpio_SetDataDirection(&dip,1,0xffffffff);

        XGpio_Initialize(&led,1);
 XGpio_SetDataDirection(&led,1,0x00000000);
 
 while(1)
 {
  dip_check=XGpio_DiscreteRead(&dip,1);
  xil_printf("DIP Switch Status %x\r\n",dip_check);
  XGpio_DiscreteWrite(&led,1,dip_check);
     
  for(i=0;i<99999999;i++);
  
 }
 return 0;
}

 

摘自:http://hi.baidu.com/westenboy88/item/5ab34e8b4191158d4414cf3d

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值