nedoPC.org

Community of electronics hobbyists established in 2002

...
Atom Feed | View unanswered posts | View active topics It is currently 19 Jul 2018 00:18



Reply to topic  [ 8 posts ] 
КР1878ВЕ1 
Author Message
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Плотно я сейчас занимаюсь этим отечественным микроконтроллером - КР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


04 Feb 2015 20:25
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Итак - о механизмах косвенной адресации... Супротив 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


06 Feb 2015 17:34
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Ясное дело, что дальше по сюжету надо рассказать про систему команд микроконтроллера КР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


08 Feb 2015 23:24
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
Проверил я порядка 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


12 Feb 2015 16:21
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Post 
И я подумал, что неплохо бы фрагмент программы с кодом инициализации портов
ввода-вывода здесь привести, тем более, что и код этот многократно проверенный
от одной из самых удачных разработок на микроконтроллере КР1878ВЕ1 -
"Частотомер на КР1878ВЕ1. Радио ¹10, за 2000 год" от Д. Богомолова.
Нет ни одного упоминания, чтобы эта конструкция не повторилась! :kruto:
Code:
;########################################################:
;#  инициализация портов ввода-вывода                   #:
;########################################################:
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


12 Feb 2015 22:28
Profile
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Ну вот и приехали, наконец, мои 20 штук КР1878ВЕ1 от производителя...
Attachment:
1878BE10034.jpg
1878BE10034.jpg [ 58.03 KiB | Viewed 3279 times ]

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

Реализует Ангстрем свои изделия только юридическим лицам, поэтому пришлось
обратиться в дружественную компьютерную фирму, которая и заказала мне эти
микросхемы по безналичному расчету 17 марта 2015 г.

Если мы тут правильно разобрались с маркировкой отечественных микросхем, то
в апреле 2015 г. Ангстрем "испёк" партию этих изделий (маркировка: 1504 )
Attachment:
1878BE10035.jpg
1878BE10035.jpg [ 50.91 KiB | Viewed 3279 times ]


Изделия весьма цивильно упакованы и сопровождаются вот такой бумагой:
Attachment:
1878BE1etik.jpg
1878BE1etik.jpg [ 174.24 KiB | Viewed 3279 times ]

Изделия поступили на склад компьютерной фирмы во вторник 12 мая 2015 г. т.е. - без
5 дней фактически прошло 2 месяца с момента заказа.
В итоге со всеми НДС, безналичкой/наличкой и пересылкой упаковка из 20 микросхем
КР1878ВЕ1 обошлась мне в 5800 рублей, т.е. по 290 руб. за штуку...

_________________
iLavr


15 May 2015 06:47
Profile
Senior

Joined: 25 Jan 2015 12:38
Posts: 148
Location: 109.225.59.224
Reply with quote
Quote:
маркировка: 1504

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

Штамп "Опытный" впечатлил :o

_________________
Просто Александр.


15 May 2015 09:48
Profile
Doomed

Joined: 16 Apr 2005 23:35
Posts: 492
Location: Томск
Reply with quote
Я делал на этом КР1878ВЕ1 два проекта: динамический индикатор на 4 разряда с 1-проводной шиной управления и управление двигателем с защитой по току.

Впечатления положительные. Контроллер очень прост в программировании. Регистров много. Для мелких проектов удобен.


10 Jun 2015 03:56
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 8 posts ] 

Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.