2010-09-03 4 views
1

Когда я использую JTAG для загрузки моего кода C на оценочную плату, он успешно загружается. Однако, когда я выполнил свой код из main(), я сразу же получил ошибку «CPU не остановился», а затем «Нет APB-AP found».Ошибка «CPU не остановлена» и «Нет APB-AP найден»

Я смог загрузить и выполнить код, связанный с USB, прежде чем я получил эту ошибку.

Я искал ее для поиска и использовал команду JTAG «rx 0» для сброса цели, но она не вносит никаких изменений.

Я использую процессор ARM Cortex-M3, J-Link ARM V4.14d, встроенную среду IDE IAR.

Спасибо за помощь ур.

+0

Вы уверены, что 'main()' является точкой входа? Как правило, существует довольно много кода запуска, который должен быть выполнен для настройки адресации памяти, инициализации аппаратного обеспечения, установки указателя стека и т. Д., Прежде чем вы сможете начать делать такие вещи, как настройка библиотеки времени выполнения C, не говоря уже о том, Основной() '. – RBerteig

+0

IAR выполнит код запуска и вставляет точку останова в main(). Но я получил ошибку, когда продолжаю идти от main(). – Supernova

ответ

3

Одним из возможных вариантов: сторожевого

Если ваше оборудование имеет сторожевой таймер, то вы должны убедиться, что он не сбрасывает CPU, когда JTAG хочет, чтобы остановить его. Если сторожевой таймер сбросит CPU, вы, как правило, получите описанную вами ошибку «CPU not halted».

Если ЦПУ имеет внутреннюю сторожевую схему, на некоторых процессорах он автоматически «приостанавливается», когда JTAG останавливает CPU. Но на других это не происходит, и вы должны убедиться, что сторожевой таймер отключен при выполнении JTAG-отладки.

Если у вашей схемы есть сторожевая цепь, которая является внешней по отношению к ЦП, тогда, как правило, вам необходимо каким-то образом отключить ее (как правило, разработчик аппаратных средств предоставляет на своем борту какой-то переключатель/перемычку) ,

0

Вы повторно используете линии jtag в виде линий gpio и clobbering способность jtags связываться с чипом? Таким образом, я заманил стелларис.

0

Убедитесь, что вы есть эта строка кода:

WatchdogStallEnable (WATCHDOG0_BASE); // остановить сторожевой таймер при остановленном CPU