HAL_ChibiOS: fixed RCIN for iomcu

we need to disable/re-enable DMA on each IRQ for the STM32F10x
This commit is contained in:
Andrew Tridgell 2018-10-06 10:32:54 +10:00
parent 15141a6a5a
commit 8a4e0bd58c
2 changed files with 9 additions and 4 deletions

View File

@ -47,14 +47,15 @@ bool SoftSigReader::attach_capture_timer(ICUDriver* icu_drv, icuchannel_t chan,
//setup address for full word transfer from Timer
dmaStreamSetPeripheral(dma, &icu_drv->tim->DMAR);
uint32_t dmamode = STM32_DMA_CR_DMEIE | STM32_DMA_CR_TEIE;
dmamode = STM32_DMA_CR_DMEIE | STM32_DMA_CR_TEIE;
dmamode |= STM32_DMA_CR_CHSEL(dma_channel);
dmamode |= STM32_DMA_CR_PL(0);
dmamode |= STM32_DMA_CR_DIR_P2M | STM32_DMA_CR_PSIZE_WORD |
STM32_DMA_CR_MSIZE_WORD | STM32_DMA_CR_MINC | STM32_DMA_CR_TCIE;
dmaStreamSetMemory0(dma, signal);
dmaStreamSetTransactionSize(dma, _bounce_buf_size);
dmaStreamSetMode(dma, dmamode | STM32_DMA_CR_DIR_P2M | STM32_DMA_CR_PSIZE_WORD |
STM32_DMA_CR_MSIZE_WORD | STM32_DMA_CR_MINC | STM32_DMA_CR_TCIE);
dmaStreamSetMode(dma, dmamode);
icucfg.frequency = INPUT_CAPTURE_FREQUENCY;
icucfg.channel = chan;
icucfg.width_cb = NULL;
@ -92,8 +93,11 @@ void SoftSigReader::_irq_handler(void* self, uint32_t flags)
SoftSigReader* sig_reader = (SoftSigReader*)self;
sig_reader->sigbuf.push(sig_reader->signal, sig_reader->_bounce_buf_size);
//restart the DMA transfers
dmaStreamDisable(sig_reader->dma);
dmaStreamSetPeripheral(sig_reader->dma, &sig_reader->_icu_drv->tim->DMAR);
dmaStreamSetMemory0(sig_reader->dma, sig_reader->signal);
dmaStreamSetTransactionSize(sig_reader->dma, sig_reader->_bounce_buf_size);
dmaStreamSetMode(sig_reader->dma, sig_reader->dmamode);
dmaStreamEnable(sig_reader->dma);
}

View File

@ -42,6 +42,7 @@ private:
uint8_t enable_chan_mask;
uint8_t max_pulse_width;
const stm32_dma_stream_t* dma;
uint32_t dmamode;
ICUConfig icucfg;
ICUDriver* _icu_drv = nullptr;
uint16_t _bounce_buf_size = DEFAULT_BOUNCE_BUF_SIZE;