我编写了一个IRQ,使得每次TIM4触发时,都会运行一个中断来捕获TIM5的值。它似乎可以正常工作,但我想知道是否可以通过DMA来避免所有上下文切换并释放CPU。基本上,我想设置一个DMA,以便每个TIM4事件都会启动一个DMA传输,将TIM5计数器值复制到某个循环缓冲区中。
我已经在论坛和DMA文档中进行了搜索,但我对定时器寄存器是否可以作为有效的DMA源存疑。我在考虑是否可以像这样做:
hDma->PAR = (uint32_t) &htim5.Instance->CNT;
hDma->M0AR = (uint32_t) myBufferPtr;
hDma->NDTR = myBufferSize;
hDma->CR |= (uint32_t)DMA_SxCR_EN;
但我不确定这是否可行。
简而言之:我能否使用定时器的CNT寄存器作为DMA传输源?这将是外设到内存传输还是内存到内存传输?我需要设置其他标志才能使其正常工作吗?或者这不可能吗?或者有没有其他STM32功能可以更轻松地计算脉冲之间的时间?