ПЛЮСЫ на “АМУРЕ”
Исследование 100% российского микроконтроллера к1948вк018 (“АМУР”) и его будущих аналогов с применением новых стандартов C++
[21.10.2024]
Добавлен класс UART0_DMA_RECEIVER для приёма данных в буфер (всего 10 байтов пока) на аппаратном уровне (ищите в terminal_2Mbaud_21_10_2024.txt текст «UART0 . DMA : data received: “0123456789”» & «UART0 . DMA : data received: “ABCDEFGHIJ”»). UART сейчас настроен на 2 Мбод (данные принимаем/передаём за 5 мкс / байт).
В методе ST7735s_class::draw_DMA_RAM, который транслирует кадр на дисплей порциями по 512 байтов через ОЗУ (байт должен быть передан за 1 мкс), сделана пауза 512 мкс средствами ассемблерной вставки (ToDo: надо будет потом посмотреть на осциллографе точность этой самой паузы, есть сомнения)
[24.10.2024]
В целях ускорения передачи кадра на LCD, немного модифицирован метод void ST7735s_class::draw_DMA_RAM/* ОЗУ */(pixel const* picture)
, нужно проверить потом на ELBEAR ACE UNO
[25.10.2024]
Переделан метод вывода кадра порциями по пол-килобайта из ОЗУ вне ядра (чтобы потом в ядре читать эти данные из файла на ПЗУ, преимущественно, в это же самое время)
void ST7735s_class::draw_DMA_RAM/* ОЗУ */(pixel const* picture)
{
io_set(DEBUG_OUT);
command4(/* CASET */0x2A, 0, yoff, 0, yoff + ysize - 1);
command4(/* RASET */0x2B, 0, xoff, 0, xoff + xsize - 1);
command (/* RAMWR */0x2C);
uint32_t const* p = (uint32_t const*)&picture[2];
static constexpr uint32_t N = 256/* пикселей = пол-кило-байтов */;
uint32_t size = xsize * ysize / N ; /// количество порций величиной в N * sizeof(uint16_t)
HAL_SPI_Enable ( &h_spi ) ;
while ( size-- )
{
uint32_t t [ N/2 ] ; for ( uint32_t i = 0; i < N/2; i++ ) t [ i ] = p [ i ] ;
HAL_DMA_Start ( &h_dma_ch0, (void*)t, (void*)&h_spi.Instance->TXDATA, N * sizeof(uint16_t) /* байтов */ - 1 ) ;
while ( ! HAL_DMA_GetChannelReadyStatus ( &h_dma_ch0 ) ) ;
////////////////////////////////////////////////////////////////////////////////
/// ВО ВРЕМЯ ОЖИДАНИЯ ОТПРАВКИ МОЖНО ЧИТАТЬ СЛЕДУЮЩУЮ ПОРЦИЮ ДАННЫХ ИЗ ФАЙЛА ///
////////////////////////////////////////////////////////////////////////////////
p += N/2;
}
HAL_SPI_Disable ( &h_spi ) ;
io_clr(DEBUG_OUT);
}
Выяснилось, что искажения изображения не наблюдаются теперь, а время составляет 41 мс (src/ST7735s_class__draw_DMA_RAM__duration.jpg
).
[14.11.2024]
ПЕРВОЕ ПРИМИТИВНОЕ ВИДЕО (160 на 80 пикселей, частота ~ 20 кадров/с, всего 5 кадров, хранилище - флешь W25), на базе класса ST7735s_class
сделан простейший проигрыватель primitive_video_player
(находится в модуле CPP_17_tst.cpp
). Для конвертации использован скрипт bmp2ddp_ST7735s/convert_input_video_N_frames.py
. Сами кадры (растр) находятся в заголовочнике output_video_array.h
Дальнейшее развитие: использовать для хранения видео-файлов карту памяти формата micro-SD, подключенную через второй SPI микроконтроллера.
Библиотека для файловой системы непременно должна быть в стиле ООП (класс C++), она уже почти готова.
[18.11.2024]
ПЕРВЫЙ ШАГ В ОСВОЕНИИ ЧАСОВ РЕАЛЬНОГО ВРЕМЕНИ, ВСТРОЕННЫХ В 100% РОССИЙСКИЙ МИКРОКОНТРОЛЛЕР. RTC_research/VBAT_connection.jpg
- питание часов от батарейки 3 В (CR2032). В модуле CPP_17_tst.cpp
:
// #define SET_DATE_AND_TIME__18_11_2024 <--- ЧТОБЫ НАСТРОИТЬ КАЛЕНДАРЬ И ЧАСЫ
RTC_HandleTypeDef hrtc;
RTC_TimeTypeDef LastTime = {0};
RTC_TimeTypeDef CurrentTime = {0};
RTC_DateTypeDef CurrentDate = {0};
void SystemClock_Config(void) { <...> }
static void RTC_Init(void) { <...> }
[19.11.2024]
Организован вывод микро-текста на микро-дисплей. Из детства мне нравится всё миниатюрное. Возможно, это мой пожизненный косяк. Но здесь огромное количество букв, выведенное на один экран, это хорошо, потому что разрешение 160 на 80 пикселей )
void ST7735s_class::putpixel(u16 x, u16 y, pixel color)
{
y = ysize - y;
command4(/* CASET */0x2A, 0, yoff + y + 0,
0, yoff + y + 1);
command4(/* RASET */0x2B, 0, xoff + x + 0,
0, xoff + x + 1);
command (/* RAMWR */0x2C);
color = ~color;
data(color >> 8);
data(color & 255);
}
#include "3_5x5.inc"
void putpixel(u16 x, u16 y, t_color color)
{
LCD . putpixel ( x, y, ST7735s_class::pixel(color) ) ;
}
Библиотека 3_5x5.inc
для вывода микро-текста была сделана ОЧЕНЬ давно, в 2012 - 2013 годах, поэтому там язык C.
[20.11.2024]
Произведены замеры тока потребления резервного источника питания (VBAT) при питании от основного источника (3,3 В) - RTC_research/VBAT_current_main_power_source.jpg
и при питании идущих часов от этого самого резервного источника (3 В, CR2032) - RTC_research/VBAT_current_backup_power_supply.jpg
Описание
Исследование 100% российского микроконтроллера к1948вк018 ("АМУР") и его будущих аналогов с применением новых стандартов C++