К1921ВГ015 FreeRTOS

32-разрядные микроконтроллеры разработки АО "НИИЭТ"

Модераторы: ea, dav, bkolbov, Alis, pip, _sva_

dezna
Сообщения: 10
Зарегистрирован: 20 дек 2024, 08:23
Предприятие: avtomatica

К1921ВГ015 FreeRTOS

Сообщение dezna »

1. есть ли у кого опыт подключения FreeRTOS к RISC-V?
2. в документации практически ничего не описано по CLINT и MTIMER которые нужны для оси. не понятно есть ли прерывание от MTIMER, и как его добавить.
3. не понятна система векторов прерываний. есть ли векторная или только программный обработчик на основе анализа MICC/UICC?
4. для разработчиков мк - из РП:

Код: Выделить всё

Регистр CLINT_MTIMECMP0 содержит 64-битное значение таймера. Значение увеличивается по сигналу timer_pulse внешнего интерфейса процессорного комплекса. Структура регистра CLINT_MTIMECMP представлена в таблице 9.2.
как мне кажется инкремент происходит не этого регистра а CLINT_MTIME
5. при попытке подключения оси мк запирается в бесконечном цикле обработчика исключений из plic.c: trap_handle.
mcause = 6 (MCAUSE_EXCEPT_STAMOADDRMISALGN=Доступ по не выровненному адресу при операции записи)
mepc указывает на адрес 800018de

Код: Выделить всё

     load_x  x5, portCRITICAL_NESTING_OFFSET * portWORD_SIZE( sp )    /* Obtain xCriticalNesting value for this task from task's stack. */
800018d8: 52d6                 lw        t0,116(sp)
     load_x  x6, pxCriticalNesting           /* Load the address of xCriticalNesting into x6. */
 800018da: 8841a303            lw        t1,-1916(gp) # 40000004 <pxCriticalNesting>
     store_x x5, 0( x6 )                     /* Restore the critical nesting value for this task. */
 800018de: 00532023            sw        t0,0(t1)
я не могу понять... до куда нужно выравнивать? выравнивание по 4 байта мало?
по даташиту SW - 32bit инструкция перемещения...

этапы запуска мк по примерам производителя - пройден. светодиоды моргают.
к сожалению на арм пользовал другую ось, и она risc-v не поддерживает, потому пришлось на эту перейти.
вобщем буду благодарен за помощь
dezna
Сообщения: 10
Зарегистрирован: 20 дек 2024, 08:23
Предприятие: avtomatica

Re: К1921ВГ015 FreeRTOS

Сообщение dezna »

с п.5 разобрался частично. теперь исключение с другим кодом 0xb
проблема была в том что исходный проект от производителя не содержит кода инициализации предустановленными в коде значениями переменных, только обнуление BSS секции.
пришлось и код добавлять и линкерый скрипт править...
с остальными вопросами пока тишина...
п.2 и 3 производитель молчит, как и тут (никто вообще ничего не написал)
mic
Сообщения: 1
Зарегистрирован: 26 дек 2024, 14:48
Предприятие: Софт

Re: К1921ВГ015 FreeRTOS

Сообщение mic »

deznа, вы используете отладочную плату или свою?
dezna
Сообщения: 10
Зарегистрирован: 20 дек 2024, 08:23
Предприятие: avtomatica

Re: К1921ВГ015 FreeRTOS

Сообщение dezna »

я использую свою плату.
мне нет надобности в промежуточных вариантах, нужно адаптировать готовый проект. пока что мне только 1 раз понадобилась чужая плата, когда исследовал STM32-Discovery с TFT. а так то на своих всегда.
Спасибо разработчикам производителя, прислали настроенный вариант ОС от 2022г.
можно переходить к остальным модулям.
я пытался запустить 2024г, видимо она совсем новая а я без опыта в ней...
часть из примера я уже сам доделал, но ребята мне серьезно сократили время выкинутое на эту ОС за что им спасибо!
может выложат у себя пример для всех.
dezna
Сообщения: 10
Зарегистрирован: 20 дек 2024, 08:23
Предприятие: avtomatica

Re: К1921ВГ015 FreeRTOS

Сообщение dezna »

ОС заработала.
стал разбираться дальше.
после прошивки в большинстве случаев мк виснет. приходилось RST дергать руками.
грешил на кварц... в РП на картинке кварц указан в диапазоне 8...24МГц, дальше по описанию 10...30МГц!
к сожалению картинки не смог вставить.
чему верить?
стоял 8МГц, решил поменять на 12МГц. ничего не поменялось.
при том что кварц генерит частоту, совпадение в 5 знаке по осциллографу.
после инициализации PLL мк виснет на ожидании бита LOCK. (while((RCU->PLLSYSSTAT_bit.LOCK) != 1)).
используется код инициализации от производителя.
пробовал другие сочетания настройки частоты, не помогло...
что может быть не так с PLL?
все флаги объявлены
FLAGS += -DHSECLK_VAL=12000000
FLAGS += -DSYSCLK_PLL
FLAGS += -DCKO_PLL0
# FLAGS += -DCKO_NONE
пробовал отключать выход - не помогло
что может быть не так? может что в плате?
все сделано по рекомендациям.
при том что без PLL все работает.
dezna
Сообщения: 10
Зарегистрирован: 20 дек 2024, 08:23
Предприятие: avtomatica

Re: К1921ВГ015 FreeRTOS

Сообщение dezna »

мда...
в примере от производителя в файле system_k1921vg015.c
для 10,12 и 20 МГц HSE флаг включения PLL = 0...
RCU->PLLSYSCFG0 =( 5 << RCU_PLLSYSCFG0_PD1B_Pos) | //PD1B
( 3 << RCU_PLLSYSCFG0_PD1A_Pos) | //PD1A
( 3 << RCU_PLLSYSCFG0_PD0B_Pos) | //PD0B
( 2 << RCU_PLLSYSCFG0_PD0A_Pos) | //PD0A
( 4 << RCU_PLLSYSCFG0_REFDIV_Pos) | //refdiv
( 0 << RCU_PLLSYSCFG0_FOUTEN_Pos) | //fouten
( 0 << RCU_PLLSYSCFG0_DSMEN_Pos) | //dsmen
( 1 << RCU_PLLSYSCFG0_DACEN_Pos) | //dacen
( 3 << RCU_PLLSYSCFG0_BYP_Pos) | //bypass
( 0 << RCU_PLLSYSCFG0_PLLEN_Pos); //en
на ровном месте...
но осталась проблема:
после прошивки отваливается дебагер и мк виснет на включении тактирования, пока не дернешь ресет, тогда запускается нормально.
если не переключаться на PLL (даже если его инициализируешь), то кристалл работает нормально, дебагер не отваливается, ресет дергать не нужно сколько не перепрошивай. если переключить на PLL то после каждой прошивки нужно дергать RST...
что это может быть?
причем после первой прошивки все отрабатывает нормально, последующие - нет
т.е. прошиваю с отключенным тактированием от PLL, дергаю ресет.
потом эту же прошивку сколько раз не прошивай - все ок.
включаю тактирование от PLL, прошиваю - все отрабатывает штатно, мк переходит на нужную частоту.
следующая прошивка - нужно дергать ресет!
ches
Сообщения: 47
Зарегистрирован: 07 сен 2022, 17:08
Предприятие: АО НИИЭТ
Откуда: Воронеж

Re: К1921ВГ015 FreeRTOS

Сообщение ches »

dezna писал(а): 28 дек 2024, 09:44
но осталась проблема:
после прошивки отваливается дебагер и мк виснет на включении тактирования, пока не дернешь ресет, тогда запускается нормально.
если не переключаться на PLL (даже если его инициализируешь), то кристалл работает нормально, дебагер не отваливается, ресет дергать не нужно сколько не перепрошивай. если переключить на PLL то после каждой прошивки нужно дергать RST...
что это может быть?
причем после первой прошивки все отрабатывает нормально, последующие - нет
т.е. прошиваю с отключенным тактированием от PLL, дергаю ресет.
потом эту же прошивку сколько раз не прошивай - все ок.
включаю тактирование от PLL, прошиваю - все отрабатывает штатно, мк переходит на нужную частоту.
следующая прошивка - нужно дергать ресет!
Добрый день!
Попробуйте перед переходом на тактирование от PLL, сначала перейти на тактирование от кварца
записью RCU->SYSCLKCFG = (RCU_SYSCLKCFG_SRC_HSECLK << RCU_SYSCLKCFG_SRC_Pos);
А уже затем на PLL
dezna
Сообщения: 10
Зарегистрирован: 20 дек 2024, 08:23
Предприятие: avtomatica

Re: К1921ВГ015 FreeRTOS

Сообщение dezna »

нет. не помог ваш вариант, т.к. мк просто виснет после прошивки.
уж не знаю что там происходит после прошивки, разработчикам виднее (сама прошивка происходит штатно), мк просто встает колом. программа вообще не запускается и отваливается JTAG. т.е. пока не дернешь ресет, мк в нокауте...
единственный вариант как это обойти, добавил команду openocd записи в регистр SYSCLKCFG 0 или 1 (HSI или HSE). работают оба варианта.

Код: Выделить всё

oocd_params_program += -c "write_memory 0x3000e030 32 {0x1}"
т.о. если перед прошивкой переключить с pll на любой другой источник, то все работает корректно. программа запускается, JTAG не отваливается, дергать ресет не нужно.
что то не додумали разработчики...
dezna
Сообщения: 10
Зарегистрирован: 20 дек 2024, 08:23
Предприятие: avtomatica

Re: К1921ВГ015 FreeRTOS

Сообщение dezna »

добрый день!
следующая проблема!
не работает деление с плавающей запятой!
в руководстве арифметика с плавающей запятой не описана практически никак, за исключением упоминания о ней как таковой.
на страницах 44 и 45 таблицы инструкций содержат одно и то же, тогда как инструкции плавающей арифметики в РЭ вообще не нашел.
пробовал в компиляторе принудительно включить -mfdiv - не помогло!
где найти информацию?
что делать?
как вариант - отключил вообще встренный флоат

Код: Выделить всё

          FLAGS     += -march=rv32imc -mabi=ilp32
#         FLAGS     += -march=rv32imfc -mabi=ilp32f
dezna
Сообщения: 10
Зарегистрирован: 20 дек 2024, 08:23
Предприятие: avtomatica

Re: К1921ВГ015 FreeRTOS

Сообщение dezna »

так же помогло просто отлючить в компиляторе деление

Код: Выделить всё

#         FLAGS     += -march=rv32imc -mabi=ilp32
          FLAGS     += -march=rv32imfc -mabi=ilp32f -mno-fdiv
каждый день что то новенькое...

добавлю уж тут от себя по руководству...
достаточно не удобно когда регистры и описание битов расположены отдельно от описания периферийного устройства...
как мне кажется у STM можно было бы много почерпнуть в плане оформления, хоть они совсем не идеал...
было бы удобнее, если бы как у них, схема тактирования мк была бы на одной картинке...
т.к. сейчас документация вся электронная (в основном нет нужды печатать), то можно в хорошем разрешении картинку запихнуть.

и, не понятно, где быстрее обратная связь с разработчиками?
здесь или писать электронное письмо на почту?
на форуме вообще не понятно как отвечают разработчики...
один раз только ответили... пытались помочь...
но только мне кажется если писать на почту, то кому тогда эта база знаний/форум нужен?
Ответить

Вернуться в «32-разрядные микроконтроллеры»