在Qsys系统中调用UART IP核与上位机实现串口通信

上位机通过串口调试助手发送数据给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与电脑通信)

下载硬件软件程序

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值