Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: IAR AT91SAM7X start up
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
WHALE
Пытаюсь освоить ARM под IAR-омю
Подопытный кролик-отладка AT91SAM7X-EK.
Отладчик-J-LINK V8. IAR ARM 6.50
Тестовые примеры собрал и для флэши и для озу,залил-работают.
Походил по коду-почти все понятно rolleyes.gif
На AVR последнее время работал с scmRTOS,очень хотелось-бы применить
её и под SAM7.И тут пока-что полный облом smile3046.gif
Последний официальный порт SAM7,что мне удалось найти-scmRTOSv3.11 под IAR 4.30
С++ её часть вроде-бы удалось подпилить, а вот с асемблеровским OS_Target_asm.s бьюсь
головой об стену cranky.gif
И собственно пара вопросов к знающим:
1. В сорцах оси
CODE
COMMON INTVEC:CODE:ROOT
org 0x00000018
IRQ_SWITCH

IRQ_SWITCH - это LDR PC, AT91C_AIC_IVR
В теперешнем асме IAR директивы org нет.
Пытаюсь сделать так по мотивам Атмеловского стар-апа.
Код
   SECTION .intvec:CODE:NOROOT(2)
        PUBLIC  resetVector

        EXTERN  Undefined_Handler
        EXTERN  SWI_Handler
        EXTERN  Prefetch_Handler
        EXTERN  Abort_Handler
        EXTERN  FIQ_Handler

        ARM

__iar_init$$done:              ; The interrupt vector is not needed
                               ; until after copy initialization is done

resetVector:
       ; All default exception handlers (except reset) are
       ; defined as weak symbol definitions.
       ; If a handler is defined by the application it will take precedence.
        LDR     pc, =resetHandler        ; Reset                                      0  
        LDR     pc, Undefined_Addr      ; Undefined instructions                4
        LDR     pc, SWI_Addr              ; Software interrupt (SWI/SYS)     8
        LDR     pc, Prefetch_Addr        ; Prefetch abort                       0xC
        LDR     pc, Abort_Addr            ; Data abort                           0X10
        B       .                                ; RESERVED                             0X14
        LDR     IRQ_SWITCH               ; IRQ                                     0X18        
        LDR     pc, FIQ_Addr              ; FIQ

На LDR IRQ_SWITCH (т.е. LDR PC, AT91C_AIC_IVR) IAR выдает
CODE
Tool Internal Error:
In function: GeInternalError
Diagnostic: Not an instruction
Line: 141 P0: 0 P1: 0

Этого я вообще не понимаю-что ему не нравится?
В даташите рекомендуется такой метод перехода на обработчик:
LDR PC[PC,# -&F20]- IAR дает Error[0]: Invalid syntax.
Мне этот синтаксис тоже не понятен-догадываюсь,что это переход назад,
но что такое &F20? Вроде-бы если с адреса 0x18 надо прыгнуть на 0xFFFFF100,
то должно быть 0XF18?
Такую команду LDR PC,[PC,# -0xF18] IAR компилирует.

2. Дальше в исходнике встречается команда _BLF OS_ContextSwitchHook, Hook_Relay ;
OS_ContextSwitchHook и Hook_Relay - это метки в коде.
Аналогично-такой команды теперь нет.И что еще хуже-ее нет и в Migration Guide.
Гугление дало только что _BLF это Used by the compiler when calling
functions that might be far away or in Thumb mode.
Примеров нет.Почему в ней указывается сразу две метки и что она делает в данном
случае-мне не понятно.
Я понимаю,что ARM7TDMI нынче не модно,но если кто-то еще помнит этого зверя-
помогите,плиз.

С уважением.




kolobok0
Цитата(WHALE @ Dec 3 2013, 20:25) *
... ARM7TDMI нынче не модно...


под него не копал, но..общие подходы:
возьмите что нить поувесистее с портом под данный камень. Например FreeRTOS(думаю в списках он значится у неё). Компильните, попробуйте.
Потом разберитесь с азм вставками. У неё они есть - в одном файлике должны валяться.
Далее по образу и подобию + инет + хелп - думаю быстро выйдете на ранее достигнутые рубежы sm.gif
RabidRabbit
Цитата(WHALE @ Dec 3 2013, 20:25) *
Этого я вообще не понимаю-что ему не нравится?
В даташите рекомендуется такой метод перехода на обработчик:
LDR PC[PC,# -&F20]- IAR дает Error[0]: Invalid syntax.
Мне этот синтаксис тоже не понятен-догадываюсь,что это переход назад,
но что такое &F20? Вроде-бы если с адреса 0x18 надо прыгнуть на 0xFFFFF100,
то должно быть 0XF18?
Такую команду LDR PC,[PC,# -0xF18] IAR компилирует.

Это не переход назад, это загрузка регистра PC из памяти с адресом PC - 0xF20 (регистр, где контроллер прерываний держит вектор сработавшего прервания), то есть очень удобный переход по вектору. Почему 0xF20 - потому, что (у ARM7TDMI, про другие не скажу) стадия исполнения инструкции - третья по счёту (из трех: выборка, декодирование, исполнение), и процессор успевает дважды сделать выборку, и PC на момент исполнения инструкции содержит <адрес инструкции> + 8. Прочитайте, если будет время, приложенный файл - очень интересно, а главное, довольно кратко sm.gif Потом будем разбираться дальше, если не заработает sm.gif
WHALE
Цитата(RabidRabbit @ Dec 6 2013, 17:29) *
Это не переход назад, это загрузка регистра PC из памяти с адресом PC - 0xF20 (регистр, где контроллер прерываний держит вектор сработавшего прервания), то есть очень удобный переход по вектору. Почему 0xF20 - потому, что (у ARM7TDMI, про другие не скажу) стадия исполнения инструкции - третья по счёту (из трех: выборка, декодирование, исполнение), и процессор успевает дважды сделать выборку, и PC на момент исполнения инструкции содержит <адрес инструкции> + 8. Прочитайте, если будет время, приложенный файл - очень интересно, а главное, довольно кратко sm.gif Потом будем разбираться дальше, если не заработает sm.gif

Спасибо, это я понял.После трех дней медитирования над исходниками, даташитами и Reference Guide я таки запустил порт scmRTOS 3.11 для AT91SAM под IAR6.5. Все собралось и в примерах светики моргают. Если кому надо-велкам.

Большое спасибо за файл-очень интересный документ для программинга под ARM assembler.Ушел читать.

З.Ы. Я не прощаюсь-если опять не зашлют в командировку-буду пробовать писать боевой код и наверняка будут вопросы.

С уважением.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.