int main() { uint8_t part_num, version_num; // Initialize the platform platform_init(); printf("Testing RF2XX\n"); // Set initial values leds_on(LED_0); leds_off(LED_1); printf("Initializing RF212..."); // Init. the radio rf2xx_init(rf212); rf2xx_wakeup(rf212); printf("OK\n"); printf("Reading RF212 PART_NUM (should be 7): "); part_num = rf2xx_reg_read(rf212, RF2XX_REG__PART_NUM); printf("%x\n", part_num); printf("Reading RF212 VERSION_NUM (should be 1): "); version_num = rf2xx_reg_read(rf212, RF2XX_REG__VERSION_NUM); printf("%x\n", version_num); while (1) { int i; for (i = 0; i < 0x10000; i++) { __asm__("nop"); } leds_toggle(LED_0 + LED_1); } return 0; }
void test_task(void *arg) { (void) arg; uint8_t channel = 11; // Debug printf("S11 (RX) Test\n"); // Step 1: RESET rf2xx_reset(rf231); rf2xx_wakeup(rf231); // Step 2: Set State TRX_OFF rf2xx_reg_write(rf231, RF2XX_REG__TRX_STATE, RF2XX_TRX_STATE__FORCE_TRX_OFF); // Step 3: Set channel rf2xx_reg_write(rf231, RF2XX_REG__PHY_CC_CCA, RF2XX_PHY_CC_CCA_DEFAULT__CCA_MODE | channel); // Step 4: Set output power 0dBm rf2xx_reg_write(rf231, RF2XX_REG__PHY_TX_PWR, RF2XX_PHY_TX_PWR_TX_PWR_VALUE__0dBm); // If radio has external PA, enable DIG3/4 if (rf2xx_has_pa(rf231)) { // Enable the PA rf2xx_pa_enable(rf231); // Activate DIG3/4 pins uint8_t reg = rf2xx_reg_read(rf231, RF2XX_REG__TRX_CTRL_1); reg |= RF2XX_TRX_CTRL_1_MASK__PA_EXT_EN; rf2xx_reg_write(rf231, RF2XX_REG__TRX_CTRL_1, reg); } // Step 5: Verify TRX_OFF status if (rf2xx_reg_read(rf231, RF2XX_REG__TRX_STATUS) != RF2XX_TRX_STATUS__TRX_OFF) { printf("Step 5 error, not TRX_OFF!\n"); } // Step 6: Disable SHR detection rf2xx_reg_write(rf231, RF2XX_REG__RX_SYN, 0x80); // Set IRQ mask in ED_DONE rf2xx_reg_write(rf231, RF2XX_REG__IRQ_MASK, RF2XX_IRQ_STATUS_MASK__CCA_ED_DONE); // Read IRQ to clear (void) rf2xx_reg_read(rf231, RF2XX_REG__IRQ_MASK); // Start RX rf2xx_set_state(rf231, RF2XX_TRX_STATE__RX_ON); printf("RX running on channel %u (%u MHz)...\n", channel, 2405 + 5 * (channel - 11)); vTaskDelay(configTICK_RATE_HZ * 2); uint32_t count = 0; while (1) { // Write an arbitrary value to PHY_ED_LEVEL rf2xx_reg_write(rf231, RF2XX_REG__PHY_ED_LEVEL, 0x12); // Wait until ED ready uint8_t irq_status; do { irq_status = rf2xx_reg_read(rf231, RF2XX_REG__IRQ_STATUS); } while ((irq_status & RF2XX_IRQ_STATUS_MASK__CCA_ED_DONE) == 0); // Read ED int8_t ed = rf2xx_reg_read(rf231, RF2XX_REG__PHY_ED_LEVEL); ed -= 91; printf("ED #%x: %d dBm\n", count++, ed); // Wait a little vTaskDelay(configTICK_RATE_HZ / 4); } }