From 674dd7f2af670e17bacec0cbb2c7a770ead92054 Mon Sep 17 00:00:00 2001 From: rongli Date: Sun, 10 Jul 2016 04:35:40 +0800 Subject: [PATCH] cc2538: fix radio driver issue which would impact device acting as SED (#256) --- examples/platforms/cc2538/radio.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/examples/platforms/cc2538/radio.c b/examples/platforms/cc2538/radio.c index 1b10b192d..62f5702be 100644 --- a/examples/platforms/cc2538/radio.c +++ b/examples/platforms/cc2538/radio.c @@ -103,19 +103,22 @@ void enableReceiver(void) void disableReceiver(void) { - while (HWREG(RFCORE_XREG_FSMSTAT1) & RFCORE_XREG_FSMSTAT1_TX_ACTIVE); - - // flush rxfifo - HWREG(RFCORE_SFR_RFST) = CC2538_RF_CSP_OP_ISFLUSHRX; - HWREG(RFCORE_SFR_RFST) = CC2538_RF_CSP_OP_ISFLUSHRX; - - if (HWREG(RFCORE_XREG_RXENABLE) != 0) + if (sIsReceiverEnabled) { - // disable receiver - HWREG(RFCORE_SFR_RFST) = CC2538_RF_CSP_OP_ISRFOFF; - } + while (HWREG(RFCORE_XREG_FSMSTAT1) & RFCORE_XREG_FSMSTAT1_TX_ACTIVE); - sIsReceiverEnabled = false; + // flush rxfifo + HWREG(RFCORE_SFR_RFST) = CC2538_RF_CSP_OP_ISFLUSHRX; + HWREG(RFCORE_SFR_RFST) = CC2538_RF_CSP_OP_ISFLUSHRX; + + if (HWREG(RFCORE_XREG_RXENABLE) != 0) + { + // disable receiver + HWREG(RFCORE_SFR_RFST) = CC2538_RF_CSP_OP_ISRFOFF; + } + + sIsReceiverEnabled = false; + } } void setChannel(uint8_t channel) @@ -202,7 +205,7 @@ ThreadError otPlatRadioSleep(void) { ThreadError error = kThreadError_None; - VerifyOrExit(error = kStateIdle, error = kThreadError_Busy); + VerifyOrExit(error == kStateIdle, error = kThreadError_Busy); sState = kStateSleep; exit: