2

我正在使用传感器并从中读取值。我已uart_lite在 xilinx EDK 中添加并将其引脚映射到板 GPIO。PS (Zynq PS) 时钟为 50Mhz/100Mhz/200Mhz。我以 115200 波特率从 UART 的 RX 接收数据,具有 2 个停止位甚至奇偶校验。

我正在使用文档中提供的寄存器使用 UART。有四个寄存器:ctrl_reg, stat_reg, RX_reg, TX_reg. 使用这些我可以配置我的 uart 来接收数据和传输数据。这uartlite.

现在我正在接收数据并尝试在 Teraterm 上打印数据。

这是在正确模式及其寄存器中设置 uart 的代码。

    #include <stdio.h>
    #include "platform.h"
    #include "xparameters.h"
    #include "xil_io.h"
    #include "sleep.h"


    #define UART_BASE       XPAR_AXI_UARTLITE_0_BASEADDR
    #define RX_FIFO_REG     UART_BASE + 0x00
    #define TX_FIFO_REG     UART_BASE + 0x04
    #define STAT_REG        UART_BASE + 0x08
    #define CTRL_REG        UART_BASE + 0x0C

    // Control Register
    #define ENA_INTR        27
    #define RST_RXFIFO      30
    #define RST_TXFIFO      31
    // Control Register

    // xsp module
    unsigned int *pAddr;
    #define RS_DXEN         0
    #define RS_UART_OUI     1
    #define RS_HF_OUT       2
    #define RS_RXEN_BAR     3
    #define RS_TE_485       4
    unsigned int Setting;
    // xsp module

    unsigned int *pData1, *pData2, *pData3, *pData4;
    unsigned int RxStat = 0;
    unsigned int RxData = 0;


    int main()
    {
        init_platform();
        pAddr = XPAR_UART_IP_0_BASEADDR;

// RS485 RX Mode
Setting = ( 0<<RS_TE_485 | 0<<RS_RXEN_BAR | 1<<RS_HF_OUT | 1<<RS_UART_OUI | 0<<RS_DXEN );
 // RS485 TX Mode
//Setting = ( 0<<RS_TE_485 | 1<<RS_RXEN_BAR | 1<<RS_HF_OUT | 1<<RS_UART_OUI | 1<<RS_DXEN );
*pAddr = Setting;
 // Control Register
pData1  = CTRL_REG;
*pData1  = (1<<ENA_INTR)|(1<RST_RXFIFO)|(1<RST_TXFIFO);
pData2  = RX_FIFO_REG;//FIFO REG;
pData3  = STAT_REG;//STAT_REG;
pData4  = TX_FIFO_REG; // TX_FIFO_REG

    while (1) {
        xil_printf("success");
            xil_printf("0x%X\r\n",*pData2);
         }

        return 0;
    }

所以我的while循环应该连续运行并打印值,但它只在打印18个字节后才停止??但我的输出是这样的: 在此处输入图像描述

这是我的调试尝试: 在此处输入图像描述

4

0 回答 0