void USART6_IRQHandler(void) { /* Check RXNE flag value in SR register */ if(LL_USART_IsActiveFlag_RXNE(USART6) && LL_USART_IsEnabledIT_RXNE(USART6)) { /* RXNE flag will be cleared by reading of DR register (done in call) */ /* Call function in charge of handling Character reception */ if(rx_index >= RX_BUFFER_SIZE - 1) { printf("Error, command too Big\r\n"); rx_index = 0; return; } uint8_t rx_char = LL_USART_ReceiveData8(USART6); if(echo) { printf("%c", rx_char); } rx_buffer[rx_index++] = rx_char; if(rx_char == '\r' || rx_char == '\n') { uint16_t bytes_consumed; if(rx_index == 1) { bytes_consumed = 1; } else { bytes_consumed = process_serial_buffer(rx_buffer, rx_index); } if(bytes_consumed >= rx_index) { rx_index = 0; } else { rx_index -= bytes_consumed; } } } }
static int uart_stm32_irq_is_pending(struct device *dev) { USART_TypeDef *UartInstance = UART_STRUCT(dev); return ((LL_USART_IsActiveFlag_RXNE(UartInstance) && LL_USART_IsEnabledIT_RXNE(UartInstance)) || (LL_USART_IsActiveFlag_TC(UartInstance) && LL_USART_IsEnabledIT_TC(UartInstance))); }
void USART4_5_IRQHandler(void) { int rx_ready = 0; char rx; CPSR_ALLOC(); RHINO_CPU_INTRPT_DISABLE(); if ( LL_USART_IsActiveFlag_RXNE(USART4) && (LL_USART_IsEnabledIT_RXNE(USART4 ) != RESET) ) { /* no need to clear the RXNE flag because it is auto cleared by reading the data*/ rx = LL_USART_ReceiveData8( USART4 ); rx_ready = 1; //PRINTF("%c\r\n", rx); } if (rx_ready) { #ifdef CONFIG_LINKWAN_TEST extern void linkwan_test_cli_cb(uint8_t cmd); linkwan_test_cli_cb(rx); #endif } RHINO_CPU_INTRPT_ENABLE(); }