上位机通过串口调试助手发送数据给FPGA, FAGA通过串口接收数据将接收到的数据发送给上位机,完成串口数据的环回。
首先,打开已经写好的工程
打开qsys,打开文件
基础设置中
parity:校验位 无
synchronizer stage :处理亚稳态情况,保持默认
fixed baud rate: 固定波特率,如果勾选,则软件中不可改
添加中断,中断号为1
pin planner
eslipse 打开软件
helloworld.c程序如下:
#include <stdio.h>
#include "unistd.h"
#include "system.h"
#include "alt_types.h"
#include "altera_avalon_uart_regs.h"
#include "sys\alt_irq.h"
#include "stddef.h"
#include "priv/alt_legacy_irq.h"
static alt_u8 txdata = 0;
static alt_u8 rxdata = 0;
void IRQ_UART_Interrupts(); //中断初始化函数
void IRQ_init(); //中断服务子程序
int main()
{
printf("Hello from Nios II!\n");
IRQ_init();
return 0;
}
void IRQ_init()
{
//清除状态寄存器
IOWR_ALTERA_AVALON_UART_STATUS(UART_BASE,0);
//使能接受准备好中断,给控制寄存器相应位写1
IOWR_ALTERA_AVALON_UART_CONTROL(UART_BASE,0X80);
// 注册ISR
alt_ic_isr_register(
UART_IRQ_INTERRUPT_CONTROLLER_ID, // 中断控制器标号,从system.h 复制
UART_IRQ , // 硬件中断号,从system.h 复制
IRQ_UART_Interrupts , // 中断服务子函数
0x0 , // 指向与设备驱动实例相关的数据结构体
0x0); // flags,保留未用
}
//UART中断服务函数
void IRQ_UART_Interrupts()
{
//将radata寄存器中存储的值读入变量rxdata中
rxdata = IORD_ALTERA_AVALON_UART_RXDATA(UART_BASE);
//进行串口自收发,将变量rxdata中的值赋值给变量txdata
txdata = rxdata;
//查询发送准备好信号,如果没有准备好,则等待。
while(!(IORD_ALTERA_AVALON_UART_STATUS(UART_BASE)&
ALTERA_AVALON_UART_STATUS_TRDY_MSK));
//发送准备好,发送txdata
IOWR_ALTERA_AVALON_UART_TXDATA(UART_BASE,txdata);
}
连接下载器的JTAG接口(下载程序),
连接rs232接口(供电并完成FPGA与电脑通信)
下载硬件软件程序