interrupt - STM32f0 是否可以在 DMA 完成一半时获得中断

标签 interrupt stm32 dma

我有一个想要更新的循环 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/

相关文章:

timer - 为什么Arduino在millis函数中每1.024ms使用一次中断?

c - STM32 Usart1与TIM1不能同时工作

java - 终止长时间运行的进程并接收 Java 中的标准输出

C代码从stm32F修改为stm32L

embedded - stm32f4 上的 I2C 从接收器

Linux 设备驱动程序允许 FPGA 直接通过 DMA 访问 CPU RAM

c - DMA 传输 RAM 到 RAM

linux - 如何在内核模块中禁用高速缓存

java - 在 Java 程序的主线程中调用 System.exit(0) 和 Thread.currentThread().interrupt() 有什么区别?

java - java中线程interrupt()不中断线程(UDP Socket)