mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-23 08:15:30 +03:00
Fix DMA transmit
This commit is contained in:
parent
a70da02c58
commit
bf162b0730
2 changed files with 6 additions and 15 deletions
|
@ -85,8 +85,6 @@ static void uartReconfigure(uartPort_t *uartPort)
|
|||
if (uartPort->port.mode & MODE_TX)
|
||||
uartPort->Handle.Init.Mode |= UART_MODE_TX;
|
||||
|
||||
SET_BIT(uartPort->USARTx->CR3, USART_CR3_OVRDIS);
|
||||
|
||||
|
||||
usartConfigurePinInversion(uartPort);
|
||||
|
||||
|
@ -131,7 +129,6 @@ static void uartReconfigure(uartPort_t *uartPort)
|
|||
}
|
||||
else
|
||||
{
|
||||
//__HAL_UART_ENABLE_IT(&s->Handle, UART_IT_RXNE);
|
||||
/* Enable the UART Parity Error Interrupt */
|
||||
SET_BIT(uartPort->USARTx->CR1, USART_CR1_PEIE);
|
||||
|
||||
|
@ -140,7 +137,6 @@ static void uartReconfigure(uartPort_t *uartPort)
|
|||
|
||||
/* Enable the UART Data Register not empty Interrupt */
|
||||
SET_BIT(uartPort->USARTx->CR1, USART_CR1_RXNEIE);
|
||||
//HAL_UART_Receive_IT(&s->Handle, (uint8_t*)s->port.rxBuffer, 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -172,7 +168,6 @@ static void uartReconfigure(uartPort_t *uartPort)
|
|||
/* Associate the initialized DMA handle to the UART handle */
|
||||
__HAL_LINKDMA(&uartPort->Handle, hdmatx, uartPort->txDMAHandle);
|
||||
|
||||
// __HAL_DMA_ENABLE_IT(s->txDMAHandle, DMA_IT_TC|DMA_IT_FE|DMA_IT_TE|DMA_IT_DME);
|
||||
__HAL_DMA_SET_COUNTER(&uartPort->txDMAHandle, 0);
|
||||
} else {
|
||||
__HAL_UART_ENABLE_IT(&uartPort->Handle, UART_IT_TXE);
|
||||
|
@ -254,7 +249,9 @@ void uartStartTxDMA(uartPort_t *s)
|
|||
{
|
||||
uint16_t size = 0;
|
||||
uint32_t fromwhere=0;
|
||||
//HAL_UART_DMAStop(&s->Handle);
|
||||
HAL_UART_StateTypeDef state = HAL_UART_GetState(&s->Handle);
|
||||
if((state & HAL_UART_STATE_BUSY_TX) == HAL_UART_STATE_BUSY_TX)
|
||||
return;
|
||||
|
||||
if (s->port.txBufferHead > s->port.txBufferTail) {
|
||||
size = s->port.txBufferHead - s->port.txBufferTail;
|
||||
|
|
|
@ -309,7 +309,6 @@ void uartIrqHandler(uartPort_t *s)
|
|||
s->port.rxBuffer[s->port.rxBufferHead] = rbyte;
|
||||
s->port.rxBufferHead = (s->port.rxBufferHead + 1) % s->port.rxBufferSize;
|
||||
}
|
||||
//__HAL_UART_CLEAR_IT(huart, UART_IT_RXNE);
|
||||
CLEAR_BIT(huart->Instance->CR1, (USART_CR1_PEIE));
|
||||
|
||||
/* Disable the UART Error Interrupt: (Frame error, noise error, overrun error) */
|
||||
|
@ -345,19 +344,16 @@ void uartIrqHandler(uartPort_t *s)
|
|||
/* UART in mode Transmitter ------------------------------------------------*/
|
||||
if((__HAL_UART_GET_IT(huart, UART_IT_TXE) != RESET))
|
||||
{
|
||||
//UART_Transmit_IT(huart);
|
||||
HAL_UART_IRQHandler(huart);
|
||||
}
|
||||
|
||||
/* UART in mode Transmitter (transmission end) -----------------------------*/
|
||||
if((__HAL_UART_GET_IT(huart, UART_IT_TC) != RESET))
|
||||
{
|
||||
__HAL_UART_CLEAR_IT(huart, UART_CLEAR_TCF);
|
||||
HAL_UART_IRQHandler(huart);
|
||||
handleUsartTxDma(s);
|
||||
}
|
||||
|
||||
/*if(s->txDMAStream && (s->Handle.TxXferCount == 0) && (s->Handle.TxXferSize != 0))
|
||||
{
|
||||
handleUsartTxDma(s);
|
||||
}*/
|
||||
}
|
||||
|
||||
static void handleUsartTxDma(uartPort_t *s)
|
||||
|
@ -367,7 +363,6 @@ static void handleUsartTxDma(uartPort_t *s)
|
|||
else
|
||||
{
|
||||
s->txDMAEmpty = true;
|
||||
s->Handle.gState = HAL_UART_STATE_READY;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -375,7 +370,6 @@ void dmaIRQHandler(dmaChannelDescriptor_t* descriptor)
|
|||
{
|
||||
uartPort_t *s = &(((uartDevice_t*)(descriptor->userParam))->port);
|
||||
HAL_DMA_IRQHandler(&s->txDMAHandle);
|
||||
handleUsartTxDma(s);
|
||||
}
|
||||
|
||||
uartPort_t *serialUART(UARTDevice device, uint32_t baudRate, portMode_t mode, portOptions_t options)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue