Глава 1. Базовая модель 16 - разрядного

микропроцессора MC68000 и ее модификации

Семейство 16, 32 - разрядных микропроцессоров MC680x0 использует базовую архитектуру, впервые реализованную в микропроцессоре MC68000, выпуск которого начался в 1979 году.

Эта архитектура включает общий для всех моделей семейства комплект регистров, предоставляемых пользователю, набор единых способов адресации, а также базовую систему команд, которая дополняется в последующих моделях при сохранении программной совместимости снизу - вверх. Общими для семейства являются также принципы обращения к памяти и реализации интерфейса с другими устройствами в системе. В настоящей главе описывается микропроцессор MC68000 как базовая модель семейства, архитектура и принципы функционирования которого послужили основой для разработки последующих моделей.

Микропроцессор MC68000 является высокоэффективным средством обработки цифровой информации. Он имеет 16 - разрядную внешнюю шину данных и 24 - разрядную шину адреса, что обеспечивает объем адресного пространства до 16 Мбайт. При этом внутренняя структура микропроцессора имеет 32 - разрядную организацию, включая шестнадцать 32 - разрядных регистров для хранения данных и адресов. Максимальная тактовая частота составляет для данной модели 16,7 Мгц. При этой частоте модель MC68000, изготавливаемая по n - МОП технологии, потребляет мощность около 1,6 Вт. Реализованные по КМОП - технологии модели MC68HC000, 001 потребляют при той же частоте всего 260 мВт.

Для реализации цифровых систем кроме микропроцессора требуется использовать ряд периферийных устройств: параллельные и последовательные порты ввода - вывода данных, таймеры для обслуживания процессов в реальном масштабе времени, контроллеры прерываний и др. Эти устройства реализуются в виде отдельных микросхем, подключаемых к микропроцессору. В данной главе рассматривается пример реализации микропроцессорной системы с использованием типовых периферийных устройств

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

1.1 Режимы функционирования и регистровая модель.

Основным архитектурным принципом функционирования микропроцессоров семейства MC680x0 является разделение их ресурсов и возможностей, как программных так и аппаратных, в зависимости от класса решаемых задач. Архитектура микропроцессора ориентирована на раздельное выполнение двух классов задач: управление работой самой микропроцессорной системы с помощью системного программного обеспечения ( операционной системы ) и решение прикладных задач пользователя. В зависимости от выполняемой задачи обеспечивается соответствующий режим работы микропроцессора.

1.1.1. Режимы функционирования

Различается два класса выполняемых микропроцессором программ: программы операционной системы ( супервизора ) и прикладные программы пользователя. Соответственно, реализуются два режима функционирования микропроцессора:

- режим супервизора,

- режим пользователя.

В зависимости от режима при выполнении программ разрешается доступ ко всем ресурсам микропроцессора или их части. В режиме супервизора разрешается выполнение любых команд, реализуемых микропроцессором, и доступ ко всем его регистрам. В режиме пользователя запрещается выполнение ряда команд и доступ к некоторым регистрам, чтобы ограничить возможности таких изменений состояния микропроцессорной системы, которые могут помешать выполнению других пользовательских программ или нарушить установленный супервизором режим работы микропроцессора. Режим функционирования определяется значением бита S в регистре состояния SR ( рис. 1.2 ).

При включении микропроцессор устанавливается в режим супервизора. При выполнении инициализации операционная система определяет режим дальнейшего функционирования микропроцессора.

Если предполагается его использование в режиме пользователя, то изменяется значение бита S в регистре SR. В режиме пользователя изменение значения S не допускается. В этом случае смена режима осуществляется при возникновении исключительных ситуаций, прерывающих нормальное выполнение программы, или путем сброса ( RESET ) микропроцессора в начальное состояние. При этом микропроцессор попадает в режим супервизора.

Ниже рассматривается набор регистров микропроцессора

( регистровая модель ), доступных в режиме пользователя или супервизора. Набор команд, выполнение которых разрешается в том или ином режиме, описывается в разделе 1.2.

1.1.2. Регистровая модель микропроцессора

В регистровую модель ( рис. 1.1 ) входят регистры, часть из которых доступна для записи - считывания только в режиме супервизора.

Рис. 1.1. Регистровая модель микропроцессора MC68000

Микропроцессор содержит два набора из восьми 32 -

разрядных регистров: регистры данных D0 - D7 и регистры адреса A0 - A7. Один из регистров адреса, A7, служащий в качестве указателя стека, дублирован для обслуживания задач различных классов. В режиме пользователя указателем стека служит регистр USP, в режиме супервизора - регистр SSP. Таким образом обеспечивается возможность разделения стеков при решении задач пользователя и супервизора. Программный счетчик PC также имеет 32 разряда, однако в данной модели микропроцессора используются только 24 разряда в соответствии с разрядностью шины адреса.

Рис. 1.2. Формат регистра состояния SR

Регистр состояния SR, формат которого показан на рис.1.2, содержит два байта: системный байт и байт пользователя. Полностью регистр SR доступен только в режиме супервизора. В режиме пользователя доступны только младшие разряды ( байт пользователя ), которые образуют регистр условий CCR. Отдельные биты регистра CCR имеют следующее назначение:

С - признак переноса, принимает значение C = 1 при возникновении переноса из старшего разряда обрабатываемых операндов;

V - признак переполнения, принимает значение V = 1 в случае переполнения разрядной сетки при обработке операндов со знаком;

Z - признак нуля, принимает значение Z = 1 при получении нулевого результата операции;

N - признак знака, принимает значение старшего ( знакового ) разряда результата операции: N = 0 - положительное число, N = 1 -

отрицательное число;

X - признак расширения, в большинстве случаев копирует

признак С, но при выполнении некоторых операций эти признаки устанавливаются по - разному ( см. раздел 1.3 ).

Биты системного байта регистра SR, определяющие режимы функционирования микропроцессора, имеют следующее назначение:

S - признак супервизора, при S = 0 микропроцессор работает в режиме пользователя, при S = 1 - в режиме супервизора;

T - признак трассировки, при T = 1 микропроцессор переключается в режим пошагового выполнения команд;

I2-0 - поле маски прерываний, определяет минимальный уровень обслуживамых запросов прерывания ( см. раздел 1.3 ).

Остальные биты регистра SR не используются или резервированы для последующих моделей микропроцессоров.

При включении микропроцессора происходит автоматическая установка начального состояния регистров. При этом в регистре SR устанавливается значение бита S = 1, и микропроцессор начинает работать в режиме супервизора. Из памяти загружаются начальные значения содержимого программного счетчика PC и указателя стека SSP ( см. раздел Если в процессе дальнейшей работы потребуется перевод микропроцессора в режим пользователя, то для этого необходимо с помощью команды MOVE to SR загрузить в регистр SR новое содержимое, в котором бит S = 0. Обратный перевод в режим супервизора возможен только путем установки микропроцессора в начальное состояние с помощью внешнего сигнала сброса или команды RESET.

1.2. Способы адресации, форматы команд и данных

Микропроцессор выполняет обработку следующих типов данных:

- биты,

- байты,

- слова ( 16 разрядов ),

- длинные слова ( 32 разряда ),

- двоично - десятичные числа ( 1 байт = 2 десятичных разряда ).

Рис.1.3. Адресация байтов в слове ( а ) и длинном слове ( б )

Обрабатываемые данные - операнды могут располагаться в регистрах ( данных или адреса ) или оперативной памяти. Для выборки слова ( байты B1-0 ) или длинного слова ( байты B3-0 ) команда задает адрес старшего байта N, четный или кратный четырем. При этом слова и длинные слова размещаются таким образом, что младшие байты ( разряды D7-0 данных ) располагаются в ячейках памяти с большими адресами: N+1 или N=3 ( рис. Такое размещение байтов в памяти от старшего к младшему соответствует естественному порядку их написания слева - направо. Этот порядок адресации байтов называется в зарубежной литературе "big -endian". Он отличается от порядка "little - endian", принятого компанией INTEL и рядом других производителей, когда размещение слова начинается с младшего байта, адрес которого служит адресом слова.

1.2.1. Способы адресации

Микропроцессор MC68000 выполняет словарную выборку операндов из памяти. Даже если операндом является байт, в цикле обращения к памяти производится выборка слова, младший байт которого используется в качестве операнда. Длинное слово выбирается с помощью двух последовательных циклов обращения к памяти, причем первыми выбираются старшие 16 разрядов. Поэтому формируемые микропроцессором адреса команд или данных должны быть четными. При формировании нечетного адреса микропроцессор прерывает выполнение программы и выполняет специальную подпрограмму, информирующую пользователя о неправильной адресации ( см. раздел 1.4 ).

Используются следующие способы адресации операндов:

- регистровая ( операнд в регистре данных или адреса ),

- косвенно - регистровая ( операнд в ячейке памяти, адресуемой содержимым регистра адреса ),

- косвенно - регистровая с постинкрементом ( операнд в ячейке памяти, адресуемой содержимым регистра адреса, которое автоматически увеличивается после выборки операнда для адресации следующей ячейки ),

- косвенно - регистровая с предекрементом ( операнд в ячейке памяти, адресуемой содержимым регистра адреса, которое автоматически уменьшается перед выборкой операнда для адресации предыдущей ячейки ),

- косвенно - регистровая со смещением ( операнд в ячейке памяти, адрес которой является суммой содержимого регистра адреса и 16- разрядного смещения d16, заданного в команде ),

- косвенно - регистровая с индексированием ( операнд в ячейке памяти, адрес которой является суммой содержимого регистра адреса, индексного регистра и данного в команде 8-разрядного смещения d8 ),

- прямая ( операнд в ячейке памяти, адрес которой задается числом Abs, указанным в команде ),

- относительная ( операнд в ячейке памяти, адрес которой является суммой текущего содержимого программного счетчика PC и данного в команде 16 - разрядного смещения d16 ),

- относительная с индексированием ( операнд в ячейке памяти, адрес которой является суммой содержимого программного счетчика PC, индексного регистра и данного в команде 16 - разрядного смещения d16 ),

- непосредственная ( значение операнда Im дано в команде ).

Табл. 1.1. Способы адресации, их представление в формате

команды и на языке ассемблера

Смещение d16 или d8 может быть как положительным, так и отрицательным. В формате команды ( рис.1.4 ) это смещение представляется двоичным числом в дополнительном коде, которое при формировании адреса расширяется знаковым разрядом до 32 разрядов. В качестве индексного регистра Xn при адресации с индексированием может служить любой из регистров данных Dn или адреса An. При прямой адресации абсолютный адрес может задаваться словом Abs. W или длинным словом Abs. L в зависимости от его разрядности. При непосредственной адресации

используются 8 - разрядные ( Im8 ), 16 - разрядные ( Im16 ) или 32 -

разрядные ( Im32 ) операнды.

Отметим, что текущее содержимое PC, используемое для вычисления относительного адреса, равно адресу первого слова выполняемой команды, увеличенному на 2.

Для формирования адреса используется 32 - разрядное содержимое регистров, однако в качестве физического адреса на шину адреса A23 - 0 выводятся только 24 младших разряда. Это значение адреса, полученное одним из указанных способов, называется эффективным адресом < EA >.

Микропроцессоры семейства MC680x0 не имеют специальных команд ввода - вывода данных. Для обращения к внешним устройствам их адрес формируется так же, как при обращении к ячейкам памяти, используя перечисленные выше способы адресации. Если сформированный адрес оказывается адресом внешнего устройства, то оно является источником или приемником обрабатываемых данных ( операндов ).

1.1.2. Форматы команд

Выполняемые микропроцессором команды могут быть двухадресными, одноадресными и безадресными.

На рис. 1.4,а показан формат типовой двухадресной команды, где поле COP определяет вид операции, поле OPM - разрядность операндов и размещение результата, поле Rn содержит номер регистра n, в котором находится один операнд, поля MODE и REG задают способ адресации второго операнда ( табл.Таким образом, один операнд всегда выбирается из регистра, второй - из регистра или памяти, результат операции размещается на месте одного из операндов. В табл.1.1 указаны символические обозначения адреса операнда на языке ассемблера в соответствии со способом адресации, используемым для его формирования.

Рис.1.4. Формат типовой команды

При адресации с индексированием команда содержит второе слово, формат которого показан на рис. 1.4,б. Бит D/A этого слова указывает, регистр какого типа используется в качестве индексного: при D/A = 0 - регистр данных ( Xn = Dn ), при D/A = 1 - регистр адреса ( Xn = An ); поле Xn содержит номер регистра n; бит W/L определяет разрядность индекса: при W/L = 0 индексом служит содержимое 16 младших разрядов индексного регистра, которые расширяются знаковым разрядом до 32 - разрядного числа, при W/L = 1 индексом служит 32 - разрядное содержимое регистра. На языке ассемблера разрядность индекса определяется символами W или L, указываемыми после имени регистра Xn ( табл.Поле d8 содержит 8 - разрядное смещение, данное в дополнительном коде.

Ряд способов адресации требует введения в команду дополнительных слов ( рис.1.4, в ). При непосредственной адресации после первых слов ( одного или двух ), определяющих вид операции и способы адресации, следует одно или два слова, содержащих операнды Im8, Im16 или Im32. Если при адресации первого ( < src > или второго ( < dst > ) операнда используется 16 - разрядное смещение d16, либо абсолютный адрес, имеющий разрядность слова ( Abs. W ) или двойного слова ( Abs. L ), то они также указываются в отдельных словах команды. Поэтому команды микропроцессора имеют длину от 1 до 5 слов.

1.3. Система команд

Микропроцессор MC68000 выполняет набор из 111 команд, которые реализуют следующие группы операций:

- операции пересылки,

- арифметические операции,

- логические операции,

- операции сдвига,

- операции сравнения и тестирования,

- битовые операции,

- операции управления;

- операции условной установки байтов.

В данном разделе дается описание команд и форма их записи на языке ассемблера. Общий список команд и их символические обозначения ( мнемокоды ) приведены в табл.1.2, 1.3, где в табл.1.2 даны основные виды команд, а в табл.1.3 перечислены варианты команд пересылок MOVE, арифметических операций ADD, SUB, NEG,

логических операций AND, OR, EOR и сравнения CMP.

Табл.1.2. Основные команды микропроцессора MC68000

Табл.1.3 Варианты команд пересылки, сравнения,

арифметических и логических операций

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

COP. x < src >, < dst >

где в качестве COP указывается мнемокод соответствующей команды ( табл.1.2, 1.3 ), а вместо x ставится символ, определяющий разрядность операндов: B - байт, W - слово, L - длинное слово. Если после мнемокода отсутствует символ разрядности, то по умолчанию операндом служит слово.

Операнды условно обозначаются как < src > - источник, < dst > - приемник, причем в качестве приемника указывается операнд, на месте которого размещается результат операции. При записи конкретных команд в качестве < src >, < dst > указываются символические адреса операндов на языке ассемблера в соответствии с используемым способом их адресации ( табл.При непосредственной адресации вместо < src > дается значение операнда Im, перед которым ставится префиксный символ " # ".

Указываемые в поле операндов числа ( Im, d8,16, Abs. W,L ) могут даваться в различных системах счисления, которые определяются соответствующим префиксным символом:

& - десятичное число,

% - двоичное число,

@ - восьмеричное число,

$ - шестнадцатеричное число.

При отсутствии префиксного символа число по умолчанию воспринимается как десятичное.

Для одноадресных команд в поле операндов дается один символический адрес, в безадресных командах адрес операнда в явном виде не задается.

Ниже в этом разделе рассматриваются выполняемые команды в соответствии с их группами. В таблицах для каждой команды дан ее синтаксис на языке ассемблера и разрядность операндов: фиксированная ( указывается числом ) или изменяемая ( определяется символом B, W, L, который ставится после мнемокода команды ). Операнды, для которых вычисляется эффективный адрес в соответствии с задаваемым способом адресации, обозначены символами < EA >. При выполнении многих команд для вычисления EA можно использовать только определенные способы адресации. В этих случаях для операндов < src >,< dst > в таблицах даны номера разрешенных способов адресации, соответствующие их порядковой нумерации в табл.1.1.

Ряд команд микропроцессора являются привилегированными, то - есть выполняется только в режиме супервизора. Попытка их выполнения в режиме пользователя вызывает прерывание выполнения программы ( см. раздел 1.4 ).

1.3.1. Команды пересылки ( табл. 1.4 ).

Основной в этой группе является команда MOVE, которая допускает использование любых способов для адресации операнда - источника < src > и большинства способов для адресации операнда - приемника < dst >. Имеется ряд вариантов этой команды.

Табл.1.4. Команды пересылки.

Команда MOVEA выполняет загрузку адресных регистров. При словарной разрядности в регистр An загружается слово, адресованное EA, которое расширяется знаком до 32 разрядов.

Если непосредственный операнд, загружаемый в регистр данных, имеет не более 8 значащих разрядов ( значения в диапазоне , то эту операцию рекомендуется выполнять командой MOVEQ. Она имеет меньшую длину и время выполнения, чем команда MOVE с непосредственной адресацией, которая может загружать операнды, имеющие до 32 разрядов.

Команда MOVEP обеспечивает пересылку 16 - или 32 - разрядных операндов через 8 - разрядные периферийные устройства. Для этого команда реализует два или четыре цикла обмена, при которых байты операндов последовательно, начиная со старшего, поступают на выводы D1если адрес четный ) или Dесли

адрес нечетный ).

Команда MOVEM осуществляет групповую пересылку 16 - или 32 - разрядных операндов между регистрами и памятью. Состав регистров, участвующих в обмене задается списком < list >, в котором регистры An, Dn указываются в произвольном порядке, разделяемые символом " / ". Группа соседних регистров может задаваться перечислением: Rx - Ry. Адрес EA определяет начальную ячейку памяти, который после каждого цикла пересылки изменяется на 2 или 4 в зависимости разрядности операндов. Например, команда

MOVEM. L D1/D4-D7/A3/A6, (A0)

выполнит пересылку содержимого семи регистров в память, где будут заполнены 28 байтов, начиная с адреса, заданного содержимым регистра A0. Если используется адресация с постинкрементом, то сначала производится загрузка из памяти перечисленных регистров данных, затем регистров адреса, начиная с регистров, имеющих меньший номер. Если используется адресация с предекрементом, то пересылка содержимого перечисленных регистров в память производится в обратном порядке, начиная с регистра адреса, имеющего наибольший номер.

При остальных разрешенных способах адресации первая пересылка осуществляется между регистром данных с наименьшим номером и ячейкой памяти с адресом EA. Последующие циклы обмена производятся с увеличением адреса EA на 2 или 4 и переходом к регистрам данных, а затем адреса, с большими номерами.

Ряд модификаций команды MOVE обеспечивает обращение к регистру состояния SR и указателю стека USP. Команда MOVE to SR является привилегированной, так как она позволяет менять содержимое старшего байта регистра SR, включая признак S. В режиме пользователя допускается только загрузка младшего байта этого регистра с помощью команды MOVE to CCR. Считывание содержимого SR с помощью команды MOVE from SR может выполняться в любом режиме.

Команды обращения к указателю стека пользователя MOVE USP также являются привилегированными. Они выполняются в режиме супервизора, когда операционная система производит распределение общей адресуемой памяти между задачами пользователей. Напомним, что указатель стека супервизора SSP программно недоступен во всех режимах и загружается только в процессе начальной установки состояния микропроцессора ( см. раздел 1.4 ).

Команды LEA и PEA производят определение адреса EA в соответствии с заданным способом адресации, и помещают его в указанный регистр адреса An или стек, адресуемый с помощью указателя стека SP ( пользователя иди супервизора ). Команда EXG выполняет обмен содержимым между двумя любыми регистрами адреса или данных. Команда SWAP осуществляет перестановку старшего B1 и младшего B0 байтов содержимого адресованного регистра данных Dn.

1.3.2. Команды арифметических операций ( табл. 1.5 ).

Основными в этой группе являются команды сложения, вычитания, умножения и деления, которые имеют ряд вариантов.

Табл.1.5. Команды арифметических операций

Команды сложения ADD и вычитания SUB используют одинаковые способы адресации и имеют аналогичные варианты. Команды ADDA, SUBA позволяют модифицировать содержимое адресных регистров. Команды ADDX, SUBX выполняют сложение и вычитание содержимого регистров данных или ячеек памяти с учетом признака X, устанавливаемого при формировании переноса или заема ( табл.При обращении к памяти эти команды реализуют предекрементную адресацию, которая ускоряет обработку последовательно размещенных массивов данных.

Непосредственная адресация используется в двух вариантах команд сложения и вычитания: обычном и быстром. Команды ADDI, SUBI реализуют обычный вариант, при котором непосредственный операнд Im может иметь до 32 двоичных разрядов ( см. раздел В командах ADDQ, SUBQ реализуется быстрый вариант непосредственной адресации, при котором 3 - разрядный операнд содержится в поле Rn первого слова команды ( рис.1.3,а ). При этом диапазон значений операнда очень ограничен: от 1 до 7, однако существенно сокращается длина команды и время ее выполнения.

Команда NEG изменяет знак операнда путем его перевода в дополнительный код. Такая же операция с учетом признака X производится командой NEGX, которая используется для последовательного преобразования операндов, состоящих из нескольких слов или двойных слов.

Команды ABCD, SBCD выполняют сложение и вычитание 8 - разрядных упакованных двоично - десятичных чисел, представляющих два десятичных разряда ( числа от 0 доПри операциях учитывается признак X, что позволяет производить обработку многоразрядных операндов путем последовательности данных операций. Команда NBCD изменяет знак операнда, формируя при X = 0 его дополнительный код ( дополнение до 10 ), а при X = 1 - обратный код. ( дополнение до 9 ).

Операции умножения и деления могут выполняться над числами со знаком ( команды MULS, DIVS ) или без знака ( команды MULU, DIVU ). Один из 16 - разрядных операндов всегда размещается в регистре данных Dn. Получаемый при умножении 32 - разрядный результат также располагается в регистре Dn. При делении 32 - разрядное содержимое Dn является делимым, в этом же регистре размещается результат: частное в 16 младших разрядах, остаток в 16 старших разрядах.

Команды расширения EXT служат для преобразования байта в слово ( мнемокод EXT или EXT. W ) или слова в двойное слово ( мнемокод EXT. L ). Преобразование производится путем расширения знака, то - есть дублирования значения старшего ( знакового ) разряда байта или слова в старших разрядах слова или двойного слова. Таким образом при расширении сохраняется знак операнда и форма его представления - прямой или обратный код. Команда EXT. L обычно выполняется перед делением для получения из 16 - разрядного числа 32 - разрядного делимого с сохранением знака.

Команда очистки CLR устанавливает нулевое значение адресуемого байта, слова или двойного слова.

По результатам выполнения арифметических, логических и ряда других команд производится установка соответствующих значений признаков C, V, Z, N, X в младшем байте регистра SR ( рис.Изменение признаков после выполнения определенных команд указано в табл.1.6, где обозначено:

+ - установка признака по результатам операции;

- - сохранение предыдущего значения признака;

0 - установка нулевого значения признака;

? - неопределенное значение признака;

* - значение признака Z сохраняется при нулевом результате, устанавливается Z = 0 при ненулевом результате.

Табл.1.6. Изменение признаков после выполнения команд.

Значения признаков изменяются также при выполнении команд пересылок MOVE to SR, MOVE to CCR и логических операций ANDI, ORI, EORI to CCR или to SR. Команды, не указанные в табл.1.5, не меняют значения признаков.

1.3.3. Команды логических операций ( табл.Микропроцессор производит логические операции И, ИЛИ, Исключающее ИЛИ, которые выполняются с помощью команд AND, OR, EOR над одноименными разрядами операндов. Команды ANDI, ORI, EORI выполняют эти же операции с непосредственной адресацией операнда - источника. Команда NOT инвертирует значение каждого разряда операнда. По результатам выполнения команд производится установка признаков в соответствии с табл.1.6.

Табл.1.7. Команды логических операций

Особую роль играют варианты команд ANDI, ORI, EORI, использующие в качестве операнда - приемника содержимое регистра SR или его младшего байта CCR. При адресации к CCR эти команды позволяют изменять значения всех или части признаков X, N, Z, V, C путем задания соответствующих значений пяти младших разрядов непосредственного операнда Im. При адресации к SR эти команды могут изменять значения любых разрядов этого регистра, в том числе бита супервизора S. Поэтому команды ANDI, ORI, EORI, адресующие регистр SR, являются привилегированными.

1.3.4. Команды сдвига ( табл.1.8 ).

Микропроцессор осуществляет арифметические, логические и циклические сдвиги адресуемых операндов на один или несколько разрядов. Каждый вид сдвига имеет три варианта:

сдвиг содержимого регистра данных Dy, число разрядов сдвига Ns задается содержимым регистра Dy;

сдвиг содержимого регистра данных Dy, число разрядов сдвига Ns задается непосредственно в команде;

сдвиг содержимого ячейки памяти с адресом EA на один разряд.

Операнд, размещаемый в регистре Dy, может иметь разрядность B, W или L; операнд, размещаемый в памяти, имеет разрядность слова.

Табл.1.8. Команды сдвигов

Выполнение команд сдвигов иллюстрируется на рис.1.5, 1.6.

Выдвигаемые разряды поступают в качестве признаков C, X в регистр SR, поэтому после выполнения команд сдвигов эти признаки принимают значение последнего разряда, выдвинутого вправо или влево. Признаки N, Z устанавливаются в соответствии со знаком и значением ( равно или не равно нулю ) результата сдвига.

При арифметическом и логическом сдвиге влево с помощью команд ASL, LSL производится заполнение освобождающихся младших разрядов операнда нулями ( рис.1.5, а ). При арифметическом сдвиге вправо по команде ASR освобождающиеся старшие разряды операнда заполняются значением старшего ( знакового ) разряда исходного операнда ( рис.1.5, в ). Таким образом сохраняется значение знака и формы представления операнда ( прямой или дополнительный код ). При логическом сдвиге вправо по команде LSR старшие разряды операнда заполняются нулями ( рис.1.5, в ). Особенностью выполнения команд арифметических сдвигов является использование признака V для индикации изменения значения старшего ( знакового ) разряда операнда. Значение V = 1 устанавливается, если в процессе выполнения команды ASL произошло хотя бы одно изменение значения этого разряда. При выполнении команды ASR данный разряд не изменяется.

Рис.1.5. Выполнение арифметических ( а, б ) и логических

( а, в ) сдвигов.

Циклические сдвиги имеют два варианта ( рис.1.6, а, б и в, г ): без использования признака X ( команды ROL, ROR ) и с введением признака X в цепь циклического сдвига ( команды ROXL, ROXR ). В обоих вариантах последний выдвигаемый разряд сохраняется в качестве признака C.

Рис.1.6. Выполнение циклических сдвигов без использования

признака X ( а, б ) и с введением признака X в цепь сдвига ( в, г )

1.3.5. Команды сравнения и тестирования ( табл.Сравнение операндов производится путем их вычитания и установки значений признаков N, Z, V, C в соответствии с полученным результатом ( табл. При этом результат не сохраняется, и значения операндов не изменяются. Последующий анализ полученных значений признаков позволяет определить относительное значение ( >, <, = ) операндов со знаком или без знака ( табл.1Отдельные команды позволяют сравнивать операнд, адресуемый EA, с содержимым регистра данных ( команда CMP ), регистра адреса ( команда CMPA ), непосредственным операндом ( команда CMPI ). Команда CMPM используется при сравнении размещенных в памяти массивов операндов.

Табл.1.9. Команды сравнения и тестирования.

Команды тестирования TST, TAS являются однооперандными вариантами команд сравнения. При выполнении этих команд устанавливаются признаки N, Z в соответствии со знаком и значением ( равно или не равно нулю ) операнда, адресуемого EA.

Команда TAS, которая оперирует только с байтовыми операндами, производит после тестирования установку значения старшего бита операнда b7 = 1. Для выполнения этой команды используется неделимый цикл "чтение - модификация - запись", который не может быть прерван запросом прямого доступа к памяти, поступившим от других устройств системы. Команда TAS обычно используется в мультипроцессорных системах для организации совместного использования памяти с использованием с помощью "семафоров" - специальных битов, запрещающих или разрешающих различным микропроцессорам доступ к отдельным блокам общей памяти.

1.3.6. Команды битовых операций ( табл.1.10 ).

Эти команды производят установку значения признака Z в соответствии со значением тестируемого бита bn в операнде, адресуемом EA. Если операнд размещается в регистре данных, то он рассматривается как длинное слово, если в ячейке памяти - как байт. Номер тестируемого бита задается либо содержимым регистра Dn, либо непосредственным операндом Nb. Значение Z = 1 устанавливается, если тестируемый бит bn = 0, значение Z = 0, если bn = 1.

Табл.1.10. Команды битовых операций.

Команды данной группы реализуют разные варианты изменения тестируемого бита. Команда BTST сохраняет значение этого бита неизменным. Команда BSET после тестирования устанавливает значение bn = 1, а команда BCLR - значение bn = 0. Команда BCHG инвертирует значение бита bn после тестирования.

1.3.7.  Команды управления и установки байтов ( табл.1.11 ).

В эту группу входят команды условной и безусловной передачи управления программой, вызова подпрограмм, обработки прерываний, а также ряд специальных команд (останов и начальная установка процессора, организация стековых кадров и др.). Хотя команды условной установки байтов не относятся к командам управления, однако они рассматриваются в данном подразделе, так как используют те же условия установки, что и команды условного ветвления.

Табл.1.11. Команды управления и установки байтов.

Команда безусловного перехода JMP загружает в программный счетчик PC содержимое ячейки памяти, адресуемой EA. Это содержимое являтся адресом команды, которой передается управление программой. Безусловный переход осуществляется также командой BRA, которая отличается от JMP способом формирования нового содержимого программного счетчика. Оно образуется суммированием текущего содержимого PC ( адреса следующей команды программы ) со смещением Ds, заданным в команде. Таким образом реализуется относительная адресация новой команды. Величина Ds, содержащая до 16 разрядов, задается числом со знаком, поэтому новое значение PC может быть больше или меньше текущего значения. При программировании на языке ассемблера вместо значения Ds можно указывать символическое обозначение адреса перехода <label>. В этом случае вычисление значения Ds производится программой - ассемблером. Следует отметить, что величина Ds, содержащая не более 8 двоичных разрядов ( короткое смещение ), размещается в младшем байте первого слова первого слова команды, а содержащая большее число разрядов ( длинное смещение ) задается отдельным словом команды. Поэтому команды BRA, BSR, Bcc, DBcc, Scc, использующие короткое смещение, занимают меньше памяти и выполняются быстрее, чем такие же команды с длинным смещением.

Команда вызова подпрограммы JSR загружает в PC из ячейки памяти адрес первой команды вызываемой подпрограммы, поместив перед этим текущее содержимое PC ( адрес следующей команды программы ) в стек. Вызов подпрограммы выполняется также командой BSR, которая использует относительную адресацию, аналогично команде BRA. Возврат к вызывавшей программе после выполнения подпрограммы осуществляется командой RTS, которая возвращает из стека в PC его текущее значение, обеспечивая переход к выполнению следующей команды программы. В большинстве случаев первая команда вызываемой подпрограммы производит загрузку в стек текущего значения регистра SR, чтобы сохранить установленные значения признаков. В этих случаях при возврате из подпрограммы следует использовать команду RTR, которая восстанавливает текущие значения байта CCR ( признаки X, N, Z, V, C ) и PC.

Команды условных ветвлений Bcc имеют 14 вариантов, отличающихся видом условия ( табл.1Если соответствующее условие cc выполняется, то происходит переход к команде, адрес которой формируется относительным способом, как в командах BRA, BSR. В противном случае выполняется следующая команда программы.

Табл.1.12. Виды условий cc

В качестве условий ветвления cc используются 14 различных значений признаков N, Z, V, C и их комбинаций. Во многих случаях условием служит результат сравнения двух операндов, выполняемого с помощью команд CMP, CMPA, CMPI, CMPM. Равенство операндов определяется по значению признака Z: условия EQ, NE. Если сравниваются числа без знака, то их относительные значения: выше ( .> ), выше или равно ( >= ), ниже ( < ), ниже или равно ( <= ), определяются условиями HI, HS, LO, LS. При этом в качестве мнемокодов условий "выше или равно" ( HS ) и "ниже" ( LO ) можно использовать, соответственно, CC и CS. Если сравниваются числа со знаком, то их относительные значения определяются условиями GT, GE, LT, LE. Остальные условия определяются знаком результата ( PL, MI ) и наличием или отсутствием переполнения ( VS, VC ).

При записи на языке ассемблера мнемокод соответствующего условия вводится в мнемокод команды вместо символа cc. Например, B + EQ = BEQ - мнемокод команды ветвления при равенстве операндов, B + MI = BMI - мнемокод команды ветвления при отрицательном результата. Условие выполняется, если значение cc, определяемое данными в табл.1.11 логическими выражениями, равно 1.

В табл.1.12 содержатся также условия безусловного ветвления ( T ) и выполнения следующей команды ( F ), которые используются в командах DBcc, Scc.

Команда DBcc служит для организации программных циклов. Указанный в команде регистр Dn является счетчиком цикла. При выполнении команды DBcc сначала проверяется выполнение заданного условия. Если условие выполняется, то микропроцессор выбирает следующую команду программы ( условный выход из цикла ). Если условие не выполняется, то производится декремент содержимого регистра Dn. Если при этом содержимое Dn оказывается равным -1, то также выбирается следующая команда ( завершение цикла ). Если содержимое Dn не равно -1, то выполняется переход к команде с адресом ( PC + Ds ), являющейся началом цикла. Данная команда допускает использование любых условий, указанных в табл.1.12. При этом команда DBF обеспечивает безусловное выполнение заданного числа циклов, а команда DBT - безусловный выход из цикла.

Команда прерывания TRAP заносит в стек супервизора содержимое регистров SR, PC, а затем вводит в PC вектор исключения Ve - адрес первой команды подпрограммы обслуживания исключения. Значение Ve выбирается из размещенной в памяти таблицы векторов исключения ( см. раздел Команда TRAP позволяет выбирать один из шестнадцати возможных векторов, номер которого Nt = 0...15 задается в команде. Таким образом, данная команда позволяет использовать до 16 различных подпрограмм обслуживания. Команда прерывания при переполнении TRAPV выполняет процедуру, аналогичную TRAP, если установлено значение признака переполнения V = 1. Эта команда обращается к фиксированному вектору исключения Ve ( табл.1.13 ), который является входом в подпрограмму обслуживания при возникновении переполнения. Команда ILLEGAL позволяет обратиться к подпрограмме обслуживания, вызываемой при поступлении неправильного кода команды. Возвращение из подпрограммы обслуживания исключений к вызвавшей ее программе выполняется командой RTE. Данная команда является привилегированной, так как производит обратную загрузку содержимого SR. Поэтому возвращение из подпрограмм обслуживания прерываний может выполняться только в режиме супервизора.

Команда NOP производит переход к следующей команде программы без выполнения каких - либо операций. Привилегированная команда STOP выполняет загрузку в регистр SR нового содержимого, заданного словом Ws, после чего процессор останавливает свою работу. Возобновление работы происходит при поступлении внешнего запроса прерывания или сигнала установки начального состояния RESET#. Команда RESET вызывает формирование выходного сигнала RESET# = 0 для начальной установки других устройств системы. При этом состояние микропроцессора не изменяется, и он продолжает выполнение программы. Реализация прерываний описана в разделе 1.4.

Ряд специальных команд упрощает выполнение некоторых часто используемых процедур. Команда CHK проверяет. находится ли содержимое регистра Dn в диапазоне от 0 до верхней границы, заданной содержимым ячейки памяти, адресуемой EA. Если содержимое Dn выходит за пределы этого диапазона, то выполняется прерывание ( см. раздел 1.4 ) с обращением к соответствующей подпрограмме обслуживания. Команда LINK обеспечивает модификацию содержимого указателя стека SP на заданную в команде величину Ds с сохранением его исходного содержимого, которое может быть восстановлено с помощью команды UNLK. Регистр An используется при этом в качестве регистра связи с сохранением его содержимого в стеке. Таким образом реализуется совместное использование стека разными процедурами.

Команды установки байтов Scc производят при выполнении заданного условия cc установку 1 во всех разрядов байта, адресованного EA. Если условие не выполняется, то во всех разрядах байта устанавливается 0. Данные команды могут использовать все виды условий, указанные в табл.1.12. При этом команда ST выполняет безусловную установку всех разрядов в 1, а команда SF - безусловную установку всех разрядов в 0.

1.4. Исключения и прерывания

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

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

При обслуживании исключений микропроцессор автоматически переходит в режим супервизора, и в регистре состояния SR устанавливается значение бита S = 1. Это позволяет подпрограммам обслуживания использовать полный набор ресурсов микропроцессора.

1.4.1. Виды исключений

Исключения могут быть программными, которые возникают при выполнении определенных команд, или аппаратными, которые вызываются внешними запросами или внутренними сигналами, формируемыми при возникновении ряда ситуаций. Причинами программных исключений являются:

- команды RESET, TRAP, TRAPV ( при значении признака V =1 ), CHK ( при выходе операнда за границы заданного диапазона );

- привилегированные команды MOVE to SR, MOVE USP, ANDI to SR, ORI to SR, EORI to SR, RTE, RESET, STOP, выполняемые в режиме пользователя ( нарушение привилегий );

- команды DIVS, DIVU, выполняемые при нулевом значении делителя (деление на нуль);

- выборка команды, содержащей неправильный код операции (не соответствующий набору кодов, используемых микропроцессором );

- установка значения признака трассировки T = 1; в этом случае микропроцессор работает в пошаговом режиме, выполняя после каждой команды подпрограмму обслуживания, которая выводит на экран дисплея содержимое определенных регистров и ячеек памяти и позволяет изменять его в процессе отладки программы;

- выборка команды, содержащей 1111 или 1010 в поле кода операции ( старшие четыре разряда командного слова, рис.1.3 ); эти коды вызывают прерывание с переходом к выполнению подпрограмм эмуляции: код 1111 обеспечивает переход к подпрограмме эмуляции команд арифметического сопроцессора, функционирующего совместно с микропроцессором MC68020 ( сопроцессоры типа MC68881, MC68882 ) или входящего в состав микропроцессоров MC68040, 50, 60, код 1010 обеспечивает переход к подпрограмме, эмулирующей какие - либо команды, не входящие в набор команд микропроцессора MC6800;.

- обращение к команде по нечетному адресу; все команды содержат целое число слов и размещаются только по четным адресам, а нечетный адрес является неправильным ( см. раздел 1.2 ).

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

- поступление внешнего сигнала сброса RESET# ;

- поступление внешнего сигнала ошибки обращения к шине BERR# ;

- поступление внешних запросов прерывания, которые инициируют подачу на выводы IPL2 - 0# кода, определяющего выбор необходимой подпрограммы обслуживания;

- отсутствие сигналов подтверждения DTACK# или VPA#, которые при выполнении цикла прерывания должны поступить от запросивших прерывание устройств ( ложное прерывание );

- поступление запроса от устройства, которое не может передать в микропроцессор свой вектор прерывания, так оно предварительно не было инициализировано (неинициализированное прерывание ).

1.4.2. Обслуживание исключений

Во всех этих ситуациях микропроцессор заносит в стек текущее содержимое программного счетчика PC, которое является адресом возврата к прерванной программе после выполнения подпрограммы обслуживания, и регистра состояний SR. Затем в PC загружается из памяти вектор исключения Ve - начальный адрес соответствующей подпрограммы обслуживания. Эти вектора являются входами в подпрограммы обслуживания и хранятся в таблице исключений, которая занимает 1 Кбайт памяти ( позиции $000 - $3FF адресного пространства ). Для загрузки PC требуется выбрать два слова ( из них загружаются в PC три байта ), поэтому в принципе таблица может содержать адреса входов для 256 подпрограмм обслуживания. Каждое исключение имеет свой номер Ne, который принимает значения от 0 до 255 (табл.1Номер, сдвинутый на два разряда влево, дает адрес вектора Av = 4Ne (адрес ячейки памяти в таблице исключений, которая содержит вектор Ve соответствующей подпрограммы ).

Если исключение вызвано ошибкой шины или формированием неправильного адреса, то в стек, помимо содержимого PC и SR, заносятся значение адреса, вызвавшего данное исключение, код

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

Любое исключение вызывает установку значения бита S = 1 в регистре состояния SR. При этом микропроцессор переходит к выполнению подпрограммы обслуживания в режиме супервизора. После ее завершения возврат к прерванной программе может осуществляться командой RTE или RTS. Привилегированная команда RTE, которая выполняется только в режиме супервизора, восстаналивает из стека содержимое PC и SR. Если при выполнении подпрограммы обслуживания микропроцессор перешел в режим пользователя, то для возвращения к прерванной программе следует использовать команду RTS, которая восстанавливает содержимое PC и регистра признаков CCR ( младший байт SR ).

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

Рассмотрим особенности возникновения и обслуживания некоторых видов исключений ( табл.1.13 ).

Установка начального состояния микропроцессорной системы производится программно - командой RESET, выполняемой в режиме супервизора, или аппаратно - внешним сигналом системного сброса RESET#. При этом содержимое регистров адреса и данных принимает нулевое значение, в регистре SR устанавливается значение признака S = 1 ( режим супервизора ), остальные признаки имеют значение 0. Из ячейки памяти с адресом $000 производится загрузка исходного значения SSP - указателя стека супервизора, а из ячейки с адресом $004 - исходного содержимого PC - начальный адрес подпрограммы инициализации системы, выполняющей установку требуемых начальных значений содержимого SR, регистров адреса и данных, а также загрузку содержимого регистров ( инициализацию ) других устройств. Данное исключение использует две ячейки памяти и, соответственно, занимает два вектора в таблице прерываний ( табл.1.13 ).

Сигнал ошибки обращения к шине BERR# обычно формируется специальным устройством, если в данном цикле на шину A поступает адрес неподключенного раздела памяти или внешнего устройства. Этот сигнал может поступать также от сторожевого таймера, если в цикле записи или чтения в течении определенного времени не поступает сигнал подтверждения гоовности к обмену DTACK# от памяти или внешнего устройства. Подпрограмма обслуживания в этом случае должна информировать о типе ошибки и вызвавших ее адресе и команде. Если при обслуживании данного исключения снова поступит сигнал ошибки BERR# = 0 ( двойная ошибка обращения к шине ), то микропроцессор останавливается, переводит в отключенное состояние выводы A23-1, D15-0, устанавливает неактивное значение сигналов на управляющих выходах и формирует выходной сигнал останова HALT# = 0 ( см. раздел 1.5 ).

Код эмуляции 1010 используется для программной реализации каких - либо процедур или команд, не входящих в набор команд микропроцессора MC68000. При выборке команды с кодом операции 1010 подпрограмма обслуживания анализирует другие разряды слова и в зависимости от их значений выполняет определенную последовательность команд. Таким образом, команды с данным кодом операции выполняют функции макрокоманд, вводимых пользователем для расширения возможностей микропроцессора. Они также облегчают реализацию макроассемблеров.

Код эмуляции 1111 используется для программной реализации набора команд арифметического сопроцессора. При выборке команды с кодом операции 1111 должна запускаться специализированная подпрограмма - эмулятор сопроцессора. Таким образом можно отлаживать и выполнять с помощью микропроцессора MC68000 программы, использующие команды сопроцессора, подключаемого к микропроцессору MC68020 или входящего в состав микропроцессоров более поздних моделей семейства.

Исключения типа "неинициализированное прерывание", "ложное прерывание", а также векторные и автовекторные прерывания возникают при обслуживании внешних запросов, рассмотренных ниже.

Команда TRAP вызывает один из 16 видов исключения в зависимости от указанного в команде значения номера Nt ( см. раздел Соответствующие номера исключения Ne = 32 + Nt имеют значения от 32 до 47, а формируемые адреса векторов Av находятся в диапазоне $080 - $1BF ( табл.1Эта команда используется для задания контрольных точек останова при отладке программы, а также для запуска подпрограмм обслуживания или инициализации различных устройств, используемых совместно с микропроцессором.

Ряд номеров ( Ne =,,и соответствующих векторов Ve в таблице исключений зарезервированы для использования в последующих моделях микропроцессоров.

Микропроцессор может обслуживать до семи запросов прерывания от внешних устройств, которые должны подать соответствующие сигналы IRQ1# - IRQ7# на вход специальной схемы - приоритетного шифратора PCD ( рис.1Для каждого запроса установлен приоритет обслуживания: высший - Li = 7 для запроса на входе IRQ7, низший - Li = 1 для запроса на входе IRQ1. Запрос прерывания инициируется при поступлении низкого потенциала ( логического "0" ) на соответствующий вход IRQi#, при этом на выходах PCD формируется трехразрядный код IPL2 - 0#, соответствующий номеру поступившего запроса, имеющего максимальный приоритет ( табл.1Вход IRQ0 всегда подключается к низкому потенциалу, и при отсутствии запросов на других входах PCD формирует код IPL# = 111, не вызывающий прерывания программы. При других значениях кода IPL# ( наличие запросов прерывания ) микропроцессор сравнивает уровень приоритета поступившего запроса со значением данной в регистре SR маски I2 - 0, разрешающей или запрещающей его обслуживание.

Табл.1.14. Кодировка приоритета запроса прерывания и

маскирование их обслуживания

Поле маски I2 - 0 в регистре SR ( рис.1.2 ) определяет уровень приоритета, начиная с которого выполняется обслуживание запросов ( табл.1Таким образом, установка определенного значения маски I2 - 0, выполняемая с помощью команд MOVE to SR, ANDI to SR, ORI to SR, EORI to SR, запрещает или разрешает прерывание программы запросами с соответствующими уровнями приоритета. Так как эти команды являются привилегированными, то разрешение и запрещение прерываний по внешним запросам производится только в режиме супервизора. Отметим, что запрос с наивысшим приоритетом Li = 7, поступающий на вход IRQ7, является немаскируемым и может использоваться для реализации аварийных прерываний, например, при отключении питания.

Адресация подпрограмм обслуживания запросов IRQ1 - 7 может производиться двумя способами. При автовекторной адресации каждому запросу с уровнем Li соответствует номер исключения Ne = 24 + Li, в соответствии с которым формируется один из семи адресов Av: от $064 до $07C ( табл.1При векторной адресации внешнее устройство, запросившее прерывание, формирует и передает в микропроцессор в цикле прерывания 8 - разрядное значение номера Ne. Таким способом могут быть получены значения Ne до 255 и обеспечивается обращение к подпрограммам c адресами векторов Av до $3FF ( табл.1.13 ).

Рассмотрим реализацию автовекторных и векторных прерываний подробнее. При поступлении запроса IRQi# с приоритетом, разрешенным для обслуживания, микропроцессор завершает выполнение текущей команды и выполняет специальный цикл подтверждения прерывания. В течении этого цикла микропроцессор выдает на выходы FC2 - 0, указывающие вид выполняемого цикла ( см. раздел 1.5 ), код 111, при поступлении которого специальная схема формирует сигнал подтверждения прерывания IACK# ( рис.1На три младших разряда адреса A3 - 1 выдается номер обслуживаемого запроса, в соответствии с которым дешифратор адреса ADC разрешает прохождение сигнала IACK# к устройству, от которого поступил обслуживаемый запрос.

При выполнении автовекторного прерывания запросившее устройство, получив сигнал IACK#, должно подтвердить свой запрос путем подачи низкого потенциала на вход VPA# микропроцессора. После этого микропроцессор формирует адрес вектора исключения, имеющий значения в диапазоне Av = $064 - $07C в соответствии с уровнем приоритета обслуживаемого запроса Li ( табл.1.13 ).

При выполнении векторного прерывания запросившее устройство, получив сигнал IACK#, выдает на младшие разряды шины данных D7 - 0 свой номер исключения Ne. Затем оно подтверждает выдачу номера подачей низкого потенциала на вход DTACK# микропроцессора. После получения этого подтверждения микропроцессор считывает поступившее значение Ne и в соответствии с ним формирует адрес вектора исключения Av = $100 - $3FF ( табл.1.13 ).

Если в цикле подтверждения прерывания от запросившего устройства не поступает сигнал подтверждения запроса VPA# ( при автовекторном прерывании ) или DTACK# ( при векторном прерывании ), то реализуется исключение "ложное прерывание" с обращением к подпрограмме обслуживания с вектором Ve = $060 (табл.1.13 ).

Внешние устройства, вызывающие векторное прерывание, имеют специальный векторный регистр IVR, в который при инициализации вводится необходимое значение номера Ne. В начальном состоянии до инициализации содержимое этого регистра должно иметь значение $0F. Если данное устройство не инициализировано ( в IVR не записано требуемое значение Ne ), то при векторном прерывании оно будет выдавать на шину данных номер Ne = 15, вызывающий исключение "неинициализированное прерывание" с обращением к подпрограмме обслуживания с адресом вектора Ve = $03C ( табл.1.13 ).

1.5. Реализация микропроцессорных систем

При реализации цифровой системы микропроцессор функционирует совместно с рядом других устройств, взаимодействие с которыми обеспечивается с помощью специальных управляющих сигналов. Эти сигналы поступают на внешние выводы микропроцессора вместе с адресами и данными. Набор сигналов, принимаемых и выдаваемых микропроцессором, приведен на рис.1.7.

1.5.1. Назначение внешних выводов и обмен

с внешними устройствами

На шину адреса поступают 23 - разрядные ( четные ) значения адреса A23-1, обеспечивая словарную адресацию выбираемых команд и данных ( см. раздел Команды и данные передаются по 16 - разрядной шине данных D1Управляющие сигналы делятся на несколько групп в соответствии с их функциональным назначением ( рис.Сигналы, активное состояние которых задается низким уровнем потенциала на соответствующем выводе, обозначены символом #.

Рис.1.7. Назначение внешних выводов микропроцессора MC6800

Для управления обменом используются следующие сигналы:

AS# - адресный строб, который принимает активное значение AS# = 0 при поступлении адреса на шину A23 - 1 и сохраняет это значение до окончания цикла обмена;

R/W# - сигнал, определяющий направление передачи данных по шине D15 - 0: ввод в микропроцессор ( чтение ) при R/W = 1, вывод из микропроцессора ( запись ) при R/W = 0;

UDS# ( передача старшего байта ), LDS# ( передача младшего байта ) - сигналы, определяющие разрядность передаваемых данных:

младший байт при UDS# = 1, LDS# = 0, слово при UDS# = LDS# = 0;

DTACK# - входной сигнал подтверждения готовности к обмену,

поступающий от памяти или периферийных устройств.

Синхронизация обмена осуществляется поступающими на вход CLK тактовыми импульсами с частотой Ft, период которых задает длительность такта машинного времени Tc = 1 / Ft.

В каждом цикле обмена микропроцессор формирует 3 - разрядный код, указывающий тип выполняемого цикла, который выдается на выводы FC2 - 0 микропроцессора ( табл.1Дешифрация этого кода позволяет разделить банки данных для супервизора и пользователя, сформировать сигнал подтверждения INTA# при переходе к обслуживанию прерывания ( см. раздел 1.4 ) или идентифицировать текущее состояние микропроцессора в ходе отладки цифровой системы.

Табл.1.15. Типы выполняемых циклов

Временные диаграммы изменения основных сигналов при выполнении циклов записи и считывания показаны на рис.1.8. Каждый цикл занимает четыре такта S0 - S3. В первом такте S0 микропроцессор выдает требуемое значение адреса A23-1 и код типа цикла FC2-0. Если в предыдущем цикле производилась запись ( сигнал R/W = 0 ), то в этом цикле устанавливается значение R/W = 1. Во втором такте S1 устанавливается активное значение адресного строба AS# = 0, которое сохраняется до завершения цикла в такте S3. При чтении в такте S1 выдаются необходимые значения сигналов LDS#, UDS#, а при записи устанавливается значение R/W = 0 и на шину D15-0 из микропроцессора поступают выводимые данные. В третьем такте S2 проверяется значение сигнала подтверждения готовности DTACK#, поступающего от устройства, с которым производится обмен. В цикле записи в этом же такте устанавливаются значения сигналов LDS#, UDS#. Если готовность подтверждается сигналом DTACK# = 0, то в четвертом такте S3 выполняется ввод данных в микропроцессор ( в цикле чтения ) или запись выводимых микропроцессором данных в адресованную ячейку памяти или регистр периферийного устройства ( в цикле записи ). При неготовности адресованных устройств к обмену (сигнал DTACK# = 1) после такта S2 выполняются циклы ожидания до поступления сигнала DTACK# = 0. При этом сохраняются значения всех сигналов, установленных в предыдущих тактах. Таким образом реальная длительность циклов обмена зависит от готовности адресованных устройств.

Рис.1.8. Временные диаграммы сигналов при выполнении

циклов записи и считывания

На рис. 1.9 показан пример подключения к микропроцессору микросхем памяти, на которых реализованы оперативное ( RAM ) и постоянное ( ROM ) запоминающие устройства. Используемый объем адресуемой памяти составляет 1 Мбайт, поэтому адресация производится разрядами A19 - 1 шины адреса. Сигнала UDS#, LDS# служат для раздельной адресации банков младших и старших байтов. Адресуемая память делится на 16 сегментов по 64 Кбайт, которые выбираются выходными сигналами DO15-0 дешифратора адреса ( ДША ). При этом постоянное запоминающее устройство ( ПЗУ, либо программируемое или репрограммируемое ПЗУ ) занимает сегмент 14, выбираемый сигналом DO14, а сегмент 16, выбираемый сигналом DO15, используется для адресации внешних устройств. Оперативное запоминающее устройство реализовано на микросхемах статической памяти емкостью 32 К х 8 бит, постоянное запоминающее устройство на микросхемах емкостью 16К х 8 бит. Если время выборки используемых микросхем не превышает длительность цикла микропроцессора, то при обращении к памяти можно поддерживать постоянный сигнал готовности DTACK# = 0.

Рис.1.9. Подключение к микропроцессору MC68000 оперативной и постоянной памяти.

Если поступившая команда должна произвести обработку введенных данных, то соответствующая операция выполняется в течении тактов S0, S1 следующего цикла. Такое наложение циклов и команд обеспечивает повышение производительности за счет параллельного выполнения отдельных этапов реализации последовательно выбираемых команд.

Группа сигналов управления обменом с медленными периферийными устройствами позволяет подключать к микропроцессору некоторые ранние модели устройств с относительно низким быстродействием. На выход E поступают тактовые сигналы для этих устройств, имеющие в 10 раз меньшую частоту, чем сигналы на входе CLK. Адрес A23 -1 и сигналы AS#, R/W формируются при этом как в обычном варианте обмена. Адресованное медленное устройство должно подать сигнал готовности к обмену VPA# = 0, в ответ на который микропроцессор устанавливает сигнал подтверждения медленного обмена VMA# = 0, после чего осуществляется пересылка данных с увеличенным временем ввода и вывода. Минимальная длительность цикла обмена в этом случае составляет 10 тактов.

Группа системных сигналов включает сигналы сброса RESET#, останова HALT# и ошибки шины BERR#. Поступление внешнего сигнала RESET# = 0 вызывает установку начального состояния микропроцессора, как описано в разделе 1.4. Обычно этот сигнал формируется при включении питания или нажатии клавиши RESET с помощью схемы, показанной на рис.1.13. При выполнении привилегированной команды RESET микропроцессор выдает сигнал RESET# = 0, устанавливающий в исходное состояние другие устройства системы.

Входной сигнал HALT# = 0 вызывает останов выполнения текущей программы, перевод выводов A23-1, D15-0 в отключенное состояние, а управляющих выходов - в неактивное состояние. Аналогичным образом реагирует микропроцессор на возникновение двойной ошибки шины при обработке исключения с вектором 2 ( см. раздел В этом случае он формирует выходной сигнал HALT#= 0. Выход из состояния останова происходит при поступлении внешних сигналов сброса RESET# = 0 или прерывания.

Входной сигнал ошибки обращения к шине BERR# = 0 формируется специальной схемой - контроллером шины, которая выявляет такие ошибки, как выдачу адреса, соответствующего неподключенному устройству или разделу памяти, длительное отсутствие сигнала готовности DTACK# = 0 и другие возможные нарушения обмена. Например, в схеме на рис. 1.8 сигнал BERR# = 0 формируется при обращении к адресам, имеющим значения в диапазоне $100000 - $FFFFFF, которые соответствуют неиспользуемым сегментам памяти. Поступление сигнала ошибки вызывает исключение с номером 2 ( см. раздел 1.4 ).

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

BR# - входной сигнал запроса другого устройства на захват шины; при поступлении сигнала BR# = 0 микропроцессор завершает выполнение текущего цикла обмена, останавливает выполнение команд и переводит выводы A23-1, D15-0 в отключенное состояние, а управляющие выходы в неактивное состояние;

BG# - выходной сигнал разрешения захвата, который принимает значение BG# = 0 после отключения микропроцессора от шины;

BGACK# - входной сигнал подтверждения захвата, который формируется другим устройством после получения сигнала разрешения BG# и перехода в режим управления шиной; при этом устройство выдает сигнал BGACK# = 0 и снимает запрос на захват, устанавливая значение BR# = 1.

Когда внешнее устройство выходит из режима управления шиной, оно устанавливает значение сигнала BGACK# = 1, информируя микропроцессор об окончании захвата. По этому сигналу микропроцессор возобновляет выполнение команд и формирование сигналов управления обменом.

Если захват шин служит для реализации прямого доступа к памяти, то в систему включается специальное устройство - контроллер прямого доступа, которое в определенные моменты времени берет на себя управление шиной, обмениваясь при этом сигналами BR#, BG#, BGACK# с микропроцессором. Эти сигналы могут также использоваться для организации совместной работы нескольких микропроцессоров в мультипроцессорной системе.

Для реализации цифровых систем, кроме микропроцессора и памяти, обычно используются также периферийные устройства, обеспечивающие различные способы связи системы с внешними устройствами, функционирование системы в реальном масштабе времени. Эти устройства выпускаются в виде специализированных микросхем, содержащих в своем составе порты для параллельного и последовательного обмена данными, таймеры, ведущие отсчет временных интервалов, схемы, осуществляющие требуемый режим обслуживания поступающих запросов прерывания. Наиболее часто используются выпускаемые корпорацией MOTOROLA микросхемы семейства M68000: параллельный интерфейс - таймер ( PIT ) типа MC68230 и многофункциональное интерфейсное устройство ( MFP ) типа MC68901.

Система команд:

Мнемоника Функция команды

ADD Сложение

SUB Вычитание

NEG Инверсия(изменение знака)

ADDX Сложение с расширением

SUBX Вычитание с расширением

NEGX Инверсия с расширением

ABCD Десятичное сложение с расширением

SBCD Десятичное вычитание с расширением

NBCD Десятичная инверсия с расширением

MULS Умножение со знаком

MULU Умножение без знака

DIVS Деление со знаком

DIVU Деление без знака

EXT Расширение знака

CLR Очистка операнда

CMP Сравнение

TST Проверка

TAS Проверка и установка

MOVE Пересылка операнда

MOVEP Пересылка данных с периферийного устройства

MOVEM Пересылка группы регистров

MOVEQ Быстрая пересылка

SWAP Обмен половин регистра

EXG Обмен регистров

LEA Загрузка действительного адреса

PEA Сохранение в стеке действительного адреса

LINK Связь стека

UNLK Отцепка стека

AND Логическое И

OR Логическое ИЛИ

EOR Логическое Исключающее ИЛИ

NOT Логическое НЕ (инверсия)

ASL Арифметический сдвиг влево

ASR Арифметический сдвиг вправо

LSL Логический сдвиг влево

LSR Логический сдвиг вправо

ROL Циклический сдвиг влево без переноса

ROR Циклический сдвиг вправо без переноса

ROXL Циклический сдвиг влево с переносом

ROXR Циклический сдвиг вправо с переносом

BCLR Проверка и очистка бита

BSET Проверка и установка бита

BCHG Проверка и изменение бита

BTST Проверка бита

JMP Прыжок

BRA Безусловный переход

JSR Переход к подпрограмме

BSR Переход к подпрограмме

RTS Возврат из подпрограммы

RTR Возврат из подпрограммы

BCC Переход, если нет переноса

BCS Переход, если есть перенос

BEQ Переход, если равно

BF Переход, если не истинно

BGE Переход, если больше или равно

BGT Переход, если больше

BHI Переход, если выше

BLE Переход, если меньше или равно

BLS Переход, если не выше

BLT Переход, если меньше

BMI Переход, если минус

BNE Переход, если не равно

BPL Переход, если плюс

BT Переход, если истинно

BVC Переход, если нет переполнения

BVS Переход, если есть переполнение

DB усл. Вычитание единицы из регистра данных и переход, если выполняется условие (всего 16 условий, см. BCC:BVC)

S усл. Установить при выполнении условия (всего 16 условий, см. BCC:BVC)

TRAP Прерывание

TRAPV Прерывание при переполнении

CHK Проверить регистр на границах диапазона

ANDI Логическое И с регистром состояния

ORI Логическое ИЛИ с регистром состояния

EORI Исключающее ИЛИ с регистром состояния

RESET Сброс внешних устройств

STOP Остановка работы

RTE Возврат из исключительной ситуации