ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
21 января
1488860
Nikolay_Po (05.01.2025 20:21, просмотров: 293)
Поднятие приоритета текущего выполнения в RISC-V вместо BASEPRI у ARM. 

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

Я широко использовал модификацию BASEPRI в проектах на ARM Cortex-M. И столкнулся с тем, что не нашел аналогичного регистра у ядра (или контроллера прерываний) CH23V. Спросил в телеграм-канале RISC-V MCU (t.me/riscv_mcu) и вот что показали:


if (PLIC->PLIC_MTH_REG <= newIRQL)

; /* Не понижаем приоритет */

else

{

PRINTF("irq fail at %s/%d, newIRQL=%u, old=%u\n", file, line, (unsigned) newIRQL, (unsigned) PLIC->PLIC_MTH_REG);

ASSERT2(PLIC->PLIC_MTH_REG <= newIRQL, file, line); /* Не понижаем приоритет */

}

//oldIrql * = csr_read_clr_bits_mie(MIE_MEI_BIT_MASK | MIE_MTI_BIT_MASK);

* oldIrql = PLIC->PLIC_MTH_REG;

PLIC->PLIC_MTH_REG = newIRQL;


Кто имел опыт? Действительно ли PLIC->PLIC_MTH_REG заменяет BASEPRI? И есть ли оный в WCH CH32V2xx, например?


https://github.com/ua1arn/hftrx/blob/c0bef26aee87baf069cf5c10fe57d9a35f299709/src/irq.c#L2015