mirror of
https://github.com/apache/nuttx.git
synced 2026-06-02 09:38:37 +08:00
drivers/wireless/ieee802154/mrf24j40/: Fixes bug causing radio to cease transmitting
This commit is contained in:
@@ -279,17 +279,6 @@ void mrf24j40_setorder(FAR struct mrf24j40_radio_s *dev, uint8_t bo, uint8_t so)
|
|||||||
slpcal |= (mrf24j40_getreg(dev->spi, MRF24J40_SLPCAL1) << 8);
|
slpcal |= (mrf24j40_getreg(dev->spi, MRF24J40_SLPCAL1) << 8);
|
||||||
slpcal |= ((mrf24j40_getreg(dev->spi, MRF24J40_SLPCAL2) << 16) & 0x0F);
|
slpcal |= ((mrf24j40_getreg(dev->spi, MRF24J40_SLPCAL2) << 16) & 0x0F);
|
||||||
|
|
||||||
/* Set WAKECNT (SLPACK 0x35<6:0>) value = 0xC8 to set the main oscillator
|
|
||||||
* (20 MHz) start-up timer value.
|
|
||||||
*/
|
|
||||||
|
|
||||||
mrf24j40_setreg(dev->spi, MRF24J40_SLPACK, 0xC8);
|
|
||||||
|
|
||||||
/* Set WAKETIME to recommended value for 100kHz SLPCLK Source */
|
|
||||||
|
|
||||||
mrf24j40_setreg(dev->spi, MRF24J40_WAKETIMEL, 0xD2);
|
|
||||||
mrf24j40_setreg(dev->spi, MRF24J40_WAKETIMEH, 0x00);
|
|
||||||
|
|
||||||
/* Program the Beacon Interval into the Main Counter, MAINCNT (0x229<1:0>,
|
/* Program the Beacon Interval into the Main Counter, MAINCNT (0x229<1:0>,
|
||||||
* 0x228, 0x227, 0x226), and Remain Counter, REMCNT (0x225, 0x224),
|
* 0x228, 0x227, 0x226), and Remain Counter, REMCNT (0x225, 0x224),
|
||||||
* according to BO and SO values. Refer to Section 3.15.1.3 “Sleep Mode
|
* according to BO and SO values. Refer to Section 3.15.1.3 “Sleep Mode
|
||||||
|
|||||||
@@ -258,6 +258,24 @@ int mrf24j40_reset(FAR struct ieee802154_radio_s *radio)
|
|||||||
|
|
||||||
mrf24j40_setreg(dev->spi, MRF24J40_ACKTMOUT, 0x39 | MRF24J40_ACKTMOUT_DRPACK);
|
mrf24j40_setreg(dev->spi, MRF24J40_ACKTMOUT, 0x39 | MRF24J40_ACKTMOUT_DRPACK);
|
||||||
|
|
||||||
|
/* Set WAKETIME to recommended value for 100kHz SLPCLK Source.
|
||||||
|
*
|
||||||
|
* NOTE!!!: The datasheet specifies that WAKETIME > WAKECNT. It appears that
|
||||||
|
* it is even sensitive to the order in which you set WAKECNT and WAKETIME.
|
||||||
|
* Meaning, if you set WAKECNT first and it goes higher than WAKETIME, and
|
||||||
|
* then raise WAKETIME above WAKECNT, the device will not function correctly.
|
||||||
|
* Therefore, be careful when changing these registers
|
||||||
|
*/
|
||||||
|
|
||||||
|
mrf24j40_setreg(dev->spi, MRF24J40_WAKETIMEL, 0xD2);
|
||||||
|
mrf24j40_setreg(dev->spi, MRF24J40_WAKETIMEH, 0x00);
|
||||||
|
|
||||||
|
/* Set WAKECNT (SLPACK 0x35<6:0>) value = 0x5F to set the main oscillator
|
||||||
|
* (20 MHz) start-up timer value.
|
||||||
|
*/
|
||||||
|
|
||||||
|
mrf24j40_setreg(dev->spi, MRF24J40_SLPACK, 0x5F);
|
||||||
|
|
||||||
/* Enable the SLPIF and WAKEIF flags */
|
/* Enable the SLPIF and WAKEIF flags */
|
||||||
|
|
||||||
reg = mrf24j40_getreg(dev->spi, MRF24J40_INTCON);
|
reg = mrf24j40_getreg(dev->spi, MRF24J40_INTCON);
|
||||||
|
|||||||
Reference in New Issue
Block a user