- •1.Функциональное описание микроконтроллера i80196kc
- •1.1. Обзор архитектуры
- •1.1.1. Ядро 80xc196kc
- •1.1.1.1. Файловый регистр (Register File)
- •1.1.1.2. Регистровое арифметико-логическое устройство (ралу)
- •1.1.1.4. Контроллер памяти ( Memory Controller)
- •1.1.1.5. Контроллер прерываний и pts (Interrupt Controller)
- •1.2. Параметры синхронизации
- •1.3. Внутренние периферийные устройства
- •1.3.1. Стандартные порты ввода-вывода
- •1.3.2. Последовательный порт ввода-вывода
- •1.3.3. Быстродействующий модуль
- •1.3.4. Аналого-Цифровой Преобразователь (ацп)
- •1.3.5. Широтно-импульсный модулятор (шим)
- •1.3.6. Сторожевой Таймер
- •2.Введение в программирование 8xc196kc
- •2.1. Типы программирования микроконтроллера
- •2.2. Система команд
- •2.3. Типы данных
- •2.4. Способы адресации
- •3. Карта памяти микроконтроллера i80c196kc
- •3.1. Основные разделы памяти
- •3.1.1. Разделы внешней памяти
- •3.1.2. Порты 3 и 4
- •3.1.3. Программная память и Память Специального назначения
- •3.1.3.1. Управление доступом к внутренней или внешней памяти
- •3.1.3.2. Память для программ
- •3.1.3.3. Память специального назначения
- •3.1.4. Регистровый Файл(Register File)
- •3.1.4.1. Указатель Вершины стека (sp)
- •3.1.4.2 Регистры Специальных Функций
- •3.2. Работа через горизонтальное окно
- •3.2.1. Выбор hWindow
- •3.3.1. Выбор vWindow
- •3.3.2. Работа с вертикальными окнами и Способы Адресации
- •4. Прерывания
- •4.1 Обработка Прерывания
- •4.2. Описание работы Контроллера Прерывания
- •4.3. Описание работы Периферийной Станции Транзакций(pts)
- •4.4. Приоритеты Прерывания
- •4.5. Изменение Приоритетов Прерывания
- •4.6. Программы Обработки прерывания
- •4.7. Распознавание Прерываний
- •4.8. Время Ожидания Прерывания
- •4.9. Специальные Прерывания
- •4.9.1. Прерывание по Невыполняемому Коду
- •4.9.2. Прерывание по Ловушке Программного
- •4.9.3. Немаскируемое Прерывание
- •4.10. Программирование Прерываний
- •4.11. Предоставление pts Прерывания
- •4.12. Предоставление Стандартных Прерываний
- •4.13. Выбор Источников Прерывания
- •4.14. Регистры Маскирования Прерываний
- •4.15. Регистры Захвата Прерывания
- •4.16. Pts Прерывания
- •4.16.1. Управляющие Блоки pts
- •4.16.1.1. Регистр ptscount
- •4.16.1.2. Прерывание End-of-pts
- •4.16.1.3. Регистр ptscon
- •4.16.2. Краткий Обзор Режима Одиночной
- •4.16.2.1. Пример Режима Одиночной Передачи
- •4.16.3. Краткий Обзор Режима Поблочной
- •4.16.3.1. Пример Режима Поблочной Пересылки
- •4.16.4. Краткий Обзор Режима Сканирования
- •4.16.4.1. Pts Циклы в Режиме Сканирования ацп
- •11Eh ad_result для ach0
- •102H ad_result для acHx
- •100H ad_command для acHx
- •4.16.5. Hsi. Краткий Обзор Режима
- •4.16.5.1. Пример Режима hsi
- •4.16.6. Hso. Краткий Обзор Режима
- •4.16.6.1. Пример Режима hso
- •6. Парраллельные порты ввода - вывода
- •6.1. Краткий Функциональный Обзор
- •6.2.Контакты Порта Ввода
- •6.3. Контакты Порта Вывода
- •6.4. Контакты квази-двунаправленного порта
- •6.5 Контакты Двунаправленного Порта с открытым стоком
- •6.6.Программирование Портов ввода-вывода
- •6.7.Организация Портов Ввода
- •6.7.1. Порт 0
- •6.8. Организация Портов Вывода
- •6.9. Порт 1
- •6.10. Порт 2
- •6.11. Доступ к Порту 3 и Порту 4
- •6.11.1. Порт 3 и Порт 4
- •6.12. Особенности работы с квази - двунаправленными портами
4.5. Изменение Приоритетов Прерывания
Программное обеспечение может изменять приоритеты по умолчанию для маскируемых прерываний, управляя регистрами маски прерывания ( INT_MASK и INT_MASK1). Например, Вы можете определить тип прерывания, есть ли они вообще , можете прервать программу обработки прерывания или PTS цикл.
Следующий код показывает один из способов запрета всех прерываний, за исключением прерывания EXTINT
( приоритет 7 ), из программы обработки RI прерывания ( приоритет 9 ).
SERIAL_RI_ISR:
pusha ;Сохранить PSW, INT_MASK, INT_MASK1 и WSR
di ; Отключить все прерывания
ldb int_mask1, #00100000B ;разрешить только EXTINT ;прерывание
ei ; разрешить обслуживание прерываний
... ;
... ; Обслуживание прерывания по приему(RI)
... ;
popa ; Восстановить PSW, INT_MASK, INT_MASK1, & ; WSR регистры
ret
Обратите Внимание, что ячейка 2032H в таблице векторов прерываний должна загружаться значением метки SERIAL_RI_ISR раньше, чем придет запрос прерывания по приему - RI (Receive interrupt) и кроме того, для выполнения этой подпрограммы прерывание должно быть разрешено.
4.6. Программы Обработки прерывания
Все программы обработки прерывания 8XC196KC/KD обрабатываются следующимспособом:
1. После того, как аппаратные средства обнаружат и определят приоритет запроса прерывания, они генерируют и выполняют специальный вызов по прерыванию. Он помещает счетчик программ в стек и затем загружает его содержимым вектора, соответствующего самому высокому приоритету, задерживая
немаскированные прерывания. Аппаратные средства не будут позволять выполнить другой вызов по прерыванию пока не выполнится первая команда программы обработки текущего прерывания.
2. Команда PUSHA сохраняет содержимое PSW(СЛОВА СОСТОЯНИЯ ПРОГРАММЫ),INT_MASK, INT_MASK1, и Регистра Выбора Окна (WSR) в стеке и затем очищает PSW, INT_MASK, и INT_MASK1.
Кроме арифметических флажков, PSW содержит бит глобального разрешения прерываний(I), и бит разрешения PTS (PSE). Очищая PSW, INT_MASK, и INT_MASK1 регистр, команда PUSHA маскирует все маскируемые прерывания, отключает стандартное обслуживание прерываний, и отключает PTS.
Команда PUSHA также запрещает вызовы по прерыванию пока не выполнится следующая команда .
3. Команда LDB INT_MASK1 допускает те прерывания, которые могут прервать текущую программу обработки пррываний. В примере,приведенном выше, только EXTINT может прервать программу обработки прерывания по Приему.
Разрешая или запрещая обслуживание прерываний, программное обеспечение устанавливает собственное обслуживание приоритетов прерываний.
4. Команда EI повторно разрешает обработку прерывания и запрещает вызовы по прерыванию пока не выполнится следующая команда .
5. Фактически, программа обработки прерывания выполняется внутри приоритетной структуры, установленной программным обеспечением.
6. В конце обслуживающей подпрограммы, команда POPA восстанавливает первоначальное содержание PSW, INT_MASK, INT_MASK1, и WSR регистров.
Любые изменения, сделанные в этих регистры в течение программы обработки прерывания не сохраняются. Так как вызовы по прерыванию не могут происходить сразу после команды POPA, последняя команда (RET) выполнится раньше, чем
придет другой вызов по прерыванию. После своего выполнения, команда POPA будет повторно допускать отложенное прерывание. Если Контроллер Прерывания обслуживал отложенное прерывание перед выпонением команды RET, то адрес возврата к коду, который выполнялся когда произошло первоначальное прерывание, будет сохранен в стеке. Это не
представляет проблему для потока программы, зато может приводить к переполнению стека, если прерывания происходят с высокой частотой.
Обратите Внимание что "преамбула" и код завершения для подпрограммы не сохраняют и не восстанавливают регистров оперативной памяти. Программа обработки прерывания должна сама определить собственный частный набор регистров из Нижнего Регистрового Файла. Доступность 232 байтов оперативной памяти в Нижнем Регистровом Файле позволят делать это совершенно свободно.Кроме того, доступна оперативная память в Верхнем Регистровом Файле через вертикальную работу с окнами.