Документация MIK32 АМУР с исправлениями ошибок

cryptozoy

Member
«Техническое описание К1948ВК018 RISC-V микроконтроллер MIK32 АМУР Версия 2.1.5» с исправлениями от 03.07.2024
Новая порция предложений и замечаний.

стр. 11-13, таб. 2 - распределение адресного пространства:
- устройства батарейного домена, отсутствует запись для Менеджера загрузки (Boot Manager), смещение +0x0800 (указан в mcu_memory_map.h в стр. 31)
- отсутствует запись SRC1_Timer, адрес 0x0049_0000 (указан в mcu_memory_map.h в стр. 59)

Добавить наименования и сокращения (таб. 2):
- Блок управления питанием и тактированием (PM)
- Контроллер прерываний (EPIC)
- Контроллер выводов (PAD)
- Сторожевой таймер шины (WDT)
- Контроллер блока однократно программируемой памяти (OTP)
- Монитор напряжения (PVD)
- Модуль пробуждения (WakeUp, WU)
- Часы реального времени (RTC)
- Менеджер загрузки (Boot Manager)
- Ускоритель симметричной криптографии (CRYPTO)
- Блок вычисления контрольных сумм (CRC)
- Сторожевой таймер (WDT)
- Универсальный синхронный/асинхронный приёмопередатчик (USART_0)
- Универсальный синхронный/асинхронный приёмопередатчик (USART_1)
- Модуль 16-разрядного таймера (Timer16_0)
- Модуль 16-разрядного таймера (Timer16_1)
- Модуль 16-разрядного таймера (Timer16_2)
- Модуль 32-разрядного таймера (Timer32_1)
- Модуль 32-разрядного таймера (Timer32_2)
- Модуль последовательного синхронного приемопередатчика (SPI_0)
- Модуль последовательного синхронного приемопередатчика (SPI_1)
- Модуль последовательного асимметричного приемопередатчика (I2C_0)
- Модуль последовательного асимметричного приемопередатчика (I2C_1)
- Модуль порта ввода/вывода общего назначения (GPIO16_0)
- Модуль порта ввода/вывода общего назначения (GPIO16_1)
- Модуль порта ввода/вывода общего назначения (GPIO8_2)
- Блок формирования прерываний GPIO (GPIO_IRQ)
- Блок управления аналоговой подсистемой (ANALOG_REG)

Примечание:
1. Универсальный синхронный/асинхронный приёмопередатчик на рис. 89 представлен, как UART_X, в списке устройств, как USART_Х. При этом USART в документе встречается 21 раз, а UART - 38 (в т.ч. на схемах). Наверное нужно использовать что-то одно. В перечне сокращений и в перечне состава контроллера используется USART.
2. Все адреса и смещения в таб. 2 совпадают с указанными в файле mcu_memory_map.h
 

cryptozoy

Member
- отсутствует запись SCR1_Timer, адрес 0x0049_0000 (указан в mcu_memory_map.h в стр. 59)
Добавил SCR1_Timer в таблицу распределения адресного пространства MIK32. Описание добавлю позднее.

Всё то, что описано в документации по ядру Syntacore SCR1 RISC-VExternal Architecture Specification, Version 1.2.9 - 20220113 и SCR1 User Manual, Version 1.1.4 - 20220113, разработчики MIK32, судя по всему, решили не вносить в документацию по микроконтроллеру на русском языке. Также никто не собирается возиться и с переводом ещё двух документов по теме RISC-V Instruction Set Manual: The RISC-V Instruction Set Manual. Volume I, User-Level ISA Version 2.2 - 20170507 и The RISC-V Instruction Set Manual. Volume II, Privileged Architecture Version 1.10 - 20170507.
 
Последнее редактирование:
Остаются следующие неясности:

1) Страница 13: "Программно возможно изменить способ загрузки путём записи необходимой конфигурации в регистр BOOT модуля WakeUp."

Что за регистр BOOT модуля WakeUp и где его описание?
Вот, что удалось найти в настройках MikronIDE:

1) BOOT_MANAGER (0x608000) - блок управления режимом загрузки.
Доступ: RW
BOOT_MODE (смещение +0x00) - регистр режима загрузки, может принимать значения:
- 0x0 - EEPROM, старт из встроенной памяти EEPROM;
- 0x1 - RAM, старт из системного ОЗУ;
- 0x2 - SPIFI, старт из внешней памяти с использованием контроллера SPIFI

2) SRC1_TIMER (0x490000) - Регистры системного таймера.
Доступ: RW
TIMER_CTRL (смещение 0x00) - Регистр конфигурации
- CLKSRC (bit 1) - Источник тактирования:
* HCLK. Тактирование ядра (частота шины AHB hclk);
* External_clk. Внешний RTC (источник выбранный в PM.CPU_RTC_CLK_MUX).
- ENABLE (bit 0) - Включение таймера.

TIMER_DIV (смещение 0x4) - Делитель частоты. Счет идет каждые DIV+1 такта частоты;
MTIME (смещение 0x8) - Счетчик таймера, младшее слово;
MTIMEH (смещение 0xc) - Счетчик таймера, старшее слово;
MTIMECMP (смещение 0x10) - Регистр сравнения, младшее слово;
MTIMECMPH (смещение 0x14) - Регистр сравнения старшее слово.
 

mscs

Member
В таблице 31 на стр. 95 указаны неправильные смещения регистров RXDR и TXDR.
Корректные значения смещений: 0x24 - RXDR; 0x28 - TXDR.
 

Shagen

New member
Доброго времени суток. Огромное спасибо и за документацию, и за её исправления.

Немного дополню:
1) страница 33, рисунок 15. USART_CR2 register продублирован и ни к чему не подключён.
2) страница 273, рисунок 89 - домены питания. Легенда сверху. Для Vcc и AVсс прописаны верхние границы напряжения в 5 вольт.
 

cryptozoy

Member
1) страница 33, рисунок 15. USART_CR2 register продублирован и ни к чему не подключён.
2) страница 273, рисунок 89 - домены питания. Легенда сверху. Для Vcc и AVсс прописаны верхние границы напряжения в 5 вольт.
Исправил. Проверьте.
 

cryptozoy

Member
«Техническое описание К1948ВК018. RISC-V микроконтроллер MIK32 АМУР Версия 2.1.5» с исправлениями от 11.07.2024

Остаются следующие неясности:

1) Страница 13: "Программно возможно изменить способ загрузки путём записи необходимой конфигурации в регистр BOOT модуля WakeUp."

Что за регистр BOOT модуля WakeUp и где его описание?

В файлах найдено только это:

wakeup.h:
#define WU_BOOT 0x28

mcu32_memory_map.h:
#define WU_BASE_ADDRESS 0x00060000
...
#define WU (( WU_TypeDef *) WU_BASE_ADDRESS )
и
#define BOOT_MANAGER_BASE_ADDRESS 0x00060800
...
#define BOOT_MANAGER (( BOOT_MANAGER_TypeDef *) BOOT_MANAGER_BASE_ADDRESS )

boot.h:
#define BOOT_EEPROM 0
#define BOOT_RAM 1
#define BOOT_SPIFI 2

Модуль BOOT_MANAGER находится в «Батарейном домене» вместе с модулем WU (WakeUp), судя по рисунку 89 «Домены питания» на странице 273. То есть функционал с программным выбором источника загрузки по идее должен быть у MIK32.



2) Страница 25: "В случае установки бита CURRENT_VALUE будут возвращаться значения текущего счёта, в противном случае будут возвращаться значения, установленные при настройке канала. В данном случае будут возвращены данные в соответсвии с таблицей 12."

Непонятно какой из двух случаев является «данным».



3) Страница 278:

"Выбор тактового сигнала для Timer32_0:
MUX_TIM32_0[0] = 0 – sys_clk (TIM1);
MUX_TIM32_0[0] = 1 – hclk (TIM1);
MUX_TIM32_0[1] = 0 – OSC32K (TIM2);
MUX_TIM32_0[1] = 1 – LSI32K (TIM2)."

Тут неясность: 3 бита выбора, четыре варианта без нормального обозначения (в виде элементов массива битов это конечно оригинально).

В старом документе Версии 2.1 - 0823 в той же ячейке таблицы такое:

"Выбор тактового сигнала для Timer32_0:
0x0 – системная частота (sys_clk);
0x1 – частота шины AHB (hclk);
0x2 – частота внешнего осцилятора OSC32М;
0x3 – частота встроенного осцилятора HSI32M;
0x4 – частота внешнего осцилятора OSC32К;
0x5 – частота встроенного осцилятора LSI32K."



4) Отсутствует описание 64-битного системного таймера SCR1_Timer, базовый адрес которого 0x0049_0000 указан в файле mcu_memory_map.h в строке 59.

У популярнейшей Arduino UNO (и у её восьмиразрядных аналогов на базе микроконтроллера ATmega328P и т.п.) системный таймер, отсчитывающий микросекунды, построен на базе 8-битного таймера, и его переполнение вызывает регулярные высокочастотные прерывания (для записи счёта в старшие разряды, в миллисекунды и выше), мешающие реальному режиму времени пользовательской программы. У MIK32 c системным таймером SCR1_Timer подобной проблемы не существует, потому что работая даже на максимальной частоте в 32 МГц он переполнится не ранее чем через 18 тысяч лет!
 
Последнее редактирование:
Сверху