Ejemplo n.º 1
0
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;
}
Ejemplo n.º 2
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);
    }

}