│007│nop │ 1 ││ │

│008│nop │ 1 ││ │

│009│nop │ 1 ││ │

│00A│nop │ 1 ││* │

│00B│nop │ 1 ││ │

│00C│nop │ 1 ││ │

│00D│nop │ 1 ││* │

│00E│nop │ 1 ││ │

│00F│ │ │ │ │

│...

│01F│ │ │ │ПП инициализации │

│020│mov al,b │ 1 ││UP=0, S=1, ICW4=1 │

│021│out 2Ch, al │ 1 ││Загрузка ICW1 │

│022│mov al,00h │ 1 ││Адрес IDT 00h │

│023│out 2Dh, al │ 1 ││Загрузка ICW2 │

│024│mov al,b │ 1 ││PSV=0 | AEOI=0 | i8086 │

│025│out 2Dh, al │ 1 ││Загрузка ICW4 │

│026│ret │ 1 ││ │

│027│ │ │ │ │

│...

│03F│ │ │ │ППОП 2 │

│040│sti │ 1 ││разрешить прерывания │

│041│push ax │ 1 ││сохранение AL │

│042│nop │ 1 ││обработчик │

│043│nop │ 1 ││обработчик │

│044│nop │ 1 ││обработчик │

НЕ нашли? Не то? Что вы ищете?

│045│cli │ 1 ││запрет прерываний │

│046│mov al,b │ 1 ││RbEOI | clear ISR │

│047│out 2Ch, al │ 1 ││загрузка OCW2 │

│048│mov al,b │ 1 ││RbEOI | clear ISR │

│049│out 2Ch, al │ 1 ││загрузка OCW2 │

│04A│pop ax │ 1 ││восстановление AL │

│04B│iret │ 1 ││возврат │

│04C│ │ │ │ │

│...

│04F│ │ │ │ППОП 5 │

│050│sti │ 1 ││разрешить прерывания │

│051│push ax │ 1 ││сохранение AL │

│052│nop │ 1 ││обработчик │

│053│nop │ 1 ││обработчик │

│054│nop │ 1 ││обработчик │

│055│nop │ 1 ││обработчик / │

│056│cli │ 1 ││запрет прерываний │

│057│mov al,b │ 1 ││RbEOI | clear ISR │

│058│out 2Ch, al │ 1 ││загрузка OCW2 │

│059│mov al,b │ 1 ││RbEOI | clear ISR │

│05A│out 2Ch, al │ 1 ││загрузка OCW2 │

│05B│pop ax │ 1 ││восстановление AL │

│05C│iret │ 1 ││возврат │

│05D│ │ │ │ │

│05E│ │ │ │ │

│05F│ │ │ │ППОП 4 │

│060│sti │ 1 ││разрешить прерывания │

│061│push ax │ 1 ││сохранение AL │

│062│nop │ 1 ││обработчик │

│063│nop │ 1 ││обработчик / │

│064│nop │ 1 ││обработчик │

│065│cli │ 1 ││запрет прерываний │

│066│mov al,b │ 1 ││RbEOI | clear ISR │

│067│out 2Ch, al │ 1 ││загрузка OCW2 │

│068│mov al,b │ 1 ││RbEOI | clear ISR │

│069│out 2Ch, al │ 1 ││загрузка OCW2 │

│06A│pop ax │ 1 ││восстановление AL │

│06B│iret │ 1 ││возврат │

│06C│ │ │ │ │

│...

│06F│ │ │ │ППОП 7 │

│070│sti │ 1 ││разрешить прерывания │

│071│push ax │ 1 ││сохранение AL │

│072│nop │ 1 ││обработчик │

│073│nop │ 1 ││обработчик │

│074│nop │ 1 ││обработчик │

│075│cli │ 1 ││запрет прерываний │

│076│mov al,b │ 1 ││RbEOI | clear ISR │

│077│out 2Ch, al │ 1 ││загрузка OCW2 │

│078│mov al,b │ 1 ││RbEOI | clear ISR │

│079│out 2Ch, al │ 1 ││загрузка OCW2 │

│07A│pop ax │ 1 ││восстановление AL │

│07B│iret │ 1 ││возврат │

│07C│ │ │ │ │

│...

│07F│ │ │ │ППОП 3 │

│080│sti │ 1 ││разрешить прерывания │

│081│push ax │ 1 ││сохранение AL │

│082│nop │ 1 ││обработчик │

│083│nop │ 1 ││обработчик │

│084│nop │ 1 ││обработчик / │

│085│cli │ 1 ││запрет прерываний │

│086│mov al,b │ 1 ││RbEOI | clear ISR │

│087│out 2Ch, al │ 1 ││загрузка OCW2 │

│088│mov al,b │ 1 ││RbEOI | clear ISR │

│089│out 2Ch, al │ 1 ││загрузка OCW2 │

│08A│pop ax │ 1 ││восстановление AL │

│08B│iret │ 1 ││возврат │

│08C│ │ │ │ │

│...

│08F│ │ │ │ППОП 6 │

│090│sti │ 1 ││разрешить прерывания │

│091│push ax │ 1 ││сохранение AL │

│092│nop │ 1 ││обработчик │

│093│nop │ 1 ││обработчик │

│094│nop │ 1 ││обработчик │

│095│cli │ 1 ││запрет прерываний │

│096│mov al,b │ 1 ││RbEOI | clear ISR │

│097│out 2Ch, al │ 1 ││загрузка OCW2 │

│098│mov al,b │ 1 ││RbEOI | clear ISR │

│099│out 2Ch, al │ 1 ││загрузка OCW2 │

│09A│pop ax │ 1 ││восстановление AL │

│09B│iret │ 1 ││возврат │

│09C│ │ │ │ │

│...

│0FF│ │ │ │ППОП 0 │

│100│sti │ 1 ││разрешить прерывания │

│101│push ax │ 1 ││сохранение AL │

│102│nop │ 1 ││// │

│103│nop │ 1 ││обработчик │

│104│nop │ 1 ││обработчик │

│105│cli │ 1 ││запрет прерываний │

│106│mov al,b │ 1 ││RbEOI | clear ISR │

│107│out 2Ch, al │ 1 ││загрузка OCW2 │

│108│mov al,b │ 1 ││RbEOI | clear ISR │

│109│out 2Ch, al │ 1 ││загрузка OCW2 │

│10A│pop ax │ 1 ││восстановление AL │

│10B│iret │ 1 ││возврат │

│10C│ │ │ │ │

│...

│10F│ │ │ │ППОП 1 │

│110│sti │ 1 ││разрешить прерывания │

│111│push ax │ 1 ││сохранение AL │

│112│nop │ 1 ││обработчик │

│113│nop │ 1 ││обработчик / │

│114│nop │ 1 ││обработчик │

│115│cli │ 1 ││запрет прерываний │

│116│mov al,b │ 1 ││RbEOI | clear ISR │

│117│out 2Ch, al │ 1 ││загрузка OCW2 │

│118│mov al,b │ 1 ││RbEOI | clear ISR │

│119│out 2Ch, al │ 1 ││загрузка OCW2 │

│11A│pop ax │ 1 ││восстановление AL │

│11B│iret │ 1 ││возврат │

│11C│ │ │ │ │

│...

│1FF│ │ │ │ │

└───┴──────────────────────────────┴─────┴────────┴──────────────────────────────┘

Диаграмма прерываний

────────────────────────────────────────────────────────────────────────────────

0┤▒▒░░ ▒▒░░ ▒▒░░

│││││ ││││ ││││

1┤││││ ││││ ││││ ▒▒░░

│││││ ││││ ││││ ││││

2┤││││ ││││ ▒▒░░ ││││ ││││ ▒▒░░

│││││ ││││ ││││ ││││ ││││ ││││

3┤││││ ││││ ││││ ││││▒▒░░ ││││ ▒▒░░││││

│││││ ││││ ││││ ││││││││ ││││ ││││││││

4┤││││ ││││▒▒░░ ││││ ││││││││ ││││▒▒░░││││││││▒▒░░

│││││ ││││││││ ││││ ││││││││ ││││││││││││││││││││

5┤││││▒▒░░││││││││ ││││▒▒░░││││││││ ││││││││││││││││││││

│││││││││││││││││ ││││││││││││││││ ││││││││││││││││││││

6┤││││││││││││││││ ││││││││││││││││▒▒░░││││││││││││││││││││

│││││││││││││││││ ││││││││││││││││││││││││││││││││││││││││

7┤││││││││││││││││▒▒░░││││││││││││││││││││││││││││││││││││││││

│││││││││││││││││││││││││││││││││││││││││││││││││││││││││││││

└─────────────────────────────────────────────────────────────────────────────

1.5 Режим программного опроса для процессора i8086

Листинг программы

┌───┬──────────────────────────────┬─────┬────────┬──────────────────────────────┐

│ N%│ Команда │^INTA│ IRQ7-0 │ Комментарии │

├───┼──────────────────────────────┼─────┼────────┼──────────────────────────────┤

│000│call 20h │ 1 ││Адс порта 2С │

│001│nop │ 1 ││Прогр. опрос │

│002│nop │ 1 ││ │

│003│nop │ 1 ││ │

│004│call A0h │ 1 ││Чтение СС ПКП │

│005│nop │ 1 ││5 7 │

│006│nop │ 1 ││ │

│007│nop │ 1 ││ │

│008│nop │ 1 ││6 0 │

│009│call A0h │ 1 ││Чтение СС ПКП │

│00A│nop │ 1 ││ │

│00B│nop │ 1 ││ │

│00C│call A0h │ 1 ││Чтение СС ПКП │

│00D│nop │ 1 ││4 7 │

│00E│call A0h │ 1 ││Чтение СС ПКП │

│00F│nop │ 1 ││ │

│010│nop │ 1 ││ │

│011│nop │ 1 ││ │

│012│nop │ 1 ││ │

│013│call A0h │ 1 ││Чтение СС ПКП │

│014│ │ │ │ │

│...

│01F│ │ │ │ПП инициализации │

│020│mov al,b │ 1 ││UP=0, S=1, ICW4=1 │

│021│out 2Ch, al │ 1 ││Загрузка ICW1 │

│022│mov al,00h │ 1 ││Адрес IDT 00h │

│023│out 2Dh, al │ 1 ││Загрузка ICW2 │

│024│mov al,b │ 1 ││PSV=0 | AEOI=0 | i8086 │

│025│out 2Dh, al │ 1 ││Загрузка ICW4 │

│026│cli │ 1 ││запрет прерываний │

│027│ret │ 1 ││ │

│028│ │ │ │ │

│...

│03F│ │ │ │ППОП 2 │

│040│push ax │ 1 ││сохранение AL │

│041│pushf │ 1 ││ │

│042│nop │ 1 ││обработчик │

│043│mov al,20h │ 1 ││EOI | clear ISR │

│044│out 2Ch, al │ 1 ││загрузка OCW2 │

│045│popf │ 1 ││ │

│046│pop ax │ 1 ││восстановление AL │

│047│retf │ 1 ││возврат │

│048│ │ │ │ │

│...│

│04F│ │ │ │ППОП 5 │

│050│push ax │ 1 ││сохранение AL │

│051│pushf │ 1 ││ │

│052│nop │ 1 ││вектор │

│053│mov al,20h │ 1 ││EOI | clear ISR │

│054│out 2Ch, al │ 1 ││загрузка OCW2 │

│055│popf │ 1 ││ │

│056│pop ax │ 1 ││восстановление AL │

│057│retf │ 1 ││возврат │

│058│ │ │ │ │

│...

│05F│ │ │ │ППОП 4 │

│060│push ax │ 1 ││сохранение AL │

│061│pushf │ 1 ││ │

│062│nop │ 1 ││вектор │

│063│mov al,20h │ 1 ││EOI | clear ISR │

│064│out 2Ch, al │ 1 ││загрузка OCW2 │

│065│popf │ 1 ││ │

│066│pop ax │ 1 ││восстановление AL │

│067│retf │ 1 ││возврат │

│068│ │ │ │ │

│...

│06F│ │ │ │ППОП 7 │

│070│push ax │ 1 ││сохранение AL │

│071│pushf │ 1 ││ │

│072│nop │ 1 ││обработчик │

│073│mov al,20h │ 1 ││EOI | clear ISR │

│074│out 2Ch, al │ 1 ││загрузка OCW2 │

│075│popf │ 1 ││ │

│076│pop ax │ 1 ││восстановление AL │

│077│retf │ 1 ││возврат │

│078│ │ │ │ │

│...

│07F│ │ │ │ППОП 3 │

│080│push ax │ 1 ││сохранение AL │

│081│pushf │ 1 ││ │

│082│nop │ 1 ││обработчик │

│083│mov al,20h │ 1 ││EOI | clear ISR │

│084│out 2Ch, al │ 1 ││загрузка OCW2 │

│085│popf │ 1 ││ │

│086│pop ax │ 1 ││восстановление AL │

│087│retf │ 1 ││возврат │

│088│ │ │ │ │

│...

│08F│ │ │ │ППОП 6 │

│090│push ax │ 1 ││сохранение AL │

│091│pushf │ 1 ││ │

│092│nop │ 1 ││обработчик │

│093│mov al,20h │ 1 ││EOI | clear ISR │

│094│out 2Ch, al │ 1 ││загрузка OCW2 │

│095│popf │ 1 ││ │

│096│pop ax │ 1 ││восстановление AL │

│097│retf │ 1 ││возврат │

│098│ │ │ │ │

│...

│09F│ │ │ │Чтение СС ПКП │

│0A0│push ax │ 1 ││сохранение AL │

│0A1│pushf │ 1 ││ │

│0A2│mov al,b │ 1 ││Установка режима пр. опроса │

│0A3│out 2Ch, al │ 1 ││загрузка OCW3 │

│0A4│in al, 2Ch │ 1 ││чтение │

│0A5│or al, al │ 1 ││ │

│0A6│jns A9h │ 1 ││ │

│0A7│and al,07h │ 1 ││ │

│0A8│callidt │ 1 ││переход к ППОП │

│0A9│popf │ 1 ││ │

│0AA│pop ax │ 1 ││восстановление AL │

│0AB│ret │ 1 ││возврат │

│0AC│ │ │ │ │

│...

│0FF│ │ │ │ППОП 0 │

│100│push ax │ 1 ││сохранение AL │

│101│pushf │ 1 ││ │

│102│nop │ 1 ││ │

│103│mov al,20h │ 1 ││EOI | clear ISR │

│104│out 2Ch, al │ 1 ││загрузка OCW2 │

│105│popf │ 1 ││ │

│106│pop ax │ 1 ││восстановление AL │

│107│retf │ 1 ││возврат │

│108│ │ │ │ │

│...

│10F│ │ │ │ППОП 1 │

│110│push ax │ 1 ││сохранение AL │

│111│pushf │ 1 ││ │

│112│nop │ 1 ││обработчик │

│113│mov al,20h │ 1 ││EOI | clear ISR │

│114│out 2Ch, al │ 1 ││загрузка OCW2 │

│115│popf │ 1 ││ │

│116│pop ax │ 1 ││восстановление AL │

│117│retf │ 1 ││возврат │

│118│ │ │ │ │

│...

│1FF│ │ │ │ │

└───┴──────────────────────────────┴─────┴────────┴──────────────────────────────┘

Диаграмма прерываний

────────────────────────────────────────────────────────────────────────────────

0┤ ▒▒░░

│ ││││

1┤ ││││

│ ││││

2┤ ││││ ▒▒░░

│ ││││ ││││

3┤ ││││ ││││

│ ││││ ││││

4┤ ││││ ▒▒░░││││

│ ││││ ││││││││

5┤ ││││▒▒░░││││││││

│ ││││││││││││││││

6┤ ││││││││││││││││

│ ││││││││││││││││

7┤ ││││││││││││││││

│ ││││││││││││││││

└─────────────────────────────────────────────────────────────────────────────

2 Теоретическая часть

1. Разработать функциональную схему каскадного включения БИС ПКП ВН59А для микропроцессора.

2. Привести программу инициализации ведущей и одной ведомой БИС с настройкой на режимы работы, заданные в таблице 1.

3. Привести фрагменты текстов ППОП для ведомой и ведущей БИС ПКП (начало и конец ППОП).

Таблица 1

Режим/вариант

4

Ведущая: режим

маска (IRQ)

режим фиксированных приоритетов

Ведомая: режим

маска (IRQ)

программный опрос

5


2.1 Функциональная схема каскадного включения БИС ПКП ВН59А для

микропроцессора К1810ВМ86

2.2 Программы инициализации ведущей и ведомой БИС

- ведущая (режим фиксированных приоритетов без вложенности, порт 2Ch, ведомая на IRQ 6, маска на 5)

┌───┬──────────────────────────────┬─────┬────────┬──────────────────────────────┐

│ N%│ Команда │^INTA│ IRQ7-0 │ Комментарии │

├───┼──────────────────────────────┼─────┼────────┼──────────────────────────────┤

│020│mov al,b │ 1 ││каскад, ICW4 │

│021│out 2Ch, al │ 1 ││загрузка ICW1 │

│022│mov al,b │ 1 ││адрес IDT 00h │

│023│out 2Dh, al │ 1 ││загрузка ICW2 │

│024│mov al,b │ 1 ││ведомая на 6, 1 │

│025│out 2Dh, al │ 1 ││загрузка ICW3 │

│026│mov al,b │ 1 ││i8086, ведущая │

│027│out 2Dh, al │ 1 ││загрузка ICW4 │

│028│mov al,b │ 1 ││маска 5 │

│029│out 2Dh, al │ 1 ││загрузка OCW1 │

└───┴──────────────────────────────┴─────┴────────┴──────────────────────────────┘

- ведомая (IRQ ведущего – 6, режим программного опроса, порт 3Ah)

┌───┬──────────────────────────────┬─────┬────────┬──────────────────────────────┐

│ N%│ Команда │^INTA│ IRQ7-0 │ Комментарии │

├───┼──────────────────────────────┼─────┼────────┼──────────────────────────────┤

│030│mov al,b │ 1 ││каскад, ICW4 │

│031│out 3Ah, al │ 1 ││загрузка ICW1 │

│032│mov al,b │ 1 ││адрес IDT 30h │

│033│out 3Bh, al │ 1 ││загрузка ICW2 │

│034│mov al,b │ 1 ││ведомая на 6 │

│035│out 3Bh, al │ 1 ││загрузка ICW3 │

│036│mov al,b │ 1 ││i8086, ведомая │

│037│out 3Bh, al │ 1 ││загрузка ICW4 │

│038│mov al,b │ 1 ││програмный опрос, чтение ISR │

│039│out 3Ah, al │ 1 ││загрузка OCW3 │

│03A│cli │ 1 ││запрещение прерываний │

│03B│ret │ 1 ││ │

└───┴──────────────────────────────┴─────┴────────┴──────────────────────────────┘

2.3 ППОП ведущей и ведомой БИС

- ППОП 7,5-3,0 ведущей (режим фиксированных приоритетов без вложенности, порт 2Ch, ведомая на IRQ 6)

┌───┬──────────────────────────────┬─────┬────────┬──────────────────────────────┐

│ N%│ Команда │^INTA│ IRQ7-0 │ Комментарии │

├───┼──────────────────────────────┼─────┼────────┼──────────────────────────────┤

│040│cli │ 1 ││запрещение прерываний │

│041│push ax │ 1 ││сохранение регистров │

│044│mov al,10h │ 1 ││обработчик │

│045│dec al │ 1 ││обработчик │

│046│int al │ 1 ││обработчик │

│047│mov al,5 │ 1 ││обработчик │

│048│int al │ 1 ││обработчик │

│049│mov al,b │ 1 ││сброс старшего бита │

│04A│out 2Ch, al │ 1 ││загрузка OCW2 │

│04В│pop ax │ 1 ││восстановление регистров │

│04С│iret │ 1 ││возврат из ППоП │

└───┴──────────────────────────────┴─────┴────────┴──────────────────────────────┘

- ППОП 7-0 ведомой (режим программного опроса, IRQ ведущего – 6, порт 3Ah)

┌───┬──────────────────────────────┬─────┬────────┬──────────────────────────────┐

│ N%│ Команда │^INTA│ IRQ7-0 │ Комментарии │

├───┼──────────────────────────────┼─────┼────────┼──────────────────────────────┤

│140│pushf │ 1 ││сохранение флагов │

│141│push ax │ 1 ││сохранение AХ │

│142│inс al │ 1 ││обработчик │

│143│inс al │ 1 ││обработчик │

│144│mov al,01000L1L2L3b │ 1 ││сброс бита L1L2L3 │

│145│out BСh, al │ 1 ││загрузка OCW2 ведомой │

│146│in al,3Ah │ 1 ││чтение ISR ведомой │

│147│or al,b │ 1 ││ISR ведомой = 0 │

│148│jnz 14Bh │ 1 ││если нет, то выход │

│149│mov al,b │ 1 ││иначе сброс старшего бита вед │

│14A│out 3Ah, al │ 1 ││загрузка OСW2 ведущей │

│14B│pop ax │ 1 ││восстановление AХ │

│14C│popf │ 1 ││восстановление флагов │

│14D│retf │ 1 ││возврат из ППоП │

└───┴──────────────────────────────┴─────┴────────┴──────────────────────────────┘

Выводы

В зависимости от времени поступления запросов и их приоритетов, обработка для режимов происходит следующим образом:

- фиксированные приоритеты – при поступлении запросов всегда обслуживается запрос с большим приоритетом. Приоритеты входов запросов остаются неизменными. Во время обслуживания запроса (то есть выполнения его ППОП), при поступлении запроса с более высоким приоритетом ПКП прерывает текущую ППОП и переходит к ППОП с большим приоритетом;

- специальное маскирование – любой запрос поступает на обработку, за исключением случаев, когда запрос с данным приоритетом уже находится на обработке (кроме режима разрешения приоритета ведомого для IRQ ведомых, когда в ведущей БИС разрешены многократные прерывания от одной ведомой);

- сдвиг типа А – запросы поступают на обработку только в случае, если относительно дна приоритетного кольца нет запросов с большим и прерываний на обработке с большим или равным приоритетами (для обработки – за исключением режима разреш. приоритета ведомого). При завершении обработки прерывания происходит сброс ISR-бита с наивысшим приоритетом и присвоение ему низшего приоритета;

- сдвиг типа В – аналогично режиму сдвиг типа А, только низший приоритет присваивается входу IRQ, указанному приграммистом в команде;

-программный опрос – используется для определения источника прерывания непосредственно программистом путем последовательного опроса источников запросов на прерывание.

Так же следует выделить некоторые момменты работы ПКП:

1.  Возможна организация обработки вложенных прерываний при помощи команды STI и обработка прерываний без вложенности при использовании команды CLI;

2.  При организации режима сдвиг типа B возможна некорректная работа ПКП, то есть сброс ISR-бита не того входа (это происходит из-за сдвига приоритетного кольца и вложенности прерываний). Для решения проблемы необходимо отдельно выполнять операции сброса бита регистра ISR и сдвига приоритетов.

3.  При каскадном включении БИС ПКП:

·  при обработке прерывания в ведомой БИС следует сбрасывать бит регистра ISR ведущей БИС только при равенстве всех битов регистра ISR ведомой 0;

·  при обработке прерывания в ведущей БИС (со входа от ведомой) следует сбрасывать бит регистра ISR ведущей БИС только при равенстве всех битов регистра ISR ведомой 0.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3