Darth Vader 0 2 сентября, 2018 Опубликовано 2 сентября, 2018 · Жалоба Пользуйтесь: :rolleyes: reg = ((reg) & ~(msk)) | ((val) << (pos) & (msk)); Спасибо. Так, вероятно, проще всего. И понятней. Сразу виден алгоритм: сначала зануляем всё битовое поле целиком ((reg) & ~(msk)), после чего выставляем в нем 1 в нужных разрядах ( | ((val) << (pos) & (msk)) ). Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mihlit 0 8 сентября, 2018 Опубликовано 8 сентября, 2018 · Жалоба Задал вопрос в отдельной ветке - молчок. Буду спрашивать здесь. Передача данных от ADC в буфер по DMA. ADC_Config(); // ADC configuration ADC_SoftwareStartConv(ADC1); // Start ADC1 Software Conversion while (1) { while(!DMA_LISR_TCIF0) continue; //ждать заполнения буфера // обработка буфера } DMA в режиме Normal Первый цикл проходит - буфер заполнился. Смотрю RM0090 в разделе ADC 13.8.1 (перевод Google) "Чтобы восстановить ADC из состояния OVR, когда используется DMA, выполните следующие действия: 1. Повторно инициализировать DMA (настроить адрес назначения и счетчик NDTR) 2. Очистите бит ADV OVR в регистре ADC_SR 3. Запустите АЦП, чтобы начать преобразование." Выполнил первый пункт. Со вторым непонятки. Если в ADC установлен флаг CONT то флаг OVR не сбрасывается. При сбросе CONT флаг OVR может сброситься, но чаще - нет. То же самое с флагом STRT. Что не так делаю? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mihlit 0 8 сентября, 2018 Опубликовано 8 сентября, 2018 · Жалоба Извиняйте за компанию Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться