From 6aae5f500630044e8b8ec85ec7ec81fdfdb79b93 Mon Sep 17 00:00:00 2001 From: Maciej Janicki Date: Tue, 2 Feb 2021 16:08:30 +0100 Subject: [PATCH] [EGD-5101] Add flow control configuration for cellular Fix flow control pin configuration in OS. Turn on flow control for cellular modem. --- .../rt1051/bsp/cellular/rt1051_cellular.cpp | 19 +++++++++++++------ .../board/rt1051/common/irq/irq_gpio.cpp | 6 +++++- module-bsp/board/rt1051/common/pin_mux.c | 5 ++--- module-bsp/board/rt1051/common/pin_mux.h | 4 ++-- module-cellular/Modem/TS0710/TS0710.h | 2 +- 5 files changed, 23 insertions(+), 13 deletions(-) diff --git a/module-bsp/board/rt1051/bsp/cellular/rt1051_cellular.cpp b/module-bsp/board/rt1051/bsp/cellular/rt1051_cellular.cpp index 0f4e1a0efd6d897ecabdb299b83520d025b4a9e0..d0ef27cdca7fef45efbb0e981a31ecf2b1570b4f 100644 --- a/module-bsp/board/rt1051/bsp/cellular/rt1051_cellular.cpp +++ b/module-bsp/board/rt1051/bsp/cellular/rt1051_cellular.cpp @@ -9,6 +9,7 @@ #include "../pit/pit.hpp" #include "dma_config.h" #include "fsl_cache.h" +#include "../../common/chip.hpp" #include #include @@ -99,6 +100,8 @@ namespace bsp s_cellularConfig.rxIdleConfig = kLPUART_IdleCharacter1; s_cellularConfig.enableTx = false; s_cellularConfig.enableRx = false; + s_cellularConfig.enableTxCTS = true; + s_cellularConfig.enableRxRTS = true; if (LPUART_Init(CELLULAR_UART_BASE, &s_cellularConfig, GetPerphSourceClock(PerphClock_LPUART)) != kStatus_Success) { @@ -109,12 +112,14 @@ namespace bsp LPUART_EnableInterrupts(CELLULAR_UART_BASE, kLPUART_IdleLineInterruptEnable | kLPUART_RxDataRegFullFlag); LPUART_ClearStatusFlags(CELLULAR_UART_BASE, 0xFFFFFFFF); NVIC_ClearPendingIRQ(LPUART1_IRQn); + NVIC_ClearPendingIRQ(GPIO1_Combined_0_15_IRQn); + NVIC_SetPriority(GPIO1_Combined_0_15_IRQn, configLIBRARY_LOWEST_INTERRUPT_PRIORITY); NVIC_SetPriority(LPUART1_IRQn, configLIBRARY_LOWEST_INTERRUPT_PRIORITY); + NVIC_EnableIRQ(GPIO1_Combined_0_15_IRQn); NVIC_EnableIRQ(LPUART1_IRQn); EnableRx(); isInitialized = true; - } void RT1051Cellular::SetSpeed(uint32_t portSpeed) @@ -135,6 +140,7 @@ namespace bsp DisableTx(); NVIC_DisableIRQ(LPUART1_IRQn); + NVIC_DisableIRQ(GPIO1_Combined_0_15_IRQn); LPUART_DisableInterrupts(CELLULAR_UART_BASE, kLPUART_IdleLineInterruptEnable | kLPUART_RxDataRegFullFlag); LPUART_ClearStatusFlags(CELLULAR_UART_BASE, 0xFFFFFFFF); NVIC_ClearPendingIRQ(LPUART1_IRQn); @@ -330,7 +336,7 @@ namespace bsp gpio_1->ConfPin(DriverGPIOPinParams{.dir = DriverGPIOPinParams::Direction::Input, .irqMode = DriverGPIOPinParams::InterruptMode::IntRisingOrFallingEdge, - .defLogic = 1, + .defLogic = 0, .pin = static_cast(BoardDefinitions::CELLULAR_GPIO_1_CTS_PIN)}); gpio_1->ConfPin( @@ -353,8 +359,8 @@ namespace bsp // OUTPUTS gpio_1->ConfPin(DriverGPIOPinParams{.dir = DriverGPIOPinParams::Direction::Output, - .irqMode = DriverGPIOPinParams::InterruptMode::NoIntmode, - .defLogic = 0, + .irqMode = DriverGPIOPinParams::InterruptMode::IntRisingOrFallingEdge, + .defLogic = 1, .pin = static_cast(BoardDefinitions::CELLULAR_GPIO_1_RTS_PIN)}); gpio_1->ConfPin(DriverGPIOPinParams{.dir = DriverGPIOPinParams::Direction::Output, @@ -414,7 +420,8 @@ namespace bsp ; // ENABLE INTERRUPTS - gpio_1->EnableInterrupt(1 << static_cast(BoardDefinitions::CELLULAR_GPIO_1_STATUS_PIN)); + gpio_1->EnableInterrupt(1 << static_cast(BoardDefinitions::CELLULAR_GPIO_1_CTS_PIN) | + 1 << static_cast(BoardDefinitions::CELLULAR_GPIO_1_STATUS_PIN)); gpio_2->EnableInterrupt(1 << static_cast(BoardDefinitions::CELLULAR_GPIO_2_SIM_TRAY_INSERTED_PIN) | 1 << static_cast(BoardDefinitions::CELLULAR_GPIO_2_RI_PIN)); } @@ -621,5 +628,5 @@ namespace bsp } } // namespace ringIndicator - } // namespace cellular + } // namespace cellular } // namespace bsp diff --git a/module-bsp/board/rt1051/common/irq/irq_gpio.cpp b/module-bsp/board/rt1051/common/irq/irq_gpio.cpp index b1c1039c267991a3da5c761f95e0314e4e3068ad..2184a2a85f4499e93e2bd50b35f467d793e9a8e6 100644 --- a/module-bsp/board/rt1051/common/irq/irq_gpio.cpp +++ b/module-bsp/board/rt1051/common/irq/irq_gpio.cpp @@ -1,4 +1,4 @@ -// Copyright (c) 2017-2020, Mudita Sp. z.o.o. All rights reserved. +// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved. // For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md #include "irq_gpio.hpp" @@ -73,6 +73,10 @@ namespace bsp xHigherPriorityTaskWoken |= cellular::status::statusIRQhandler(); } + if (irq_mask & (1 << BSP_CELLULAR_UART_CTS_PIN)) { + LOG_DEBUG("CELLULAR CTS IRQ!"); + } + // Clear all IRQs GPIO_PortClearInterruptFlags(GPIO1, irq_mask); diff --git a/module-bsp/board/rt1051/common/pin_mux.c b/module-bsp/board/rt1051/common/pin_mux.c index 63c9ce9e73659c3e439d682eaf0dbd5df9bb02d9..1ee0dc503a470e63da10b7e36ecf94bd68f08497 100644 --- a/module-bsp/board/rt1051/common/pin_mux.c +++ b/module-bsp/board/rt1051/common/pin_mux.c @@ -1216,9 +1216,8 @@ void PINMUX_InitCellular(void) IOMUXC_SetPinConfig(PINMUX_CELLULAR_UART_CTS, - PAD_CONFIG_SLEW_RATE_SLOW | PAD_CONFIG_DRIVER_STRENGTH_LVL_1 | PAD_CONFIG_SPEED_SLOW_50MHz | - PAD_CONFIG_PULL_KEEPER_ENABLED | PAD_CONFIG_SELECT_PULL | PAD_CONFIG_PULL_DOWN_100kOhm | - PAD_CONFIG_HYSTERESIS_DISABLED); + PAD_CONFIG_SLEW_RATE_SLOW | PAD_CONFIG_DRIVER_DISABLED | PAD_CONFIG_SPEED_SLOW_50MHz | + PAD_CONFIG_PULL_KEEPER_ENABLED | PAD_CONFIG_SELECT_PULL | PAD_CONFIG_PULL_DOWN_100kOhm); IOMUXC_SetPinConfig(PINMUX_CELLULAR_UART_RTS, diff --git a/module-bsp/board/rt1051/common/pin_mux.h b/module-bsp/board/rt1051/common/pin_mux.h index fd7386ab08d21305a52d98b5b0c5185f58c50b2d..28dbe2911fc1463db685ad8c2a82b0f98e1ddbd9 100644 --- a/module-bsp/board/rt1051/common/pin_mux.h +++ b/module-bsp/board/rt1051/common/pin_mux.h @@ -130,8 +130,8 @@ extern "C" */ #define PINMUX_CELLULAR_UART_TX IOMUXC_GPIO_AD_B0_12_LPUART1_TX #define PINMUX_CELLULAR_UART_RX IOMUXC_GPIO_AD_B0_13_LPUART1_RX -#define PINMUX_CELLULAR_UART_CTS IOMUXC_GPIO_AD_B0_14_GPIO1_IO14 -#define PINMUX_CELLULAR_UART_RTS IOMUXC_GPIO_AD_B0_15_GPIO1_IO15 +#define PINMUX_CELLULAR_UART_CTS IOMUXC_GPIO_AD_B0_14_LPUART1_CTS_B +#define PINMUX_CELLULAR_UART_RTS IOMUXC_GPIO_AD_B0_15_LPUART1_RTS_B #define PINMUX_CELLULAR_AP_READY IOMUXC_GPIO_B1_00_GPIO2_IO16 #define PINMUX_CELLULAR_RESET IOMUXC_GPIO_B1_01_GPIO2_IO17 #define PINMUX_CELLULAR_PWRKEY IOMUXC_GPIO_B1_02_GPIO2_IO18 diff --git a/module-cellular/Modem/TS0710/TS0710.h b/module-cellular/Modem/TS0710/TS0710.h index d17c385d4809c44564c07ffd4f4dbd8faf10aeba..ef36b6996d41a8bc36c19ecdea8f235da88f74c6 100644 --- a/module-cellular/Modem/TS0710/TS0710.h +++ b/module-cellular/Modem/TS0710/TS0710.h @@ -275,7 +275,7 @@ class TS0710 ATParser *parser; int CloseMultiplexer(); - const static bool hardwareControlFlowEnable = false; + static constexpr auto hardwareControlFlowEnable = true; bool searchForString(const std::vector &response, std::string str) {