Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: обработчики перрываний
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
shrek
суть вот в чем...
сидел маялся 3 недели с неработающими прерываниями)
потом после того как написал в форум вдруг все неожиданно и без изменений в коде заработало)))
заморочился решил написать свои обработчики прерываний)
ну вот пожалуйста покритикуйте)

;-------------------------------------------------------------------------------
; Вектор IRQ прерывания
org 0x18

mov pc, #0x40
;-------------------------------------------------------------------------------
; Вектор FIQ прерывания
org 0x1C

mov pc, #0x60
;-------------------------------------------------------------------------------
; Обработчик IRQ прерывания
org 0x40

sub lr, lr, #4
stmia sp!, {r0 - r12,lr}
msr CPSR_c, #ARM_MODE_IRQ
mvn r0, #0xFF
bic r0, r0, #0xE00
mov lr, pc
ldr pc, [r0]
ldmdb sp!, {r0 - r12,pc}^
;-------------------------------------------------------------------------------
; Обработчик FIQ прерывания
org 0x60

sub lr, lr, #4
stmia sp!, {r0 - r7,lr}
mov lr, pc
ldr pc, [r12]
ldmdb sp!, {r0 - r7,pc}^
;-------------------------------------------------------------------------------

в r12 я записал адрес AIC_FVR при инициализации стека для FIQ режима
Вроде в симуляторе все работает в том числе обрабатывает корректно вложенные прерывания)
на плате отлаживать пока не пробовал)
aaarrr
Цитата(shrek @ Dec 8 2008, 12:07) *
ну вот пожалуйста покритикуйте)

Пожалуйста:
Код
        sub     lr, lr, #4
        stmia   sp!, {r0 - r12,lr}         ; Гнать в стек все подряд не стоит, нужно только R0-R3 и R12
        msr     CPSR_c, #ARM_MODE_IRQ      ; Так разрешать прерывания нельзя - потеряете SPSR_irq при вложении
        mvn     r0, #0xFF
        bic     r0, r0, #0xE00
        mov     lr, pc
        ldr     pc, [r0]
        ldmdb   sp!, {r0 - r12,pc}^


ИМХО, если уж хотите использовать вложенные прерывания, то гораздо лучше писать для них отдельные обертки. Так сэкономите время на вход + будет возможность не использовать вложенные прерывания там где это не нужно или вредно.
shrek
Спасиб за критику))) с вложением конечно облажался немного)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.