ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Среда
4 декабря
1406645 Топик полностью
il-2 (23.02.2024 09:05, просмотров: 91) ответил my504 на Ну в общем разобрался. Причина в следующем. Когда в прерывании по ДМА я останавливаю TMR2 он остается в позиции на самом конце своего периода (я первым делом в прерывании останавливаю его, иначе он успевает выйти на следующий период). И когда я готовлю его запуск в следующем кадре, то обнуляю тело таймера (для синхронизма кадров), что приводит к формированию ФРОНТА в каналах таймера. И этот фронт запускает АЦП. Поэтому, как только я разрешал работу ДМА в очередном кадре,
Заметание мусора под коврик. Слишком много программных вмешательств в процесс, да еще на грани (как ты говоришь - еле успеваешь выключать таймер в прерывании по ДМА). 

Варианты (которые реализуемы на STM32, насчет AT32 - скорее всего тоже можно так сделать, т.к. это почти клоны):

1. Использовать Advanced Timer (TIM1, TIM8), у которых есть Repetition Counter. Тогда все будет останавливаться само.

2. Использовать DMA Burst mode - это когда по циклам таймера по ДМА можно загружать новые настройки в регистры таймера. Не знаю, есть ли такое в AT32...