У меня есть круговой DMA, который я хочу обновить. Можно ли получить прерывание, когда оно сделано на полпути (так что я могу обновить первую половину)?Возможно ли получить прерывание на DMA на полпути STM32f0
2
A
ответ
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);
}
}