2

センサーを使用して、そこから値を読み取っています。uart_liteザイリンクス EDK を追加し、そのピンをボードの GPIO にマップしました。PS (Zynq PS) クロックは 50Mhz/100Mhz/200Mhz です。UART の RX から 115200 ボー レートで 2 ストップ ビットと偶数パリティでデータを受信して​​います。

ドキュメントで提供されているレジスタを使用して UART を使用しています。ctrl_regstat_regRX_reg、 の4 つのレジスタがあります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