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

 
 
 
Reply to this topicStart new topic
> обработчики перрываний, покритикуйте пожалуйста самописные обработчики прерываний
shrek
сообщение Dec 8 2008, 09:07
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 125
Регистрация: 1-12-08
Из: г. Орел
Пользователь №: 42 126



суть вот в чем...
сидел маялся 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 режима
Вроде в симуляторе все работает в том числе обрабатывает корректно вложенные прерывания)
на плате отлаживать пока не пробовал)
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Dec 8 2008, 09:30
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(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}^


ИМХО, если уж хотите использовать вложенные прерывания, то гораздо лучше писать для них отдельные обертки. Так сэкономите время на вход + будет возможность не использовать вложенные прерывания там где это не нужно или вредно.
Go to the top of the page
 
+Quote Post
shrek
сообщение Dec 8 2008, 10:37
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 125
Регистрация: 1-12-08
Из: г. Орел
Пользователь №: 42 126



Спасиб за критику))) с вложением конечно облажался немного)
Go to the top of the page
 
+Quote Post

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

 


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


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