Не, не нашел.
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Сергей Борщ 13 мая 2004 г. 10:34
В ответ на: Ну так сохрани его. а при выходе восстанови. Сча еще пошукаю, может таки найду исходники. отправлено Сергей Борщ 13 мая 2004 г. 10:14

Вот попробую слету налабать:


cblock 0x00
IntWSave,IntStatusSave,IntFSRSave,IntPCLathSave,ContextSize
endc

cblock RAMSTART
Context1:ContextSize, Context2:ContextSize
[.остальные переменные.]
endc


ORG 004H
INT
MOVWF Context1+IntWSave
SWAPF Context1+IntWSave,F ;TO SAVE Z WHEN POP'S
SWAPF STATUS,W
BCF _RP0
MOVWF Context1+IntStatusSave
MOVFW FSR
MOVWF Context1+IntFSRSave
MOVFW PCLATH
MOVWF Context1+IntPCLathSave

;тут проверка на источник прерывания.

btfsc _INTE ; Допустим, это источник низкоприоритетного прерывания
btfss _INTF
goto HighPriority

LowPriority
; copy context to Context2
MOVFW Context1+IntWSave
MOVWF Context2+IntWSave
MOVFW Context1+IntStatusSave
MOVWF Context2+IntStatusSave
MOVFW Context1+IntFSRSave
MOVWF Context2+IntFSRSave
MOVFW Context1+IntPCLathSave
MOVWF Context2+IntPCLathSave
BCF _INTE ; запретить повторный вызов низкоприоритетного обработчика
BSF _GIE ; разрешить остальные прерывания

[ Здесь идет обработчик этого низкоприоритетного прерывания ]

BCF _GIE
BSF _INTE ; разрешить повторный вызов низкоприоритетного обработчика

LowIntRet
; restore context from Context2
bcf _RP0
MOVFW Context2+IntFSRSave
MOVWF FSR
MOVFW Context2+IntPCLathSave
MOVWF PCLATH
SWAPF Context2+IntStatusSave,W
MOVWF STATUS
SWAPF Context2+IntWSave,W
RETFIE


HighPriority

[ Здесь идет обработчик высокоприоритетных прерываний ]

HighIntRet
; restore context from Context1
bcf _RP0
MOVFW Context1+IntFSRSave
MOVWF FSR
MOVFW Context1+IntPCLathSave
MOVWF PCLATH
SWAPF Context1+IntStatusSave,W
MOVWF STATUS
SWAPF Context1+IntWSave,W
RETFIE


Да, на всякий случай: под W в первом контексте место должно быть зарезервировано во всех банках, ибо влететь в прерывание можно с любым активным банком.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru