Sl (09.07.2017 21:10, просмотров: 183) ответил LightElf на 1) Я бы перед и после команды включения DMA CR.EN =1 поставил __DSB(). Не помню сейчас, на одной шине сидят DMA и ADC.
1) поставил __DSB() до и после DMA CR.EN =1. Нет эффекта. И еще дополнительно поставил __DSB() до и после ADC1->CR2 |= ADC_CR2_SWSTART;. Нет эффекта. 2) Конечно смотрел.
3) Была мысль, что DMA работает по 32 битной шине. А я прошу переслать ПЯТЬ 16 битных значений. Делал пересылку четырех 16 битных значений. Делал пересылку одного, четырех 32 битных значений. Нет эффекта.
4) Есть еще один не понятный глюк. На первый взгляд не относящийся к теме. Работаю в IAR 8.11 + ST-link.
Есть массив, который я нигде не использую - volatile uint32_t U16Dma2DataADC0[16]; В памяти массив начинается с адреса 0x2001000C.
При попытке записи любого значения в первые 6 элементов в окне Watch и в окне Memory вижу только нули. С другими элементами массива все ОК.
Но, если потом скопировать U16Dma2DataADC0[0] в другую переменную, то вижу правильное значение(то которое пытался ранее записать).
Причем, если массив объявить как volatile uint16_t те же проблемы тоже с первыми 6 элементами массива. Глюк IAR???