Почти у всех таймеров есть входы TIMx_CH1, TIMx_CH2,TIMx_CH3,TIMx_CH4, которые по изменению уровня могут генерить транзакцию DMA, (проверено, работает), а DMA запишет в SPIDR данные и SPI считает АЦП, по завершению чтения АЦП другой канал DMA сохранит измерение в памяти. Все без участия ядра. Причем таймер при этом может жить своей жизнью и на него эти входы никак не влияют, кроме того, что значение таймера будет сохраняться в регистре захвата таймера.
PS. на этих входах таймера и DMA у меня построен вобще хитрый спец интерфейс и многоходовые транзакции (по смене сигнала на одном пине, DMA изменяет уровень на другом пине, при этом еще один канад ДМА сохраняет данные с порта, а на другой порт по еще одному каналу данные из памяти перемещаются в порт). Эти входы таймеров имеют еще и фильтр настраеваемый на различное количество тактов, что позволяет делать задержку транзакции ДМА на нужное время.