В HTML      В PDF
микроэлектроника, микросхема, транзистор, диод, микроконтроллер, память, msp430, Atmel, Maxim, LCD, hd44780, t6963, sed1335, avr, mega128
Предприятия Компоненты Документация Применения Статьи Новости

 
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации





Главная страница > Обзоры по типам > Микроконтроллеры > 68300 > Архитектура
Пересюхтюмя


13-я Международная выставка электронных компонентов и комплектующих для электронной промышленности





Выставка Передовые Технологии Автоматизации


Исключения, прерывания и режим отладки BDM

При работе микропроцессорной системы часто возникают ситуации, когда требуется прервать выполнение текущей программы и перейти к подпрограмме, обеспечивающей необходимую реакцию системы на создавшиеся обстоятельства. Такие ситуации называются исключениями (exeption).
    Исключениями являются аварийные ситуации, например, отключение питания системы. В этом случае источник питания вырабатывает сигнал запроса прерывания, поступающий в микроконтроллер. При этом источник питания должен некоторое время (порядка 10 мс) сохранять необходимый уровень напряжения, в течение которого процессор выполняет подпрограмму перезаписи на магнитный диск информации, достаточной для продолжения выполнения прерванной программы после восстановления нормального режима питания. Исключениями могут быть запросы внешних устройств на ввод или вывод данных. В этом случае вызываемая запросом подпрограмма обслуживания выполняет требуемую процедуру пересылки данных.
    Исключения могут быть программными, которые возникают при выполнении определенных команд, или аппаратными, которые вызываются внешними запросами или внутренними сигналами, формируемыми при возникновении ряда ситуаций.


    Причинами программных исключений являются:

  • команды RESET, TRAP, TRAPV (при значении признака V=1), TRAPcc, CHK, CHK2 (при выходе операнда за границы заданного диапазона ), ILLEGAL;
  • привилегированные команды MOVE to SR, mOVE from SR,MOVE USP, MOVEC, MOVES, ANDI to SR, ORI to SR, EORI to SR, RTE, RESET, STOP, LPSTOP, выполняемые в режиме пользователя (нарушение привилегий);
  • команды деления DIVS, DIVU и их модификации, выполняемые при нулевом значении делителя (деление на нуль);
  • выборка команды, содержащей неправильный код операции (не соответствующий набору кодов, используемых процессором);
  • установка значения признаков трассировки T1 или T0=1 (в этом случае процессор работает в пошаговом режиме, выполняя после команды подпрограмму обслуживания, которая выводит на экран дисплея содержимое регистров и ячеек памяти и позволяет изменять его при отладке программы);
  • выборка команды, содержащей 1111 или 1010 в поле кода операции (поле COP командного слова, рис.3.3); эти коды вызывают прерывание с переходом к выполнению специальных подпрограмм, которые могут обеспечить эмуляцию команд арифметического сопроцессора типа MC68881, MC68882 или каких-либо других команд, не входящих в набор команд процессора CPU32;.
  • обращение к команде по нечетному адресу; все команды содержат целое число слов и размещаются только по четным адресам, поэтому выдача нечетного адреса команды является неправильным (см.раздел Cпособы адресации и формат команд).
    Причинами аппаратных исключений являются:
  • поступление внешнего сигнала начальной установки (перезапуск) RESET#;
  • поступление внешнего сигнала ошибки обращения к шине BERR#;
  • поступление внешних запросов прерывания IRQ1-7#, если обслуживание запроса не запрещается маской I2-0 в регистре SR;
  • отсутствие сигналов подтверждения DTACK# или AVEC# (ложное прерывание), которые при выполнении цикла прерывания должны поступить от запросивших прерывание устройств;
  • поступление запроса от устройства, которое не может передать в процессор свой вектор прерывания, так оно предварительно не было инициализировано (неинициализированное прерывание).

Во всех этих ситуациях микропроцессор заносит в стек кадр соответствующего формата, содержимое которого обеспечивает возможность возвращения к прерванной программе и помогает подпрограмме обслуживания определить причину исключения. Большинство исключений вызывает формирование стекового кадра с форматом Fe=$0, содержащего четыре слова: слово формата/смещения Fe/Av, текущее содержимое PC (два слова), и содержимое регистра SR. Слово Fe/Av содержит 4-разрядный код формата Fe и 12-разрядное смещение Av, определяющее положение соответствующего вектора исключения в таблице векторов. Значения Fe/Av сохраняются также процессором, который при выполнении команды RTE (возврат из подпрограммы обслуживания исключения) сравнивает его с кодом Fe/Av, поступившим из стека. Их несовпадение указывает на изменение содержимого стека, что может вызвать нарушения при возвращении к прерванной программе. В этом случае реализуется исключение с номером Ne=14 (ошибка формата стекового кадра). При исключениях с номерами Ne=5,6,7,9 формируется стековый кадр с форматом Fe=$2, содержащий дополнительно адрес команды, вызвавшей данное исключение. Этот кадр содержит шесть слов. При ошибке обращения к шине (исключение с Ne=2) формируется кадр из двенадцати слов (формат Fe =$C), который содержит дополнительное слово, определяющее тип выполнявшегося цикла обмена, а также другую информацию, используемую для определения причины ошибки. Все остальные исключения вызывают формирование кадра с форматом Fe=0.
    Затем в PC загружается из памяти вектор исключения Ve - начальный адрес соответствующей подпрограммы обслуживания. Эти вектора являются входами в подпрограммы обслуживания и хранятся в таблице исключений, которая занимает 1 Кбайт памяти. Начальный адрес таблицы задается содержимым регистра VBR (рис.3.1). Таблица может содержать адреса входов для 256 подпрограмм обслуживания. Каждое исключение имеет свой номер Ne, который имеет значения от 0 до 255 (табл.3.12). Номер, сдвинутый на два разряда влево, дает относительный адрес вектора Av=4Ne (адрес ячейки памяти в таблице исключений, которая содержит вектор Ve соответствующeй подпрограммы). При обслуживании исключений процессор автоматически переходит в режим супервизора, и в регистре состояния SR устанавливается значение бита S=1. Это позволяет подпрограммам обслуживания использовать полный набор ресурсов процессора. После ее завершения возврат к прерванной программе осуществляется командой RTE. Привилегированная команда RTE, которая выполняется только в режиме супервизора, восстанавливает из стека содержимое PC и SR. Если при выполнении подпрограммы обслуживания процессор перешел в режим пользователя, то для возвращения к прерванной программе следует использовать команду RTS, которая восстанавливает содержимое PC и регистра CCR.

Таблица 3.12. Виды исключений, их номера и адреса векторов

Номер Ne Адрес Av Вид исключения
0
-
$000
$004
Установка начального состояния (загрузка SSP)
Установка начального состояния (загрузка РС)
2
3
$008
$00C
Ошибка обращения к шине (сигнал BERR#=0)
Неправильный (нечетный) адрес команды
4
5
6
7
$010
$014
$018
$01C
Неправильный код операции
Деление на нуль (команды DIVU,DIVS)
Команда CHK, CHK2
Команда TRAPV, TRAPcc
8
9
10
11
$020
$024
$028
$02C
Нарушение привилегии
Режим трассировки
Код эмуляции 1010 (A-код операции)
Код эмуляции 1111 (F-код операции)
12
 
13
14
15
$030
 
$034
$038
$03C
Прерывание в контрольной точке при
поступлении внешнего сигнала BKPT#=0
Резервировано
Ошибка формата стекового кадра
Неинициализированное прерывание
16-23 $040 - 05C Резервировано
24
25 - 31
$060
$064 - 07C
Ложное прерывание
Автовекторные прерывания Li = 1-7
32-47 $080 - 0BC Команды TRAP с номерами Nt = 1-15
48 - 63
64 - 255
$0C0-0FC
$100 - 3FF
Резервированы
Векторные прерывания пользователя

Установка начального состояния микропроцессорной системы производится программно - командой RESET, выполняемой в режиме супервизора, или аппаратно - внешним сигналом системного сброса (перезапуска) RESET#=0. При этом содержимое регистров адреса и данных принимает нулевое значение, в регистре SR устанавливается значение признака S=1 (режим супервизора), остальные признаки имеют значение 0. Из ячейки памяти с относительным адресом Av= $00 производится загрузка исходного значения SSP - указателя стека супервизора, а из ячейки с относительным адресом Av=$004 - исходного содержимого PC (начальный адрес подпрограммы инициализации системы, выполняющей установку требуемых начальных значений содержимого регистров процессора и других устройств микроконтроллера). Данное исключение использует две ячейки памяти (два вектора) в таблице прерываний (табл.3.12 ).
    Сигнал ошибки обращения к шине BERR#=0 формируется специальным устройством, если в данном цикле на шину A поступает адрес неподключенного раздела памяти или внешнего устройства. Этот сигнал может поступать также от сторожевого таймера, если в цикле записи или чтения в течении определенного времени не поступает сигнал подтверждения готовности к обмену DTACK#=0 от памяти или внешнего устройства. Подпрограмма обслуживания в этом случае должна информировать о типе ошибки и вызвавших ее адресе и команде. Если при обслуживании данного исключения снова поступит сигнал ошибки BERR#=0 (двойная ошибка обращения к шине), то процессор останавливается, переводит в отключенное состояние выводы A23-0, D15-0, устанавливает неактивное значение сигналов на управляющих выходах и формирует выходной сигнал останова HALT#=0 на соответствующем выводе микроконтроллера (см. раздел Блок конфигурации и контроля).
    Код эмуляции 1010 используется для программной реализации каких-либо процедур или команд, не входящих в набор команд процессора CPU32. При выборке команды с кодом операции 1010 подпрограмма обслуживания анализирует другие разряды слова команды и в зависимости от их значений выполняет определенную подпрограмму, реализующую необходимую последовательность операций. Таким образом команды с данным кодом операции выполняют функции макрокоманд, вводимых пользователем для расширения возможностей процессора. Они также облегчают реализацию макроассемблеров.
    Код эмуляции 1111 обычно используется для программной реализации команд арифметического сопроцессора. При выборке команды с кодом операции 1111 должна запускаться специализированная подпрограмма - эмулятор сопроцессора. Таким образом можно отлаживать и выполнять программы, использующие команды арифметических сопроцессоров MC68881, 68882, которые могут подключаться к микроконтроллерам семейства 68300. Если проектируемая система не должна обеспечивать выполнение этих команд, то можно использовать эти коды для эмуляции любых других команд (аналогично коду эмуляции 1010).
    Команда TRAP вызывает один из 16 видов исключения в зависимости от указанного в команде значения номера Nt (см. раздел Система команд CPU32). Соответствующие номера исключения Ne = 32 + Nt имеют значения от 32 до 47, а формируемые адреса векторов Av находятся в диапазоне $080-1BF (табл.3.12). Эта команда используется для задания контрольных точек останова при отладке программы, а также для запуска подпрограмм обслуживания или инициализации различных устройств, используемых совместно с микроконтроллером. Аналогичные функции выполняет команда TRAPcc, которая вызывает обращение к подпрограмме обслуживания с номером Ne=7 (аналогично команде TRAPV), однако имеет идентификатор Te, анализируя который подпрограмма обслуживания может обеспечить выполнение специфических процедур обслуживания.
    Процессор обслуживает семь запросов прерывания от внешних устройств, которые поступают на входы IRQ1-7# модуля SIM (см. раздел Модуль аналого - цифрового преобразователя ADC). Для каждого запроса установлен приоритет обслуживания: высший - Li=7 для запроса на входе IRQ7, низший - Li=1 для запроса на входе IRQ1. Запрос прерывания инициируется при поступлении низкого потенциала (логического "0") на соответствующий вход модуля SIM. Поле маски I2-0 в регистре SR (рис.3.2) определяет уровень приоритета, начиная с которого выполняется обслуживание запросов (табл.3.13). Процессор сравнивает уровень приоритета (номер) поступившего запроса со значением заданной в регистре SR маски I2-0, разрешающей или запрещающей обслуживание. Установка маски I2-0, выполняемая с помощью команд MOVE to SR, ANDI to SR, ORI to SR, EORI to SR, запрещает или разрешает прерывание программы запросами с соответствующими уровнями приоритета. Так как эти команды являются привилегированными, то разрешение и запрещение прерываний по внешним запросам производится только в режиме супервизора. Отметим, что запрос с наивысшим приоритетом Li=7, поступающий на вход IRQ7, является немаскируемым и может использоваться для реализации аварийных прерываний, например, при отключении питания.

Таблица 3.13. Маскирование обслуживания запросов прерывания

I2-0 Обслуживаемые запросы
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
IRQ 1-7#
IRQ 2-7#
IRQ 3-7#
IRQ 4-7#
IRQ 5-7#
IRQ 6-7#
IRQ 7#

Адресация подпрограмм обслуживания запросов IRQ7-1# может производится двумя способами. При автовекторной адресации каждому запросу с уровнем Li соответствует номер исключения Ne=24 + Li, в соответствии с которым формируется один из семи адресов вектора исключений Av: от $064 до $07C (табл.3.12). При векторной адресации внешнее устройство, запросившее прерывание, формирует и передает в микроконтроллер в цикле прерывания 8-разрядное значение номера вектора Ne. Таким способом могут быть получены значения Ne до 255 и обеспечивается обращение к подпрограммам c адресами векторов Av до $3FF (табл.3.12).
    Рассмотрим реализацию автовекторных и векторных прерываний подробнее. При поступлении запроса IRQi# с приоритетом, разрешенным для обслуживания маской I2-0, процессор завершает выполнение текущей команды и выполняет специальный цикл подтверждения прерывания. В течении этого цикла микроконтроллер выдает на выходы FC2-0, указывающие вид выполняемого цикла (табл.3.19), код 111, при поступлении которого специальная внешняя схема формирует сигнал подтверждения прерывания IACK# =0. На три младших разряда адреса A3-1 выдается номер обслуживаемого запроса, в соответствии с которым дешифратор адреса разрешает прохождение сигнала IACK# к устройству, от которого поступил обслуживаемый запрос.
    При выполнении автовекторного прерывания запросившее устройство, получив сигнал IACK# =0, должно подтвердить свой запрос путем подачи сигнала AVEC#=0 на вход микроконтроллера. После этого процессор формирует относительный адрес вектора исключения, имеющий значения в диапазоне Av = $064-07C в соответствии с номером Ne обслуживаемого запроса (табл.3.12).
    При выполнении векторного прерывания запросившее устройство, получив сигнал IACK# =0, выдает на младшие разряды шины данных D7-0 свой номер исключения Ne. Затем оно подтверждает выдачу номера подачей на вход микроконтроллера сигнала подтверждения DTACK#=0. После получения этого сигнала процессор считывает поступившее значение Ne и в соответствии с ним формирует относительный адрес вектора исключения Av=$100-3FF (табл.3.12).
    После определения относительного адреса Av процессор формирует абсолютный адрес вектора прерываний Ae, который является суммой базового адреса таблицы векторов прерываний, записанного в регистр VBR, и полученного относительного адреса Av. По адресу Ae процессор производит считывание из памяти значения соответствующего вектора исключения, который поступает в PC.
    Если в цикле подтверждения прерывания от запросившего устройства не поступает сигнал подтверждения запроса AVEC#=0 (при автовекторном прерывании) или DTACK# =0 (при векторном прерывании), то реализуется исключение "ложное прерывание" с номером Ne=24 (табл.3.12).
    Внешние устройства, вызывающие векторное прерывание, имеют специальный векторный регистр IVR, в который при инициализации вводится необходимое значение номера вектора прерываний Ne. В исходном состоянии (до инициализации) содержимое этого регистра имеет значение $0F. Если данное устройство не инициализировано (в IVR не записано требуемое значение Ne), то при векторном прерывании оно будет выдавать на шину данных номер Ne=15, вызывающий исключение "неинициализированное прерывание" с обращением к подпрограмме обслуживания с номером вектора Ne=15 (табл.3.12).
    Исключение с номером Ne=12, которое реализуется при поступлении внешнего сигнала останова в контрольной точке BKPT# =0, используется в процессе отладки программного обеспечения.
    Процессор CPU32 может работать в специальном режиме отладки BDM. Если при начальной установке (процедура RESET) на вход микроконтроллера поступает сигнал BKPT# = 1, то разрешается его функционирование в режиме отладки BDM. В этом случае подача сигнала BKPT# = 0 при дальнейшем функционировании микроконтроллера вызывает остановку выполнения текущей программы и переход под управление внешнего отладочного устройства. Это устройство через специальный последовательный BDM-порт вводит в микроконтроллер команды отладки. В режиме BDM-отладки процессор выполняет команды, поступающие от системы отладки через специальный синхронный последовательный BDM-порт. Система отладки, которая в этом режиме является ведущей, вырабатывает синхросигналы, поступающие на вход DSCLK процессора. В качестве входа синхросигналов используется вывод, на который в обычном режиме поступают сигналы BKPT#. Частота синхросигналов не должна превышать половины тактовой частоты Ft процессора.
    Последовательный ввод в процессор в режиме BDM производится через вход DSI, вывод - через выход DSO (в качестве DSI, DSO используются выводы сигналов IFETCH#, IPIPE#, см. рис.3.4). От системы отладки на вход DSI процессора поступают команды, адреса и данные; процессор выдает на выход DSO данные или управляющую информацию, принимаемые системой.
    В режиме отладки процессор CPU32 может выполнять следующие команды:

  • запись в регистры адреса A или данных D (команды WAREG или WDREG) и чтение из них (команды RAREG или RDREG );
  • запись в системные регистры или чтение из них (команды WSREG или RSREG);
  • запись или чтение содержимого адресованной ячейки памяти (команды WRITE или READ);
  • заполнение блока ячеек памяти (команда FILL, которая должна следовать за командой WRITE, задающей начальный адрес блока, повторяясь до окончания его заполнения);
  • вывод содержимого блока ячеек памяти ( команда DUMP, которая должна следовать за командой READ, задающей начальный адрес блока, повторяясь до окончания его вывода);
  • вызов подпрограммы пользователя (команда CALL, которая содержит адрес ячейки памяти, из которой вводится новое содержимое PC, после того как текущее содержимое PC загружается в стек);
  • выдача сигнала RESET для периферийных устройств при сохранении состояния CPU32 (команда RST), отсутствие операции (команда NOP);
  • выход из режима отладки и возврат к выполнению основной программы (команда GO).
    Команды системы отладки поступают на вход DSI процессора в виде 16-разрядного последовательного кода, задающего вид операции, разрядность передаваемых операндов, код регистра, к которому производится обращение. В качестве системных регистров могут выбираться PC (текущее содержимое или адрес возврата - содержимое в момент перехода в режим отладки), SR, USP, SSP, SFC, DFC, VBR. Кроме того, с помощью команды RSREG система отладки может считать содержимое служебных регистров ATEMP, который указывает причину, вызвавшую переход в режим отладки, и FAR, где хранится адрес, при котором произошла ошибка обращения к шине (если она зафиксирована). После команд WAREG, WDREG, WSREG, FILL на вход DSI поступает операнд в виде одного или двух последовательно передаваемых 16-разрядных слов. После команд RAREG, DREG, RSREG, DUMP процессор последовательно выдает на выход DSI считываемый операнд. После команд READ, WRITE, CALL на вход DSI сначала поступает 32-разрядный абсолютный адрес в виде двух последовательно передаваемых 16-разрядных слов, а затем производится ввод (при команде WRITE) или вывод (по команде READ) адресованного операнда.
    Перед началом передачи каждого 16-разрядного слова (команды, адреса или операнда) система отладки подает на вход DSI контрольный бит b16=0. Процессор также подает на выход DSO контрольный бит b16=0 перед выводом каждого 16-разрядного операнда. Если поступившая команда не требует вывода операнда, то после ее выполнения процессор выдает на выход DSO контрольный бит b16=0, а затем код завершения $FFFF. После приема команды процессор может также выдавать следующие сообщения:
  • поступление неправильной команды (b16=1, $FFFF );
  • продолжение выполнения команды (b16=1, $0000 ), если результат еще не готов (например, идет прием адреса);
  • произошла ошибка обращения к шине (b16=1, $0001).

Таким образом, процессор CPU32 совместно с модулем системного интерфейса SIM (см. раздел Модуль системной интеграции SIM) обеспечивают значительное упрощение процесса отладки систем, реализованных на базе микроконтроллеров семейства 68300.