СТ6 и СТ7

Линейка 8-битных микроконтроллеров от STMicroelectronics
Микроконтроллер ST62E40, основанный на архитектуре ST6

ST6 и ST7 — это линейки 8-битных микроконтроллеров от STMicroelectronics . Они обычно используются в небольших встраиваемых приложениях, таких как стиральные машины .

Хотя они используют схожие периферийные устройства и продаются как часть одной и той же линейки продуктов, [1] [2] эти две архитектуры на самом деле совершенно разные.

Оба имеют 8-битный аккумулятор, используемый для большинства операций, плюс два 8-битных индексных регистра (X и Y), используемых для адресации памяти. Также оба имеют 8-битные инструкции, за которыми следует до 2 байт операндов, и оба поддерживают манипуляции и ветвления на отдельных битах памяти.

На этом сходство заканчивается.

ST6 — это архитектура Гарварда с 8-битным (256 байт) адресным пространством данных и отдельным 12-битным (4096 байт) программным пространством. Операнды всегда имеют длину 1 байт, а некоторые инструкции поддерживают два операнда, например «переместить 8-битный немедленный адрес в 8-битный адрес памяти». Вызовы подпрограмм выполняются с использованием отдельного аппаратного стека. Регистры данных (но не счетчик программ или флаги) отображаются в памяти.

Режимы адресации ST6 ограничены непосредственным 8-битным абсолютным адресом памяти и косвенными режимами регистра (X) и (Y).

ST7 — это архитектура фон Неймана с одним 16-битным (64 КБ) адресным пространством. Первые 256 байт ОЗУ ( нулевая страница ) обладают дополнительной гибкостью. Нет двухоперандных инструкций, за исключением «тестового бита и перехода». Его регистры не отображены в память, и он использует ОЗУ общего назначения (плюс регистр указателя стека ) для вызовов подпрограмм.

ST7 поддерживает широкий спектр режимов адресации, включая базовый+индексный и двойной косвенный.

Три представителя семейства микроконтроллеров ST6: ST62E01, ST62E20, ST62E25

Архитектура ST6

ST6 имеет 64 байта ОЗУ и 4096 байт ПЗУ программ . Доступ к большим объемам осуществляется переключением банков в нижней части 2К ПЗУ.

Фактически адресное пространство ОЗУ составляет 256 байт, разделенных следующим образом:

  • 0–63: Не реализовано
  • 64–127: Окно переключения банков в ПЗУ программ и СППЗУ данных .
  • 128–191: ОЗУ общего назначения
  • 192–255: Регистры управления периферийными устройствами (порты GPIO, таймеры и т. д.) Аккумулятор отображается по адресу 255, но чаще адресуется неявно.

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

Первые четыре ячейки ОЗУ общего назначения также известны как регистры X, Y, V и W, и некоторые инструкции могут обращаться к ним, используя специальные режимы короткой адресации. Регистры X и Y служат индексными регистрами и могут использовать режимы косвенной адресации (X)и (Y).

Набор инструкций состоит из одного байта кода операции, за которым следуют до двух однобайтовых операндов. Набор инструкций можно обобщить следующим образом:

Набор инструкций семейства ST6 [3]
76543210б2б3МнемоническийСЗОписание
компенсироватьОПЦ0Условные переходы (5-битные, относительно ПК)
компенсировать000адрес JRNZПерейти к ПК + simm5, если Z == 0
компенсировать100адрес JRZПерейти к ПК + simm5, если Z == 1
компенсировать010адрес JRNCПерейти к ПК + simm5, если C == 0
компенсировать110адрес JRCПерейти к ПК + simm5, если C == 1
имм4с001имм8Безусловные переходы (12-битные абсолютные)
имм40001имм8ЗВОНИТЕ imm12Нажмите ПК, перейдите к 12-битному адресу
имм41001имм8JP imm12Перейти к 12-битному адресу
00101(сдержанный)
регс1с101Операции регистра (по X, Y, V или W)
рег010101Рег. INCЗРегистр приращения. Z установлен, C — нет.
рег110101LD A, рег.ЗA := {X, Y, V или W}
рег011101DEC рег.ЗДекрементный регистр. Z установлен, C — нет.
рег111101LD регЗ{X, Y, V или W} := A
код операции01101Разные операции
00001101адресимм8LDI-адрес, imm8Установить ОЗУ на 8-битное непосредственное значение
10001101(сдержанный)
01001101РЕТИВозврат из прерывания. Вскрытие ПК, восстановление флагов.
11001101РЕТВозврат из подпрограммы. Извлечение ПК из аппаратного стека.
00101101КОМ АЗСДополнение: C := msbit(A); A := ~A
10101101РЛК АСА := А + А + С
01101101ОСТАНАВЛИВАТЬСЯОстановить процессор, часы, большинство периферийных устройств до следующего прерывания
11101101ЖДАТЬОстановить процессор до следующего прерывания; тактирование продолжается
кусочекОПЦ011адрес?Битовые операции (только абсолютный адрес)
кусочек00011источникsimm8JRR  бит , источник , адресСC := src.bit; переход к PC+simm8 в случае сброса (очистки)
кусочек10011источникsimm8JRS бит , источник , адресСC := src.bit; перейти к PC+simm8, если установлено
кусочек01011летнее времяRES бит , dstСброс (установить на 0) dst.bit
кусочек11011летнее времяSET бит , dstУстановить (на 1) dst.bit
код операцииданные111?Операции АЛУ с ОЗУ или непосредственные
код операции00111(Х)Операнд — (X)
код операции01111(Й)Операнд — (Y)
код операции10111имм8имм8Операнд — 8-битный непосредственный ( только исходный код )
код операции11111адресадресОперанд — 8-битный адрес ОЗУ.
000источник111?LD A, источникЗA := источник
100летнее время111?ЛД дстЗdst  := A ( немедленно запрещено )
010источник111?ДОБАВИТЬ А, источникЗСА := А + ист.
110источник111?SUB A, источникЗСА := А − ист.
001источник111?CP A, источникЗСА − источник
101источник111?И А, источникЗА := А & источник
011летнее время111?INC dstЗdst  := dst + 1 ( немедленно запрещено )
111летнее время111?дек . времяЗdst  := dst − 1 ( немедленно запрещено )

†: ^ ab Сбивает с толку тот факт, что разные модели семейства ST6 используют разные соглашения для значения бита переноса после вычитания. Процессоры ST60 используют соглашение «перенос», которое очищает бит, если вычитание выходит за пределы, в то время как процессоры ST62 и ST63 используют соглашение «заимствование», которое устанавливает бит в этом случае. [3] : 21–22,42 

Архитектура ST7

ST7 имеет шесть регистров: аккумулятор, индексные регистры X и Y, указатель стека, счетчик программ и регистр кода условия. Кроме того, двойная косвенная адресация позволяет использовать нулевую страницу ОЗУ в качестве дополнительных регистров. Необычной, но полезной функцией является то, что прерывание помещает четыре из этих регистров в стек (A и X, а также обычные PC и CC), а возврат прерывания восстанавливает их.

Инструкции ALU делятся на две категории: двухоперандные и однооперандные.

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

  • 8-битный немедленный
  • 8-битный абсолютный адрес
  • 16-битный абсолютный адрес
  • Индексировано (X)
  • Индексированный плюс 8-битное смещение (адрес8,X)
  • Индексированный плюс 16-битное смещение (адрес16,X)

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

Инструкции с одним операндом используют указанный операнд как для источника, так и для назначения. Операнд может быть:

  • Аккумулятор А
  • Регистр X
  • 8-битный абсолютный адрес
  • Индексировано (X)
  • Индексированный плюс 8-битное смещение (адрес8,X)

Регистр плюс смещение вычисляют сумму полной ширины, поэтому 8-битная форма может адресовать память до 255+255 = 510.

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

  • PDY (0x90) изменяет все ссылки на регистр X на Y. Это позволяет использовать режимы адресации (Y), (address8,Y) и (address16,Y). Это также влияет на неявные операнды, поэтому инструкция "load X" становится "load Y". Следствием этого является то, что load X может использовать только режимы адресации относительно X, а load Y может использовать только режимы адресации относительно Y.
  • PIX (0x92) добавляет шаг косвенности к инструкции. 8- или 16-битный адрес, следующий за байтом кода операции, заменяется 8-битным адресом ячейки памяти, которая содержит 8- или 16-битный адрес (последний в порядке от старшего к младшему ). Затем он может быть проиндексирован регистром X, как обычно. Это позволяет использовать режимы адресации (address8), (address16), ([address8],X) и ([address8.w],X).
  • PIY (0x91) объединяет вышеперечисленные эффекты. Это позволяет использовать режимы адресации ([address8],Y) и ([address8.w],Y). (Он также может использоваться с другими режимами как часть инструкций "load Y" и "store Y".)
Набор инструкций семейства ST7 [4]
76543210б2б3МнемоническийОписание
000скусочеквадрес?Битовые операции
0000кусочек0адрес8soff8BTJT addr8 , # бит , меткаПереход к ПК + soff8, если исходный бит истинен (установлен)
0000кусочек1адрес8soff8BTJF addr8 , # бит , меткаПерейти к PC + soff8, если исходный бит ложный (очистить)
0001кусочек0адрес8BSET addr8 , # битУстановить указанный бит на 1
0001кусочек1адрес8BRES addr8 , # битСбросить (очистить) указанный бит в 0
0010состояниеsoff8Условные переходы (8-битное относительное смещение)
00100000soff8этикетка JRAВетвь всегда (истина)
00100001soff8этикетка JRFВетка никогда (ложь)
00100010soff8Этикетка JRUGTПереход, если беззнаковое больше (C=0 и Z=0)
00100011soff8Метка JRULEПереход, если беззнаковое меньше или равно (C=1 или Z=1)
00100100soff8этикетка JRNCПереход, если нет переноса (C=0)
00100101soff8этикетка JRCПереход, если перенос (C=1)
00100110soff8этикетка JRNEПереход, если не равно (Z=0)
00100111soff8Метка JREQВетвь, если равно (Z=1)
00101000soff8Этикетка JRNHПереход, если нет полупереноса (H=0)
00101001soff8этикетка JRHПереход при полупереносе (H=1)
00101010soff8лейбл JRPLВетвь, если плюс (N=0)
00101011soff8этикетка JRMIВетвь, если минус (N=1)
00101100soff8этикетка JRNMПереход, если маска не прерывания (M=0)
00101101soff8лейбл JRMПереход, если прерывания замаскированы (M=1)
00101110soff8Ярлык JRILПереход, если линия прерывания низкая
00101111soff8этикетка JRIHПереход, если линия прерывания высокая
0режимкод операции?Инструкции с одним операндом
0011код операцииадрес8ОП адрес88-битный абсолютный адрес
0100код операцииОП ААккумулятор
0101код операцииОП XРегистр X (регистр Y с префиксом)
0110код операцииадрес8ОП (адрес8,X)8-битный адрес плюс X
0111код операцииОП (Х)Индексировано без смещения
0режим0000?Операнд NEGОтрицание в дополнительном коде
0режим0001?(сдержанный)
0режим0010?(сдержанный)
01000010МУЛЬ X,AX:A := X × A. (MUL Y,A с префиксом)
0режим0011?CPL- операндДополнение до единицы, логическое НЕ
0режим0100?SRL- операндСдвиг вправо логический. Старший бит очищен, младший бит для переноса.
0режим0101?(сдержанный)
0режим0110?Операнд RRCСдвиг вправо через перенос, (операнд:C) := (C:операнд)
0режим0111?Операнд SRAСдвиг вправо арифметический. Msbit сохранен, lebit для переноса.
0режим1000?Операнд SLLСдвиг влево. Msbit для переноса.
0режим1001?RLC операндПоворот влево через перенос.
0режим1010?Операнд DECУменьшение. (N и Z установлены, перенос не изменяется)
0режим1011?(сдержанный)
0режим1100?операнд INCПриращение. (N и Z установлены, перенос не изменяется)
0режим1101?Операнд TNZТест не равен нулю. Установите N и Z на основе операнда.
0режим1110?Операнд SWAPПоменять местами половины операнда (4-битный поворот).
0режим1111?CLR- операндУстановите операнд на 0. N и Z установите на фиксированные значения. операнд.
100код операцииРазличные инструкции. Ни одна из них не устанавливает коды условий неявно.
10000000ИРЭТВозврат из прерывания (выталкивание CC, A, X, PC)
10000001РЕТВозврат из подпрограммы (pop PC)
10000010ЛОВУШКАПрерывание принудительной ловушки
10000011(сдержанный)
10000100ПОП АИзвлечь А из стека
10000101ПОП XИзвлечь X из стека
10000110ПОП ССИзвлечь коды условий из стека
10000111(сдержанный)
10001000НАЖМИ АВставить A в стек
10001001НАЖМИТЕ XПоместить X в стек
10001010НАЖМИТЕ CCПоместить коды условий в стек
10001011(сдержанный)
1000110(сдержанный)
10001110ОСТАНОВИТЬОстановить процессор и часы
10001111ВиДиОжидание прерывания, остановка процессора, но не часов
10010000ПДДПрефикс инструкции; поменять местами X и Y в следующей инструкции
10010001ПИИПрефикс инструкции; PDY плюс PIX
10010010ПИКСПрефикс инструкции; использовать 8-битную косвенную память для операнда
10010011ЛД X,YX := Y. С PDY делает "LD Y,X".
10010100ЛД С,ХS := X. Загрузить указатель стека.
10010101ЛД С,АS := A. Загрузить указатель стека.
10010110ЛД Х,СХ := С.
10010111ЛД Х,АХ := А.
10011000РЦФСбросить (очистить) флаг переноса
10011001СКФУстановить флаг переноса
10011010ОПРАВАСбросить маску прерываний (включить прерывания)
10011011СИМ-картаУстановить маску прерываний (отключить прерывания)
10011100РСПСбросить указатель стека (в начало ОЗУ)
10011101НОПНет операции. (=LD A,A)
10011110ЛД А,СА := С
10011111ЛД А,ХА := Х.
1режимкод операцииценить?Инструкции с двумя операндами A := A операнд
1010код операцииимм8ОП # imm88-битный непосредственный операнд (запрещено использовать в качестве назначения)
1011код операцииадрес8ОП адрес88-битный абсолютный адрес
1100код операцииаддриaddrloОП адрес1616-битный абсолютный адрес
1101код операцииаддриaddrloОП ( addr16 ,X)Индексировано с 16-битным смещением
1110код операцииадрес8ОП ( addr8 ,X)Индексировано с 8-битным смещением
1111код операцииОП (Х)Индексировано без смещения
1режим0000ценить?SUB A, операндA := A − операнд
1режим0001ценить?CP A, операндСравнить A − операнд
1режим0010ценить?SBC A, операндВычитание с заемом A := A − операнд − C
1режим0011ценить?CP X, операндСравнить X − операнд
1режим0100ценить?И А, операндA := A & операнд, побитовое И
1режим0101ценить?BCP A, операндПобитовая проверка A и операнда
1режим0110ценить?LD A, операндЗагрузить A := операнд
10100111имм8(зарезервировано, =LD #imm8,A)
1режим0111ценить?Операнд LD ,AСохранить операнд := A
1режим1000ценить?XOR A, операндA := A ^ операнд, исключающее ИЛИ
1режим1001ценить?АЦП А, операндA := A + операнд + C, сложить с переносом
1режим1010ценить?ИЛИ А, операндA := A | операнд, включительно или
1режим1011ценить?ДОБАВИТЬ X, операндА := А + операнд
10101100имм8х(зарезервировано, =JP #imm8)
1режим1100ценить?JP операндPC := операнд, безусловный переход
10101101soff8Метка CALLRPUSH PC, PC := PC + операнд
1режим1101ценить?Операнд CALLНажмите ПК, ПК := операнд
1режим1110ценить?LD X, операндЗагрузить X := операнд
10101111имм8(зарезервировано, =LD #imm8,X)
1режим1111ценить?Операнд LD ,XСохранить операнд := X

Ссылки

  1. ^ Технический паспорт: ST62T00C/T01C от 1998 г.
  2. ^ "Справочник микроконтроллеров/микропроцессоров EDN 2006 г., 8-разрядные микропроцессоры, отсортированные по архитектуре набора команд" (PDF) . стр. 26.100616 edn.com
  3. ^ ab "ST6 Family Programming Manual" (PDF) . Редакция 2.0. STMicroelectronics . Октябрь 2004 . Получено 28.02.2017 .
  4. ^ "ST7 Family Programming Manual" (PDF) . Редакция 2. STMicroelectronics . Ноябрь 2005. Получено 28.02.2017 .
Взято с "https://en.wikipedia.org/w/index.php?title=ST6_and_ST7&oldid=1186123383#ST7"