任务1:基于nios ii处理器系统控制一个led灯闪烁
硬件系统:
Nios ii处理器
4KB片内ROM存储器用于存储程序代码以及程序运行空间;
4KB片内RAM存储器用于变量存储(R/W数据);
1位输出I/O(PIO)引脚控制LED;
系统识别外围设备(systemID)
步骤:
1.新建工程
2.Qsys中注意事项:
存储程序和代码的存储器(rom、ram的s1)连接到data_master(数据总线)和instruction_master(指令总线)。而外设systemID和PIO只传输数据,不接收指令,所以只接数据总线。
因为要控制led,所以要导出(export)PIO信号,所以pio_led s1的export要设置
最后记得设置nios ii中的复位地址(rom)和异常地址(ram)
分配地址最好从0开始,所以可以先设定锁定后再自动分配
3.新建verilog
module nios_pio_led(
clk,
rst_n,
led
); //端口定义
input clk;
input rst_n;
output led;
mysystem u0 (
.clk_clk (clk), // clk.clk
.reset_reset_n (rst_n), // reset.reset_n
.pio_led_export (led) // pio_led.export
);
endmodule
4.添加文件
双击files,添加.qsys文件
5.分配管脚(不懂)
6.软件编写
#include <stdio.h>
#include "system.h"
#include "altera_avalon_pio_regs.h"
#include "alt_types.h"
int main()
{
alt_u8_led = 0; //在"alt_types.h"中定义为unsigned char类型
alt_u32 i;
while(1)
{
led = 0;
IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led); //点亮LED灯
i = 0;
while(i<500000) //延时功能,非明确延时,数值太小将无法看到灯的闪烁效果
{
i++;
}
led = 1;
IOWR_ALTERA_AVALON_PIO_DATA(PIO_LED_BASE, led); //熄灭LED灯
i = 0;
while(i<500000) //延时功能,非明确延时,数值太小将无法看到灯的闪烁效果
{
i++;
}
}
return 0;
}
CTRL头文件可以点开,如<altera_avalon_pio_regs.h>中描述了PIO口如何使用相应函数的方法
7.固化
右键project—>make Targets—>Build—>.....generate
添加生成的hex文件到files中可直接编译