Слайд 1
Обработка на прекъсване
Слайд 2
Общи сведения за прекъсванията
Механизмът на прекъсванията е важна част от всяка компютърна система:
Структурата на прекъсванията осигурява ефективни средства за свързване на входно-изходните устройства с микроконтролера.
Езиците от високо ниво не разполагат със средства за обработване на прекъсванията.
Програмирането на асемблер позволява директна обработка на възникналите прекъсвания.
Определение. Прекъсването е сигнал за процесора да прекрати текущата си дейност и да отговори на устройство, генерирало прекъсването.
Механизмът на прекъсването е много добро средство за работа, защото той освобождава процесора от необходимостта непрекъснато да следи състоянието на своята периферия.
Слайд 3
Обработка на прекъсванията
Когато възникне прекъсване, то не може да спре работата на микроконтролера по средата на изпълняваната инструкция. Микроконтролерът завършва изпълнението на текущата инструкция.
След това процесорът игнорира следващата инструкция в програмата. Вместо да изпълни тази инструкция, процесорът действа така, сякаш следващата инструкция е инструкция за извикване на подпрограма.
Микроконтролерът запомня адреса на следващата инструкция във върха на стека и прави преход към специална подпрограма за обработка на прекъсванията. Тя съдържа инструкции, които определят какво да прави микроконтролерът с прекъсналото го устройство.
След като обслужи периферното устройство, подпрограмата за обработка на прекъсванията връща управлението в точката на прекъсване. Процесорът извлича адреса на връщане от стека и изпълнението на програмата продължава от точката, в която е била прекъсната.
Слайд 4
Особености при прекъсвания-та във фамилията PIC16/17XX
Прекъсване може да възникне по всяко време от изпълнението на основната програма. Затова програмите не могат да предприемат някакви специални действия за подготовка в случай на възникване на прекъсване. Това означава, че програмата за прекъсване не трябва да променя стойностите в изпълняваната програма.
Фамилията микроконтролери PIC16/17ХХ запазва автоматично в стека само адреса за връщане от прекъсването.
Тъй като стекът на фамилията е малък (само осем нива), то програмистът трябва да предвиди клетки от паметта за запазване на необходимите регистри.
Тъй като съществуват множество периферни устройства, които могат да прекъснат процесора, а само един адрес на подпрограма за обработка на прекъсването, то потребителят трябва да провери кой флаг за прекъсване е вдигнат (определя кое устройство е генерирало прекъсването) и да го обработи.
Някои части от програмите не могат да бъдат прекъсвани, а други е необходимо да се изпълняват много бързо. В тези случаи изпълняваната програма трябва да може да предотвратява или блокира прекъсванията.
За решаване на този проблем фамилията микроконтролери PIC16/17ХХ има възможност да забранява и разрешава различните видове прекъсвания.
Слайд 5
Логика за възникване на прекъсванията
INTCON
PIR1 и PIR2
PIE1 и PIE2
Действия при възникване на прекъсване:
Битът GIE се нулира, за да забрани възникването
на следващи прекъсвания.
Адресът за връщане се записва във върха на стека.
Програмният брояч се зарежда с адреса 0004h.
Слайд 6
Инструкция за връщане от прекъсване
Синтаксис: [етикет] RETFIE
Операнди: Няма
Функция: (TOS) (PC)
1 GIE
Влияние върху
STATUS: Няма
Описание:
Връщане от прекъсване. Върхът на стека се прехвърля
в програмния брояч PC. Прекъсванията се разрешават
чрез установяване на GIE (INTCON<7>). Инструкцията
се изпълнява за два цикъла.
Пример.
RETFIE
След инструкцията:
PC = TOS
GIE = 1
Слайд 7
Глобална забрана на прекъсванията
Битът GIE може неумишлено да се установи чрез потребителската подпрограма за обработка на прекъсването (посредством инструкцията RETFIE). Случаите, в които това може да се случи, са:
Инструкцията нулира бита GIE, докато прекъсването се приема.
Програмата се разклонява по вектора на прекъсване и изпълнява подпрограмата за обработка на прекъсването.
Подпрограмата за обработка на прекъсването завършва изпълнението на инструкцията RETFIE.
Пример. Цикъл за сигурна глобална забрана на прекъсванията
LOOP BCF INTCON, GIE ; Забрана на глобалните прекъсвания
BTFSC INTCON, GIE ; Забранени ли са глоб. прекъсвания?
GOTO LOOP ; Не, опитай отново
... ; Да, продължи с програмата
Слайд 8
Запазване на контекста по време на прекъсване
MOVWF W_TEMP ; Копира W в W_TEMP регистър, независимо от
; банката 1 или 0
SWAPF STATUS,W ; Разменя STATUS за да се запомни в W
CLRF STATUS ; банка 0, независимо от текущата банка,
; нулира IRP,RP1,RP0
MOVWF STATUS_TEMP ; Запомня STATUS в STATUS_TEMP (банка0)
MOVF PCLATH, W ; Необходимо е, ако се използват стр. 1,2 или 3
MOVWF PCLATH_TEMP ; Запомня PCLATH в PCLATH_TEMP
:
(ISR) ; Потребителска подпрограма за обработка
: ; на прекъсване
MOVF PCLATH_TEMP, W ; Възстановява PCLATH в W
MOVWF PCLATH ; Премества W в PCLATH
SWAPF STATUS_TEMP, W ; Разменя STATUS_TEMP регистъра в
; W (установява банката в оригиналното
; състояние)
MOVWF STATUS ; Премества W в STATUS регистъра
SWAPF W_TEMP, F ; Размества W_TEMP
SWAPF W_TEMP, W ; Размества W_TEMP в W
:
RETFIE
0 коментара
За да коментирате, трябва да сте влезли в профила си.
Влезте