This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AM3352: AM3352 的串口配置

Part Number: AM3352

  串口使用FIFO  DMA的方式收发数据,每帧数据10个字节,FIFO采用下面的配置,串口接收不到数据。

  fifoConfig = UART_FIFO_CONFIG(UART_TRIG_LVL_GRANULARITY_1,
                                  UART_TRIG_LVL_GRANULARITY_1,
                                  10,
                                  10,
                                  1,
                                  1,
                                  UART_DMA_EN_PATH_SCR,
                                  UART_DMA_MODE_1_ENABLE);

    /* Configuring the FIFO settings. */
    UARTFIFOConfig(baseAdd, fifoConfig);

串口接收数据是否完成的判断函数是 

while((HWREG(reg + UART_RXFLL)&0xFF) == 10)
    {
         paramType->RxFlag = 1;
         paramType->Root.Buffer[num][len++] = UARTCharGetNonBlocking(reg);
         paramType->Root.Clen[num]++;
    }

请问应该怎样设置?

还有技术参考手册上 的  19.3.6.4.1 DMA Transfers (DMA Mode 1, 2, or 3)  这页想说明什么,不太明白,能解释下吗?

  • 请问如果不适用FIFO DMA模式,串口能正常收发数据么?

  • 可以正常接收单个字节的数据,但连续接收多个字节的话,发送的第 1~9个字节会放在缓存的2~10,发送的第10个字节会放在第一个缓存里。

    单个字节接收的配置为:   
            UART0_Module_ClkConfig();           //使用UART0自己的时钟
            UART_PinMux_Setup(0);               /* Performing the Pin Multiplexing for UART0 instance. */
            UARTModuleReset(UART0_BASE_ADD); /* Performing a module reset. */
            UartFIFOConfigure(UART0_BASE_ADD);             /* Performing FIFO configurations. */
            UartConfigure(UART0_BASE_ADD,BAUD_RATE_9600, (UART_FRAME_WORD_LENGTH_8 | UART_FRAME_NUM_STB_1 | UART_PARITY_NONE));

    void UartFIFOConfigure(unsigned int baseAdd)
    {
        unsigned int fifoConfig = 0;

        /*
        ** - Transmit Trigger Level Granularity is 4
        ** - Receiver Trigger Level Granularity is 1
        ** - Transmit FIFO Space Setting is 56. Hence TX Trigger level
        **   is 8 (64 - 56). The TX FIFO size is 64 bytes.
        ** - The Receiver Trigger Level is 1.
        ** - Clear the Transmit FIFO.
        ** - Clear the Receiver FIFO.
        ** - DMA Mode enabling shall happen through SCR register.
        ** - DMA Mode 0 is enabled. DMA Mode 0 corresponds to No
        **   DMA Mode. Effectively DMA Mode is disabled.
        */
        fifoConfig = UART_FIFO_CONFIG(UART_TRIG_LVL_GRANULARITY_4,
                                      UART_TRIG_LVL_GRANULARITY_1,
                                      UART_FCR_TX_TRIG_LVL_56,
                                      1,
                                      1,
                                      1,
                                      UART_DMA_EN_PATH_SCR,
                                      UART_DMA_MODE_0_ENABLE);

        /* Configuring the FIFO settings. */
        UARTFIFOConfig(baseAdd, fifoConfig);
    }

    接收函数的判断标志为:

     while((HWREG(reg + UART_LSR)&0x01) == 1)
        {
             paramType->RxFlag = 1;
             paramType->Root.Buffer[num][len++] = UARTCharGetNonBlocking(reg);
             paramType->Root.Clen[num]++;
        }

  • 我们已经把您的问题升级到英文e2e论坛了,请查看您的另外一个帖子。
    https://e2echina.ti.com/support/processors/f/processors-forum/306339/am3352