/** * \brief Init the radio * \return Returns success/fail * \retval 0 Success */ static int rf212_init(void) { volatile uint8_t regtemp; uint8_t radio_state; /* don't optimize this away, it's important */ //uint8_t temp; PRINTF("RF212: init.\n"); /* init SPI and GPIOs, wake up from sleep/power up. */ //rf212_arch_init(); trx_spi_init(); /* reset will put us into TRX_OFF state */ /* reset the radio core */ port_pin_set_output_level(AT86RFX_RST_PIN, false); delay_cycles_ms(1); port_pin_set_output_level(AT86RFX_RST_PIN, true); port_pin_set_output_level(AT86RFX_SLP_PIN, false); /*wakeup from sleep*/ /* before enabling interrupts, make sure we have cleared IRQ status */ regtemp = trx_reg_read(RF212_REG_IRQ_STATUS); printf("After wake from sleep\n"); radio_state = rf212_status(); printf("After arch read reg: state 0x%04x\n", radio_state); /* Assign regtemp to regtemp to avoid compiler warnings */ regtemp = regtemp; if(radio_state == STATE_P_ON) { trx_reg_write(RF212_REG_TRX_STATE, TRXCMD_TRX_OFF); } trx_irq_init((FUNC_PTR)rf212_interrupt_poll); ENABLE_TRX_IRQ(); system_interrupt_enable_global(); /* Configure the radio using the default values except these. */ trx_reg_write(RF212_REG_TRX_CTRL_1, RF212_REG_TRX_CTRL_1_CONF); trx_reg_write(RF212_REG_PHY_CC_CCA, RF212_REG_PHY_CC_CCA_CONF); trx_reg_write(RF212_REG_PHY_TX_PWR_CONF, RF212_REG_PHY_TX_PWR_CONF); //temp = rf212_arch_read_reg(RF212_REG_TRX_CTRL_2); trx_reg_write(RF212_REG_TRX_CTRL_2, RF212_REG_TRX_CTRL_2_CONF); trx_reg_write(RF212_REG_IRQ_MASK, RF212_REG_IRQ_MASK_CONF); #if HW_CSMA_FRAME_RETRIES trx_bit_write(SR_MAX_FRAME_RETRIES, 3); trx_bit_write(SR_MAX_CSMA_RETRIES, 4); #else trx_bit_write(SR_MAX_FRAME_RETRIES, 0); trx_bit_write(SR_MAX_CSMA_RETRIES, 7); #endif SetPanId(IEEE802154_CONF_PANID); rf_generate_random_seed(); /* start the radio process */ process_start(&rf212_radio_process, NULL); return 0; }
retval_t pal_init(void) { #if (PAL_USE_SPI_TRX == 1) trx_spi_init(); #endif /* #if (PAL_USE_SPI_TRX = 1) */ #ifdef ENABLE_STACK_NVM #if (SAMD20) || (SAMD21) || (SAMR21) nvm_init(INT_FLASH); #endif #endif return MAC_SUCCESS; }