usbuart: Moved the aux UART RX interrupt handling into aux_serial.c
This commit is contained in:
parent
a3703186be
commit
5d94ea3017
|
@ -265,6 +265,59 @@ void aux_serial_send(const size_t len)
|
||||||
usbuart_set_led_state(TX_LED_ACT, true);
|
usbuart_set_led_state(TX_LED_ACT, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void aux_serial_receive_isr(const uint32_t usart, const uint8_t dma_irq)
|
||||||
|
{
|
||||||
|
nvic_disable_irq(dma_irq);
|
||||||
|
|
||||||
|
/* Get IDLE flag and reset interrupt flags */
|
||||||
|
const bool is_idle = usart_get_flag(usart, USART_FLAG_IDLE);
|
||||||
|
usart_recv(usart);
|
||||||
|
|
||||||
|
/* If line is now idle, then transmit a packet */
|
||||||
|
if (is_idle) {
|
||||||
|
#ifdef USART_ICR
|
||||||
|
USART_ICR(usart) = USART_ICR_IDLECF;
|
||||||
|
#endif
|
||||||
|
debug_uart_run();
|
||||||
|
}
|
||||||
|
|
||||||
|
nvic_enable_irq(dma_irq);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(USBUSART_ISR)
|
||||||
|
void USBUSART_ISR(void)
|
||||||
|
{
|
||||||
|
#if defined(USBUSART_DMA_RXTX_IRQ)
|
||||||
|
aux_serial_receive_isr(USBUSART, USBUSART_DMA_RXTX_IRQ);
|
||||||
|
#else
|
||||||
|
aux_serial_receive_isr(USBUSART, USBUSART_DMA_RX_IRQ);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(USBUSART1_ISR)
|
||||||
|
void USBUSART1_ISR(void)
|
||||||
|
{
|
||||||
|
#if defined(USBUSART1_DMA_RXTX_IRQ)
|
||||||
|
aux_serial_receive_isr(USBUSART1, USBUSART1_DMA_RXTX_IRQ);
|
||||||
|
#else
|
||||||
|
aux_serial_receive_isr(USBUSART1, USBUSART1_DMA_RX_IRQ);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(USBUSART2_ISR)
|
||||||
|
void USBUSART2_ISR(void)
|
||||||
|
{
|
||||||
|
#if defined(USBUSART2_DMA_RXTX_IRQ)
|
||||||
|
aux_serial_receive_isr(USBUSART2, USBUSART2_DMA_RXTX_IRQ);
|
||||||
|
#else
|
||||||
|
aux_serial_receive_isr(USBUSART2, USBUSART2_DMA_RX_IRQ);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#elif defined(LM4F)
|
#elif defined(LM4F)
|
||||||
char *aux_serial_current_transmit_buffer(void)
|
char *aux_serial_current_transmit_buffer(void)
|
||||||
{
|
{
|
||||||
|
|
|
@ -78,75 +78,6 @@ void usbuart_set_led_state(uint8_t ledn, bool state)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(USART_ICR)
|
|
||||||
#define USBUSART_ISR_TEMPLATE(USART, DMA_IRQ) do { \
|
|
||||||
nvic_disable_irq(DMA_IRQ); \
|
|
||||||
\
|
|
||||||
/* Get IDLE flag and reset interrupt flags */ \
|
|
||||||
const bool isIdle = usart_get_flag(USART, USART_FLAG_IDLE); \
|
|
||||||
usart_recv(USART); \
|
|
||||||
\
|
|
||||||
/* If line is now idle, then transmit a packet */ \
|
|
||||||
if (isIdle) { \
|
|
||||||
USART_ICR(USART) = USART_ICR_IDLECF; \
|
|
||||||
debug_uart_run(); \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
nvic_enable_irq(DMA_IRQ); \
|
|
||||||
} while(0)
|
|
||||||
#else
|
|
||||||
#define USBUSART_ISR_TEMPLATE(USART, DMA_IRQ) do { \
|
|
||||||
nvic_disable_irq(DMA_IRQ); \
|
|
||||||
\
|
|
||||||
/* Get IDLE flag and reset interrupt flags */ \
|
|
||||||
const bool isIdle = usart_get_flag(USART, USART_FLAG_IDLE); \
|
|
||||||
usart_recv(USART); \
|
|
||||||
\
|
|
||||||
/* If line is now idle, then transmit a packet */ \
|
|
||||||
if (isIdle) { \
|
|
||||||
/* On the older uarts, the sequence "read flags", */ \
|
|
||||||
/* "read DR" clears the flags */ \
|
|
||||||
\
|
|
||||||
debug_uart_run(); \
|
|
||||||
} \
|
|
||||||
\
|
|
||||||
nvic_enable_irq(DMA_IRQ); \
|
|
||||||
} while(0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(USBUSART_ISR)
|
|
||||||
void USBUSART_ISR(void)
|
|
||||||
{
|
|
||||||
#if defined(USBUSART_DMA_RXTX_IRQ)
|
|
||||||
USBUSART_ISR_TEMPLATE(USBUSART, USBUSART_DMA_RXTX_IRQ);
|
|
||||||
#else
|
|
||||||
USBUSART_ISR_TEMPLATE(USBUSART, USBUSART_DMA_RX_IRQ);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(USBUSART1_ISR)
|
|
||||||
void USBUSART1_ISR(void)
|
|
||||||
{
|
|
||||||
#if defined(USBUSART1_DMA_RXTX_IRQ)
|
|
||||||
USBUSART_ISR_TEMPLATE(USBUSART1, USBUSART1_DMA_RXTX_IRQ);
|
|
||||||
#else
|
|
||||||
USBUSART_ISR_TEMPLATE(USBUSART1, USBUSART1_DMA_RX_IRQ);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(USBUSART2_ISR)
|
|
||||||
void USBUSART2_ISR(void)
|
|
||||||
{
|
|
||||||
#if defined(USBUSART2_DMA_RXTX_IRQ)
|
|
||||||
USBUSART_ISR_TEMPLATE(USBUSART2, USBUSART2_DMA_RXTX_IRQ);
|
|
||||||
#else
|
|
||||||
USBUSART_ISR_TEMPLATE(USBUSART2, USBUSART2_DMA_RX_IRQ);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define USBUSART_DMA_TX_ISR_TEMPLATE(DMA_TX_CHAN) do { \
|
#define USBUSART_DMA_TX_ISR_TEMPLATE(DMA_TX_CHAN) do { \
|
||||||
nvic_disable_irq(USB_IRQ); \
|
nvic_disable_irq(USB_IRQ); \
|
||||||
\
|
\
|
||||||
|
|
Loading…
Reference in New Issue