реклама на сайте
подробности

 
 
> Подскажите новичку по прерываниям, В примере Hellow.
Димон Безпарольн...
сообщение Mar 10 2011, 13:20
Сообщение #1


Знающий
****

Группа: Участник
Сообщений: 734
Регистрация: 29-11-10
Пользователь №: 61 247



В этом примере два прерывания. Внешнее и внутреннее(интервальный таймер).

Внутреннее прерывание - функция system_int, ссылка на которую и программируется в соответствующий AIC_SVR. Написана на Си.
Цитата
pAIC->AIC_SVR[AT91C_ID_SYS] = (unsigned long) system_int;


Вход в эту функцию system_int - STMDB R13!,{R0-R5,R12,R14}, выход - LDMIA R13!,{R0-R5,R12,R14}

Тут непонятно - почему не выполняются процедуры переключения режима, сохранения регистров.

Внешнее прерывание выполняется по - другому. Ссылка на ассемблерную вставку irq0_int
Код
irq0_int        FUNCTION
                SUB     LR, LR, #4        ; Update Link Register
                STMFD   SP!, {R0-R12, LR}    ; Save Workspace & LR to Stack
                MRS     R0, SPSR             ; Copy SPSR to R0
                STMFD   SP!, {R0, R1}        ; Save SPSR to Stack (8-byte)
                MSR     CPSR_c, #0x1F        ; Enable IRQ (Sys Mode)
                STMFD   SP!, {R0, LR}        ; Save LR_sys to Stack (8-byte)
                LDR     R0, =irq0_nint    ; Get IRQ Function Address
                MOV     LR, PC            ; Return Address
                BX      R0                ; Call IRQ Function
                LDMFD   SP!, {R0, LR}        ; Restore LR_sys
                MSR     CPSR_c, #0x92        ; Disable IRQ (IRQ Mode)
                LDMFD   SP!, {R0, R1}        ; Restore SPSR to R0
                MSR     SPSR_cxsf, R0        ; Copy R0 to SPSR
                LDMFD   SP!, {R0-R12, PC}^; Return to program
                ENDFUNC

программируется в соответствующий AIC_SVR. Эта вставка, выполняет все процедуры, описанные в даташите.

Почему при внутреннем прерывании такой вставки не делается??

Почему процедура прерывания (ссылка irq0_nint ) выполняется в Sys Mode? Какой в этом заложен смысл? Подозреваю, что связанно это с вложениями прерываний.

И еще если можно - какой режим соответствует SPSR_cxsf. Не нашел в даташите.

Спасибо.

Сообщение отредактировал Димон Безпарольный - Mar 10 2011, 13:23
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 08:49
Рейтинг@Mail.ru


Страница сгенерированна за 0.01272 секунд с 7
ELECTRONIX ©2004-2016