Процессор, память и архитектура шин

Материал из MIK32 микроконтроллер

Архитектура шин

Система MIK32

Блок-схема представляет внутреннюю коммуникацию основных блоков микроконтроллера. Центральная шина устройства - AHB (Advanced High-performance Bus). Ядро SCR1 является основным мастером этой шины. Помимо того, модуль прямого доступа в память и интерфейс отладки так же могут быть мастерами на данной шине.

Память ОЗУ, EEPROM, и память на интерфейсе SPIFI доступны по-очереди через шину AHB.

Большая часть периферийных модулей находится на двух периферийных шинах (APB), соединенных с AHB мостами.

Сторожевой таймер шины, контролирует время отклика ведомых устройств на шине AHB (контроллер EEPROM, CRC32, ускоритель симметричной криптографии).

Коммутационная матрица AHB

Устройство предназначено для коммутации четырех ведущих и трех ведомых устройств с интерфейсом AHB Lite и обеспечивает доступ ведущих к устройствам на шинах APB_M и APB_P через соответствующие мосты. Коммутационная матрица обеспечивает одновременный доступ нескольких ведущих устройств к различным ведомым. Арбитраж нескольких ведущих к одному ведомому реализован на основе приоритетов с использованием алгоритма "карусель" (Round Robin). Обеспечивает организацию независимого адресного пространства для каждого из ведомых устройств. При обращении к недопустимому адресу (не входящему в адресное пространство мастера) формируется ответ с признаком ERROR. Возможные коммутации ведущих и ведомых устройств представлены в таблице

Ведущий Домен 0 и батарейный домен Память (EEPROM/ОЗУ/SPIFI) Периферийные устройства
Ядро (инструкции) +
Ядро (данные) + + +
DMA + +
Интерфейс тестирования + + +

Примечание – «–» -коммутация отсутствует, «+» - наличие коммутации.

Процессор

В состав микросхемы входит ядро SCR1, разработка компании Syntacore, на базе открытой архитектуры RISC-V.

Реализована следующая конфигурация:

  1. Процессорное ядро RV32I - базовый целочисленный набор команд (минимальный необходимый набор команд, 32х-битное адресное пространство, 32 регистра общего назначения по 32 бита, все инструкции ширины 32 бита);
    1. расширение «M» - стандартное опциональное расширение для операций целочисленного умножения и деления;
    2. расширение «С» - стандартное опциональное расширение для сокращенных инструкций, дополнительный набор инструкций ширины 16 бит;
  2. встроенный интегрированный программируемый контроллер прерываний отключен;
  3. поддержка отладки через интерфейс JTAG IEEE Std 1149.1-2013 (совместима с RISC-V External Debug Support Spec Ver. 0.13.2), поддержка стандартных функций отладки: Reset, Halt / Resume / Step, доступ к GPR, CSR, MEM, HW Breakpoint / Watchpoint;
  4. трехступенчатый конвейер;
  5. матрица AHB, обеспечивает коммутацию всех устройств с интерфейсами AHB и APB.
  6. системный TAP контроллер, обеспечивает доступ к отладочному тестовому интерфейсу, обеспечивает граничное сканирование выводов микросхемы;
  7. блок управления тестированием, предназначен для управления тестированием памяти и аналоговых блоков, а также обеспечивает доступ к регистрам периферийных модулей и ячейкам памяти без участия ядра;

Память

  • Статическое ОЗУ размером 4096x32 с поддержкой байтового доступа;
  • Блок электрически стираемого перепрограммируемого ПЗУ (по технологии EEPROM) размером 2048x38 с контроллером интерфейса AHB со схемой коррекции ошибок (организация памяти 32 плюс 6) и возможностью исполнения программы;
  • Блок однократно программируемой памяти ПЗУ размером 256 бит с возможностью программного чтения данных, предназначен для хранения поправочных коэффициентов и заводского номера изделия;
  • Возможность подключения внешней памяти по интерфейсу QSPI (до 4МБайт), позволяет значительно расширить память программ."Кэш-память" позволяет инструкциям поступать без задержек в большей части случаев обращения к памяти;

Менеджер загрузки обеспечивает управление выбранным источником загрузки (SPI FLASH, ОЗУ, EEPROM);

Другие устройства на шинах

Домен питания

  • LDO_BU – регулятор напряжения батарейного домена с низким падением напряжения (входное напряжении 2,5 – 3,6 В, номинальное выходное напряжение 1,8 В, допустимая нагрузка до 5 мА);
  • LDO_SYS – основной регулятор напряжения с низким падением напряжения (входное напряжении 3,0 – 3,6 В, номинальное выходное напряжение 1,8 В, допустимая нагрузка до 60 мА);
  • WakeUp - обеспечивает управление питанием и сбросом домена 0;

Домен сброса и тактирования

  • PORandBor (Power On Reset and BrownOut) – формирователь сигнала сброса батарейного домена при включении питания и контроль снижения напряжения питания ниже заданного;
  • блок управления питанием и тактированием обеспечивает управление питанием и управление тактовыми сигналами (установка коэффициентов делителей для шин, отключение тактирования отдельных устройств);
  • Внешние генераторы
    • OSC32K – генератор с выводами для подключения внешнего часового кварцевого резонатора;
    • OSC32M – генератор с выводами для подключения внешнего кварцевого резонатора для тактирования системы с частотой от 1 до 32 МГц (генератор по-умолчанию);
  • Внутренние генераторы
    • HSI32M – встроенный генератор с частотой 32 МГц с возможностью корректировки частоты;
    • LSI32K встроенных генератора с частотой 32 кГц с возможностью корректировки частоты;
  • монитор частоты, предназначен для контроля состояния источников тактирования во время работы микроконтроллера;

Периферийные устройства

  • контроллер выводов, обеспечивает управление функциями мультиплексированных выводов, два 16-ти и один 8-ми разрядных порта ввода-вывода общего назначения (GPIO);
  • контроллер прерываний обеспечивает поддержку 32 маскируемых прерываний от периферийных устройств;
  • CRC32 – модуль, предназначен для вычисления контрольной суммы (CRC) массива данных без использования вычислительных ресурсов центрального процессора на основе произвольного 32х-разрядного полинома;
  • ускоритель симметричной криптографии, реализует три специализированных преобразования:
    • AES128, FIPS 197 128-битный блочный шифр, со 128-битным ключом;
    • «Магма», ГОСТ 34.122015 64х-битный блочный шифр;
    • «Кузнечик», ГОСТ 34.122015 128-битный блочный шифр;
    • Поддерживает режимы сцепления блоков (ECB, CBC, CTR);часы реального времени с функцией календаря с корректировкой для високосного года и программируемым будильником с возможностью генерации прерываний и регистровым файлом 16х32 бит, для хранения пользовательских данных в батарейном домене;
  • три модуля «Таймер32», каждый из которых представляет собой настраиваемый 32х-разрядный счетчик с программируемым делителем и тремя режимами счета (прямой, обратный и двунаправленный). Timer32_1, Timer32_2 дополнительно имеют четыре независимых канала, способных работать в режиме захвата, сравнения или ШИМ;
  • контроллер DMA, реализует передачу данных между ведомыми устройствами на коммутационной матрице без участия ядра, имеет четыре независимых канала, обеспечивающих работу в режимах память-память, периферия-периферия, память-периферия с программируемым уровнем приоритетов обработки запросов;
  • SPIFI контроллер, обеспечивает интерфейс к внешней флэш-памяти и поддерживает два режима работы: режим работы с периферией и режим работы с памятью. Контроллер обеспечивает выполнение инструкций из внешней памяти и имеет КЭШ-память размером 256х32. Контроллер поддерживает работу в обычном последовательном и в: 2-х и 4-х битном параллельном режимах и обеспечивает возможность исполнения программы;
  • цифровая часть аналоговых блоков, обеспечивает доступ со стороны ядра к АЦП, ЦАП, мониторам температуры и напряжения;  три «Таймер16», каждый из которых представляет собой настраиваемый 16-ти разрядный счетчик с программируемым делителем (1, 2, 4, 8, 16, 32, 64, 128) с поддержкой режима ШИМ и настраиваемыми входными цифровыми фильтрами;
  • два модуля SPI для взаимодействия с различными периферийными устройствами, такими, как микросхемы памяти, датчики температуры, датчики давления, аналоговые преобразователи, часы реального времени, дисплеи и любые SD карты, поддерживающие последовательный режим обмена. Контроллер поддерживает работу в режиме ведущего и ведомого;
  • два модуля I2C, обеспечивающих последовательный интерфейс в соответствии со спецификацией на шину I2C от компании Philips/NXP. Контроллер I2C представляет собой двунаправленный, восьмибитный приемо–передатчик для взаимодействия с различными периферийными устройствами;
  • два модуля USART - синхронно-асинхронный приемо-передатчик, который поддерживает широкий диапазон скоростей передач и форматов данных, задаваемых программно, с возможностью автоматически формировать бит четности и с возможностью обнаружения ошибок;
  • 12-ти разрядный АЦП, предназначен для преобразования входного аналогового сигнала в 12-разрядный цифровой код. Количество каналов 8, частота преобразования 1 МГц;
  • 12-ти разрядный ЦАП, предназначен для преобразования входного 12- разрядного цифрового кода в аналоговый сигнал. Количество каналов 2, частота преобразования 1 МГц;
  • монитор температуры с программируемыми порогами срабатывания;
  • два монитора питания напряжением с программируемым порогом срабатывания, котроллируемые напряжения: AVCC и VCC_BAT;
  • сторожевой таймер - схема контроля над зависанием системы. Обеспечивает формирование прерывания и сброса, если не был выполнен программный сброс счетчика;

Архитектура системы прерываний ядра SCR1

В данной реализации существует только один вектор для входа в прерывание. Прерывания могут исходить из встроенной в ядро периферии, или из внешней периферии контроллера. За адрес вектора прерывания отвечает регистр процессора MTVEC [0x305].

Регистры процессора в основном не отражаются в общую карту памяти 4G, поэтому применяются специальные команды записи, чтения, сброса и установки (подключаются команды через включение заголовочного файла riscv_csr_encoding.h).

Подробное описание регистров находится в общем описании ядра SCR1

Описание некоторых важных регистров процессора

Регистр MSTATUS (0x300)

Адрес в карте регистров процессора: 0x300; Отображает статус прерываний.

Значение после сброса 0x1880.

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Зарезервировано
rz rz rz rz rz rz rz rz rz rz rz rz rz rz rz rz
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Резерв PP Резерв PIE Резерв IE Резерв
rz rz rz rz rw rz rz rz rw rz rz rz rw rz rz rz

Бит 3 IE[3] - Глобальное разрешение прерываний

  • 0 - Прерывание запрещено
  • 1 - Прерывание разрешено

Бит 7 PIE[7] - Предыдущее глобальное разрешение прерываний

  • 0 - Прерывание запрещено
  • 1 - Прерывание разрешено

Бит 7 PP[11] - Предыдущий Privelege mode

  • 0 - Да
  • 1 - Нет
Регистр MIE (0x304)

Адрес в карте регистров процессора: 0x304; Управляет разрешением прерываний.

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Зарезервирован
rz rz rz rz rz rz rz rz rz rz rz rz rz rz rz rz
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Зарезервирован EIE Зарезервирован TIE Зарезервирован SIE Зарезервирован
rz rz rz rz rw rz rz rz rw rz rz rz rw rz rz rz

Бит 11 EIE[11] - Разрешение внешних прерываний

  • 0 - Прерывание запрещено
  • 1- Прерывание разрешено

Бит 7 TIE[7] - Разрешение прерывания от встроенного в ядро таймера

  • 0 - Прерывание запрещено
  • 1- Прерывание разрешено

Бит 3 SIE[3] - Разрешение прерывания вызванного программно

  • 0 - Прерывание запрещено
  • 1- Прерывание разрешено
Регистр MTVEC (0x305)

Адрес в карте регистров процессора: 0x305, Задает адрес вектора прерываний. Значение после подачи сброса: 0x00000000;

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
TRAP Зарезервировано
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Зерезервировано Зарезервировано Mode
rw rw rw rw rw rw rw rw rw rw rz rz rz rz rw rw

Биты 31:24 TRAP[31:24] - Соответствуют верхним 8 битам 32-битного адреса единственного в системе вектора прерываний. Нижние 24 бита фиксированы в значение 0x0000C0.

Биты 1:0 Mode[1:0] - режим работы

  • 01 - векторный режим. In vectored mode, asynchronous interrupts set PC to BASE+4×cause (данный режим не реализован?)
  • 00 - прямой режим

Встроенный в ядро таймер

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

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

Часть регистров управления отражается в общей карте памяти 4Gb

Описание регистров

Абсолютный адрес адрес блока в карте памяти 0x00490000

Регистр TIMER_CTRL

Регистр управления таймером ядра. Смещение - 0x00. Значение после подачи сброса: 0x00000000;

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Зарезервировано
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Зерезервировано CLKSRC ENABLE
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Бит 0 ENABLE[0] - управление включением таймера

  • 0 - таймер выключен
  • 1 - таймер включен

Бит 1 CLKSRC[1] - выбор источника тактового сигнала

  • 0 - внутренний тактовый сигнал
  • 1 - тактовый сигнал поступает от часов реального времени
Регистр TIMER_DIV

Регистр управления делителем частоты таймера ядра. Смещение - 0x04. Значение после подачи сброса: 0x00000000;

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
Зарезервировано
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Зарезервировано DIV
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Биты 9:0 DIV[9:0] - делитель подаваемой частоты, рассчитывается по формуле F/(DIV+1), где F - подаваемая частота

Регистр TIMER_MTIME

Регистр значения текущего счетчика таймера. Смещение - 0x08. Значение после подачи сброса: 0x00000000;

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
MTIME
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MTIME
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Биты 31:0 MTIME[31:0] - счетчик таймера - младшие 4 байт

Регистр TIMER_MTIMEH

Регистр значения текущего счетчика таймера, старшее слово. Смещение - 0x0С. Значение после подачи сброса: 0x00000000;

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
MTIMEH
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MTIMEH
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Биты 31:0 MTIMEH[31:0] - счетчик таймера - старшие 4 байт

Регистр TIMER_MTIMECMP

Регистр сравнения счетчика таймера. Смещение - 0x10. Значение после подачи сброса: 0x00000000;

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
MTIMECMP
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MTIMECMP
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Биты 31:0 MTIMECMP[31:0] - счетчик таймера - младшие 4 байт

Регистр TIMER_MTIMECMPH

Регистр сравнения счетчика таймера, старшее слово. Смещение - 0x14. Значение после подачи сброса: 0x00000000;

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
MTIMECMPH
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
MTIMECMPH
rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw rw

Биты 31:0 MTIMECMPH[31:0] - счетчик таймера - старшие 4 байт