Миландр

Ключевым подразделением нашей компании
является Центр Проектирования интегральных микросхем
Текущее время: 2019-дек-08 13:54

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 35 сообщений ]  На страницу 1 2 3 »
Автор Сообщение
СообщениеДобавлено: 2019-янв-08 16:07 
Не в сети
Аватара пользователя

Зарегистрирован: 2012-май-05 08:45
Сообщения: 31
Откуда: Москва
Здравствуйте.

Столкнулся со следующей проблемой. В связи с особенностями работы нашего изделия, нам нужно, чтобы код программы выполнялся из внешнего однократно программируемого ПЗУ (используем 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 меняет значение каких-либо регистров, прямо или косвенно влияющих на работу ЦАП.


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2019-янв-09 09:13 
Не в сети

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

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

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


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2019-янв-09 10:45 
Не в сети
Аватара пользователя

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


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2019-янв-09 15:49 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 456
Организация: Milandr
Откуда: ПКК "Миландр"
А читается из регистра DATA то, что в него было записано?


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2019-янв-09 17:17 
Не в сети
Аватара пользователя

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


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2019-янв-09 17:28 
Не в сети

Зарегистрирован: 2014-июн-25 09:29
Сообщения: 121
Осциллографом смотрели не выходе ЦАП? Может там не постоянное напряжение, а какие-нибудь импульсы? Например, из-за срабатывания Watchdog и периодической перезагрузки.


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2019-янв-09 17:34 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 456
Организация: Milandr
Откуда: ПКК "Миландр"
Похоже на то, что запись в ЦАП происходит слишком часто. ЦАП не отработал еще прошлый вывод, а в него уже записывается что-то следующее. Прерывание исполнения точками останова прерывает непрерывный цикл записи, поэтому ЦАП выставляет то, что в него было записано.
Вставьте задержку после каждого вывода в ЦАП, чтобы проверить это предположение.

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


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2019-янв-09 18:24 
Не в сети

Зарегистрирован: 2010-сен-21 12:57
Сообщения: 722
Откуда: г. Санкт-Петербург
При работе с внешней шиной PE[2..0] настраивается как шина адреса A14-A16 поэтому ЦАП в этом режиме и не должен работать.


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2019-янв-09 18:50 
Не в сети
Аватара пользователя

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


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2019-янв-09 19:01 
Не в сети
Аватара пользователя

Зарегистрирован: 2012-май-05 08:45
Сообщения: 31
Откуда: Москва
Следуя такой логике, пины PE[3..4] тоже должны работать, как адресные пины A17 и A18. Но у меня в проекте они перенастраиваются на PWM и прекрасно работают, именно как PWM. Если PE3 и PE4 перенастраиваются на PWM, то почему PE1 не перенастраивается на DAC?


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2019-янв-10 09:21 
Не в сети

Зарегистрирован: 2017-апр-26 14:51
Сообщения: 456
Организация: Milandr
Откуда: ПКК "Миландр"
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, спасибо.


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2019-янв-10 10:01 
Не в сети
Аватара пользователя

Зарегистрирован: 2012-май-05 08:45
Сообщения: 31
Откуда: Москва
Понял, спасибо.
PE1. Используется только как DAC, как линия адреса он не используется.


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2019-янв-10 10:05 
Не в сети
Аватара пользователя

Зарегистрирован: 2012-май-05 08:45
Сообщения: 31
Откуда: Москва
Жалко только, что в описании не написано, что эти пины нельзя перенастроить.


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2019-янв-10 10:47 
Не в сети

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

_________________
сочувствующий…


Вынести предупреждение
Вернуться к началу
СообщениеДобавлено: 2019-янв-10 10:56 
Не в сети

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

Добавим обязательно вместо "по умолчанию" - "аппаратно (программно не модифицируется)".

_________________
Отдел технической поддержки support@milandr.ru


Вынести предупреждение
Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 35 сообщений ]  На страницу 1 2 3 »

Часовой пояс: UTC+03:00


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя


Быстрые действия:
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти: 

Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB