
- •1.Основные сведения .
- •1.1 Обработка прерывания
- •1.2. Описание работы контроллера прерывания
- •1.3. Описание работы периферийной станции транзакций (pts)
- •1.4. Приоритеты прерывания
- •1.5. Изменение приоритетов прерывания
- •1.6. Программы обработки прерывания
- •1.7. Распознавание прерываний
- •1.8. Время ожидания прерывания
- •1.9. Специальные прерывания
- •1.9.1. Прерывание по невыполняемому коду операции
- •1.9.2. Прерывание по ловушке программного обеспечения
- •1.9.3. Немаскируемое прерывание
- •1.10. Программирование прерываний
- •Pts Select Register
- •1.11. Предоставление pts прерывания
- •1.12. Предоставление стандартных прерываний
- •1.13. Выбор источников прерывания
- •1.14. Регистры маскирования прерываний
- •1.15. Регистры захвата прерывания
- •1.16. Pts прерывания
- •1.16.1. Управляющие блоки pts
- •1.16.1.1. Регистр ptscount
- •1.16.1.2. Прерывание End-of-pts
- •1.16.1.3. Регистр ptscon
- •1.16.2. Краткий обзор режима одиночной передачи
- •1.16.2.1. Пример режима одиночной передачи
- •1.16.3. Краткий обзор режима поблочной пересылки
- •1.16.3.1. Пример режима поблочной пересылки
- •1.16.4. Краткий обзор режима сканирования
- •1.16.4.1. Pts циклы в режиме сканирования ацп
- •1.16.5. Краткий обзор режима hsi
- •1.16.5.1. Пример режима hsi
- •1.16.6. Краткий обзор режима hso
- •1.16.6.1. Пример режима hso
Pts Select Register
1.11. Предоставление pts прерывания
После того, как Вы назначаете прерывание к PTS, Вы должны разрешить и PTS и индивидуальное прерывание. Бит разрешения PTS в слове состояния процессора (PSW.2) глобально разрешает или запрещает PTS. Команда EPTS устанавливает бит PSW.2, допуская PTS. Команда DPTS очищает этот бит, отключая PTS. Биты в INT_MASK и INT_MASK1 разрешают или запрещают индивидуальные прерывания PTS ( см. табл.3 ).
1.12. Предоставление стандартных прерываний
Когда Вы назначаете прерывание стандартной сервисной программе обслуживания прерывания, Вы должны разрешить и обслуживание прерывания и индивидуальное прерывание. Бит глобального разрешения прерывания (I) в слове состояния процессора (PSW.1) глобально разрешает или запрещает обслуживание всех маскируемых прерываний. Команда EI устанавливает бит PSW.1, разрешая обслуживание прерываний. Команда DI очищает этот бит, запрещая обслуживание прерываний. Биты в INT_MASK и INT_MASK1 индивидуально разрешают или запрещают прерывания (см. табл.3 ). Прерывание, которое происходит во время обслуживания прерывания, глобально запрещается (PSW.1 сбрасывается) и задерживается в регистрах захвата прерывания.
1.13. Выбор источников прерывания
Каждый из пяти следующих источников прерывания (HSI FIFO Full, EXTINT1, Receive, Transmit, Timer 2 Overflow) могут генерировать два различных прерывания:
- 8096BH - совместимое прерывание;
- отдельное прерывание для 8xC196KC;
В любом случае, надо разрешать только одно прерывание для каждого источника. То есть бит маски должен быть установлен только для одного из двух возможных прерываний. На рис.@.3 приведены источники прерывания для каждого вектора прерывания. В табл.3 приведены значения битов регистра IOC1, которые выбирают каждый из источников.
1.14. Регистры маскирования прерываний
Регистры маскирования прерывания, INT_MASK (08H) и INT_MASK1 (13H), разрешают или запрещают(маскируют) индивидуальные прерывания. За исключением бита немаскируемого прерывания (NMI) ( INT_MASK1.7 ), установка соответствующего бита разрешает соответствующее прерывание; очистка соответственно запрещает прерывание. Когда устройство сбрасывается, регистры маски прерывания очищаются (запрещая прерывания ). Регистры читаемы и записываемы во всех окнах. Команда PUSHA сохраняет содержимое этих регистров в стеке, а POPA восстанавливает.
1.15. Регистры захвата прерывания
Когда детектор фронта прерывания обнаруживает прерывание, он устанавливает соответствующий бит в INT_PEND(09H) или INT_PEND1(12H) регистрах, даже если индивидуальное прерывание отключено (замаскировано). Бит захвата очищается, когда программа переходит к подпрограмме обработки прерывания( стандартного или PTS прерывания ). INT_PEND и INT_PEND1 можно читать, чтобы определить, какие поступили прерывания.
С помощью программного обеспечения, биты в этих регистрах можно устанавливать или сбрасывать, генерируя прерывания. Однако надо быть осторожным при записи кода в эти регистры. Например, последовательность команд, которая очищает бит захвата, может привести к подтверждению прерывания после того, как последовательность начнется, но прежде, чем бит фактически очистится.
В этом случае происходит частичный цикл прерывания в 5 тактов. То ecть процесс прерывания начинается, но никогда не переходит к программе обработки прерывания.
Такую задержку можно предотвратить, делая код неделимым, то есть прерывания не будут подтверждаться, пока выполняется этот код. Самый простой способ состoит в том, чтобы использовать логические
команды в двух или трех операндном формате, например:
ANDB INT_PEND, #01111111B ; Очищает прерывание EXTINT
ORB INT_PEND, #10000000B ;Устанавливает прерывание EXTINT
8XC196KC/KD не подтверждает прерывания в течение выполнения этих команд "чтение-модификация-запись".
Регистры INT_PEND, INT_PEND1 доступны для чтения/записи во всех окнах.
По сбросу INT_PEND, INT_PEND1 = 0000 0000
Рис.@.3 Источники прерывания