我有一个想要更新的循环 DMA。是否可以在完成一半时中断(以便我可以更新前半部分)?
最佳答案
是的,只需在适当的 channel 配置寄存器中设置 HTIE 位即可,例如
DMA1_Channel2->CCR |= DMA_CCR_HTIE;
对于 channel 2,在开始传输之前。不要忘记设置优先级,并启用中断。
在中断处理程序中,检查它是否确实是半传输中断,清除标志,然后执行任何必要的处理。
void DMA1_Channel2_3_IRQHandler(void) {
if(DMA1->ISR & DMA_ISR_HTIF2) {
DMA1->IFCR = DMA_IFCR_CHTIF2;
memcpy(here, there, length/2);
}
}
关于interrupt - STM32f0 是否可以在 DMA 完成一半时获得中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41767043/