This example illustrates the use of the basic radio transceiver access functions. It can be used to test a new board definition.
#include "board.h"
#include "transceiver.h"
#include "ioutil.h"
#include "xmpl.h"
static volatile trx_regval_t irq_cause;
int main(void)
{
static volatile trx_regval_t rval;
trap_if_key_pressed();
LED_INIT();
trx_io_init(SPI_RATE_1_2);
LED_SET_VALUE(LED_MAX_VALUE);
LED_SET_VALUE(0);
DELAY_US(TRX_INIT_TIME_US);
TRX_RESET_LOW();
TRX_SLPTR_LOW();
DELAY_US(TRX_RESET_TIME_US);
TRX_RESET_HIGH();
LED_SET_VALUE(1);
DELAY_MS(10);
rval = trx_reg_read(RG_PART_NUM);
ERR_CHECK(RADIO_PART_NUM != rval);
rval = trx_reg_read(RG_VERSION_NUM);
ERR_CHECK_DIAG(RADIO_VERSION_NUM !=rval,2);
trx_reg_write(RG_IEEE_ADDR_0,42);
rval = trx_reg_read(RG_IEEE_ADDR_0);
ERR_CHECK_DIAG((42!=rval),3);
trx_reg_write(RG_TRX_STATE, CMD_TRX_OFF);
DELAY_US(TRX_INIT_TIME_US);
DELAY_MS(1000);
rval = trx_bit_read(SR_TRX_STATUS);
ERR_CHECK_DIAG((TRX_OFF!=rval),4);
trx_reg_write(RG_IRQ_MASK, TRX_IRQ_PLL_LOCK);
irq_cause = 0;
sei();
trx_reg_write(RG_TRX_STATE,CMD_PLL_ON);
DELAY_US(TRX_PLL_LOCK_TIME_US);
DELAY_MS(1000);
ERR_CHECK_DIAG(irq_cause != 0,10);
LED_SET_VALUE(0);
while(1)
{
WAIT500MS();
LED_TOGGLE(0);
}
}
#if defined(TRX_IF_RFA1)
ISR(TRX24_PLL_LOCK_vect)
{
irq_cause |= TRX_IRQ_PLL_LOCK;
}
#else
ISR(TRX_IRQ_vect)
{
irq_cause |= trx_reg_read(RG_IRQ_STATUS);
LED_SET(1);
}
#endif