Работа с DAC при выполнении кода из внешнего ПЗУ

Аватара пользователя
koe
Сообщения: 31
Зарегистрирован: 2012-май-05 08:45
Откуда: Москва
Контактная информация:

Работа с DAC при выполнении кода из внешнего ПЗУ

Сообщение koe » 2019-янв-08 16:07

Здравствуйте.

Столкнулся со следующей проблемой. В связи с особенностями работы нашего изделия, нам нужно, чтобы код программы выполнялся из внешнего однократно программируемого ПЗУ (используем 4 микросхемы 1645РТ2У в режиме с 32-разрядной шиной данных). Изначально код отлаживался во внутренней flash памяти и проблем с ним не было. При работе использовался DAC0 с внутренним опорным напряжением. После завершения отладки кода и прошивания микросхем ПЗУ было обнаружено, что при выполнении кода из ПЗУ DAC0 непонятно меняет режим работы. При записи в его регистр значений от 0 до 4095 выходное напряжение меняется от 0.3 до 0.9В. Если этот же код (без каких-либо изменений) выполняется из внутренней flash-памяти, то, как и положено, выходное напряжение меняется от практически нуля до практически 3.3 В. Что может происходить при работе кода из внешней ПЗУ (ITCMLAEN=0)?
Программа настраивает тактовую частоту процессора 96 МГц (пробовали 48, разницы нет). Настройка пина, отвечающего за ЦАП, делается так:

PORT_InitPin(PORTE, PORT_Pin_1, PORT_DIR_OUT, PORT_FUNC_MAIN, PORT_MODE_ANALOG, PORT_PULL_UP_OFF, PORT_PULL_DOWN_OFF, PORT_TRIG_SHM_OFF, PORT_PD_DRIVER, PORT_SPEED_MAXFAST, PORT_GFEN_OFF);

Такая работа ЦАП при ITCMLAEN=0 - это особенность микроконтроллера, или мы что-то делаем не так? Есть подозрение, что первичный загрузчик в масочном ПЗУ микроконтроллера при ITCMLAEN=0 меняет значение каких-либо регистров, прямо или косвенно влияющих на работу ЦАП.

Vasiliy
Сообщения: 455
Зарегистрирован: 2017-апр-26 14:51
Организация: Milandr
Откуда: ПКК "Миландр"

Re: Работа с DAC при выполнении кода из внешнего ПЗУ

Сообщение Vasiliy » 2019-янв-09 09:13

Здравствуйте.

Есть возможность посмотреть, что происходит под отладчиком при записи в ЦАП?
Начальный загрузчик думаю ни при чем, в обоих случаях (ICTMLAEN = 0/1) он отработает одинаково.
Могу предположить, что внешняя шина выбирает данные как-то иначе, чем это делается из flash памяти. Например, если объявлен массив значений, который читается из ПЗУ и выводится в ЦАП. Проверьте отладчиком, какие данные пишутся в ЦАП.

Если отладчик недоступен, выведите пилу в ЦАП, инкрементируя в коде регистр DATA. Это даст понять проблема в настройке ЦАП, или в выборке данных.

Аватара пользователя
koe
Сообщения: 31
Зарегистрирован: 2012-май-05 08:45
Откуда: Москва
Контактная информация:

Re: Работа с DAC при выполнении кода из внешнего ПЗУ

Сообщение koe » 2019-янв-09 10:45

Есть возможность пользоваться отладчиком. Данные приходят верные. Они не берутся из ПЗУ, они вычисляются программой по формуле, вычисления делаются правильно.
Подпаял вместо микросхем ПЗУ эмулятор ПЗУ, сейчас могу оперативно без перепайки микросхем отлаживать код, выполняемый из внешней шины. Вывожу для отладки в ЦАП просто разные значения (константы). По прежнему, при записи в регистр 0 выставляется напряжение 0.3 В, при записи 4095 выставляется 0.9 В. Пробовал играть с настройками, пока не помогло.

Vasiliy
Сообщения: 455
Зарегистрирован: 2017-апр-26 14:51
Организация: Milandr
Откуда: ПКК "Миландр"

Re: Работа с DAC при выполнении кода из внешнего ПЗУ

Сообщение Vasiliy » 2019-янв-09 15:49

А читается из регистра DATA то, что в него было записано?

Аватара пользователя
koe
Сообщения: 31
Зарегистрирован: 2012-май-05 08:45
Откуда: Москва
Контактная информация:

Re: Работа с DAC при выполнении кода из внешнего ПЗУ

Сообщение koe » 2019-янв-09 17:17

Да, читает правильные значения из регистра. Вот ещё что заметил. Если в режиме отладки поставить breakpoint, то при остановке на нем на выходе ЦАП моментально выводятся правильные напряжения. Но стоит только запустить программу выполняться далее, снова выводятся неверные значения напряжения. Аналогичо, если нажать кнопку stop в дебаггере то тоже выводятся правильные напряжения, а при возобновлении работы программы - неправильные. Используется среда keil mdk 5.12.00, отладчик - j-link.

andelie
Сообщения: 121
Зарегистрирован: 2014-июн-25 09:29

Re: Работа с DAC при выполнении кода из внешнего ПЗУ

Сообщение andelie » 2019-янв-09 17:28

Осциллографом смотрели не выходе ЦАП? Может там не постоянное напряжение, а какие-нибудь импульсы? Например, из-за срабатывания Watchdog и периодической перезагрузки.

Vasiliy
Сообщения: 455
Зарегистрирован: 2017-апр-26 14:51
Организация: Milandr
Откуда: ПКК "Миландр"

Re: Работа с DAC при выполнении кода из внешнего ПЗУ

Сообщение Vasiliy » 2019-янв-09 17:34

Похоже на то, что запись в ЦАП происходит слишком часто. ЦАП не отработал еще прошлый вывод, а в него уже записывается что-то следующее. Прерывание исполнения точками останова прерывает непрерывный цикл записи, поэтому ЦАП выставляет то, что в него было записано.
Вставьте задержку после каждого вывода в ЦАП, чтобы проверить это предположение.

Если ситуация не прояснится, то вышлите проект минимального размера на support@milandr.ru. Попробуем посмотреть, в чем причина.

vasili
Сообщения: 719
Зарегистрирован: 2010-сен-21 12:57
Откуда: г. Санкт-Петербург

Re: Работа с DAC при выполнении кода из внешнего ПЗУ

Сообщение vasili » 2019-янв-09 18:24

При работе с внешней шиной PE[2..0] настраивается как шина адреса A14-A16 поэтому ЦАП в этом режиме и не должен работать.

Аватара пользователя
koe
Сообщения: 31
Зарегистрирован: 2012-май-05 08:45
Откуда: Москва
Контактная информация:

Re: Работа с DAC при выполнении кода из внешнего ПЗУ

Сообщение koe » 2019-янв-09 18:50

Это точно не связано с частотой записи в ЦАП, данные туда пишутся 1 раз в секунду по прерываниям от таймера. Кроме того, этот же код прекрасно работает из внутренней флеш-памяти.
Пины PE(2...0) не используются в проекте, как адресные и переназначаются программно. Т.е. я правильно понял, что даже при принудительном переназначении функции этих портов они все равно не переназначаются при выполнении кода из внешней шины? Но почему тогда работают правильно при остановке в отладчике?

Аватара пользователя
koe
Сообщения: 31
Зарегистрирован: 2012-май-05 08:45
Откуда: Москва
Контактная информация:

Re: Работа с DAC при выполнении кода из внешнего ПЗУ

Сообщение koe » 2019-янв-09 19:01

Следуя такой логике, пины PE[3..4] тоже должны работать, как адресные пины A17 и A18. Но у меня в проекте они перенастраиваются на PWM и прекрасно работают, именно как PWM. Если PE3 и PE4 перенастраиваются на PWM, то почему PE1 не перенастраивается на DAC?

Vasiliy
Сообщения: 455
Зарегистрирован: 2017-апр-26 14:51
Организация: Milandr
Откуда: ПКК "Миландр"

Re: Работа с DAC при выполнении кода из внешнего ПЗУ

Сообщение Vasiliy » 2019-янв-10 09:21

vasili писал(а): При работе с внешней шиной PE[2..0] настраивается как шина адреса A14-A16 поэтому ЦАП в этом режиме и не должен работать.
Василий прав. Описание выводов которые используются для внешней шины в режиме ICTMLAEN=0 находится в спецификации на стр. 16 - "Примечание к таблице 2".
Шина адреса А[16:0] - PF[15:3], PD[15], PE[2:0]. Назначение этих выводов производится аппаратно, независимо от того, что выставлено в настройках пинов. Программное подключение пинов к ЦАП конфликтует с аппаратным подключением пинов к контроллеру внешней шины. В точке останова выборка инструкций из внешней памяти прекращается (не проверял, но судя по всему, линии адреса переходят в 3-е состояние) и поэтому ЦАП выводит таки свое напряжение.

РЕ[4:3] не используются для шины адреса, поэтому ШИМ на них работает.

Не понял только, как удалось развести плату чтобы один выход ушел и на нагрузку ЦАП и на линию адреса. Куда схеме подключен вывод PE1?

vasili, спасибо.

Аватара пользователя
koe
Сообщения: 31
Зарегистрирован: 2012-май-05 08:45
Откуда: Москва
Контактная информация:

Re: Работа с DAC при выполнении кода из внешнего ПЗУ

Сообщение koe » 2019-янв-10 10:01

Понял, спасибо.
PE1. Используется только как DAC, как линия адреса он не используется.

Аватара пользователя
koe
Сообщения: 31
Зарегистрирован: 2012-май-05 08:45
Откуда: Москва
Контактная информация:

Re: Работа с DAC при выполнении кода из внешнего ПЗУ

Сообщение koe » 2019-янв-10 10:05

Жалко только, что в описании не написано, что эти пины нельзя перенастроить.

prostoRoman
Сообщения: 1388
Зарегистрирован: 2009-июл-21 14:13
Откуда: Тула
Контактная информация:

Re: Работа с DAC при выполнении кода из внешнего ПЗУ

Сообщение prostoRoman » 2019-янв-10 10:47

Vasiliy писал(а):..."Примечание к таблице 2".
Шина адреса А[16:0] - PF[15:3], PD[15], PE[2:0]. Назначение этих выводов производится аппаратно, независимо от того, что выставлено в настройках пинов. Программное подключение пинов к ЦАП конфликтует с аппаратным подключением пинов к контроллеру внешней шины. ...
Если это действительно так, то стоит это и написать в примечании, а то там написано "по умолчанию".
сочувствующий…

Ekaterina
Сообщения: 132
Зарегистрирован: 2017-фев-14 11:21
Организация: АО ПКК Миландр
Откуда: АО "ПКК Миландр"

Re: Работа с DAC при выполнении кода из внешнего ПЗУ

Сообщение Ekaterina » 2019-янв-10 10:56

Здравствуйте!

Добавим обязательно вместо "по умолчанию" - "аппаратно (программно не модифицируется)".
Отдел технической поддержки support@milandr.ru

Ответить

Вернуться в «32-разрядные микроконтроллеры 1986ВЕ1Т, для авиаприменений»