/******************************************************************************* * Function Name: BLEIOT_UART_UartStop ******************************************************************************** * * Summary: * Changes the HSIOM settings for the UART output pins (TX and/or RTS) to keep * them inactive after the block is disabled. The output pins are controlled by * the GPIO data register. Also, the function disables the skip start feature to * not cause it to trigger after the component is enabled. * * Parameters: * None * * Return: * None * *******************************************************************************/ void BLEIOT_UART_UartStop(void) { #if(BLEIOT_UART_SCB_MODE_UNCONFIG_CONST_CFG) #if (BLEIOT_UART_TX_SDA_MISO_PIN) if (BLEIOT_UART_CHECK_TX_SDA_MISO_PIN_USED) { /* Set GPIO to drive output pin */ BLEIOT_UART_SET_HSIOM_SEL(BLEIOT_UART_TX_SDA_MISO_HSIOM_REG, BLEIOT_UART_TX_SDA_MISO_HSIOM_MASK, BLEIOT_UART_TX_SDA_MISO_HSIOM_POS, BLEIOT_UART_HSIOM_GPIO_SEL); } #endif /* (BLEIOT_UART_TX_SDA_MISO_PIN_PIN) */ #if (BLEIOT_UART_RTS_SS0_PIN) if (BLEIOT_UART_CHECK_RTS_SS0_PIN_USED) { /* Set output pin state after block is disabled */ BLEIOT_UART_uart_rts_spi_ss0_Write(BLEIOT_UART_GET_UART_RTS_INACTIVE); /* Set GPIO to drive output pin */ BLEIOT_UART_SET_HSIOM_SEL(BLEIOT_UART_RTS_SS0_HSIOM_REG, BLEIOT_UART_RTS_SS0_HSIOM_MASK, BLEIOT_UART_RTS_SS0_HSIOM_POS, BLEIOT_UART_HSIOM_GPIO_SEL); } #endif /* (BLEIOT_UART_SS0_PIN) */ #else #if (BLEIOT_UART_UART_TX_PIN) /* Set GPIO to drive output pin */ BLEIOT_UART_SET_HSIOM_SEL(BLEIOT_UART_TX_HSIOM_REG, BLEIOT_UART_TX_HSIOM_MASK, BLEIOT_UART_TX_HSIOM_POS, BLEIOT_UART_HSIOM_GPIO_SEL); #endif /* (BLEIOT_UART_UART_TX_PIN) */ #if (BLEIOT_UART_UART_RTS_PIN) /* Set output pin state after block is disabled */ BLEIOT_UART_rts_Write(BLEIOT_UART_GET_UART_RTS_INACTIVE); /* Set GPIO to drive output pin */ BLEIOT_UART_SET_HSIOM_SEL(BLEIOT_UART_RTS_HSIOM_REG, BLEIOT_UART_RTS_HSIOM_MASK, BLEIOT_UART_RTS_HSIOM_POS, BLEIOT_UART_HSIOM_GPIO_SEL); #endif /* (BLEIOT_UART_UART_RTS_PIN) */ #endif /* (BLEIOT_UART_SCB_MODE_UNCONFIG_CONST_CFG) */ #if (BLEIOT_UART_UART_WAKE_ENABLE_CONST) /* Disable skip start feature used for wakeup */ BLEIOT_UART_UART_RX_CTRL_REG &= (uint32) ~BLEIOT_UART_UART_RX_CTRL_SKIP_START; #endif /* (BLEIOT_UART_UART_WAKE_ENABLE_CONST) */ }
/******************************************************************************* * Function Name: BLEIOT_UART_UartPostEnable ******************************************************************************** * * Summary: * Restores HSIOM settings for the UART output pins (TX and/or RTS) to be * controlled by the SCB UART. * * Parameters: * None * * Return: * None * *******************************************************************************/ void BLEIOT_UART_UartPostEnable(void) { #if (BLEIOT_UART_SCB_MODE_UNCONFIG_CONST_CFG) #if (BLEIOT_UART_TX_SDA_MISO_PIN) if (BLEIOT_UART_CHECK_TX_SDA_MISO_PIN_USED) { /* Set SCB UART to drive the output pin */ BLEIOT_UART_SET_HSIOM_SEL(BLEIOT_UART_TX_SDA_MISO_HSIOM_REG, BLEIOT_UART_TX_SDA_MISO_HSIOM_MASK, BLEIOT_UART_TX_SDA_MISO_HSIOM_POS, BLEIOT_UART_HSIOM_UART_SEL); } #endif /* (BLEIOT_UART_TX_SDA_MISO_PIN_PIN) */ #if (BLEIOT_UART_RTS_SS0_PIN) if (BLEIOT_UART_CHECK_RTS_SS0_PIN_USED) { /* Set SCB UART to drive the output pin */ BLEIOT_UART_SET_HSIOM_SEL(BLEIOT_UART_RTS_SS0_HSIOM_REG, BLEIOT_UART_RTS_SS0_HSIOM_MASK, BLEIOT_UART_RTS_SS0_HSIOM_POS, BLEIOT_UART_HSIOM_UART_SEL); } #endif /* (BLEIOT_UART_RTS_SS0_PIN) */ #else #if (BLEIOT_UART_UART_TX_PIN) /* Set SCB UART to drive the output pin */ BLEIOT_UART_SET_HSIOM_SEL(BLEIOT_UART_TX_HSIOM_REG, BLEIOT_UART_TX_HSIOM_MASK, BLEIOT_UART_TX_HSIOM_POS, BLEIOT_UART_HSIOM_UART_SEL); #endif /* (BLEIOT_UART_UART_TX_PIN) */ #if (BLEIOT_UART_UART_RTS_PIN) /* Set SCB UART to drive the output pin */ BLEIOT_UART_SET_HSIOM_SEL(BLEIOT_UART_RTS_HSIOM_REG, BLEIOT_UART_RTS_HSIOM_MASK, BLEIOT_UART_RTS_HSIOM_POS, BLEIOT_UART_HSIOM_UART_SEL); #endif /* (BLEIOT_UART_UART_RTS_PIN) */ #endif /* (BLEIOT_UART_SCB_MODE_UNCONFIG_CONST_CFG) */ }
/******************************************************************************* * Function Name: BLEIOT_UART_SetPins ******************************************************************************** * * Summary: * Sets the pins settings accordingly to the selected operation mode. * Only available in the Unconfigured operation mode. The mode specific * initialization function calls it. * Pins configuration is set by PSoC Creator when a specific mode of operation * is selected in design time. * * Parameters: * mode: Mode of SCB operation. * subMode: Sub-mode of SCB operation. It is only required for SPI and UART * modes. * uartEnableMask: enables TX or RX direction and RTS and CTS signals. * * Return: * None * *******************************************************************************/ void BLEIOT_UART_SetPins(uint32 mode, uint32 subMode, uint32 uartEnableMask) { uint32 hsiomSel [BLEIOT_UART_SCB_PINS_NUMBER]; uint32 pinsDm [BLEIOT_UART_SCB_PINS_NUMBER]; #if (!BLEIOT_UART_CY_SCBIP_V1) uint32 pinsInBuf = 0u; #endif /* (!BLEIOT_UART_CY_SCBIP_V1) */ uint32 i; /* Set default HSIOM to GPIO and Drive Mode to Analog Hi-Z */ for (i = 0u; i < BLEIOT_UART_SCB_PINS_NUMBER; i++) { hsiomSel[i] = BLEIOT_UART_HSIOM_DEF_SEL; pinsDm[i] = BLEIOT_UART_PIN_DM_ALG_HIZ; } if ((BLEIOT_UART_SCB_MODE_I2C == mode) || (BLEIOT_UART_SCB_MODE_EZI2C == mode)) { hsiomSel[BLEIOT_UART_RX_SCL_MOSI_PIN_INDEX] = BLEIOT_UART_HSIOM_I2C_SEL; hsiomSel[BLEIOT_UART_TX_SDA_MISO_PIN_INDEX] = BLEIOT_UART_HSIOM_I2C_SEL; pinsDm[BLEIOT_UART_RX_SCL_MOSI_PIN_INDEX] = BLEIOT_UART_PIN_DM_OD_LO; pinsDm[BLEIOT_UART_TX_SDA_MISO_PIN_INDEX] = BLEIOT_UART_PIN_DM_OD_LO; } #if (!BLEIOT_UART_CY_SCBIP_V1) else if (BLEIOT_UART_SCB_MODE_SPI == mode) { hsiomSel[BLEIOT_UART_RX_SCL_MOSI_PIN_INDEX] = BLEIOT_UART_HSIOM_SPI_SEL; hsiomSel[BLEIOT_UART_TX_SDA_MISO_PIN_INDEX] = BLEIOT_UART_HSIOM_SPI_SEL; hsiomSel[BLEIOT_UART_CTS_SCLK_PIN_INDEX] = BLEIOT_UART_HSIOM_SPI_SEL; if (BLEIOT_UART_SPI_SLAVE == subMode) { /* Slave */ pinsDm[BLEIOT_UART_RX_SCL_MOSI_PIN_INDEX] = BLEIOT_UART_PIN_DM_DIG_HIZ; pinsDm[BLEIOT_UART_TX_SDA_MISO_PIN_INDEX] = BLEIOT_UART_PIN_DM_STRONG; pinsDm[BLEIOT_UART_CTS_SCLK_PIN_INDEX] = BLEIOT_UART_PIN_DM_DIG_HIZ; #if (BLEIOT_UART_RTS_SS0_PIN) /* Only SS0 is valid choice for Slave */ hsiomSel[BLEIOT_UART_RTS_SS0_PIN_INDEX] = BLEIOT_UART_HSIOM_SPI_SEL; pinsDm [BLEIOT_UART_RTS_SS0_PIN_INDEX] = BLEIOT_UART_PIN_DM_DIG_HIZ; #endif /* (BLEIOT_UART_RTS_SS0_PIN) */ #if (BLEIOT_UART_TX_SDA_MISO_PIN) /* Disable input buffer */ pinsInBuf |= BLEIOT_UART_TX_SDA_MISO_PIN_MASK; #endif /* (BLEIOT_UART_TX_SDA_MISO_PIN) */ } else /* (Master) */ { pinsDm[BLEIOT_UART_RX_SCL_MOSI_PIN_INDEX] = BLEIOT_UART_PIN_DM_STRONG; pinsDm[BLEIOT_UART_TX_SDA_MISO_PIN_INDEX] = BLEIOT_UART_PIN_DM_DIG_HIZ; pinsDm[BLEIOT_UART_CTS_SCLK_PIN_INDEX] = BLEIOT_UART_PIN_DM_STRONG; #if (BLEIOT_UART_RTS_SS0_PIN) hsiomSel [BLEIOT_UART_RTS_SS0_PIN_INDEX] = BLEIOT_UART_HSIOM_SPI_SEL; pinsDm [BLEIOT_UART_RTS_SS0_PIN_INDEX] = BLEIOT_UART_PIN_DM_STRONG; pinsInBuf |= BLEIOT_UART_RTS_SS0_PIN_MASK; #endif /* (BLEIOT_UART_RTS_SS0_PIN) */ #if (BLEIOT_UART_SS1_PIN) hsiomSel [BLEIOT_UART_SS1_PIN_INDEX] = BLEIOT_UART_HSIOM_SPI_SEL; pinsDm [BLEIOT_UART_SS1_PIN_INDEX] = BLEIOT_UART_PIN_DM_STRONG; pinsInBuf |= BLEIOT_UART_SS1_PIN_MASK; #endif /* (BLEIOT_UART_SS1_PIN) */ #if (BLEIOT_UART_SS2_PIN) hsiomSel [BLEIOT_UART_SS2_PIN_INDEX] = BLEIOT_UART_HSIOM_SPI_SEL; pinsDm [BLEIOT_UART_SS2_PIN_INDEX] = BLEIOT_UART_PIN_DM_STRONG; pinsInBuf |= BLEIOT_UART_SS2_PIN_MASK; #endif /* (BLEIOT_UART_SS2_PIN) */ #if (BLEIOT_UART_SS3_PIN) hsiomSel [BLEIOT_UART_SS3_PIN_INDEX] = BLEIOT_UART_HSIOM_SPI_SEL; pinsDm [BLEIOT_UART_SS3_PIN_INDEX] = BLEIOT_UART_PIN_DM_STRONG; pinsInBuf |= BLEIOT_UART_SS3_PIN_MASK; #endif /* (BLEIOT_UART_SS3_PIN) */ /* Disable input buffers */ #if (BLEIOT_UART_RX_SCL_MOSI_PIN) pinsInBuf |= BLEIOT_UART_RX_SCL_MOSI_PIN_MASK; #endif /* (BLEIOT_UART_RX_SCL_MOSI_PIN) */ #if (BLEIOT_UART_RX_WAKE_SCL_MOSI_PIN) pinsInBuf |= BLEIOT_UART_RX_WAKE_SCL_MOSI_PIN_MASK; #endif /* (BLEIOT_UART_RX_WAKE_SCL_MOSI_PIN) */ #if (BLEIOT_UART_CTS_SCLK_PIN) pinsInBuf |= BLEIOT_UART_CTS_SCLK_PIN_MASK; #endif /* (BLEIOT_UART_CTS_SCLK_PIN) */ } } else /* UART */ { if (BLEIOT_UART_UART_MODE_SMARTCARD == subMode) { /* SmartCard */ hsiomSel[BLEIOT_UART_TX_SDA_MISO_PIN_INDEX] = BLEIOT_UART_HSIOM_UART_SEL; pinsDm [BLEIOT_UART_TX_SDA_MISO_PIN_INDEX] = BLEIOT_UART_PIN_DM_OD_LO; } else /* Standard or IrDA */ { if (0u != (BLEIOT_UART_UART_RX_PIN_ENABLE & uartEnableMask)) { hsiomSel[BLEIOT_UART_RX_SCL_MOSI_PIN_INDEX] = BLEIOT_UART_HSIOM_UART_SEL; pinsDm [BLEIOT_UART_RX_SCL_MOSI_PIN_INDEX] = BLEIOT_UART_PIN_DM_DIG_HIZ; } if (0u != (BLEIOT_UART_UART_TX_PIN_ENABLE & uartEnableMask)) { hsiomSel[BLEIOT_UART_TX_SDA_MISO_PIN_INDEX] = BLEIOT_UART_HSIOM_UART_SEL; pinsDm [BLEIOT_UART_TX_SDA_MISO_PIN_INDEX] = BLEIOT_UART_PIN_DM_STRONG; #if (BLEIOT_UART_TX_SDA_MISO_PIN) pinsInBuf |= BLEIOT_UART_TX_SDA_MISO_PIN_MASK; #endif /* (BLEIOT_UART_TX_SDA_MISO_PIN) */ } #if !(BLEIOT_UART_CY_SCBIP_V0 || BLEIOT_UART_CY_SCBIP_V1) if (BLEIOT_UART_UART_MODE_STD == subMode) { if (0u != (BLEIOT_UART_UART_CTS_PIN_ENABLE & uartEnableMask)) { /* CTS input is multiplexed with SCLK */ hsiomSel[BLEIOT_UART_CTS_SCLK_PIN_INDEX] = BLEIOT_UART_HSIOM_UART_SEL; pinsDm [BLEIOT_UART_CTS_SCLK_PIN_INDEX] = BLEIOT_UART_PIN_DM_DIG_HIZ; } if (0u != (BLEIOT_UART_UART_RTS_PIN_ENABLE & uartEnableMask)) { /* RTS output is multiplexed with SS0 */ hsiomSel[BLEIOT_UART_RTS_SS0_PIN_INDEX] = BLEIOT_UART_HSIOM_UART_SEL; pinsDm [BLEIOT_UART_RTS_SS0_PIN_INDEX] = BLEIOT_UART_PIN_DM_STRONG; #if (BLEIOT_UART_RTS_SS0_PIN) /* Disable input buffer */ pinsInBuf |= BLEIOT_UART_RTS_SS0_PIN_MASK; #endif /* (BLEIOT_UART_RTS_SS0_PIN) */ } } #endif /* !(BLEIOT_UART_CY_SCBIP_V0 || BLEIOT_UART_CY_SCBIP_V1) */ } } #endif /* (!BLEIOT_UART_CY_SCBIP_V1) */ /* Configure pins: set HSIOM, DM and InputBufEnable */ /* Note: the DR register settings do not effect the pin output if HSIOM is other than GPIO */ #if (BLEIOT_UART_RX_WAKE_SCL_MOSI_PIN) BLEIOT_UART_SET_HSIOM_SEL(BLEIOT_UART_RX_WAKE_SCL_MOSI_HSIOM_REG, BLEIOT_UART_RX_WAKE_SCL_MOSI_HSIOM_MASK, BLEIOT_UART_RX_WAKE_SCL_MOSI_HSIOM_POS, hsiomSel[BLEIOT_UART_RX_WAKE_SCL_MOSI_PIN_INDEX]); BLEIOT_UART_uart_rx_wake_i2c_scl_spi_mosi_SetDriveMode((uint8) pinsDm[BLEIOT_UART_RX_WAKE_SCL_MOSI_PIN_INDEX]); BLEIOT_UART_SET_INP_DIS(BLEIOT_UART_uart_rx_wake_i2c_scl_spi_mosi_INP_DIS, BLEIOT_UART_uart_rx_wake_i2c_scl_spi_mosi_MASK, (0u != (pinsInBuf & BLEIOT_UART_RX_WAKE_SCL_MOSI_PIN_MASK))); /* Set interrupt on falling edge */ BLEIOT_UART_SET_INCFG_TYPE(BLEIOT_UART_RX_WAKE_SCL_MOSI_INTCFG_REG, BLEIOT_UART_RX_WAKE_SCL_MOSI_INTCFG_TYPE_MASK, BLEIOT_UART_RX_WAKE_SCL_MOSI_INTCFG_TYPE_POS, BLEIOT_UART_INTCFG_TYPE_FALLING_EDGE); #endif /* (BLEIOT_UART_RX_WAKE_SCL_MOSI_PIN) */ #if (BLEIOT_UART_RX_SCL_MOSI_PIN) BLEIOT_UART_SET_HSIOM_SEL(BLEIOT_UART_RX_SCL_MOSI_HSIOM_REG, BLEIOT_UART_RX_SCL_MOSI_HSIOM_MASK, BLEIOT_UART_RX_SCL_MOSI_HSIOM_POS, hsiomSel[BLEIOT_UART_RX_SCL_MOSI_PIN_INDEX]); BLEIOT_UART_uart_rx_i2c_scl_spi_mosi_SetDriveMode((uint8) pinsDm[BLEIOT_UART_RX_SCL_MOSI_PIN_INDEX]); #if (!BLEIOT_UART_CY_SCBIP_V1) BLEIOT_UART_SET_INP_DIS(BLEIOT_UART_uart_rx_i2c_scl_spi_mosi_INP_DIS, BLEIOT_UART_uart_rx_i2c_scl_spi_mosi_MASK, (0u != (pinsInBuf & BLEIOT_UART_RX_SCL_MOSI_PIN_MASK))); #endif /* (!BLEIOT_UART_CY_SCBIP_V1) */ #endif /* (BLEIOT_UART_RX_SCL_MOSI_PIN) */ #if (BLEIOT_UART_TX_SDA_MISO_PIN) BLEIOT_UART_SET_HSIOM_SEL(BLEIOT_UART_TX_SDA_MISO_HSIOM_REG, BLEIOT_UART_TX_SDA_MISO_HSIOM_MASK, BLEIOT_UART_TX_SDA_MISO_HSIOM_POS, hsiomSel[BLEIOT_UART_TX_SDA_MISO_PIN_INDEX]); BLEIOT_UART_uart_tx_i2c_sda_spi_miso_SetDriveMode((uint8) pinsDm[BLEIOT_UART_TX_SDA_MISO_PIN_INDEX]); #if (!BLEIOT_UART_CY_SCBIP_V1) BLEIOT_UART_SET_INP_DIS(BLEIOT_UART_uart_tx_i2c_sda_spi_miso_INP_DIS, BLEIOT_UART_uart_tx_i2c_sda_spi_miso_MASK, (0u != (pinsInBuf & BLEIOT_UART_TX_SDA_MISO_PIN_MASK))); #endif /* (!BLEIOT_UART_CY_SCBIP_V1) */ #endif /* (BLEIOT_UART_RX_SCL_MOSI_PIN) */ #if (BLEIOT_UART_CTS_SCLK_PIN) BLEIOT_UART_SET_HSIOM_SEL(BLEIOT_UART_CTS_SCLK_HSIOM_REG, BLEIOT_UART_CTS_SCLK_HSIOM_MASK, BLEIOT_UART_CTS_SCLK_HSIOM_POS, hsiomSel[BLEIOT_UART_CTS_SCLK_PIN_INDEX]); BLEIOT_UART_uart_cts_spi_sclk_SetDriveMode((uint8) pinsDm[BLEIOT_UART_CTS_SCLK_PIN_INDEX]); BLEIOT_UART_SET_INP_DIS(BLEIOT_UART_uart_cts_spi_sclk_INP_DIS, BLEIOT_UART_uart_cts_spi_sclk_MASK, (0u != (pinsInBuf & BLEIOT_UART_CTS_SCLK_PIN_MASK))); #endif /* (BLEIOT_UART_CTS_SCLK_PIN) */ #if (BLEIOT_UART_RTS_SS0_PIN) BLEIOT_UART_SET_HSIOM_SEL(BLEIOT_UART_RTS_SS0_HSIOM_REG, BLEIOT_UART_RTS_SS0_HSIOM_MASK, BLEIOT_UART_RTS_SS0_HSIOM_POS, hsiomSel[BLEIOT_UART_RTS_SS0_PIN_INDEX]); BLEIOT_UART_uart_rts_spi_ss0_SetDriveMode((uint8) pinsDm[BLEIOT_UART_RTS_SS0_PIN_INDEX]); BLEIOT_UART_SET_INP_DIS(BLEIOT_UART_uart_rts_spi_ss0_INP_DIS, BLEIOT_UART_uart_rts_spi_ss0_MASK, (0u != (pinsInBuf & BLEIOT_UART_RTS_SS0_PIN_MASK))); #endif /* (BLEIOT_UART_RTS_SS0_PIN) */ #if (BLEIOT_UART_SS1_PIN) BLEIOT_UART_SET_HSIOM_SEL(BLEIOT_UART_SS1_HSIOM_REG, BLEIOT_UART_SS1_HSIOM_MASK, BLEIOT_UART_SS1_HSIOM_POS, hsiomSel[BLEIOT_UART_SS1_PIN_INDEX]); BLEIOT_UART_spi_ss1_SetDriveMode((uint8) pinsDm[BLEIOT_UART_SS1_PIN_INDEX]); BLEIOT_UART_SET_INP_DIS(BLEIOT_UART_spi_ss1_INP_DIS, BLEIOT_UART_spi_ss1_MASK, (0u != (pinsInBuf & BLEIOT_UART_SS1_PIN_MASK))); #endif /* (BLEIOT_UART_SS1_PIN) */ #if (BLEIOT_UART_SS2_PIN) BLEIOT_UART_SET_HSIOM_SEL(BLEIOT_UART_SS2_HSIOM_REG, BLEIOT_UART_SS2_HSIOM_MASK, BLEIOT_UART_SS2_HSIOM_POS, hsiomSel[BLEIOT_UART_SS2_PIN_INDEX]); BLEIOT_UART_spi_ss2_SetDriveMode((uint8) pinsDm[BLEIOT_UART_SS2_PIN_INDEX]); BLEIOT_UART_SET_INP_DIS(BLEIOT_UART_spi_ss2_INP_DIS, BLEIOT_UART_spi_ss2_MASK, (0u != (pinsInBuf & BLEIOT_UART_SS2_PIN_MASK))); #endif /* (BLEIOT_UART_SS2_PIN) */ #if (BLEIOT_UART_SS3_PIN) BLEIOT_UART_SET_HSIOM_SEL(BLEIOT_UART_SS3_HSIOM_REG, BLEIOT_UART_SS3_HSIOM_MASK, BLEIOT_UART_SS3_HSIOM_POS, hsiomSel[BLEIOT_UART_SS3_PIN_INDEX]); BLEIOT_UART_spi_ss3_SetDriveMode((uint8) pinsDm[BLEIOT_UART_SS3_PIN_INDEX]); BLEIOT_UART_SET_INP_DIS(BLEIOT_UART_spi_ss3_INP_DIS, BLEIOT_UART_spi_ss3_MASK, (0u != (pinsInBuf & BLEIOT_UART_SS3_PIN_MASK))); #endif /* (BLEIOT_UART_SS3_PIN) */ }