Transitions to State PLL_ON [09]

This section describes how the state PLL_ON is entered. It can generally be reached by writing the value CMD_PLL_ON to the sub register SR_TRX_CMD. In case of any pending transmit or receive operation, e.g. if the radio transceiver is in one of the [BUSY] states, the state PLL_ON is reached after the completion of this transaction.

The following state transitions are defined:


PHY_STATE_TRX_OFF__PLL_ON

If the state PLL_ON is requested from the state TRX_OFF, the PLL needs up to 180 us to lock to the channel (see also PHY_EVENT_PLL_LOCK).

inline_mscgraph_28
Code example
    trx_bit_write(SR_TRX_CMD, CMD_PLL_ON);
    delay_us(180); /* TRX_IRQ_PLL_LOCK occurs within this period */
    trxstat = trx_bit_read(SR_TRX_STATUS);
    ASSERT(trxstat==PLL_ON);

PHY_STATE_[PLL_ACTIVE]__PLL_ON

If the state PLL_ON is requested from one of the [PLL_ACTIVE] states, the transition occurs within 1us, because the PLL does not need to relock. Because the [PLL_ACTIVE] states include the state PLL_ON itself, the software can keep track of this and can safe the register write operation in this case. Nevertheless, it is allowed to write CMD_PLL_ON in state PLL_ON, which simply causes no action in the radio transceiver.

inline_mscgraph_29
Code example
    trx_bit_write(SR_TRX_CMD, CMD_PLL_ON);
    delay_us(1);
    trxstat = trx_bit_read(SR_TRX_STATUS);
    ASSERT(trxstat==PLL_ON);

PHY_STATE_[BUSY]__PLL_ON

If the command CMD_PLL_ON is written to the sub register SR_TRX_CMD and the radio transceiver is in one of the [BUSY] states, the ongoing transmit or receive transaction is completed and the state change to PLL_ON occurs within 1 us after the TRX_IRQ_TRX_END interrupt. Usually it is redundant to write CMD_PLL_ON during state BUSY_TX, because the radio transceiver falls back automatically to state PLL_ON, when the transmission is done. Nevertheless this operation is allowed.

inline_mscgraph_30
Code example
    trx_bit_write(SR_TRX_CMD, CMD_PLL_ON);
    /* TRX_IRQ_TRX_END occurs here */
    delay_us(1);
    trxstat = trx_bit_read(SR_TRX_STATUS);
    ASSERT(trxstat==PLL_ON);

PHY_STATE_(BUSY_RX_AACK_NOMATCH)__PLL_ON

The pseudo state (BUSY_RX_AACK_NOMATCH) means, that the radio transceiver is in the state BUSY_RX_AACK and no TRX_IRQ_TRX_END occurs, because the address filter does not match or the FCS is wrong. In this case, the state PLL_ON is reached up to 4256 us after the state request. To avoid the long timeout, it is recommended, that the software polls the sub register SR_TRX_STATUS or use a transition via the state TRX_OFF using the CMD_FORCE_TRX_OFF (see PHY_FORCE_[ACTIVE]__TRX_OFF, PHY_STATE_TRX_OFF__PLL_ON), which will be significantly faster but cancels the ongoing transaction.

inline_mscgraph_31
Code example
    trx_bit_write(SR_TRX_CMD, CMD_PLL_ON);
    delay_us(4256);
    trxstat = trx_bit_read(SR_TRX_STATUS);
    ASSERT(trxstat==PLL_ON);

Generated on Fri Aug 10 16:10:04 2007 for SWPM AT86RF230 Rev. A by  doxygen 1.5.2