Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; Драйвер программных прерываний
- ; http://teplofizik.diary.ru/p179508680.htm
- ; Плата STM32F4-Discovery
- ; Проверять выравнивание стека (8 байт)
- PRESERVE8
- AREA |.text|, CODE, READONLY
- EXPORT SVC_Handler
- GET swi_table.inc
- ; Обработчик программного прерывания
- SVC_Handler PROC
- PUSH {R8-R9,R12,LR}
- ; Получение номера прерывания
- LDR R12, [SP, #0x28] ; PC
- LDRB R12, [R12, #-2] ; Младший байт инструкции (номер)
- ; Проверим номер на допустимость (а то улетим куда)
- MOV32 R8, SWI_Count
- ; Если много - выходим.
- CMP R12, R8
- BGE swi_exit
- ; Умножим номер на 4, получим смещение.
- LSL R12, #2
- ; И прибавим к началу таблицы
- MOV32 R8, SWI_Table
- ; Загрузим адрес функции
- LDR R12, [R8, R12]
- ; Вызов функции
- BLX R12
- ; Скопипастим R0 обратно в стек
- STR R0, [SP, #0x10]
- swi_exit
- POP {R8-R9,R12,PC}
- ENDP
- END
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement