AnsweredAssumed Answered

Implementing UART RX/TX polarity inversion on MKE02Z64VLH4

Question asked by Alexander Sammons on Aug 21, 2019
Latest reply on Aug 22, 2019 by Felipe García

I am using MCUExpresso IDE 11 with MKE02Z64 SDK 2.4.1.


My application requires active high RX/TX operation.  It appears that in addition to the peripheral UART driver, KSDK 1.x also included low level HAL driver (fsl_uart_hal) which permitted setting UART inversion using the example code below.


void UART_HAL_SetTxRxInversionCmd(uint32_t baseAddr, bool rxInvertEnable, bool txInvertEnable)
      /* 0 - receive data not inverted, 1 - receive data inverted */
      BW_UART_S2_RXINV(baseAddr, (uint8_t)rxInvertEnable);
      /* 0 - transmit data not inverted, 1 - transmit data inverted*/
      BW_UART_C3_TXINV(baseAddr, (uint8_t)txInvertEnable);


Unfortunately, this is no longer accessible.  After doing a little digging around in MKE02Z4.h in my KSDK 2.4.1, it appears there are applicable UART control registers which seemingly allow to accomplish what I need:


#define UART_S2_RXINV_MASK (0x10U)
#define UART_S2_RXINV_SHIFT (4U)
#define UART_S2_RXINV(x) (((uint8_t)(((uint8_t)(x)) << UART_S2_RXINV_SHIFT)) & UART_S2_RXINV_MASK)


#define UART_C3_TXINV_MASK (0x10U)
#define UART_C3_TXINV_SHIFT (4U)
#define UART_C3_TXINV(x) (((uint8_t)(((uint8_t)(x)) << UART_C3_TXINV_SHIFT)) & UART_C3_TXINV_MASK)


Please advise on the best way to implement the control in the main application, and if such control needs to be assigned prior to each transmission / reception or only once upon initialization of the UART peripheral.








I was able to accomplish what I needed by implementing the following in my UART initialization routine:


((UART_Type *)UART2_BASE)->C3 |= (1<<4);
((UART_Type *)UART2_BASE)->S2 |= (1<<4);