КР1878ВЕ1

Другие микроконтроллеры и микропроцессоры, не попавшие в предыдущие разделы

Moderator: Shaos

User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 15:08
Location: Россия

КР1878ВЕ1

Post by Lavr »

Плотно я сейчас занимаюсь этим отечественным микроконтроллером - КР1878ВЕ1,
который кроме идентичной цоколевки выводов, практически ничем более на PIC
и не похож, почему я и попытаюсь здесь изложить, что у него там интересного
внутри, и, возможно, кто уже имел опыт работы с КР1878ВЕ1, меня здесь дополнят,
и, в случае чего - поправят.

Прежде всего блок-схема, которая приведена практически во всех источниках
по КР1878ВЕ1, особо подробной информации о структуре микроконтроллера (далее -
МК) она не дает, но по крайней мере избавляет от необходимости пересказывать,
что внутри этого МК имеется в наличии.



Отчасти - набор типичный для МК, но есть и нехарактерные узлы: два раздельных стека и
таймер не только с предделителем, но и с 3-мя разрядами переполнения, что позволяет
считать втрое "длиннее" обычного.
Сторожевой таймер имеет как свой независимый генератор, так и возможность подключения
к тактовому генератору, что позволяет использовать его как второй точный интервальный таймер.

А вот дальше начинаются уже особенности и интересности этого МК:

Image

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

В связи с этим в команде этот МК вынужден держать как код операции, так и адреса
обоих операндов, поэтому команды у КР1878ВЕ1 шире, чем у PIC16, составляют они
16 бит - слово, ну и поскольку архитектура у МК гарвардская, а значит память команд
и данных раздельная, то способен он адресовать 1024 слова или 2048 байт памяти
программ
и 256 байт памяти данных.
Из 256 байт памяти данных статическое ОЗУ составляет 128 байт, порты УВВ адресуются
как ячейки памяти данных, и карта памяти данных имеет следующий вид.

----------Image

И вот тут начинается самое интересное в этом МК, а именно - способ адресации им памяти данных.

Ясно, что 256 байт памяти данных требуют 8 бит для прямого обращения к любому байту,
а у нас в команде на всё отведено 16 бит.

Решение этой проблемы довольно оригинальное для микроконтроллеров, а именно - сегментная адресация,
или же её в ряде источников называют базово-индексной, что мне представляется более правильным,
а вот сравнение этого способа с аналогичным у микропроцессора 8086 мне кажется не совсем удачным,
хотя, чисто для понимания - сойдет и такая аналогия.

Суть заключается в том, что команды, работающие с двумя операндами построены по следующему
принципу : KKKK.KKSS.DDDS.SDDD, где:
---------------KKKK.KK - код операции;
---------------SS. - номер сегментного регистра первого операнда;
---------------DDD - смещение к первому операнду в 8-байтном сегменте;
---------------S.S- номер сегментного регистра второго операнда;
---------------DDD- смещение ко второму операнду в 8-байтном сегменте.

Из этого следует, что полный исполнительный или физический адрес при обращении к памяти данных
будет складываться из 5 старших бит, которые заносятся в регистр сегмента. (В нём они хранятся как
5 младших бит) и 3 бит непосредственного смещения в сегменте, указанного в коде команды.
Сегмент и смещение принято называть логическим адресом.

Для команды сложения двух операндов - ADD, к примеру, - эта схема выглядит следующим образом:

-------------0001.00SS.DDDS.SDDD
----------Image

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

Image

Посредством 4-х сегментных регистров микроконтроллеру одновременно доступно 32 байта из памяти
данных
по следующей схеме:

----------Image

Эмпирическое правило следующее: Базовый адрес, записываемый в сегментный регистр должен
быть кратен восьми, а смещение может быть в пределах 0…7.


В мнемониках ассемблера КР1878ВЕ1 применяются следующие обозначения: служебные регистры
(SR0–SR7) используются только для адресации, и в командах обозначаются с префиксом “#”, как
#0 – #7, причем первые четыре обозначаются еще и буквами #a, #b, #c, #d.
Обычные числа обозначаются без префикса.

ldr #a, 18h; - сегментный регистр А указывает на сегмент памяти данных, где расположены
регистры конфигурации портов А и В, а также WDT.
При необходимости (например, обслуживание прерывания) регистры сегментов можно сохранить
в специально отведенный для них стек, и указать их новые значения, при этом остаются
работоспособными все подпрограммы, поскольку смещения в новых сегментах можно не менять!!!

Логические адреса ячеек памяти задаются при программировании контроллера конструкцией:
%<буква><цифра>
Например, запись операнда как %а5 обозначает ячейку, адрес которой определяется смещением
на 5 байт в сегменте
, определяемом служебным регистром #А.
(В нашем случае - это ячейка регистра управления WDT.)

movl %а5, 17h; - в регистр управления WDT заносим константу 17h, её принято называть "литерой".

Вот тут немного неудобный момент: литера не может быть больше 31h непосредственно в команде,
поскольку под нее отведено те же 5 бит: S.SDDD .
Если надо больше, то следует использовать косвенную адресацию к ячейке, где литера заранее записана.
И что интересно, посредством механизма косвенной адресации можно считать байт как из памяти данных,
так и из памяти команд
.
Этот механизм поддерживают 4 служебных регистра для косвенной адресации: (SR4–SR7 которые
буквенных синонимов не имеют), но подробно об этом механизме я расскажу в следующем посте...


PS. Обидно, что сам механизм с номерами регистров сегментов в логическом адресе я не освоил перед
моделированием EDUC-8, он там бы зело пригодился!
:kruto:
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 15:08
Location: Россия

Post by Lavr »

Итак - о механизмах косвенной адресации... Супротив PIC16 у микроконтроллера КР1878ВЕ1
эти режимы побогаче, и реализованы следующим образом:

Два старших индекса сегмента D: D6 и D7 имеют несколько иной статус и используются для полной
адресации операнда в адресном пространстве памяти данных и памяти програм в качестве регистров
косвенной адресации
IR0 и IR1.

Но в этом качестве D6 и D7 выступают только при соответствующих настройках приданных им регистров
режима
SR5 и SR7, соответственно.

-----Image

-----Image

Так, если в старших разрядах SR5 и SR7 указано:
-----“11”, то %d6 или %d7 обозначают использование в качестве адреса числа из регистров
-------------SR4 или SR6 соответственно.

Если в тех же старших разрядах SR5 и SR7 указано:
-----“01” либо
-----“10”, то после каждого использования %d6 или %d7 адрес (число в SR4 или SR6) автоматически
-------------увеличивается либо уменьшается.

Режим, указанный в SR5 старшими битами:
-----“00” превращает обращение к %d6 в обычную базово–индексную адресацию.
-----“00” же в SR7 для %d7 обозначает обращение к ячейкам памяти команд с авто–вставкой
-------------адреса. При этом адрес составляет 11 разрядов, которые должны размещаться в SR6
-------------(младшие) и в SR7 (три старшие).

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

Ну и помимо всего уже перечисленного существуют такие "вкусности", которые я так стремился
схемотехнически просто воплотить в конструкции наших самодельных 4-битных процессоров:

Команды передачи управления с использованием косвенного регистра
-----ijmp — команда выполняет безусловный переход по адресу, содержащемуся в косвенном регистре IR1;
-----ijsr — команда выполняет переход к подпрограмме по адресу, содержащемуся в косвенном регистре IR1.

Эти команды, на мой взгляд, архиполезны для процедуры эмуляции команд различных "сторонних"
микропроцессоров на платформе микроконтроллера КР1878ВЕ1.
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 15:08
Location: Россия

Post by Lavr »

Ясное дело, что дальше по сюжету надо рассказать про систему команд микроконтроллера КР1878ВЕ1.

Но поскольку я не переписываю сюда мануалы или даташиты, а проверяю эти материалы сам, то сам я и
наступил на первые грабли этого МК... :lol:

Грабли из серии - не верь глазам своим, и если на заборе написано "ЖУЙ" - то там могут быть дрова,
а не заведение общепита... 8)

Вот буквально вырезка из мануала от "Ангстрем":

Image

Потрясно было, что команды STOP и RESET не компилируются ни при каких ухищрениях! :o

Ну да ладно, не напугали... залезаю я через WINHEX в код компилятора и НЕ НАХОЖУ В ЕГО
КОДЕ
ни STOP, ни RESET!!! :roll: Ну я этого, собственно, и ожидал... 8)

Зато нахожу SLP и RST - это, оказывается, они и есть!

Ну если еще RST - угадать можно... то SLP, это скорее уж SLЕЕP, a не STOP... :wink:

Ну да ладно, эту багофичу можно простить... в описании работы компилятора Ангстрем исправился:

Image

А вот дальше - самое интересное: поскольку раз уж я залез через WINHEX в код компилятора,
я и остальные инструкции проверил на вшивость...

И вот в этом процессе нашел нигде не документированную инструкцию SMUL !!! :o

Она присутствует внутри всех компиляторов и отладчиков, но описания её нигде я не нашел... :(

Компилируется команда SMUL в код 0000 0000 0000 1010 (000A),
судя по всему, она служебная (чисто по аналогии в таблице команд).

Гугл тоже ничего не знает на тему "КР1878ВЕ1 SMUL", а вот на сочетание
"opcode SMUL" - выдает много интересного...
Но я не думаю, что это умножение, поскольку компилируется как команда без аргументов...
а вот что это такое?... :o
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 15:08
Location: Россия

Post by Lavr »

Проверил я порядка 80% команд микроконтроллера, по непонятным и неоднозначначным вопросам
написал письма трём изестным в Интернете гуру-пользователям этого МК, надеюсь, прояснят баги...

Так что перед обзором системы команд разберемся с портами КР1878ВЕ1, раз уж они адресуются
как ячейки памяти и их адреса будут использоваться в качестве аргументов во многих командах.

В составе микроконтроллера имеются два параллельных квазидвунаправленных порта ввода/
вывода А и B
, структура которых практически идентична, но при этом порт B является 8–разрядным
(PB0…PB7)
, в то время как порт А является только 5–разрядным (PA0…PA4), что в значительной
мере обусловлено ограниченным количеством внешних выводов микроконтроллера, выполненного в
18–выводном пластмассовом корпусе ДИП типа 2104.18-8 для совместимости по контактам с аналогичными
зарубежными образцами.

В литературе пишут, что, несмотря на совместимость по выводам с PIC16 в техническом описании на
КР1878ВЕ1 умудрились перепутать нумерацию выводов. Я этого не обнаружил, но на всякий случай
распиновку портов из "мануала" выкладываю, вдруг я был не внимателен...

--------------Image

Упрощенная схема одного разряда параллельного порта ввода-вывода микроконтроллера КР1878ВЕ1
приведена на рисунке ниже.

Image

Техническое описание микроконтроллера КР1878ВЕ1 не содержит принципиальной схемы или хотя бы
блок-схемы одного разряда параллельного порта ввода-вывода, поэтому приведенная здесь схема
составлена на основе схемотехнических решений, характерных для микроконтроллеров аналогичного
типа, на основе сведений, приведенных в описании.

Регистры данных ("защелки") портов А и B, расположены по адресам 01h и 02h адресного пространства
соответственно, и в микроконтроллере КР1878ВЕ1 работа с регистрами портов не отличается от приемов
работы с ячейками ОЗУ.

Каждая линия порта может настраиваться независимо от остальных и работать в различных режимах
ввода или вывода информации, режима "открытый сток" или активного вывода, с отключенными или
подключенными "притягивающими" резисторами. Все эти режимы настраиваются через сопутствующие
регистры портов
, так называемые регистры конфигурации, расположенные, соответственно, по адресу
19h для порта А и по адресу 1Ah - для порта В.

По включению или сбросу порты оказываются настроенными на ввод, при этом "притягивающие"
резисторы — подключены
. Таким образом, на выходах портов присутствуют "слабые" сигналы логической “1”,
что не оставляет в плавающем состоянии входы подключенных к портам устройств, а настройка всех линий
на ввод позволяет избежать конфликтов с подключенными к портам выходными линиями внешних устройств
.
Поскольку у каждой линии порта приходится настраивать достаточно много параметров, ёмкости одного
регистра конфигурации оказалось недостаточно для "полноценной" настройки всех параметров
, поэтому
внутри каждый из регистров конфигурации разбит на дополнительные подрегистры (SRSubRegister),
которые имеют номера от 3 до 7.

По схеме видно, что биты подрегистра SR5 отвечают за подключение и отключение "притягивающимх"
резисторов поразрядно
. Биты подрегистра SR4 ответственны за тип выходного каскада: активный или
"открытый сток", а подрегистр SR3 разрешает или запрещает побитно режим вывода на соответствующую
линию порта
. Режим ввода с линии включен всегда. Подрегистры SR6 и SR7 отвечают за особенности
возникновения прерываний
от линий портов.


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

Изменение и регистрация уровней напряжения на выводе РА0...РА4 производятся с помощью
рабочего регистра порта А.

Image

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

Image

Через этот регистр, как через "окно" при настройке доступны подрегистры SR с номерами 3...7.

Для записи в нужный подрегистр необходимо произвести запись в сам регистр конфигурации
по адресу 19h константы, в младших трех разрядах которой имеется номер подрегистра, и
установлен разряд записи в подрегистр WR
.
Следующая запись по адресу 19h будет производиться непосредственно в нужный подрегистр.
Затем по адресу 19h опять доступен регистр конфигурации.

Если необходимо установить сразу несколько подрегистров, следует воспользоваться разрядом
автоинкремента номера подрегистра
. Этот разряд, будучи установленным, подключает но запись
по адресу 19h последовательно несколько подрегистров, начиная от подрегистра с начальным
номером, определяемым записываемыми разрядами SR¹ и завершая подрегистром ¹ 7.

После записи в последний подрегистр по адресу 19h вновь доступен регистр конфигурации.
Разряд автоинкремента автоматически сбрасывается.
5-й разряд регистра конфигурации IE, будучи установленным, разрешает прерывание от порта.

Кратко назначение отдельных битов подрегистров регистра конфигурации сгруппировано в
следующей таблице:

Image

Более подробно их описание приведено ниже:

Image

Поскольку порты А и В полностью идентичны, но у порта В всё же 8 выводов, приведу для примера
содержание битов одного из его подрегистров:

Image

Ну а рабочий регистр порта В следует представлять себе следующим образом:

Image

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

You're welcome! :D
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 15:08
Location: Россия

Post by Lavr »

И я подумал, что неплохо бы фрагмент программы с кодом инициализации портов
ввода-вывода здесь привести, тем более, что и код этот многократно проверенный
от одной из самых удачных разработок на микроконтроллере КР1878ВЕ1 -
"Частотомер на КР1878ВЕ1. Радио ¹10, за 2000 год" от Д. Богомолова.
Нет ни одного упоминания, чтобы эта конструкция не повторилась! :kruto:

Code: Select all

;########################################################:
;#  инициализация портов ввода-вывода                   #:
;########################################################:
init:
  ldr  #a,40h    ; сегмент источник таймера
  ldr  #b,18h    ; сегмент регистров конфигурации портов
  ldr  #c,48h    ; сегмент индикация
  ldr  #d,00h    ; сегмент регистров данных портов

        ; формирование конфигурации порта A
  movl  %b1,00011011b  ; заполнение регистра управления порта для
        ; формирования конфигурации порта в
        ; автоинкрементном режиме
  movl  %b1,00010111b  ; 3-сканирующие на вход/выход
  movl  %b1,00010111b  ; 4-активный выход
  movl  %b1,00001000b  ; 5-резисторы отключены(кроме PA3)
  movl  %b1,0    ; 6-прерывания запрещены
  movl  %b1,0    ; 7-прерывания запрещены

        ; формирование конфигурации порта B
  movl  %b2,00011011b  ; заполнение регистра управления порта для
        ; формирования конфигурации порта в
        ; автоинкрементном режиме
  movl  %b2,11111111b  ; 3-все вход/выход
  movl  %b2,11111111b  ; 4-активный выход
  movl  %b2,0    ; 5-резисторы отключены
  movl  %b2,0    ; 6-прерывания запрещены
  movl  %b2,0    ; 7-прерывания запрещены
  rts      ;возврат
Тем более, что все команды микроконтроллера в процедуре конфигурации портов
уже были ранее рассмотрены...
iLavr
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 15:08
Location: Россия

Re: КР1878ВЕ1

Post by Lavr »

Ну вот и приехали, наконец, мои 20 штук КР1878ВЕ1 от производителя...

1878BE10034.jpg
1878BE10034.jpg (58.03 KiB) Viewed 27762 times

Судя по датам, делают их при наличии заказов, т.к. с момента заказа прошло
фактически 2 месяца.
16 марта 2015 г. я получил на свой запрос следующий ответ от производителя:
------------------ Исходное сообщение ---------------------------------------
Тема: RE: RISC микроконтроллер КР1878ВЕ1
От: Куликова Елена Анатольевна <Kulikova@angstrem.ru>
Дата: Пнд, 16 Мар 2015, 11:39
---------------------------------------------------------------------------------------
На Ваш запрос сообщаем, КР1878ВЕ1 можете приобрести
по безналичному расчету по цене 196,00 руб. без НДС.
От Вас реквизиты для выставления счета на оплату.
Изделия сможем отгрузить только в апреле.
Если вас это устраивает, направляйте реквизиты.
Реализует Ангстрем свои изделия только юридическим лицам, поэтому пришлось
обратиться в дружественную компьютерную фирму, которая и заказала мне эти
микросхемы по безналичному расчету 17 марта 2015 г.

Если мы тут правильно разобрались с маркировкой отечественных микросхем, то
в апреле 2015 г. Ангстрем "испёк" партию этих изделий (маркировка: 1504 )

1878BE10035.jpg
1878BE10035.jpg (50.91 KiB) Viewed 27762 times

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

1878BE1etik.jpg
1878BE1etik.jpg (174.24 KiB) Viewed 27762 times

Изделия поступили на склад компьютерной фирмы во вторник 12 мая 2015 г. т.е. - без
5 дней фактически прошло 2 месяца с момента заказа.
В итоге со всеми НДС, безналичкой/наличкой и пересылкой упаковка из 20 микросхем
КР1878ВЕ1 обошлась мне в 5800 рублей, т.е. по 290 руб. за штуку...
iLavr
Александр А.
Senior
Posts: 165
Joined: 25 Jan 2015 18:38
Location: 109.225.59.224

Re: КР1878ВЕ1

Post by Александр А. »

маркировка: 1504
Год/неделя. Обычно сейчас так маркируют.

Штамп "Опытный" впечатлил :o
Просто Александр.
SfS
Doomed
Posts: 491
Joined: 17 Apr 2005 05:35
Location: Томск

Re: КР1878ВЕ1

Post by SfS »

Я делал на этом КР1878ВЕ1 два проекта: динамический индикатор на 4 разряда с 1-проводной шиной управления и управление двигателем с защитой по току.

Впечатления положительные. Контроллер очень прост в программировании. Регистров много. Для мелких проектов удобен.
User avatar
Shaos
Admin
Posts: 24012
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: КР1878ВЕ1

Post by Shaos »

А чем его программировать?...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 15:08
Location: Россия

Re: КР1878ВЕ1

Post by Lavr »

Его программатором и софтом. Схема есть в документации и есть в Интернете.
К сожалению, у меня сейчас нет на диске данных о нём.
iLavr
User avatar
Shaos
Admin
Posts: 24012
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: КР1878ВЕ1

Post by Shaos »

Просто есть возможность купить сей чип на ебее - вот думаю стоит ли...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 15:08
Location: Россия

Re: КР1878ВЕ1

Post by Lavr »

Купи для коллекции парочку - чисто для спортивного интересу...

Я их купил много, но с исполнением заказа они подзадержались более чем на месяц.
Время было упущено, и поиграться с удовольствием не случилось.
Так и лежит у меня упаковка этих КР1878ВЕ1...
iLavr
User avatar
Shaos
Admin
Posts: 24012
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: КР1878ВЕ1

Post by Shaos »

Вот и уменя также - пока жду когда детали придут или плата готовая из шеньженя доползёт - весь интерес улетучивается :mrgreen:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Shaos
Admin
Posts: 24012
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

Re: КР1878ВЕ1

Post by Shaos »

Shaos wrote:Вот и уменя также - пока жду когда детали придут или плата готовая из шеньженя доползёт - весь интерес улетучивается :mrgreen:
Как-то удивительно быстро две штуки в Колорадо добрались из Воронежа :mrgreen:
Attachments

KP1878BE1.jpg
KP1878BE1.jpg (98.03 KiB) Viewed 22116 times

Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 15:08
Location: Россия

Re: КР1878ВЕ1

Post by Lavr »

Поздравляю...
iLavr
Post Reply