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:
parent
bf90246c95
commit
eeb13b427d
1 changed files with 12 additions and 13 deletions
|
@ -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);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue