1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-19 22:35:23 +03:00

CHEBUZZF3 - Cleanup USART irq handler. Disable UART2 DMA for now.

This commit is contained in:
Dominic Clifton 2014-05-10 16:36:54 +01:00
parent bf90246c95
commit eeb13b427d

View file

@ -19,6 +19,7 @@
// Using RX DMA disables the use of receive callbacks // Using RX DMA disables the use of receive callbacks
#define USE_USART1_RX_DMA #define USE_USART1_RX_DMA
//#define USE_USART2_RX_DMA //#define USE_USART2_RX_DMA
//#define USE_USART2_TX_DMA
// USART1_TX PA9 // USART1_TX PA9
// USART1_RX PA10 // USART1_RX PA10
@ -123,15 +124,16 @@ uartPort_t *serialUSART2(uint32_t baudRate, portMode_t mode)
s->port.rxBuffer = rx2Buffer; s->port.rxBuffer = rx2Buffer;
s->port.txBuffer = tx2Buffer; s->port.txBuffer = tx2Buffer;
#ifdef USE_USART2_RX_DMA
s->rxDMAChannel = DMA1_Channel6;
#endif
s->txDMAChannel = DMA1_Channel7;
s->USARTx = USART2; s->USARTx = USART2;
#ifdef USE_USART2_RX_DMA
s->rxDMAChannel = DMA1_Channel6;
s->rxDMAPeripheralBaseAddr = (uint32_t)&s->USARTx->RDR; s->rxDMAPeripheralBaseAddr = (uint32_t)&s->USARTx->RDR;
#endif
#ifdef USE_USART2_TX_DMA
s->txDMAChannel = DMA1_Channel7;
s->txDMAPeripheralBaseAddr = (uint32_t)&s->USARTx->TDR; s->txDMAPeripheralBaseAddr = (uint32_t)&s->USARTx->TDR;
#endif
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
@ -151,12 +153,14 @@ uartPort_t *serialUSART2(uint32_t baudRate, portMode_t mode)
GPIO_Init(UART2_GPIO, &GPIO_InitStructure); GPIO_Init(UART2_GPIO, &GPIO_InitStructure);
} }
#ifdef USE_USART2_TX_DMA
// DMA TX Interrupt // DMA TX Interrupt
NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel7_IRQn; NVIC_InitStructure.NVIC_IRQChannel = DMA1_Channel7_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure); NVIC_Init(&NVIC_InitStructure);
#endif
#ifndef USE_USART2_RX_DMA #ifndef USE_USART2_RX_DMA
NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn; NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;
@ -201,8 +205,7 @@ void usartIrqHandler(uartPort_t *s)
{ {
uint32_t ISR = s->USARTx->ISR; uint32_t ISR = s->USARTx->ISR;
if (ISR & USART_FLAG_RXNE) { if (!s->rxDMAChannel && (ISR & USART_FLAG_RXNE)) {
// If we registered a callback, pass crap there
if (s->port.callback) { if (s->port.callback) {
s->port.callback(s->USARTx->RDR); s->port.callback(s->USARTx->RDR);
} else { } else {
@ -211,13 +214,9 @@ void usartIrqHandler(uartPort_t *s)
} }
} }
if (s->txDMAChannel) { if (!s->txDMAChannel && (ISR & USART_FLAG_TXE)) {
return;
}
if (ISR & USART_FLAG_TXE) {
if (s->port.txBufferTail != s->port.txBufferHead) { if (s->port.txBufferTail != s->port.txBufferHead) {
s->USARTx->TDR = s->port.txBuffer[s->port.txBufferTail]; USART_SendData(s->USARTx, s->port.txBuffer[s->port.txBufferTail]);
s->port.txBufferTail = (s->port.txBufferTail + 1) % s->port.txBufferSize; s->port.txBufferTail = (s->port.txBufferTail + 1) % s->port.txBufferSize;
} else { } else {
USART_ITConfig(s->USARTx, USART_IT_TXE, DISABLE); USART_ITConfig(s->USARTx, USART_IT_TXE, DISABLE);