HAL_ChibiOS: fixed RCIN for iomcu
we need to disable/re-enable DMA on each IRQ for the STM32F10x
This commit is contained in:
parent
15141a6a5a
commit
8a4e0bd58c
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user