Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: EP9301 глюки ядра или ... ?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Desenix
Недавно начал разбираться с процом EP9301 ядро ARM920T, среда глючный IAR ARM 4.0

для начала следующий глюк, код формата ARM
макрос задержки, код был взят из примеров, с небольшими переделками.
Код
.....................
         mov    r0, #700
l200:   subs    r0, r0, #1
         bne     l200

         mov    r5, r0
...................


в конце процедуры происходит выход и затем вывод в UART содержимого r5 , в терминалке я вижу то же значение которое загрузил в r0,
если же subs заменить на add то получаю значение на 1 больше загруженного в r0.
Итого команда subs не выполняется!
Хотя в симуляторе IAR все ОК.

еще пример:
Код
    ldr   r1, =0x80060004

после данной команды в регистре оказывается число 0x00060004
если в примере заменить 8 на любое другое число, то все ОК.
В симуляторе опять же всегда все нормально и даже константа по адресу лежит правильная.

Вопрос, это я что-то забыл в ядре настроить, или это какая-то несовместимость IAR и данного проца, или же мне камень кривой попался ?

PS: гружусь по SPI с AT25F1024
Desenix
следующий код в режиме thumb работает нормально.
Код
               mov      r0, #80
m80:        sub        r0, #1
               bne       m80


ручками дезесамблировал код команды subs, для первого случая, все совпадает, т.е. компилятор не причем, видимо все таки железяка глючная попалась, т.к. в режиме ARM некорректно выполняет некоторые команды.

Кто подскажет как сие выяснить ?
aaarrr
Глючное железо, скорее всего, не Ваш случай. Некоторые моменты не совсем ясны: из какой памяти выполняется программа, как организован вывод в RS232, и какие именно (в цифирках) значения получаются?
Desenix
Цитата(aaarrr @ Jul 7 2005, 17:20)
Глючное железо, скорее всего, не Ваш случай. Некоторые моменты не совсем ясны: из какой памяти выполняется программа, как организован вывод в RS232, и какие именно (в цифирках) значения получаются?
*


1) программа загружается бутлоадером встроенным в процессор в область буфера Ethernet находящуюся в кристалле CPU с адреса 80014000-80014800

2) Вывод UART, взят готовый исходник, добавлена инициализация, выводу я верю, т.к. если ручками добавлять старший бит после загрузки, то контроллер SDRAM который я инициализирую, начинает реагировать, т.е. меняется его настройка, видно осциллографом. Если надо могу исходинк сюда притащить.

3) какие именно значения я вроде указал, байтики вывожу в порядке убывания их веса.

вот пример : 00 06 00 00
а загружал регистр командой ldr r1, =0x80060000
если после взвести ручками старший бит, то будет выведено 80 06 00 00

на AT25F1024 тож причин думать не вижу, т.к. код "ползает" в процессе перекомпиляции по ней.
Desenix
НАШЕЛ ГЛЮК
Сравнил бинарники, тот что в AT25F1024 и на диске, НЕ РАВНО.

оказалось загрузчик который грузит код в EEPROM по UART глючит, это он мне битики вырезал.

там загрузка в две стадии происходит, сначала PC передает передает код своего загрузчика ROM бутлоадеру, потом уже своему загрузчику код который надо прошить в параллельную Flash или последовательную EEPROM (выбирается опционально). А потом переключением перемычек можно грузиться с SPI.

Буду теперь программатором шить, хотя это не удобно.
aaarrr
Еще следует обратить внимание на то, что в ethernet buffer можно писать
только слова (32 бит). По крайней мере, на ep9312 это именно так. И еще: при загрузке через UART сигнатура (CRUS или SURC) тоже копируется в буфер.
Desenix
Цитата(aaarrr @ Jul 8 2005, 19:36)
Еще следует обратить внимание на то, что в ethernet buffer можно писать
только слова (32 бит). По крайней мере, на ep9312 это именно так. И еще: при загрузке через UART сигнатура (CRUS или SURC) тоже копируется в буфер.
*


Странно, у меня большая часть кода выполняется в режиме thumb(16бит) с двухбайтовым выравниванием. И ведь не глючит. Иначе бы заметил. Может быть EP9301 отличается ? ведь у него нет 32б. внешней шины данных.

На счет сигнатуры, я думал что загрузчик ее "вырезает", ладно в понедельник проверю, а то я компилю без нее, потом ее дописываю конвертором HEX->BIN
aaarrr
Цитата
Странно, у меня большая часть кода выполняется в режиме thumb(16бит) с двухбайтовым выравниванием. И ведь не глючит. Иначе бы заметил. Может быть EP9301 отличается ? ведь у него нет 32б. внешней шины данных.


А почему оно должно быть заметно? На чтения этот эффект не распространяется, а записи почти всегда 32бит, кроме стандартных C процедур. Ethernet контроллеры у всех ep93xx одинаковы.
Desenix
Цитата(aaarrr @ Jul 8 2005, 20:57)
А почему оно должно быть заметно? На чтения этот эффект не распространяется, а записи почти всегда 32бит, кроме стандартных C процедур. Ethernet контроллеры у всех ep93xx одинаковы.
*

мне как-то в голову не приходило туда писать байты и полуслова, разве что указтель стека туда перенес, так ведь там все 32 битное.
Desenix
Цитата(aaarrr @ Jul 8 2005, 19:36)
Еще следует обратить внимание на то, что в ethernet buffer можно писать
только слова (32 бит). По крайней мере, на ep9312 это именно так. И еще: при загрузке через UART сигнатура (CRUS или SURC) тоже копируется в буфер.
*


Проверил сейчас по сигнатуре:
Код
    ldr    r0, =0x80014000
    ldr    r4, [r0, #0]
    bl    SendWord

в терминалке не получил сигнатуры, зато получил участок кода, видимо в этом камешке сигнатура bootloader-ом не копируется вместе с кодом.

Кстати, у меня тут проблемка с запуском проца, пока пальцем не ткнешь в резонатор 32768, не запускается, хотя схема обвязки взята со стандартной платы. Да и при чем тут этот кварц, мне не понятно.
aaarrr
По поводу кварца - читаем errat'у. У меня установлен внешний генератор. Без часового кварца процессор не запустится.
Desenix
Цитата(aaarrr @ Jul 11 2005, 20:59)
По поводу кварца - читаем errat'у. У меня установлен внешний генератор. Без часового кварца процессор не запустится.
*


завтра полистаю, я пока проще поступи, выход кварца основного проца замкнул через резистор на вход кварца часового, вроде запускается smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.