查看: 4149|回复: 0

nrf51822 Radio Interrupt 問題

[复制链接]
  • TA的每日心情
    郁闷
    2016-3-1 11:53
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2016-3-1 11:52:29 | 显示全部楼层 |阅读模式
    分享到:
    nrf51822 Radio Interrupt 問題
    使用Radio Interrupt接收資料,若資料收集完成則LED閃燈
                  main主程式中僅透過uart送出固定字串
    問題:接收端LED正常閃燈,但在comport中無任何uart字元被送出

    [发射端]
    void init(void)
    {   
        NRF_CLOCK->EVENTS_HFCLKSTARTED = 0;   //清除外部时钟准备好标记
        NRF_CLOCK->TASKS_HFCLKSTART    = 1;   //启动外部时钟   
        while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0) //等待时钟准备好
        {
        }

        radio_configure();  //无线配置   
        NRF_RADIO->PACKETPTR = (uint32_t)packet;   //DMA指针指向发送BUFFER  
        nrf_gpio_range_cfg_input(BUTTON_START, BUTTON_STOP, BUTTON_PULL); //配置按键
    }

    int main(void)
    {
        init();  
        while (true)
        {
            if(nrf_gpio_pin_read(BUTTON_START)==0x00)
            {
                    packet[0] = 0x00;
                    packet[1] = 0x01;
                    packet[2] = 0x02;
                    packet[3] = 0x03;
                    NRF_RADIO->EVENTS_READY = 0U;
                    NRF_RADIO->TASKS_TXEN   = 1;
                    while (NRF_RADIO->EVENTS_READY == 0U)
                    {
                    }
                    NRF_RADIO->TASKS_START = 1U;
                    NRF_RADIO->EVENTS_END  = 0U;  
                    while (NRF_RADIO->EVENTS_END == 0U)
                    {
                    }
                    NRF_RADIO->EVENTS_DISABLED = 0U;
                           // Disable radio
                    NRF_RADIO->TASKS_DISABLE = 1U;
                    while (NRF_RADIO->EVENTS_DISABLED == 0U)
                    {
                    }
                    nrf_delay_ms(10);
            }
        }
    }

    [接收端]:使用Radio Interrupt接收資料,若資料收集完成則LED閃燈
                  main主程式中僅透過uart送出固定字串

    void Radio_init(void)
    {   
        NRF_CLOCK->EVENTS_HFCLKSTARTED = 0;  //清除外部高速时钟准备好标记
        NRF_CLOCK->TASKS_HFCLKSTART = 1;     //启动外部高速时钟
        while (NRF_CLOCK->EVENTS_HFCLKSTARTED == 0)  //外部高速时钟准备好
        {
        }

        radio_configure();                   //无线收发器配置
        NRF_RADIO->PACKETPTR = (uint32_t)packet; //DMA指针指向接收BUFFER
                     
        NRF_RADIO->INTENSET = RADIO_INTENSET_READY_Enabled << RADIO_INTENSET_READY_Pos |
                              RADIO_INTENSET_ADDRESS_Enabled << RADIO_INTENSET_ADDRESS_Pos;
        NVIC_SetPriority(RADIO_IRQn, 1);
        NVIC_ClearPendingIRQ(RADIO_IRQn);
        NVIC_EnableIRQ(RADIO_IRQn);                     
    }

    void RADIO_IRQHandler(void)
    {
            NRF_RADIO->EVENTS_END = 0U;
            NRF_RADIO->TASKS_START = 1U;

            while(NRF_RADIO->EVENTS_END == 0U)    //接收完毕
            {
            }
            if (NRF_RADIO->CRCSTATUS == 1U)       //CRC校验通过
            {
                    if (LED_IRQFlag == 0){
                            nrf_gpio_pin_clear(LED_0);   //红灯亮
                            LED_IRQFlag ++;
                    }else if (LED_IRQFlag == 1){
                            nrf_gpio_pin_set(LED_0);     //红灯灭
                            LED_IRQFlag = 0;
                    }
            }
            NRF_RADIO->EVENTS_DISABLED = 0U;
    }

    int main(void)
    {
        Radio_init();              //系统初始化
        Port_Init();               //端口配置
        NRF_RADIO->EVENTS_READY = 0U;
         NRF_RADIO->TASKS_RXEN = 1U;           //使能接收
        while(1)
        {
            simple_uart_putstring((const uint8_t *)"Start2: \n\r");
        }
    }

    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /2 下一条

    手机版|小黑屋|与非网

    GMT+8, 2024-3-28 18:53 , Processed in 0.117983 second(s), 15 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2020, Tencent Cloud.