От чего зависит расположение прерывания в "riscv, plic0"? - PullRequest
2 голосов
/ 06 мая 2019

Я пытаюсь написать независимые от платформы вспомогательные функции на языке ассемблера risc-v, чтобы использовать контроллер прерываний уровня платформы, помеченный как «riscv, plic0» в дереве устройств SiFive FU540-C000. Цель состоит в том, чтобы иметь возможность отключать и включать внешние прерывания.

В моей следующей задаче я имею в виду SiFive FU540-C000, который состоит из одного ядра с режимом только машины и четырех ядер с режимом машины, супервизора и пользователя.

В главе 10.1 руководства SiFive FU540-C000 v1p0 все аппаратные потоки занимают 0x100 байтов массива разрешений прерываний, кроме аппаратного потока 0. Диапазон адресов аппаратного потока 0 составляет 0x80 байтов. .

Учитывая, что аппаратный поток 0 принадлежит только ядру машинного режима, я подумал, что это может быть связано с отсутствующим режимом супервизора, пользователя и, возможно, гипервизора. Однако, поскольку разница в длине диапазонов адресов составляет 0x20 байтов, разумного шаблона для распределения этих трех режимов нет.

Почему диапазон адресов аппаратного потока 0 в прерывании позволяет на 0x20 байт короче, чем у любого другого аппаратного потока?

решено : я забыл, что я работаю с шестнадцатеричными десятичными числами, в этом случае 0x80 - это половина 0x100. Следовательно, аппаратный поток 0 имеет половину диапазона адресов любого другого аппаратного потока, поскольку поддерживает только половину рабочих режимов.

...