You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
There appears to be an issue with this driver when used in FreeRTOS which stops the interrupts from firing again when a lora_send_packet* function is being used. At first I thought it was because it was blocking if not using DMA. I have switched to DMA but the same issue persists. I might be missing an issue perhaps with clearing out an RX interrupt before sending or setting a mode but the docs are not clear on steps.
Here is some brief code that receives lora packets and transmits acknowledgement packets:
/* FreeRTOS task that checks the state machine if the RX buffer is full */
void StartDefaultTask(void *argument)
{
lora_mode_receive_continuous(&lora);
lora_enable_interrupt_rx_done(&lora);
for(;;)
{
// Receive buffer state machine
if (RXBufferStatus == 1){
HAL_USART_Transmit(&husart2, (uint8_t*)RXBuffer, 32U, 10U);
//acknowledge
lora_send_packet_dma_start(&lora, (uint8_t *)"acknowledge-from-system", 23);
RXBufferStatus = 0; //clear: ready for interrupt to accept the next LoRa packet.
osDelay(200);
}
}
}
/* DMA callback that successfully works after transmission */
void HAL_SPI_TxCpltCallback(SPI_HandleTypeDef *hspi){
lora_send_packet_dma_complete(&lora);
lora_mode_receive_continuous(&lora); //this makes no difference if included
}
/* Interrupt that successfully fires when DIO0 is high */
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin){
if (GPIO_Pin == DIO0_EXTI5_Pin){
if (RXBufferStatus == 1)
return; //don't accept another packet until the first is taken and processed.
uint8_t len = lora_receive_packet(&lora, RXBuffer, sizeof(RXBuffer), NULL); //no storing error info yet
if (len > 0) {
RXBufferStatus = 1;
}
lora_clear_interrupt_rx_all(&lora); //should I do this? Removing or including is the same
}
}
The text was updated successfully, but these errors were encountered:
There appears to be an issue with this driver when used in FreeRTOS which stops the interrupts from firing again when a lora_send_packet* function is being used. At first I thought it was because it was blocking if not using DMA. I have switched to DMA but the same issue persists. I might be missing an issue perhaps with clearing out an RX interrupt before sending or setting a mode but the docs are not clear on steps.
Here is some brief code that receives lora packets and transmits acknowledgement packets:
The text was updated successfully, but these errors were encountered: