evgeniy1294 (22.01.2020 20:10 - 20:21, просмотров: 261) ответил zzz-spider на Проблема в том, что не могу заставить дергать DMAMUX с помощью событий, приходящих от TIM15. Наблюдая за регистрами DMAMUX, вижу, как меняется их значения по другим каналам. Тот канал DMAMUX, который завязан на TIM15, никаких телодвижений нет.
У меня как-то так сделано на stm32mp157. А вот над этим куском кода я экспрериментировал, когда нужно было выплевывать значения в gpio через dma с синхронизацией по таймеру (stm32f4xx):
void dma_tim_test()
{
{
RCC->APB2ENR |= RCC_APB2ENR_TIM1EN;
mcu::tim::init(TIM1, mcu::tim::direction_t::up);
mcu::tim::stop(TIM1);
TIM1->DIER |= TIM_DIER_TDE | TIM_DIER_UDE;
TIM1->CR1 |= TIM_CR1_URS;
TIM1->CR2 |= 0b010 << TIM_CR2_MMS_Pos;
TIM1->ARR = 500;
TIM1->EGR = TIM_EGR_UG;
while(TIM1->EGR & TIM_EGR_UG);
TIM1->EGR = TIM_EGR_UG;
TIM1->DIER &= ~TIM_DIER_UIE;
TIM1->DCR &= ~TIM_DCR_DBA;
TIM1->DCR &= ~TIM_DCR_DBL;
}
// TIM5 TRIG DMA Channel - for gpio
mcu::dma::init(DMA2_Stream5, channel_t::_6, direction_t::MtoP, priority_t::medium, width_t::half_word);
DMA2_Stream5->CR |= DMA_SxCR_CIRC;
// DMA Transfer
mcu::dma::transaction(DMA2_Stream5,
mcu::dma::direction_t::MtoP,
(uint32_t)mask,
(uint32_t)&GPIOC->ODR,
4);
mcu::tim::start(TIM1);
return;
}