JTAG_UART控制LED实验(转帖)
2012-05-19 18:31
393 查看
一、硬件(使用的是Quartus II 9.0)
1、建立工程,打开SOPC Builder,添加CPU(次部分可根据实际硬件平台更改)。
选择标准NIOS即可
2、添加PLL
点击Launch Altera‘s ALTPLL MegaWizard
器件速度等级按自己的FPGA选择,我的FPGA是EP2C8,所以选择8
输入时钟根据晶振决定,我的板子上是50MHz
输出两个时钟:
C0 50MHz 相位 0
C1 50MHz 相位 -72度
将Clock Settings中的pll.co更名为sys_clk,pll.c1更名为sd_clk
CPU的clock选择sys_clk
3、添加SDRAM(我板子上是K4S641632H)
Presets选择Custom
Data width选择16
4、添加JTAG_UART
5、添加PIO
width选择4,我的板子上只有四个LED
Direction选择Output port only
pio更名为led_pio
6、添加system ID
7、点击System—>Auto Assign Base address和Auto Assign IRQs,系统配置完毕
最后点击“Generate”生成系统
8、在Quartus II新建原理图BDF文件,添加刚建的SOPC
配置I/O后,运行Quartus,并在到目标板上……
二、软件(NIOS II 9.0)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/* * led.h * * Created on: 2010-7-17 * Author: Administrator */
#ifndef LED_H_
#define LED_H_
void led(unsigned char dir)
{ unsigned char k,led;
unsigned int i,j;
for(k=10;k;k--)
{ for(i=0;i<4;i++)
{ if(!dir) led=1<<i;
else led=8>>i;
IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,~led);
j=0; while(j<100000) j++;
}
}
}
#endif /* LED_H_ */
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include <stdio.h> #include <string.h> #include "system.h" #include "altera_avalon_pio_regs.h" #include "alt_types.h" #include "led.h"
int main()
{ FILE *fp;
char str[6];
char str1[5];
char str2;
fp=fopen("/dev/jtag_uart","r+");
if(fp)
{ while(strcmp(str1,"stop")!=0)
{ printf("Leds are ready,please input start or stop\n");
fgets(str,6,fp);
strcpy(str1,str);
str1[4]='\0';
if(strcmp(str,"start")==0)
printf("Leds have run over,please input p or n or stop\n");
while(strcmp(str1,"stop")!=0)
{ str2=getc(fp);
if(str2=='n')
{ led(0);
printf("Leds have run over,please input p or n or s\n");
}
else if(str2=='p')
{ led(1);
printf("Leds have run over,please input p or n or s'\n");
} else if(str2=='s') strcpy(str1,"stop");
}
}
}
printf("Leds have run over\n"); fclose(fp);
return 0;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
运行
1、建立工程,打开SOPC Builder,添加CPU(次部分可根据实际硬件平台更改)。
选择标准NIOS即可
2、添加PLL
点击Launch Altera‘s ALTPLL MegaWizard
器件速度等级按自己的FPGA选择,我的FPGA是EP2C8,所以选择8
输入时钟根据晶振决定,我的板子上是50MHz
输出两个时钟:
C0 50MHz 相位 0
C1 50MHz 相位 -72度
将Clock Settings中的pll.co更名为sys_clk,pll.c1更名为sd_clk
CPU的clock选择sys_clk
3、添加SDRAM(我板子上是K4S641632H)
Presets选择Custom
Data width选择16
4、添加JTAG_UART
5、添加PIO
width选择4,我的板子上只有四个LED
Direction选择Output port only
pio更名为led_pio
6、添加system ID
7、点击System—>Auto Assign Base address和Auto Assign IRQs,系统配置完毕
最后点击“Generate”生成系统
8、在Quartus II新建原理图BDF文件,添加刚建的SOPC
配置I/O后,运行Quartus,并在到目标板上……
二、软件(NIOS II 9.0)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/* * led.h * * Created on: 2010-7-17 * Author: Administrator */
#ifndef LED_H_
#define LED_H_
void led(unsigned char dir)
{ unsigned char k,led;
unsigned int i,j;
for(k=10;k;k--)
{ for(i=0;i<4;i++)
{ if(!dir) led=1<<i;
else led=8>>i;
IOWR_ALTERA_AVALON_PIO_DATA(LED_PIO_BASE,~led);
j=0; while(j<100000) j++;
}
}
}
#endif /* LED_H_ */
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#include <stdio.h> #include <string.h> #include "system.h" #include "altera_avalon_pio_regs.h" #include "alt_types.h" #include "led.h"
int main()
{ FILE *fp;
char str[6];
char str1[5];
char str2;
fp=fopen("/dev/jtag_uart","r+");
if(fp)
{ while(strcmp(str1,"stop")!=0)
{ printf("Leds are ready,please input start or stop\n");
fgets(str,6,fp);
strcpy(str1,str);
str1[4]='\0';
if(strcmp(str,"start")==0)
printf("Leds have run over,please input p or n or stop\n");
while(strcmp(str1,"stop")!=0)
{ str2=getc(fp);
if(str2=='n')
{ led(0);
printf("Leds have run over,please input p or n or s\n");
}
else if(str2=='p')
{ led(1);
printf("Leds have run over,please input p or n or s'\n");
} else if(str2=='s') strcpy(str1,"stop");
}
}
}
printf("Leds have run over\n"); fclose(fp);
return 0;
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
运行
相关文章推荐
- Android底层开发Led控制实验
- 【BLE】-CC2541 HAL层控制LED的实验
- mini2440实验,用key控制led
- Android4.0 init执行命令和脚本实现LED控制实验
- 【iCore3 双核心板】例程四:USART通信实验——通过命令控制LED
- [ZigBee] 3、ZigBee基础实验——GPIO输出控制实验-控制Led亮灭
- CC2530基础实验之采集光照模拟量控制LED状态
- Arduino 实验2 - 控制LED闪烁
- 2013-11-17 实验之裸板按键控制Led灯
- (一)GPIO 编程实验 LED 流水灯控制
- cc2530实验小项目-循环控制LED灯 (基于ZigBee协议)
- 2013-10-08 实验之定时器控制Led等闪烁
- 实验 使用 vivado zedboard GPIO 开关 开控制 LED
- 实验 使用 vivado zedboard GPIO 开关 开控制 LED
- ZigBee基础实验(一)--控制LED灯
- TQ2440在linux下控制LED实验总结
- 2013-10-07 实验之按键中断控制Led
- LED灯控制实验
- 02-ZYNQ学习(逻辑篇)之FPGA LED控制实验
- 实验--无线收发控制LED