Перейти к содержанию
    

Пользуйтесь: :rolleyes:

reg = ((reg) & ~(msk)) | ((val) << (pos) & (msk));

 

Спасибо.

Так, вероятно, проще всего. И понятней.

Сразу виден алгоритм: сначала зануляем всё битовое поле целиком ((reg) & ~(msk)), после чего выставляем в нем 1 в нужных разрядах ( | ((val) << (pos) & (msk)) ).

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Задал вопрос в отдельной ветке - молчок. Буду спрашивать здесь.

Передача данных от 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.

Что не так делаю?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...