|
|
  |
EP9301 глюки ядра или ... ?, вопрос по ASM ARM |
|
|
|
Jul 6 2005, 14:14
|
Частый гость
 
Группа: Новичок
Сообщений: 111
Регистрация: 23-06-04
Пользователь №: 141

|
Недавно начал разбираться с процом 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
|
|
|
|
|
Jul 7 2005, 12:27
|
Частый гость
 
Группа: Новичок
Сообщений: 111
Регистрация: 23-06-04
Пользователь №: 141

|
следующий код в режиме thumb работает нормально. Код mov r0, #80 m80: sub r0, #1 bne m80 ручками дезесамблировал код команды subs, для первого случая, все совпадает, т.е. компилятор не причем, видимо все таки железяка глючная попалась, т.к. в режиме ARM некорректно выполняет некоторые команды. Кто подскажет как сие выяснить ?
|
|
|
|
|
Jul 8 2005, 08:19
|
Частый гость
 
Группа: Новичок
Сообщений: 111
Регистрация: 23-06-04
Пользователь №: 141

|
Цитата(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 тож причин думать не вижу, т.к. код "ползает" в процессе перекомпиляции по ней.
|
|
|
|
|
Jul 8 2005, 16:18
|
Частый гость
 
Группа: Новичок
Сообщений: 111
Регистрация: 23-06-04
Пользователь №: 141

|
Цитата(aaarrr @ Jul 8 2005, 19:36) Еще следует обратить внимание на то, что в ethernet buffer можно писать только слова (32 бит). По крайней мере, на ep9312 это именно так. И еще: при загрузке через UART сигнатура (CRUS или SURC) тоже копируется в буфер. Странно, у меня большая часть кода выполняется в режиме thumb(16бит) с двухбайтовым выравниванием. И ведь не глючит. Иначе бы заметил. Может быть EP9301 отличается ? ведь у него нет 32б. внешней шины данных. На счет сигнатуры, я думал что загрузчик ее "вырезает", ладно в понедельник проверю, а то я компилю без нее, потом ее дописываю конвертором HEX->BIN
|
|
|
|
|
Jul 9 2005, 10:19
|
Частый гость
 
Группа: Новичок
Сообщений: 111
Регистрация: 23-06-04
Пользователь №: 141

|
Цитата(aaarrr @ Jul 8 2005, 20:57) А почему оно должно быть заметно? На чтения этот эффект не распространяется, а записи почти всегда 32бит, кроме стандартных C процедур. Ethernet контроллеры у всех ep93xx одинаковы. мне как-то в голову не приходило туда писать байты и полуслова, разве что указтель стека туда перенес, так ведь там все 32 битное.
|
|
|
|
|
Jul 11 2005, 06:49
|
Частый гость
 
Группа: Новичок
Сообщений: 111
Регистрация: 23-06-04
Пользователь №: 141

|
Цитата(aaarrr @ Jul 8 2005, 19:36) Еще следует обратить внимание на то, что в ethernet buffer можно писать только слова (32 бит). По крайней мере, на ep9312 это именно так. И еще: при загрузке через UART сигнатура (CRUS или SURC) тоже копируется в буфер. Проверил сейчас по сигнатуре: Код ldr r0, =0x80014000 ldr r4, [r0, #0] bl SendWord в терминалке не получил сигнатуры, зато получил участок кода, видимо в этом камешке сигнатура bootloader-ом не копируется вместе с кодом. Кстати, у меня тут проблемка с запуском проца, пока пальцем не ткнешь в резонатор 32768, не запускается, хотя схема обвязки взята со стандартной платы. Да и при чем тут этот кварц, мне не понятно.
|
|
|
|
|
Jul 11 2005, 19:40
|
Частый гость
 
Группа: Новичок
Сообщений: 111
Регистрация: 23-06-04
Пользователь №: 141

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