К1921ВГ015: «замерзли» CSR регистры и pc регистр

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

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

Ответить
МаксЕ
Сообщения: 2
Зарегистрирован: 27 авг 2026, 11:04
Предприятие: Хобби

К1921ВГ015: «замерзли» CSR регистры и pc регистр

Сообщение МаксЕ »

Здравствуйте! Произошла любопытная ситуация. Ничего не могу записать в csr регистры. Они со старта все в нулях. В них ничего не пишется, читаются нули. Только mstatus, что-то содержит-в нем 0x2000 со старта, что как бы намекает, на не машинный режим, если не ошибаюсь. Адрес обработчика прерываний в mtvec то же не пишется. Мало того, pc застыл на 0x80000000, во всех программах, т.е. изначально я это заметил в одной программе, а при загрузке чего либо другого, он там же постоянно в 0x8000000. Это все я смотрю в openocd. При всем сказанном, программа «шьется» во флеш и работает. Порты включаются, разрешается тактирование, светодиод загорается или не загорается, все как в программе указано, настраивается таймер TMR32(другие не пробовал), счетчик считает и т.д., только, естественно, не срабатывают прерывания, из-за чего, собственно, я и обратил внимание на эти странности, а может и не странности… Помогайте, пожалуйста!
Вводная: плата BlueBird, программатор BlueProg, openocd пропатченный, комп - макбук, с мак ос, соответственно, пишу на ассемблере, собираю с помощью riscv64-elf-binutils, все флаги подняты:), работаю с openocd из терминала, код пишу в VisualStudoCode, зашиваю чистый бинарник, шьется без ошибок, дамп обратно скачивается, полностью соответствует исходному бинарнику, openocd все видит и всем управляет, ни ошибок ни предупреждений, на первый взгляд все штатно. GDB нет, макбук старенький, brew ругается и не хочет устанавливать, из исходников собрать не удосужился, вместо telnet, с openocd работает штатная утилита nc. Заранее всем спасибо!
RabidRabbit
Сообщения: 259
Зарегистрирован: 10 июн 2025, 12:11
Предприятие: HomeWork

Re: К1921ВГ015: «замерзли» CSR регистры и pc регистр

Сообщение RabidRabbit »

Предлагаю поставить всё же gdb и отлаживаться через него.
Так как вообще не понятно, что где "замёрзло".
durimar_13
Сообщения: 111
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

Re: К1921ВГ015: «замерзли» CSR регистры и pc регистр

Сообщение durimar_13 »

Здравствуйте!
Вот что выдал мне ИИ по этому поводу:
1. Проверьте опции компилятора
–march=rv32imfc_zba_zbb_zbc_zbs_zicsr
Или в более новых версиях: –march=rv32imfc_zicsr
2. Чтобы избежать ошибок, при отладке используйте SVD файлы
С уважением, Виктор.
durimar_13
Сообщения: 111
Зарегистрирован: 26 фев 2025, 13:06
Предприятие: Radioamateur
Откуда: Свердловская обл.

Re: К1921ВГ015: «замерзли» CSR регистры и pc регистр

Сообщение durimar_13 »

Вот еще вспомнил, что где то слышал о несуществующих csr в К1921ВГ015
Нашел: https://gitflic.ru/project/rus_mcu/open ... n645607805
В "русском" OpenOCD эти регистры рекомендуется скрыть.
" 4) Скрытие отображения диапазонов адресов CSR-регистров процессоров RISC-V при помощи опции riscv hide_csrs n[-m][...]. Это особенно полезно для несуществующих регистров, когда попытки чтения/записи их значений в режиме отладки вызывают исключение с кодом 2..."
Из файла конфигурации k1921vg015.cfg для микроконтроллера К1921ВГ015:
riscv hide_csrs 4-767,775-802,807-831,837-927,930-943,952-1826,1831-1951,1957-1967,1971-2815,2817,2823-2943,2945,2951-3071,3075-3199,3203-3856,3862-4095
Извините, если это Вам покажется смешным! Я никакой прорагаммист.
С уважением, Виктор.
МаксЕ
Сообщения: 2
Зарегистрирован: 27 авг 2026, 11:04
Предприятие: Хобби

Re: К1921ВГ015:не доступны csr регистры.

Сообщение МаксЕ »

Возможно, я не корректно выразился, написав "замерзли"(изменил заголовок темы), но мне кажется в тексте все доходчиво объяснил. Короче говоря, я не могу установить свои значения в csr регистры. Ни csrc, ни csrw не изменяют регистры. После попыток записи остаются в нуле, кроме mstatus, который содержит 0х2000. Кроме этого, pc всегда показывает 0х80000000, при этом, программа абсолютно корректно работает, но не работают прерывания, что понятно - они выключены. Судя по mstatus, ядро постоянно находится в режиме, отличном от машинного, даже при старте. Всем спасибо за участие, но проблема не решена.
ea
Администратор
Сообщения: 136
Зарегистрирован: 10 окт 2014, 09:08

Re: К1921ВГ015: «замерзли» CSR регистры и pc регистр

Сообщение ea »

МаксЕ писал(а): 27 авг 2026, 13:00 Здравствуйте! Произошла любопытная ситуация. Ничего не могу записать в csr регистры. Они со старта все в нулях. В них ничего не пишется, читаются нули. Только mstatus, что-то содержит-в нем 0x2000 со старта, что как бы намекает, на не машинный режим, если не ошибаюсь. Адрес обработчика прерываний в mtvec то же не пишется. Мало того, pc застыл на 0x80000000, во всех программах, т.е. изначально я это заметил в одной программе, а при загрузке чего либо другого, он там же постоянно в 0x8000000. Это все я смотрю в openocd. При всем сказанном, программа «шьется» во флеш и работает. Порты включаются, разрешается тактирование, светодиод загорается или не загорается, все как в программе указано, настраивается таймер TMR32(другие не пробовал), счетчик считает и т.д., только, естественно, не срабатывают прерывания, из-за чего, собственно, я и обратил внимание на эти странности, а может и не странности… Помогайте, пожалуйста!
Вводная: плата BlueBird, программатор BlueProg, openocd пропатченный, комп - макбук, с мак ос, соответственно, пишу на ассемблере, собираю с помощью riscv64-elf-binutils, все флаги подняты:), работаю с openocd из терминала, код пишу в VisualStudoCode, зашиваю чистый бинарник, шьется без ошибок, дамп обратно скачивается, полностью соответствует исходному бинарнику, openocd все видит и всем управляет, ни ошибок ни предупреждений, на первый взгляд все штатно. GDB нет, макбук старенький, brew ругается и не хочет устанавливать, из исходников собрать не удосужился, вместо telnet, с openocd работает штатная утилита nc. Заранее всем спасибо!
Добрый день.
Используете ли вы наш файл стартап (startup_k1921vg015.S)? Попробуйте собрать и зашить один из наших примеров из репозитория на GitFlic (httpsgitflic.ruprojectniietk1921vg015_sdk).

Есть подозрение, что, возможно, в терминал выводится не верная информация, поскольку адрес 0x80000000, в регистре pc, является адресом начала Flash-памяти и при исполнении программы должен меняться.
Также можете попробовать считать значения из csr-регистров во временно созданные переменные и прочитать уже их.
Ответить

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