КС8

8-битный микроконтроллер
Национальный полупроводниковый COP8
Общая информация
Запущен1988 ; 37 лет назад ( 1988 )
Обычный производитель
Производительность
Макс. тактовая частота ЦП 0 Гц – 2 МГц
Ширина данных8 (ОЗУ), 8 (ПЗУ)
Ширина адреса8 (ОЗУ), 15 (ПЗУ)
Архитектура и классификация
ПриложениеВстроенный
Набор инструкцийКС8
Количество инструкций69
Физические характеристики
Упаковка
  • 20, 28 и 40-контактный DIP ; 16, 20 и 28-контактный SOIC ; 44-контактный PLCC
История
ПредшественникКС400
Преемникникто

National Semiconductor COP8 — это 8-битный микроконтроллер с ядром CISC . COP8 — это усовершенствование более раннего семейства 4-битных микроконтроллеров COP400 . Основные характеристики COP8:

COP8 имеет базовое время цикла инструкций 1/10 от тактовой частоты; максимальная тактовая частота 10 МГц приведет к максимальной скорости выполнения инструкций 1 МГц. (Тактовая частота 10 МГц используется непосредственно некоторыми периферийными устройствами таймера.) Максимальная скорость выполнения инструкций составляет 1 цикл на байт, и большинство 1-байтовых инструкций выполняются за один цикл инструкций. Некоторые, особенно инструкции ветвления, занимают на один или два цикла больше. Некоторые модели включают удвоитель тактовой частоты, и хотя они по-прежнему принимают максимальную входную тактовую частоту 10 МГц, они внутренне удваивают ее до главной тактовой частоты 20 МГц, что затем приводит к скорости выполнения инструкций 2 МГц. [1] : 7,32 

Чип представляет собой статическую логическую конструкцию, которая может выдерживать произвольно медленные часы; [1] : 10  большинство моделей включают в себя второй Кварцевый генератор с частотой 32 768  Гц может использоваться для тактовой частоты процессора, в то время как высокоскоростная тактовая частота отключена для экономии энергии.

Регистры и карта памяти

Регистры COP8
1 41 31 21 11 00 90 80 70 60 50 40 30 20 10 0(позиция бита)
Главные регистры
ААккумулятор
ПЦУПКЛСчетчик программ 
Примечание: Все остальные регистры и биты состояния, видимые программисту, размещены в оперативной памяти.

COP8 использует отдельные пространства инструкций и данных ( архитектура Гарварда ). [2] : 2-1  [3] : 2-4  Адресное пространство инструкций составляет 15 бит (максимум 32 КиБ), а адреса данных — 8 бит (максимум 256 байт, расширяются за счет переключения банков).

Чтобы можно было обнаружить ошибки в программном обеспечении, все недействительные адреса инструкций считываются как ноль, что является инструкцией-ловушкой. Недействительная RAM выше стека считывается как все единицы, что является недействительным адресом.

Процессор имеет 8-битный аккумулятор и 15-битный счетчик программ . 16 дополнительных 8-битных регистров (R0–R15) и 8-битное слово состояния программы отображены в память. Для доступа к ним существуют специальные инструкции, но также могут использоваться общие инструкции доступа к ОЗУ.

Карта памяти разделена на половину ОЗУ и половину регистров управления следующим образом:

Адресное пространство данных COP8
АдресаИспользовать
0x00–6FОЗУ общего назначения, используемое для стека
0x70–7FНе используется, читается как «все единицы» (0xFF) для отлова переполнения стека
0x80–8FНе используется, читается как неопределенный
0x90–БФДополнительные периферийные регистры управления
0xC0–CFРегистры управления периферийными устройствами.
0xD0–DFПорты ввода-вывода общего назначения L, G, I, C и D
0xE0–E8Сдержанный
0xE9Микропроводной сдвиговый регистр
0xEA–EDРегистры таймера 1
0xEEРегистр CNTRL, биты управления для Microwire и таймера 1
0xEFPSW, слово состояния программы ЦП
0xF0–ФБR0–R11, встроенная оперативная память, отображаемая как регистры
0xFCR12, он же X, вторичный косвенный указательный регистр
0xФДR13, он же SP, регистр указателя стека
0xFER14, он же B, первичный косвенный указательный регистр
0xFFR15, он же S, регистр расширения сегмента данных

Если RAM не банкируется, то R15 (S) — это просто еще один регистр общего назначения. Если RAM банкируется, то нижняя половина адресного пространства данных (адреса 0x00–7F) направляется в банк RAM, выбранный S. Регистры специального назначения в верхней половине адресного пространства данных всегда видны. Регистры данных в 0xF x могут использоваться для копирования данных между банками.

Банки RAM, кроме банка 0, имеют все 128 байтов. Стек (адресуемый через указатель стека) всегда находится в банке 0, независимо от того, как установлен регистр S.

Контрольные передачи

В дополнение к 3-байтовым JMPLи JSRLинструкциям, которые могут адресовать все адресное пространство, 2-байтовые версии этих инструкций, JMPи JSR, могут переходить в пределах страницы 4 КБ. Инструкция определяет нижние 12 бит, а верхние 3 бита PC сохраняются. (Они предназначены в первую очередь для моделей с объемом ПЗУ до 4 КБ.) Для ветвей на короткие расстояния существует 63 1-байтовых инструкции, , JPкоторые выполняют PC-относительные ветви от PC−32 до PC+31. Это 15-битное сложение, и требования к границам страницы не применяются.

Существуют также косвенные команды перехода и загрузки аккумулятора, которые используют содержимое аккумулятора в качестве младших 8 бит адреса; старшие 7 бит текущего PC сохраняются.

Условные переходы как таковые не существуют, и процессор не предоставляет традиционные флаги состояния ZCVN , хотя слово состояния программы содержит флаги переноса и полупереноса для многобайтовой арифметики. Вместо этого есть ряд инструкций сравнения и пропуска. Например, IFEQсравнивает два своих операнда и пропускает следующую инструкцию, если они не равны. Любая инструкция может быть пропущена; это не ограничивается переходами.

Интересным расширением этого механизма является RETSKинструкция return-and-skip, которая позволяет любой подпрограмме условно пропускать инструкцию, следующую за вызовом. Это обеспечивает очень компактный способ возврата логического значения из подпрограммы.

Еще одной уникальной особенностью архитектуры COP8 является IFBNEинструкция. Эта однобайтовая инструкция сравнивает нижние 4 бита регистра B (указатель памяти) с 4-битовой непосредственной константой и может использоваться для цикла, пока B не достигнет конца небольшого (до 16 байт) буфера. Также есть однобайтовая LD B,#imm4инструкция.

Набор инструкций

Операнды COP8 перечислены в порядке назначения, источника. Большинство инструкций имеют аккумулятор A в качестве одного из операндов. Другой операнд обычно выбирается из 8-битного непосредственного значения, 8-битного адреса RAM или [B], адреса RAM, выбранного регистром B. Инструкции LDand X(обмен с аккумулятором) также поддерживают адресацию RAM с помощью регистра X ( [X]) и варианты post-inc/decrement ( [B+], [B−], [X+], [X−]).

Косвенная адресация через B выполняется особенно быстро и может быть выполнена в том же цикле, в котором выполняется инструкция; даже X A,[B]является одноцикловой инструкцией.

С другой стороны, абсолютная адресация RAM напрямую кодируется только для пяти инструкций: , , , и DIR addr8. Последняя представляет собой префиксный код операции «прямой адресации», который может быть добавлен к любой инструкции с операндом и изменяет операнд на указанное место в памяти. (Инструкции условного пропуска пропускают префикс и следующую инструкцию как пару.) Использование с инструкциями , и не документировано, поскольку выделенные инструкции более эффективны.LD A,addr8X A,addr8IFEQ addr8,#imm8LD addr8,#imm8[B]DIRLD A,[B]X A,[B]LD [B],#imm8

Все инструкции «перемещения» вызываются LD(load), даже если пунктом назначения является адрес памяти ( ). Необычно то, что нет инструкций с аккумулятором в качестве источника; сохранение должно выполняться с помощью инструкции, которая обменивает аккумулятор с операндом памяти, сохраняя A и загружая предыдущее содержимое памяти. LD addr8,#imm8LDX

Есть инструкции для выборки из таблиц в ПЗУ. Они объединяют верхние 7 бит счетчика программ (PCU) с аккумулятором, извлекают байт из этого адреса и помещают его в аккумулятор ( LAIDинструкция) или нижние 8 бит счетчика программ PCL ( JIDинструкция). Поскольку следующая выполняемая инструкция должна находиться на той же 256-байтовой странице ПЗУ, что и сама таблица, таблица из 256 записей невозможна.

Набор инструкций семейства COP8 [2] [4] [3] [5]
Код операцииОперандыМнемоническийЦиклыОписание
76543210б2б3
00000000ИНТР7Программное прерывание (нажмите PC, PC ← 0x00ff)
000компенсироватьJP + disp53PC ← PC + смещение ; переход на 1–31 байт вперед (смещение ≠ 0)
0010высокийнизкийJMP адрес123PC[11:0] ← addr . Сохранены верхние 3 бита PC.
0011высокийнизкийJSR адрес125Переход к подпрограмме: нажмите PC, продолжите как JMP.
0100кIFBNE # imm41Пропустить следующую инструкцию, если (B & 15) = k .
0101кЛД Б,# imm41B ← 15 − k (нуль-расширенный)
01100код операцииРазные инструкции
01100000кANDSZ A,# imm8 [a]2Пропустить, если A & k = 0 (=IFBIT # бит ,A)
01100001адресJSRB адрес8 [б]5Нажмите ПК, перейдите к подпрограмме загрузки ПЗУ по адресу [1]
0110001(зарезервировано для загрузочного ПЗУ) [b] [1]
01100100КЛР А1А ← 0
01100101ОБМЕН А1A ← A<<4 | A>>4; поменять местами полубайты
01100110ДКОР А1Десятичная дробь верна после сложения BCD
01100111НАЖМИ А [а]3[СП] ← А, СП ← СП−1
011ОПЦкусочекБитовые операции над [B] [c]
01101кусочекRBIT # бит ,[B] [c]1Сбросить (очистить до 0) заданный бит ОЗУ
01110кусочекIFBIT # бит ,[B] [c]1Тестирование заданного бита ОЗУ, пропуск, если ноль
01111кусочекSBIT # бит ,[B] [c]1Установить (в 1) указанный бит ОЗУ
100м0код операциик?Бинарные операции, A ← A операнд
10000код операцииОП А,[Б] [c]1А ← А оп [Б]
10010код операциикОП А,# imm82А ← А оп к
100м0000к?АЦП А, операндC,A ← A + операнд + C; сложение с переносом
100м0001к?SUBC A, операндC,A ← A + ~ операнд + C (A − операнд − ~C)
100м0010к?IFEQ A, операндПропустить, если A ≠ операнд
100м0011к?IFGT A, операндПропустить, если A ≤ операнд
100м0100к?ДОБАВИТЬ А, операндA ← A + операнд (перенос не изменяется!)
100м0101к?И А, операндA ← A & операнд
100м0110к?XOR A, операндA ← A ^ операнд
100м0111к?ИЛИ А, операндA ← A | операнд
10001код операцииИнструкции с нулевым операндом
10001000МФК1Пропустить, если перенос свободен
10001001ИФНК1Пропустить, если набор для переноски
10001010ИНК А1A ← A + 1 (перенос без изменений)
10001011ДЕК А1A ← A − 1 (перенести без изменений)
10001100ПОП А [а]3СП ← СП+1, А ← [СП]
10001101РЕТСК5Вставьте ПК, пропустите одну инструкцию
10001110РЕТ5Поп ПК высокий, поп ПК низкий
10001111РЕТИ5Возврат и включение прерываний
10011код операциикИнструкции с непосредственным операндом
10011000кЛД А,# imm82А ← к
10011001кIFNE A,# imm8 [a]2Пропустить, если A = k
10011010кЛД [B+],# imm83[Б] ← к , Б ← Б + 1
10011011кЛД [Б−],# imm83[Б] ← к , Б ← Б − 1
10011100адресXA, адрес83A ↔ [ адрес ], обмен
10011101адресLD A, адрес83A ← [ адрес ]
10011110кЛД [Б],# imm82[Б] ← к
10011111кЛД Б,# imm8 [а]2B ← k (=LD R14,# k , на один цикл быстрее)
101код операции0сРазные инструкции
10100000РК1C ← 0; сбросить перенос на 0
10100001СК1C ← 1; установить перенос на 1
10100100ПРОЛОЖЕННЫЙ3A ← ROM[PCU:A]; загрузка из ROM
10100101JID3PCL ← ROM[PCU:A]; переход по таблице ROM
10101000РЛК А [а]1C,A ← A,C; поворот влево через перенос (=ADC A,A)
10101001адрескIFEQ addr8 ,# imm8 [a]3Пропустить, если [ addr ] ≠ k
10101100высокийнизкийJMPL адрес154ПК ← адрес
10101101высокийнизкийJSRL адрес155Нажмите ПК, ПК ← адрес
10110000РРЦ А1A,C ← C,A; поворот вправо через перенос
10110001(сдержанный)
10110100ВИС [а]5ПК ← ПЗУ[ таблица векторов ]; Выбор векторного прерывания
10110101РПНД [а]1Сбросить флаг ожидающего прерывания
10111000НОП1Нет операции
10111001IFNE А,[Б] [а] [с]1Пропустить, если A = [B]
10111100адрескLD addr8 ,# imm83[ адрес ] ← к
10111101адресDIR адрес83Изменить операнд следующей инструкции с [B] на [ addr ]
101РЛ=1±Операции по загрузке/обмену
10100010ХА,[B+]2А ↔ [Б], Б ← Б+1
10100011XA,[B−]2А ↔ [Б], Б ← Б−1
10100110ХА,[Б]1А ↔ [Б]
10101010ЛД А,[B+]2А ← [Б], Б ← Б+1
10101011ЛД А,[Б−]2А ← [Б], Б ← Б−1
10101110ЛД А,[Б]1А ← [Б]
10110010ХА,[Х+]3А ↔ [X], X ← X+1
10110011ХА,[Х−]3А ↔ [X], X ← X−1
10110110ХА,[Х]3А ↔ [Х]
10111010ЛД А,[X+]3А ← [X], X ← X+1
10111011ЛД А,[X−]3А ← [X], X ← X−1
10111110ЛД А,[X]3А ← [X]
101111(сдержанный)
1100зарегистрироватьсяРегистр ДРСЗ3регистррегистр − 1, пропустить, если результат равен нулю
1101зарегистрироватьсякРегистр LD , # imm83регистрk (=LD 0xf0+ регистр ,# k , на один байт короче)
111компенсироватьJP − disp53PC ← PC − 32 + смещение ; прыжок на 1–32 байта назад
76543210б2б3МнемоническийЦиклыОписание
  1. ^ abcdefghij Только для ядер «семейства функций» (COP888/COP8SA); отсутствует для ядер «базового семейства» (COP800).
  2. ^ ab Только для моделей «семейства флэш-памяти» (COP8TA/COP8C) с загрузочным ПЗУ для внутрисистемного программирования .
  3. ^ abcdef Операнд может быть изменен с [B]на 8-битный абсолютный адрес с префиксом DIR (+2 байта, +3 цикла).

Известные применения

Ссылки

  1. ^ abcd "COP8SBR9/COP8SCR9/COP8SDR98-битный КМОП-микроконтроллер на базе флэш-памяти с 32 КБ памяти, виртуальной EEPROM и отключением питания" (PDF) (техническое описание). National Semiconductor . Апрель 2002 г. Получено 06.01.2021 г.
  2. ^ ab COP8 Basic Family User's Manual (PDF) . Редакция 002. National Semiconductor . Июнь 1996 г. Номер литературы 620895-002 . Получено 2021-01-02 .
  3. ^ ab Aleaf, Abdul (июль 1996 г.). "Сравнение COP878x с усовершенствованным семейством COP8SAx7 — соображения по аппаратному и программному обеспечению" (PDF) . National Semiconductor . Замечание по применению 1043.
  4. ^ Руководство пользователя семейства функций COP8 . Редакция 005. National Semiconductor . Март 1999. Номер литературы 620897-005. Извлечено из сжатого образа ISO 530094-003_COP8_Tools_Docs_Aug1999.zip, получено 07.01.2020.
  5. ^ "COP8SAx Designer's Guide" (PDF) . National Semiconductor . Январь 1997. Номер литературы 620894-001.
  6. Либераторе, Дэвид (11 мая 2006 г.). Обновление конструкции электронного взрывателя бомбы FMU-139C/B (PDF) . 50-я ежегодная конференция NDIA по взрывателям . Получено 7 ноября 2024 г.
  7. ^ Деннис, Марк; Ханрахан, Боб; Бракманн, Крис (ноябрь 1991 г.). Application Note 761 - Electronic Fuzing (PDF) . Texas Instruments . Получено 7 ноября 2024 г. .
  • Встраиваемые микроконтроллеры National Semiconductor ( CR16 и COP8)
  • микроконтроллер-faq/COP8, 1995
  • "National Semiconductor COP8". 25-й ежегодный справочник EDN по микропроцессорам/микроконтроллерам. EDN . 24 сентября 1998 г.
Взято с "https://en.wikipedia.org/w/index.php?title=COP8&oldid=1267885130"