我有一个循环DMA,我想更新。当它完成一半时是否有可能获得中断(所以我可以更新前半部分)?
答案 0 :(得分:3)
是的,只需在相应的通道配置寄存器中设置HTIE位,例如
DMA1_Channel2->CCR |= DMA_CCR_HTIE;
在开始转移之前,对于通道2,。不要忘记设置优先级,并启用中断。
在中断处理程序中,检查它是否确实是半传输中断,清除该标志,然后执行任何必要的处理。
void DMA1_Channel2_3_IRQHandler(void) {
if(DMA1->ISR & DMA_ISR_HTIF2) {
DMA1->IFCR = DMA_IFCR_CHTIF2;
memcpy(here, there, length/2);
}
}
答案 1 :(得分:0)
没有频道,只有流。
可能会被读取
READ_BIT(DMA1->HISR ,DMA_HISR_HTIF5);
还是类似这样的东西?
DMA1_Stream5-> CRR |= DMA_HISR_HTIF5;