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.

[参考译文] MSPM0L1306:PA18上的 MSPM0L1306 UART0 RX

Guru**** 2393725 points
Other Parts Discussed in Thread: MSPM0L1306, SYSCONFIG

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1241151/mspm0l1306-mspm0l1306-uart0-rx-on-pa18

器件型号:MSPM0L1306
主题中讨论的其他器件: SysConfig

大家好!

我在使用 MSPM0L1306的 UART0模块时遇到了一些问题。  

如果我 将 UART0 RX 引脚映射到 PA9、一切都正常。 一旦接收到数据、就会按照配置引发中断。 但是、如果我将 UART0_RX 引脚重新配置为在 PA18上、则不再接收任何数据。 传输仍然正常。 UART 的所有寄存器配置完全相同、唯一的区别是 IO MUX 19现在设置为备用功能2 (UART0_RX)。

其他人是否遇到过同样的问题?

PA18不工作

PA9工作正常

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Luca:

    很抱歉延迟回答您的问题。 您能否共享用于配置 PA9以及 PA18的代码部分? (我不需要整个项目、只需要使用几行代码来设置 UART 和 IO 引脚。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    GPIO 代码:

    /// Constructor
    ///
    /// @param port   GPIO port struct (e.g. GPIOA)
    /// @param pin    The pin number (e.g. 1 for PA1)
    Gpio(GPIO_Regs* const port, const uint32_t pin)
      : M_PORT{port},
        M_PIN_INDEX{pin},
        M_PIN_MASK{static_cast<uint32_t>(1U) << pin} {
        ASSERT(pin < 32U);
    }
    
    /// Configure the pin as an digital input pin
    ///
    /// @param function           Alternate function selection (0 ... 15)
    /// @param pull               Pull resistor (see #Pull)
    /// @param inversion          Input inversion (see #Inversion)
    /// @param hysteresis         Input hysteresis (see #Hysteresis)
    void ConfigureAsInput(const uint32_t function,
                        const Pull pull = Pull::NONE,
                        const Inversion inversion = Inversion::DISABLE,
                        const Hysteresis hysteresis = Hysteresis::TTL) {
        uint32_t reg{};
        reg |= IOMUX_PINCM_INENA_ENABLE;
        reg |= IOMUX_PINCM_PC_CONNECTED;
        reg |= static_cast<uint32_t>(function);
        reg |= static_cast<uint32_t>(pull);
        reg |= static_cast<uint32_t>(inversion);
        reg |= static_cast<uint32_t>(hysteresis);
        SetMux(reg);
    }
    
    /// Configure the pin as an digital output pin
    ///
    /// @param function           Function selection (0 ... 15)
    /// @param outputType         Output type for pin (see #OutputType)
    /// @param inversion          Output inversion (see #Inversion)
    void ConfigureAsOutput(const uint32_t function,
                         const OutputType outputType = OutputType::PUSH_PULL,
                         const Inversion inversion = Inversion::DISABLE) {
        uint32_t reg{};
        reg |= IOMUX_PINCM_PC_CONNECTED;
        reg |= static_cast<uint32_t>(function);
        reg |= static_cast<uint32_t>(outputType);
        reg |= static_cast<uint32_t>(inversion);
        SetMux(reg);
        EnableOutput();
    }
    
    /// Set the mux register
    ///
    /// @param reg   The value to write to the mux register
    void SetMux(const uint32_t reg) {
        IOMUX->SECCFG.PINCM[M_PIN_INDEX] = reg;
    }

    初始化:

    mcal:Common::ResetPeripheral(GPIOA);
    
    // Enable power
    mcal::Power::EnableGpioA();
    
    // Wait 16 cycles for the power to be enabled
    mcal::Common::DelayCycles(16U);
    
    // UART Pins
    mcal::Gpio uartTxPin(GPIOA, 17U);
    mcal::Gpio uartRxPin(GPIOA, 18U);
    
    // GPIO MUX Function 2 is UART
    uartTxPin.ConfigureAsOutput(2U);
    uartRxPin.ConfigureAsInput(2U);

    多路复用到其他引脚的 UART 未引起任何问题、因此我很确定这不是 UART 问题。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Luca:

    不确定问题是什么、但似乎在您身边。  我可以针对 RX 引脚在 PA9和 PA18之间切换、并使用预期的中断接收数据。

    我使用的代码是"uart_external_loopback_interrupt"示例工程、位于 SDK 中的 driverlib 示例下。

    使用 SysConfig 工具、以下是为工程生成的定义:

    /* Defines for UART_0 RX = PA9 */
    #define UART_0_INST                                                        UART0
    #define UART_0_INST_IRQHandler                                  UART0_IRQHandler
    #define UART_0_INST_INT_IRQN                                      UART0_INT_IRQn
    #define GPIO_UART_0_RX_PORT                                                GPIOA
    #define GPIO_UART_0_TX_PORT                                                GPIOA
    #define GPIO_UART_0_RX_PIN                                         DL_GPIO_PIN_9
    #define GPIO_UART_0_TX_PIN                                         DL_GPIO_PIN_8
    #define GPIO_UART_0_IOMUX_RX                                     (IOMUX_PINCM10)
    #define GPIO_UART_0_IOMUX_TX                                      (IOMUX_PINCM9)
    #define GPIO_UART_0_IOMUX_RX_FUNC                      IOMUX_PINCM10_PF_UART0_RX
    #define GPIO_UART_0_IOMUX_TX_FUNC                       IOMUX_PINCM9_PF_UART0_TX
    
    
    /* Defines for UART_0 RX = PA18*/
    #define UART_0_INST                                                        UART0
    #define UART_0_INST_IRQHandler                                  UART0_IRQHandler
    #define UART_0_INST_INT_IRQN                                      UART0_INT_IRQn
    #define GPIO_UART_0_RX_PORT                                                GPIOA
    #define GPIO_UART_0_TX_PORT                                                GPIOA
    #define GPIO_UART_0_RX_PIN                                        DL_GPIO_PIN_18
    #define GPIO_UART_0_TX_PIN                                         DL_GPIO_PIN_8
    #define GPIO_UART_0_IOMUX_RX                                     (IOMUX_PINCM19)
    #define GPIO_UART_0_IOMUX_TX                                      (IOMUX_PINCM9)
    #define GPIO_UART_0_IOMUX_RX_FUNC                      IOMUX_PINCM19_PF_UART0_RX
    #define GPIO_UART_0_IOMUX_TX_FUNC                       IOMUX_PINCM9_PF_UART0_TX
    

    在这个项目中、当我来回切换时、唯一能看到的区别是:

    #define GPIO_UART_0_IOMUX_RX                    (IOMUX_PINCM19)// PA18

    #define GPIO_UART_0_IOMUX_RX                    (IOMUX_PINCM10)// PA9

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Dennis

    UART 问题已得到解决、感谢您的参与。

    最后是原理图错误、UART0被标记为 UART1。 我对此表示歉意。

    此致、

    卢卡