/*---------------------------------------------------------------------------*/ static void panic_ra(uint8_t l) { volatile uint16_t i, k; if(l > 5) { l = 5; } if(l == 0) { l++; } while(1) { SdkEvalLedOn(l); for(i = 0; i < 0xffff; i += 1) { k++; } SdkEvalLedOff(l); for(i = 0; i < 0xffff; i += 1) { k++; } } }
/*---------------------------------------------------------------------------*/ void HardFault_Handler(void) { SdkEvalLedOn(LED1); }
/** * @brief System main function. * @param None * @retval None */ void main (void) { SDK_SYSTEM_CONFIG(); #ifdef USE_VCOM #ifdef STM8L SdkEvalComInit(115200,USART_WordLength_8b,USART_StopBits_1,USART_Parity_No,USART_Mode_Tx); #elif SDK /* VC config */ SdkEvalVCInit(); while(bDeviceState != CONFIGURED); #endif #endif /* Spirit ON */ SpiritEnterShutdown(); SpiritExitShutdown(); SpiritManagementWaExtraCurrent(); #ifdef STM8L /* Manually set the XTAL_FREQUENCY */ SpiritRadioSetXtalFrequency(XTAL_FREQUENCY); /* Initialize the frequency offset variable to compensate XTAL offset */ xRadioInit.lFrequencyBase = xRadioInit.lFrequencyBase + FREQUENCY_OFFSET; /* Initialize the signals to drive the range extender application board */ RANGE_EXT_INIT(RANGE_TYPE); #elif SDK SpiritManagementIdentificationRFBoard(); /* 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(); #endif /* Initialize the signals to drive the range extender application board */ SpiritManagementRangeExtInit(); SdkEvalM2SGpioInit(M2S_GPIO_3,M2S_MODE_EXTI_IN); SdkEvalM2SGpioInterruptCmd(M2S_GPIO_3,0x0A,0x0A,ENABLE); /* Spirit IRQ config */ SpiritGpioInit(&xGpioIRQ); /* Spirit Radio config */ SpiritRadioInit(&xRadioInit); /* Spirit Radio set power */ SpiritRadioSetPALevelMaxIndex(7); SpiritRadioSetPALeveldBm(7,POWER_DBM); /* Spirit Packet config */ SpiritPktStackInit(&xStackInit); SpiritPktStackAddressesInit(&xAddressInit); SpiritPktStackLlpInit(&xStackLLPInit); /* Spirit IRQs enable */ SpiritIrqDeInit(NULL); SpiritIrq(TX_DATA_SENT, S_ENABLE); SpiritIrq(RX_DATA_READY, S_ENABLE); SpiritIrq(RX_DATA_DISC, S_ENABLE); /* RX timeout config */ SET_INFINITE_RX_TIMEOUT(); SpiritTimerSetRxTimeoutStopCondition(SQI_ABOVE_THRESHOLD); /* Payload length config */ SpiritPktStackSetPayloadLength(20); /* Destination address */ SpiritPktStackSetDestinationAddress(DESTINATION_ADDRESS); /* IRQ registers blanking */ SpiritIrqClearStatus(); /* infinite loop */ while (1){ /* RX command */ SpiritCmdStrobeRx(); /* wait for data received */ while(!xRxDoneFlag); xRxDoneFlag=RESET; /* when rx data ready read the number of received bytes */ cRxData=SpiritLinearFifoReadNumElementsRxFifo(); /* read the RX FIFO */ SpiritSpiReadLinearFifo(cRxData, vectcBallBuff); SpiritCmdStrobeFlushRxFifo(); /* A simple way to control if the received data sequence is correct. Use a local block. */ { SpiritBool correct=S_TRUE; /* control all the received bytes and verify that they are sequential numbers from 1 to 20. If one of them is not an expected value then stop the communication. */ for(uint8_t i=0 ; i<cRxData ; i++) if(vectcBallBuff[i] != i+1) correct=S_FALSE; #ifdef USE_VCOM /* send messages via COM */ if(correct) { printf("B Rx data: ["); for(uint8_t i=0 ; i<cRxData ; i++) printf("%d ", vectcBallBuff[i]); printf("]\r\n"); } else { printf("data error! ping pong stopped\n\r"); } #endif /* stop communication if an incorrect sequence has been received */ if(!correct){ SdkEvalLedOn(LED4); while(1); } } /* pause between RX and TX */ SdkDelayMs(500); /* fit the TX FIFO */ SpiritCmdStrobeFlushTxFifo(); SpiritSpiWriteLinearFifo(20, vectcBallBuff); /* send the TX command */ SpiritCmdStrobeTx(); /* wait for TX done */ while(!xTxDoneFlag); xTxDoneFlag = RESET; #ifdef USE_VCOM /* send messages via COM */ printf("B Tx data: ["); for(uint8_t i=0 ; i<cRxData ; i++) printf("%d ", vectcBallBuff[i]); printf("]\n\r"); #endif } }
/*---------------------------------------------------------------------------*/ void RCC_IRQHandler(void) { SdkEvalLedOn(LED1); }
/*---------------------------------------------------------------------------*/ void RTC_WKUP_IRQHandler(void) { SdkEvalLedOn(LED1); }
/*---------------------------------------------------------------------------*/ void PVD_IRQHandler(void) { SdkEvalLedOn(LED1); }
/*---------------------------------------------------------------------------*/ void WWDG_IRQHandler(void) { SdkEvalLedOn(LED1); }
/*---------------------------------------------------------------------------*/ void DebugMon_Handler(void) { SdkEvalLedOn(LED1); }
/*---------------------------------------------------------------------------*/ void BusFault_Handler(void) { SdkEvalLedOn(LED1); }
/*---------------------------------------------------------------------------*/ void COMP_IRQHandler(void) { SdkEvalLedOn(LED1); }
/*---------------------------------------------------------------------------*/ void MemManage_Handler(void) { SdkEvalLedOn(LED1); }
/*---------------------------------------------------------------------------*/ void USB_LP_IRQHandlerS(void) { SdkEvalLedOn(LED1); }
/*---------------------------------------------------------------------------*/ void ADC1_IRQHandler(void) { SdkEvalLedOn(LED1); }
/*---------------------------------------------------------------------------*/ void DMA1_Channel7_IRQHandler(void) { SdkEvalLedOn(LED1); }
/*---------------------------------------------------------------------------*/ void TIM7_IRQHandler(void) { SdkEvalLedOn(LED1); }
/*---------------------------------------------------------------------------*/ void SVC_Handler(void) { SdkEvalLedOn(LED1); }
/*---------------------------------------------------------------------------*/ void I2C1_EV_IRQHandler(void) { SdkEvalLedOn(LED1); }
/*---------------------------------------------------------------------------*/ void PendSV_Handler(void) { SdkEvalLedOn(LED1); }
/*---------------------------------------------------------------------------*/ void I2C2_ER_IRQHandler(void) { SdkEvalLedOn(LED1); }
/*---------------------------------------------------------------------------*/ void NMI_Handler(void) { SdkEvalLedOn(LED1); }
/*---------------------------------------------------------------------------*/ void SPI2_IRQHandler(void) { SdkEvalLedOn(LED1); }
/*---------------------------------------------------------------------------*/ void TAMPER_STAMP_IRQHandler(void) { SdkEvalLedOn(LED1); }
/*---------------------------------------------------------------------------*/ void USART3_IRQHandler(void) { SdkEvalLedOn(LED1); }
/*---------------------------------------------------------------------------*/ void FLASH_IRQHandler(void) { SdkEvalLedOn(LED1); }
/*---------------------------------------------------------------------------*/ void UsageFault_Handler(void) { SdkEvalLedOn(LED1); }
/*---------------------------------------------------------------------------*/ void EXTI1_IRQHandler(void) { SdkEvalLedOn(LED1); }
/*---------------------------------------------------------------------------*/ void RTC_Alarm_IRQHandler(void) { SdkEvalLedOn(LED1); }
/*---------------------------------------------------------------------------*/ void USB_FS_WKUP_IRQHandler(void) { SdkEvalLedOn(LED1); }
void Reset_Handler(void) { SdkEvalLedOn(LED1); }