К1921ВК01Т (арм Cortex-M4F)

32-разрядные микроконтроллеры разработки АО "НИИЭТ"

Модераторы: ea, dav, bkolbov, Alis, pip, _sva_

bkolbov
Сообщения: 248
Зарегистрирован: 14 дек 2015, 11:37
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение bkolbov »

AlexBlv писал(а): 15 июн 2017, 11:14 Добрый день, не подскажите входное сопротивление и емкость АЦП данного микроконтроллера?
Добрый день! Данные параметры сейчас уточняются.
qqq123 писал(а): 21 июн 2017, 09:52 Добрый день!
Не могу понять как работать с DMA в связке с АЦП.
В моем проекте запуск секвенсора происходит с частотой 20кГц, опрашиваются 16 каналов. Контроллер DMA настроен в соответствии с примером с репозитория http://bitbucket.org/niietcm4/niietcm4_ ... at=default.
Проблема заключается в том, что в первый раз всё данные из секвенсора через DMA считываются правильно, но когда возникает ещё одно прерывание от секвенсора, то в регистре NT_ADC->OSTAT устанавливается флаг ошибки DOV0 и канал отключается. Запустить его после этого не удается, вероятно из-за флага DOVs. В ТО написано, что его можно сбросить путем записи "1" в соответствующий бит регистра OSTAT, однако, флаг при этом не сбрасывается.
Добрый день! Расскажите пожалуйста подробнее о используемой конфигурации АЦП.
Сколько секвенсоров используется, как они запускаются, какие каналы опрашивают, как настроены прерывания и т.д.
qqq123
Сообщения: 14
Зарегистрирован: 17 окт 2016, 23:43

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение qqq123 »

Используется один секвенсор, опрашивающий 16 каналов АЦП, который запускается по прерыванию от блока ШИМ (используется один канал). Прерывание возникает при равенстве счётчика ШИМ половине периода (частота 20 кГц). DMA вызывается при записи в буфер 16 результатов измерений. Буфер данных приемника рассчитан на 16 измерений.
В программе разрешены и обрабатываются прерывания от канала DMA, работающего с АЦП. В прерывании выполняется только установка флага.
Если отключить DMA и считывать данные в прерывании от АЦП, то все работает правильно.
bkolbov
Сообщения: 248
Зарегистрирован: 14 дек 2015, 11:37
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение bkolbov »

qqq123 писал(а): 21 июн 2017, 11:28 Используется один секвенсор, опрашивающий 16 каналов АЦП, который запускается по прерыванию от блока ШИМ (используется один канал). Прерывание возникает при равенстве счётчика ШИМ половине периода (частота 20 кГц). DMA вызывается при записи в буфер 16 результатов измерений. Буфер данных приемника рассчитан на 16 измерений.
В программе разрешены и обрабатываются прерывания от канала DMA, работающего с АЦП. В прерывании выполняется только установка флага.
Если отключить DMA и считывать данные в прерывании от АЦП, то все работает правильно.
16 каналов - первые 16 каналов с 0 по 15?
А какая системная частота и частота тактирования АЦП? Ранее вы писали "канал отключается" - имеется ввиду канал DMA?
qqq123
Сообщения: 14
Зарегистрирован: 17 окт 2016, 23:43

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение qqq123 »

bkolbov писал(а): 21 июн 2017, 12:06 16 каналов - первые 16 каналов с 0 по 15?
А какая системная частота и частота тактирования АЦП? Ранее вы писали "канал отключается" - имеется ввиду канал DMA?
Каналы с 0 по 15. Системная частота - 100 МГц, частота АЦП - 25 МГц (для 12-разрядного режима).
Да, отключается канал DMA. Когда я захожу в первый раз в обработчик прерывания канала DMA, то вижу в регистре приемника все 16 результатов измерений АЦП. Но когда попадаю в обработчик второй раз, то вижу, что установлен флаг DOV0, а в регистре CHNL_ENABLE_SET бит, соответствующий каналу DMA сбрасывается в 0, т.е. канал отключается. После этого результаты АЦП в регистре приемника через DMA уже не обновляются.
bkolbov
Сообщения: 248
Зарегистрирован: 14 дек 2015, 11:37
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение bkolbov »

qqq123 писал(а): 21 июн 2017, 12:59 Каналы с 0 по 15. Системная частота - 100 МГц, частота АЦП - 25 МГц (для 12-разрядного режима).
Да, отключается канал DMA. Когда я захожу в первый раз в обработчик прерывания канала DMA, то вижу в регистре приемника все 16 результатов измерений АЦП. Но когда попадаю в обработчик второй раз, то вижу, что установлен флаг DOV0, а в регистре CHNL_ENABLE_SET бит, соответствующий каналу DMA сбрасывается в 0, т.е. канал отключается. После этого результаты АЦП в регистре приемника через DMA уже не обновляются.
Ну и еще вопрос по ШИМу. Какой шим используете, какой из каналов (А,Б) для синхронизации, и как настроена синхронизация (поля SOCASEl/SOCBSEL в регистре ETSEL, SOCAPRD/SOCBPRD в регистре ETPS)?

Если бы вы могли предоставить код с соответствующими инициализациями PWM, ADC, DMA - было бы лучше всего.
qqq123
Сообщения: 14
Зарегистрирован: 17 окт 2016, 23:43

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение qqq123 »

Код отправляю Вам в личном сообщении.

А если кратко, то используется PWM1, синхронизация только по каналу А. SOCASEL=6, SOCAPRD=0 (в документации написано, что при SOCAPRD=0 выдача сигнала PWM_SOCA запрещена, но на деле прерывание секвенсора возникает при каждом выполнении условия SOCASEL).
bkolbov
Сообщения: 248
Зарегистрирован: 14 дек 2015, 11:37
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение bkolbov »

qqq123 писал(а): 21 июн 2017, 16:18 Код отправляю Вам в личном сообщении.

А если кратко, то используется PWM1, синхронизация только по каналу А. SOCASEL=6, SOCAPRD=0 (в документации написано, что при SOCAPRD=0 выдача сигнала PWM_SOCA запрещена, но на деле прерывание секвенсора возникает при каждом выполнении условия SOCASEL).
Хорошо, спасибо.

Пока что сходу обозначить проблему не удается, поэтому мы попытаемся повторить вашу ситуацию и происследовать этот момент.
bkolbov
Сообщения: 248
Зарегистрирован: 14 дек 2015, 11:37
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение bkolbov »

qqq123 писал(а): 21 июн 2017, 16:18 Код отправляю Вам в личном сообщении.

А если кратко, то используется PWM1, синхронизация только по каналу А. SOCASEL=6, SOCAPRD=0 (в документации написано, что при SOCAPRD=0 выдача сигнала PWM_SOCA запрещена, но на деле прерывание секвенсора возникает при каждом выполнении условия SOCASEL).
Добрый день!

Насколько я понял - вы хотите чтобы DMA работал циклически, передавая каждые 16 измерений с АЦП. DMA так не умеет, он выполняет задачу и останавливается.
Дело в том, что DMA в процессе работы изменяет значение поля N-1 в структуре управляющих данных канала CHANNEL_CFG. Когда DMA завершает передачи по нужному каналу, то N-1=0, поле cycle_ctrl он тоже устанавливает 0, а также сбрасывает бит разрешения работы канала в регистре CHNL_ENABLE_SET.

Таким образом, чтобы DMA смог выполнить новый запрос от АЦП и выдать в конце прерывание снова, необходимо, например, в конце текущего прерывания установить N-1, cycle_ctrl и CHNL_ENABLE_SET по новой.
Например:

Код: Выделить всё

DMA_CONFIGDATA.PRM_DATA.CH[8].CHANNEL_CFG_bit.N_MINUS_1 = DMA_SEQ0_TRANSFERS_TOTAL-1;
DMA_CONFIGDATA.PRM_DATA.CH[8].CHANNEL_CFG_bit.CYCLE_CTRL = DMA_Mode_Basic;
NT_DMA->CHNL_ENABLE_SET = DMA_Channel_ADCSEQ0;
qqq123
Сообщения: 14
Зарегистрирован: 17 окт 2016, 23:43

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение qqq123 »

Да, это помогло. Спасибо!
AlexPo1
Сообщения: 2
Зарегистрирован: 03 июл 2017, 23:42
Предприятие: AО "Технодинамика"
Откуда: Москва

Re: К1921ВК01Т (арм Cortex-M4F)

Сообщение AlexPo1 »

Прошу уточнения по поводу работы ШИМ высокого разрешения. Допустим я сформировал импульс PWMA с использованием блока ШИМ высокого разрешения и после этого подаю этот импульс на схему формирования мёртвого времени. Мёртвое время равно целому количеству тактов синхронизирующей частоты TBCLK. Можно ли добавить мёртвое время к фронту, который сформирован блоком ШИМ высокого разрешения и не совпадает с фронтом тактирующих импульсов? Не получится ли так, что схема, формирующая мёртвое время синхронизирует фронт с фронтом тактирующих импульсов и добавка, сделанная аппаратной линией задержки будет утрачена?
Ответить

Вернуться в «32-разрядные микроконтроллеры»