-
使用NexysVideo板子为例;
-
生成config.vhd,打开后,添加如下
– GPIO port
constant CFG_GRGPIO_ENABLE : integer := 1;
constant CFG_GRGPIO_IMASK : integer := 16#0000#;
constant CFG_GRGPIO_WIDTH : integer := (3);
-
打开leon3mp.vhd修改如下位置
修改xdc约束文件,如下图 -
接下来,综合实现生成bit文件,下载进去。
-
使用GRMON看看有没有GRGPIO。
grmon -uart com4 -
输入info sys,查看GPIO地址;
得到起始地址80000a00; -
输入如下代码,得到main.c
/*
- main.c
- Created on: 2010-3-27
-
Author: surpassal
/
// LED
#define LEDG_BASE 0x80000a00
// REG LEDG
#define LEDG_DATA_IN ((unsigned int volatile )(LEDG_BASE ))
#define LEDG_DATA_OUT ((unsigned int volatile )(LEDG_BASE + 4 ))
#define LEDG_DIR ((unsigned int volatile )(LEDG_BASE + 8 ))
#define LEDG_INT_MASK ((unsigned int volatile )(LEDG_BASE + 0xC ))
#define LEDG_INT_POL ((unsigned int volatile )(LEDG_BASE + 0x10 ))
#define LEDG_INT_EDGE ((unsigned int volatile )(LEDG_BASE + 0x14 ))
#define LEDG_BYPASS ((unsigned int volatile *)(LEDG_BASE + 0x18 ))
void delay1s(void);
int main(void)
{
unsigned char i=0;
unsigned char led1=0;
printf(“This is a YHQ GPIO IP core Test!”);
LEDG_DIR=0xffffffff;//output mode
led1=0xf0;
while(1)
{
for(i=0;i<16;i++)
{
LEDG_DATA_OUT=led1;
delay1s();
led1=~led1;// 取反
}
}
return 1;
}
void delay1s(void)
{
int i,j;
for(i=0;i<1000;i++)
for(j=0;j<500;j++);
}
- 编译刚刚的文件:
c:\Opt\testvideogpio>sparc-gaisler-elf-gcc.exe main2.c -o main2.elf
不行的话,需要设置环境变量; - 在grmon里面load进来,并run。
- 查看板上结果,三个LED开始闪烁。
在这里插入图片描述