Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как ROM-bootloader инициализирует периферию?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
scorp1969
Отладил я небольшую програмку которая работает с UART5 и USB используя PowerPac. Всё работает через JTAG в варианте Rеlease.
Но когда загружаю этот код используя внутренний загрузщик через UART5, то потом моя программа после загрузки не правильно работает с UART5 и кроме того USB не работает тоже. После долгих экспериментов понял что внутренний загрузщик похоже инициализирует какието регистры когда нога SERVICE активирована(в нуле) так что это мешает моей программе. Понял это когда прошил програмку в SPI флешку. С нее грузится и работает хорошо если SERVICE не активирована. Но как только активирую то даже при загрузке рабочего кода с SPI, UART5 и USB не пашут как положено.
В АРМ к сожалению нет комманды software reset, да и это решение не из лучших. Кто знает как в такой ситуации поступить? Или единственный выход - инициализировать после старта программы ВСЁ от начала и до конца?
Другой вариант написать свой маленький бутлодырь который после загрузки кода включал бы WDT чтоб проресетить и стартануть код со сброшенным процессором. Но это дополнительный бутлодырь. Не хотелось бы.
zltigo
Цитата(scorp1969 @ Mar 30 2010, 21:55) *
Всё работает через JTAG в варианте Rеlease.

Теперь смотрите, что в JTAG скрипте инициализируется.
Цитата
После долгих экспериментов понял...

Надо инициализировать периферию, как Вам надо, вот и все.
scorp1969
Цитата(zltigo @ Mar 30 2010, 21:04) *
Теперь смотрите, что в JTAG скрипте инициализируется.

Надо инициализировать периферию, как Вам надо, вот и все.

Спасибо за ответ. Разобрался. Кому интересно:
Для того чтобы заработал UART5 так и сделал, проинициализировал UART периферию и все клоки. Скрипт кстати до этого был скопирован в мой код. Просто внутренний бутлодер делал дополнительную инициализацию. Короче проинициализировал всё по новой не надеясь на значения после сброса.
А вот с USB фишка в том что у меня на плате стоит рекомендованный ISP1301 драйвер шины USB. Так вот внутренний бутлодер программирует его в transparent mode и соединяет по сути USB к UART. При этом если к USB в этот момент подключен комп то он виснет(у меня XP). Сделал так, поменял на плате I2C адрес ISP1301 и теперь бутлодер его не находит. Ну и естественно заменил I2C адрес обращения в основной программе.
Вообщем так и есть, если одним словом, "Надо инициализировать периферию, как Вам надо, вот и все"
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.