Миландр

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

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.
Автор Сообщение
СообщениеДобавлено: 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
Сообщения: 286
Откуда: ПКК "Миландр"
Здравствуйте.

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

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

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


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

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


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

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

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 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
Сообщения: 100
Осциллографом смотрели не выходе ЦАП? Может там не постоянное напряжение, а какие-нибудь импульсы? Например, из-за срабатывания Watchdog и периодической перезагрузки.


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

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

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

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


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

Зарегистрирован: 2010-сен-21 12:57
Сообщения: 687
Откуда: г. Санкт-Петербург
При работе с внешней шиной 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
Сообщения: 286
Откуда: ПКК "Миландр"
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, спасибо.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 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
Сообщения: 1234
Откуда: Тула
Vasiliy писал(а):
..."Примечание к таблице 2".
Шина адреса А[16:0] - PF[15:3], PD[15], PE[2:0]. Назначение этих выводов производится аппаратно, независимо от того, что выставлено в настройках пинов. Программное подключение пинов к ЦАП конфликтует с аппаратным подключением пинов к контроллеру внешней шины. ...

Если это действительно так, то стоит это и написать в примечании, а то там написано "по умолчанию".

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


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

Зарегистрирован: 2017-фев-14 11:21
Сообщения: 104
Здравствуйте!

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

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 29 ]  На страницу 1, 2  След.

Часовой пояс: UTC + 3 часа


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

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


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

Найти:
Перейти:  
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB