我有一个要更新的循环DMA。中途完成时是否有可能中断(所以我可以更新前半部分)?
是,只需将适当的通道配置寄存器中的HTIE位置1,例如
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);
}
}
没有频道,只有流。
可能被读取的位
READ_BIT(DMA1->HISR ,DMA_HISR_HTIF5);
或者也许是这样?
DMA1_Stream5-> CRR |= DMA_HISR_HTIF5;