diff --git a/cc3200/misc/antenna.c b/cc3200/misc/antenna.c index 5c7f3053e7..0fbf79f0fc 100644 --- a/cc3200/misc/antenna.c +++ b/cc3200/misc/antenna.c @@ -55,32 +55,24 @@ static antenna_type_t antenna_type_selected = ANTENNA_TYPE_INTERNAL; DEFINE PUBLIC FUNCTIONS ******************************************************************************/ void antenna_init0(void) { - - MAP_PRCMPeripheralClkEnable(PRCM_GPIOA3, PRCM_RUN_MODE_CLK); + // enable the peripheral clock and set the gpio direction for + // both antenna 1 and antenna 2 pins + MAP_PRCMPeripheralClkEnable(PRCM_GPIOA3, PRCM_RUN_MODE_CLK | PRCM_SLP_MODE_CLK); MAP_GPIODirModeSet(GPIOA3_BASE, 0x0C, GPIO_DIR_MODE_OUT); - // configure PIN_29 for GPIOOutput - HWREG(REG_PAD_CONFIG_26) = ((HWREG(REG_PAD_CONFIG_26) & ~(PAD_STRENGTH_MASK - | PAD_TYPE_MASK)) | (0x00000020 | 0x00000000 )); - + // configure antenna 1 pin type and strength + HWREG(REG_PAD_CONFIG_26) = ((HWREG(REG_PAD_CONFIG_26) & ~(PAD_STRENGTH_MASK | PAD_TYPE_MASK)) | (0x00000020 | 0x00000000)); // set the mode - HWREG(REG_PAD_CONFIG_26) = (((HWREG(REG_PAD_CONFIG_26) & ~PAD_MODE_MASK) | - 0x00000000) & ~(3 << 10)); - + HWREG(REG_PAD_CONFIG_26) = ((HWREG(REG_PAD_CONFIG_26) & ~PAD_MODE_MASK) | 0x00000000) & ~(3 << 10); // set the direction HWREG(REG_PAD_CONFIG_26) = ((HWREG(REG_PAD_CONFIG_26) & ~0xC00) | 0x00000800); - - // configure PIN_30 for GPIOOutput - HWREG(REG_PAD_CONFIG_27) = ((HWREG(REG_PAD_CONFIG_27) & ~(PAD_STRENGTH_MASK - | PAD_TYPE_MASK)) | (0x00000020 | 0x00000000 )); - + // configure antenna 2 pin type and strength + HWREG(REG_PAD_CONFIG_27) = ((HWREG(REG_PAD_CONFIG_27) & ~(PAD_STRENGTH_MASK | PAD_TYPE_MASK)) | (0x00000020 | 0x00000000)); // set the mode - HWREG(REG_PAD_CONFIG_27) = (((HWREG(REG_PAD_CONFIG_27) & ~PAD_MODE_MASK) | - 0x00000000) & ~(3 << 10)); - + HWREG(REG_PAD_CONFIG_27) = ((HWREG(REG_PAD_CONFIG_27) & ~PAD_MODE_MASK) | 0x00000000) & ~(3 << 10); // set the direction - HWREG(REG_PAD_CONFIG_26) = ((HWREG(REG_PAD_CONFIG_27) & ~0xC00) | 0x00000800); + HWREG(REG_PAD_CONFIG_27) = ((HWREG(REG_PAD_CONFIG_27) & ~0xC00) | 0x00000800); // select the currently active antenna antenna_select(antenna_type_selected); @@ -89,8 +81,14 @@ void antenna_init0(void) { void antenna_select (antenna_type_t _antenna) { if (_antenna == ANTENNA_TYPE_INTERNAL) { MAP_GPIOPinWrite(GPIOA3_BASE, 0x0C, 0x04); + // also configure the pull-up and pull-down accordingly + HWREG(REG_PAD_CONFIG_26) = ((HWREG(REG_PAD_CONFIG_26) & ~PAD_TYPE_MASK)) | PIN_TYPE_STD_PU; + HWREG(REG_PAD_CONFIG_27) = ((HWREG(REG_PAD_CONFIG_27) & ~PAD_TYPE_MASK)) | PIN_TYPE_STD_PD; } else { MAP_GPIOPinWrite(GPIOA3_BASE, 0x0C, 0x08); + // also configure the pull-up and pull-down accordingly + HWREG(REG_PAD_CONFIG_26) = ((HWREG(REG_PAD_CONFIG_26) & ~PAD_TYPE_MASK)) | PIN_TYPE_STD_PD; + HWREG(REG_PAD_CONFIG_27) = ((HWREG(REG_PAD_CONFIG_27) & ~PAD_TYPE_MASK)) | PIN_TYPE_STD_PU; } antenna_type_selected = _antenna; } diff --git a/cc3200/mods/pybsleep.c b/cc3200/mods/pybsleep.c index af16cc512c..f810f91403 100644 --- a/cc3200/mods/pybsleep.c +++ b/cc3200/mods/pybsleep.c @@ -499,9 +499,17 @@ STATIC void pybsleep_iopark (bool hibernate) { if (hibernate) { #endif // park the antenna selection pins + // (tri-stated with pull down enabled) HWREG(0x4402E108) = 0x00000E61; HWREG(0x4402E10C) = 0x00000E61; #if MICROPY_HW_ANTENNA_DIVERSITY + } else { + // park the antenna selection pins + // (tri-stated without changing the pull up/down resistors) + HWREG(0x4402E108) &= ~0x000000FF; + HWREG(0x4402E108) |= 0x00000C61; + HWREG(0x4402E10C) &= ~0x000000FF; + HWREG(0x4402E10C) |= 0x00000C61; } #endif }