ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
21 ноября
1405957
my504 (21.02.2024 13:24, просмотров: 1706)
И снова внезапно вопрос. Упоминавшийся ранее AT32F407. Берем в нем АЦП и по некоему событию запускаем TMR2=>ADC=>DMA =>ISR DMA (останавливаем TMR2). АЦП настроен на автоматический перебор трех каналов на каждый клок семплирующего таймера TMR2 (один клок-три преобразования). Первый запуск дает идеальный результат. В массиве куда нацелен ДМА все каналы строго упорядочены и первый обозначенный в настройках канал оказывается в нулевом индексе массива. Однако, все 

последующие запуски приводят к сдвигу в массиве на один элемент и в нулевом индексе оказывается последний канал в тройке. Есть такое подозрение, что пока в прерывании останавливаешь семплирующий таймер, он успевает еще один раз запустить АЦП на три преобразования и последнее где то зависает результатом, а при следующем запуске оказывается первым. Я в промежутке между запусками читал ADCx->odt, сбрасывал флаги, но результата это не дает. Вопрос: откуда прибегает это лишнее значение в начале массива?