│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 |


