是否有可能在 DMA 中途中断 STM32f0
Is it possible to get an interrupt on DMA halfway done STM32f0
我有一个要更新的循环 DMA。有没有可能做到一半就打断(所以我可以更新前半部分)?
是的,只需在相应的通道配置寄存器中设置 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);
}
}
没有频道了,只有流。
可读位
READ_BIT(DMA1->HISR ,DMA_HISR_HTIF5);
或者可能是这样的?
DMA1_Stream5-> CRR |= DMA_HISR_HTIF5;
我有一个要更新的循环 DMA。有没有可能做到一半就打断(所以我可以更新前半部分)?
是的,只需在相应的通道配置寄存器中设置 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);
}
}
没有频道了,只有流。
可读位
READ_BIT(DMA1->HISR ,DMA_HISR_HTIF5);
或者可能是这样的?
DMA1_Stream5-> CRR |= DMA_HISR_HTIF5;