Поднятие приоритета текущего выполнения в 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