Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

UART控制器IP核设计是AMBA  APB总线接口,而我们FBIO Wrapper是AMBA  AXI总线接口, 不能直接连接在一起,需要一个AXI2ABP 的Bridge进行连接;如下图所示:

...

本实验以Plus1 7021 SOC实践平台配套的FPGA子板和IP验证子板完成相关实验,FPGA子板的开发工具采用XILINX的Vivado集成开发环境SOC实践平台配套的FPGA子板完成相关实验,实验采用loopback方式进行,即将UART控制器IP核设计的TX和RX对接即可;

FPGA子板的开发工具采用XILINX的Vivado集成开发环境(版本号为2018.3);为了方便将用户自己需要验证的IP方便连接到SOC系统中验证,本实验提供了相应的设计参考基础文件,如下

...

    printf("UART IP test ready ");

    while(1)

{

        unsigned int i;

}

对比数码管控制IP实验,增加了uart_ctl()函数,用来完成UART的配置及初始化操作,如下讲解。

void uart_ctl()

{

    uart_reg->LCR=0x20;

    printf("@LCR[%x]\n", temp);

            for (i = 0; i < 256; i++)

            {

               while(1)

                {

                   if((uart_reg->LSR&0x20)==0x20)

                  {

                     uart_reg->SER=0x3f;

                     uart_reg->TX_FIFO=i;

                     printf("@tx_data [%d]\n", i);

                     uart_reg->SER=0x3e;

                      break;

                   }

                }

            }

    }

}

对比数码管控制IP实验,增加了uart_ctl()函数,用来完成UART的配置及初始化操作,如下讲解。

void uart_ctl()

{

    uart_reg->LCR=0x20;

    printf("@LCR[%x]\n", temp);

    uart_reg->SER=0x3e;

    printf("@SER[%x]\n", temp);

...

设置UART 为8bit 数据位,1bit 停止位,无校验位;

uart_reg->SER=0x3e;

设置UART 中断为:允许接收数据完成后产生中断;禁止发送数据完成后产生中断;禁止接收数据出现停止位,校验位错时产生中断;禁止接收数据FIFO满时产生中断;禁止发送数据FIFO空时产生中断;

uart_reg->BUAD_CNT=0x1A9;

设置UART 波特率为9600;

下面介绍while(1)

if((uart_reg->LSR&0x20)==0x20):判断接收数据FIFO为空

uart_reg->SER=0x3e0x3f; 设置UART 中断为:允许接收数据完成后产生中断;禁止发送数据完成后产生中断;禁止接收数据出现停止位,校验位错时产生中断;禁止接收数据FIFO满时产生中断;禁止发送数据FIFO空时产生中断;禁止接收数据中断;

uart_reg->BUAD>TX_CNT=0x1A9;设置UART 波特率为9600FIFO=i; 将数据i送到TX FIFO;

uart_reg->SER=0x3e;  允许接收数据完成后产生中断

uart.c

#include "common_all.h"

...

    rx_data=uart_reg->RX_FIFO;

    uart_reg->TX_FIFO=printf("@rx_data [%d]\n", rx_data);

    uart_reg->LSR=0x0;

}

此中断处理程序的作用:将RX FIFO从外设接收到的8bit数据取出,然后将此数据送到TX FIFO,回送给外设;然后清除本次中断的状态标识bit,这样就完成了1byte数据的串行接收和发送实验。FIFO收到的8bit数据取出;然后清除本次中断的状态标识bit,这样就完成了1byte数据的串行接收和发送实验。

uart.h

#ifndef __FPGAINT_H__

...

在Plus1 IDE环境中compile后,下载到平台,在terminal窗口看到如下信息

...

然后打开PC端的串口软件,进行如下操作:

step1;设置串口参数;

step2;发送数据区填上需要发送的字符;

step3; 选择自动发送;

发送数据区的内容经由PC端串口发到我们平台上的UART IP控制器;然后此控制器将接收到的内容回发给PC端串口;这样我们在PC端串口软件接收数据区就能观察到来自发送数据区的内容

...