微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI无线射频设计 > CC1101睡眠问题:想降低系统功耗,打算采用定时睡眠唤醒的模式 ,但是现在好像进不去睡眠模式

CC1101睡眠问题:想降低系统功耗,打算采用定时睡眠唤醒的模式 ,但是现在好像进不去睡眠模式

时间:12-23 整理:3721RD 点击:

我运行了这两条指令:

CC1101_SET_CSN_HIGH( );
CC1101_Write_Cmd(CC1101_SPWD);

但是进不去睡眠模式,请问还应该配置其他的地方么?

你可以参考simpliciTI代码中关于sleep和wakeup的操作

/**************************************************************************************************
* @fn MRFI_Sleep
*
* @brief Request radio go to sleep.
*
* @param none
*
* @return none
**************************************************************************************************
*/
void MRFI_Sleep(void)
{
bspIState_t s;

/* Critical section necessary for watertight testing and
* setting of state variables.
*/
BSP_ENTER_CRITICAL_SECTION(s);

/* If radio is not asleep, put it to sleep */
if(mrfiRadioState != MRFI_RADIO_STATE_OFF)
{
/* go to idle so radio is in a known state before sleeping */
MRFI_RxIdle();

mrfiSpiCmdStrobe( SPWD );

/* Our new state is OFF */
mrfiRadioState = MRFI_RADIO_STATE_OFF;
}

BSP_EXIT_CRITICAL_SECTION(s);
}


/**************************************************************************************************
* @fn MRFI_WakeUp
*
* @brief Wake up radio from sleep state.
*
* @param none
*
* @return none
**************************************************************************************************
*/
void MRFI_WakeUp(void)
{
/* if radio is already awake, just ignore wakeup request */
if(mrfiRadioState != MRFI_RADIO_STATE_OFF)
{
return;
}

/* drive CSn low to initiate wakeup */
MRFI_SPI_DRIVE_CSN_LOW();

/* wait for MISO to go high indicating the oscillator is stable */
while (MRFI_SPI_SO_IS_HIGH());

/* wakeup is complete, drive CSn high and continue */
MRFI_SPI_DRIVE_CSN_HIGH();

/*
* The test registers must be restored after sleep for the CC1100 and CC2500 radios.
* This is not required for the CC1101 radio.
*/
#ifndef MRFI_CC1101
mrfiSpiWriteReg( TEST2, SMARTRF_SETTING_TEST2 );
mrfiSpiWriteReg( TEST1, SMARTRF_SETTING_TEST1 );
mrfiSpiWriteReg( TEST0, SMARTRF_SETTING_TEST0 );
#endif

/* enter idle mode */
mrfiRadioState = MRFI_RADIO_STATE_IDLE;
MRFI_STROBE_IDLE_AND_WAIT();

#ifdef MRFI_TIMER_ALWAYS_ACTIVE
stx_active = false; // indicate we're not in transmit
#endif // MRFI_TIMER_ALWAYS_ACTIVE
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top