|
采用Spirit1实现433M的无线发送,通过SPI接口配置了SPirit1,配置寄存器读写正确,写入TXFIFO数据,发送前读取TXFIFO的数据Number为20,然后启动发送,SPIRIT1_GPIO3中断能进入,但是没有发送完成的中断状态,发送后读取TXFIFO的数据Number为0,采用SPIRIT1的配置工具生成的参数配置,测试结果也是一样,SPIRIT1_GPIO3中断能进入,但是没有发送完成的中断状态,数据也没有发送出去,什么原因? /* Spirit ON */ SpiritEnterShutdown(); SpiritExitShutdown(); SpiritManagementWaExtraCurrent(); // SpiritManagementIdentificationRFBoard(); SpiritSetXtalFrequency(); /* if the board has eeprom, we can compensate the offset calling SpiritManagementGetOffset (if eeprom is not present this fcn will return 0) */ xRadioInit.lFrequencyBase = xRadioInit.lFrequencyBase + SpiritManagementGetOffset(); /* Initialize the signals to drive the range extender application board */ SpiritManagementRangeExtInit(); /* uC IRQ config uC IRQ enable*/ Sprit1_GPIO3_IRQ_Init(); /* Spirit IRQ config */ SpiritGpioInit(&xGpioIRQ); /* Spirit Radio config */ SpiritRadioInit(&xRadioInit); /* Spirit Radio set power */ SpiritRadioSetPALeveldBm(7,POWER_DBM); SpiritRadioSetPALevelMaxIndex(7); /* Spirit Packet config */ SpiritPktBasicInit(&xBasicInit); SpiritPktBasicAddressesInit(&xAddressInit); /* Spirit IRQs enable */ SpiritIrqDeInit(NULL); SpiritIrq(TX_DATA_SENT , S_ENABLE); SpiritIrq(TX_FIFO_ERROR , S_ENABLE); /* payload length config */ SpiritPktBasicSetPayloadLength(20); /* destination address. By default it is not used because address is disabled, see struct xAddressInit*/ SpiritPktBasicSetDestinationAddress(0x35); /* IRQ registers blanking */ SpiritIrqClearStatus(); /* Infinite loop */ /* USER CODE BEGIN WHILE */ while (1) { /* fit the TX FIFO */ SpiritCmdStrobeFlushTxFifo(); SpiritSpiWriteLinearFifo(20, vectcTxBuff); /* send the TX command */ SpiritCmdStrobeTx(); /* wait for TX done */ // while(HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_11)==GPIO_PIN_RESET); // while(!xTxDoneFlag) // { // SpiritRefreshStatus(); // // SpiritIrqGetStatus(&xIrqStatus); // // if(xIrqStatus.IRQ_TX_DATA_SENT) // { // xTxDoneFlag = SET; // } // } // SpiritIrqGetStatus(&xIrqStatus); /* wait for TX done */ while(!xTxDoneFlag); xTxDoneFlag = RESET; g_dwtx_send_ok++; /* pause between two transmissions */ HAL_Delay(500); //delay 500ms /* USER CODE END WHILE */ /* USER CODE BEGIN 3 */ } /* USER CODE END 3 */ } //中断处理部分 if(GPIO_PIN_11 == GPIO_Pin)//SPIRIT1_GPIO3中断 { /* Get the IRQ status */ SpiritIrqGetStatus(&xIrqStatus); /* Check the SPIRIT TX_DATA_SENT IRQ flag */ if(xIrqStatus.IRQ_TX_DATA_SENT) { g_dwTest_Count[0]++; /* set the tx_done_flag to manage the event in the main() */ xTxDoneFlag = SET; // g_btransmitting = 0; /* toggle LED1 */ // GPIO_Led_Invert(); /* Flush the RX FIFO */ // SpiritCmdStrobeFlushRxFifo(); /* RX command - to ensure the device will be ready for the next reception */ // SpiritCmdStrobeRx(); } /* Check the SPIRIT RX_DATA_DISC IRQ flag */ if(xIrqStatus.IRQ_RX_DATA_DISC) { /* toggle LED1 */ // GPIO_Led_Invert();//SdkEvalLedToggle(LED1); g_dwTest_Count[1]++; /* RX command - to ensure the device will be ready for the next reception */ SpiritCmdStrobeRx(); } /* Check the SPIRIT RX_DATA_READY IRQ flag */ if(xIrqStatus.IRQ_RX_DATA_READY) { g_bReceive_New_Frame = TRUE; g_dwTest_Count[2]++; } //////////////test/////////////////////////////// if(xIrqStatus.IRQ_TX_FIFO_ERROR) { g_dwTest_Count[3]++; } //////////////test/////////////////////////////// } void SpiritSetXtalFrequency(void) { do{ /* Delay for state transition */ HAL_Delay(2); //delay 2ms /* Reads the MC_STATUS register */ SpiritRefreshStatus(); }while(g_xStatus.MC_STATE!=MC_STATE_READY); SpiritRadioSetXtalFrequency(XTAL_FREQUENCY);//XTAL_FREQUENCY = 26000000; SpiritManagementSetRangeExtender(RANGE_EXT_NONE); SpiritManagementSetBand(0); SpiritManagementSetOffset(FREQUENCY_OFFSET); } |
微信公众号
手机版