Обработка прерываний в MIPS-процессорах

Сегодня, дорогие мои, я расскажу вам про обработку исключений в процессорах MIPS-архитектуры. Но вначале - предисловие:

  1. Если вы считаете, что "только идиот будет рассказывать такие элементарные вещи" - что ж, простите, что не угодил вашему притязательному вкусу. Имею надежду, что это хоть как-то кому-то поможет.
  2. Все описанное - из личного опыта. Но из MIPS-архитектур довелось поработать только с процессорами серии "Мультикор". Это российские процы, подробнее - на http://multicore.ru/index.php?id=43 (не реклама!). Вообще-то они DSP, но управляющее ядро у них как раз MIPS32. К чему это я? Ах да, к тому, что все рассказанное ниже было испробовано только с этими процами и возможно, при работе с другими MIPS-совместимыми архитектурами надо будет что-то менять.
  3. Могу иногда быть некорректен, например в терминологии. В этом случае - с удовольствием принимаю поправки и предложения.

Итак, "от печки". В архитектуре MIPS32 реализован механизм исключений. По факту возникновения исключения процессор делает следующее:

  1. Переходит в режим обработки исключения выставлением бита в регистре Status сопроцессора CP0. При этом прерывания запрещаются.
  2. Совершается переход на адрес обработчика исключения. В отличие от других архитектур, у MIPS нет таблицы векторов прерываний. То есть, в зависимости от конкретного исключения адрес перехода может варьироваться, но так или иначе это конечное число адресов, причем небольшое. Пример: в процессорах "мультикор" обработчик прерывания от таймера должен находиться по адресу 0xBFC0_0380 или 0x8000_0180. Какой именно это адрес - определяется битом в регистре Status сопроцессора CP0. Переназначить адрес обработчика на какой-нибудь 0x1234_5678 - нельзя. Адрес, на котором мы находились перед исключением, сохраняется в регистр EPC сопроцессора CP0.
  3. Процессор исполняет инструкции, расположенные по адресу обработчика. Долго исполняет. До тех пор, пока ему не встретится команда ERET. По исполнению этой команды процессор переходит в обычный режим (из режима обработки исключения) и возвращается на адрес, сохраненный в EPC.

Это общий алгоритм. Более подробно уже надо смотреть в даташите на конкретный процессор.

Теперь немного о классификации исключений. Это может быть исключение по ошибке адресации - когда мы обращаемся в тот адрес, в который по каким-то причинам обращаться нельзя. Это может быть исключение по "незнакомой команде" - когда процу попадается незнакомый опкод - например при неправильном переходе, когда проц попадает не на программу и на данные. Исключение по точке останова, и прочее, и прочее. Среди всех этих типов стоит выделить так называемое исключение прерывания. Это то, что в остальных процессорах называется просто прерыванием.

Исключение прерывания - это то исключение, которое возникает при возникновении прерывания от любого устройства процессора - будь это таймер, порт ввода-вывода или, например, DSP-ядро. То есть, еще раз: неважно, от чего прерывание - от таймера, от UART, от другого порта, от DMA, или же это внешнее прерывание - переход будет на один и тот же адрес. И определять, от какого устройства это прерывание возникло - надо программно. Это отличается от привычной (для меня) по AVR и x86 системы, но в этом есть своя прелесть.

В итоге, чтобы использовать прерывания, от программиста требуется:

  1. Написать обработчики.
  2. Разместить обработчики по векторам используемых исключений.
  3. Разрешить прерывания.

Дисклаймер: дальше речь пойдет только про обработку именно исключения прерывания. Обработка других исключений, в общем-то, слабо отличается.

Что должен делать обработчик.

  1. Определить "причину" исключения.
  2. Сделать непосредственно обработку - это уже зависит сугубо от целевой задачи.
  3. "Устранить" причину исключения и выполнить ERET.

Не упоминаю о такой мелочной вещи, как сохранение используемых регистров и восстановления "как было" - но это, естественно, надо сделать.

Итак, определение "причины". В первую очередь, надо анализировать регистр Cause сопроцессора CP0. В нем есть поле, которое называется ExcCode. Если оно равно 0 - это исключение прерывания. Для остальных типов исключений - свое значение.

Далее нам необходимо понять, откуда это прерывание - от внутренних устройств проца, или же внешнее? Для этого дальше читаем регистры Cause и Status. Поля в них называются IP[7:0] и IM[7:0] соответственно. Поле IP - это запросы прерывания, а IM - маска. Биты IP[1:0] - это программные прерывания. Они выставляются записью непосредственно в это поле. IP[5:2] - это биты, соответствующие прерываниям nIRQ[3:0]. И бит IP[7] - это бит, объединяющий прерывания от всех внутренних устройств по ИЛИ - то есть, этот бит однозначно сигнализирует о прерывании от накристалльного устройства. Разумеется, при условии, что это прерывание разрешено в поле IM регистра Status.

В случае, если это программное или внешнее прерывание - "причина" однозначно установлена и можно приступать непосредственно к обработке. Если же это прерывание от внутреннего устройства - необходимо анализировать регистры QSTR и MASKR. В первом, согласно названию, отображаются запросы прерывания, а во втором - их маски. Соответственно, если какой-то бит в обоих регистрах выставлен в единицу - значит, прерывание от соответствующего устройства разрешено и активно.

После этого, опять же, можно приступать к обработке прерывания.

Комментарии

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Ich bin gegen covid 19. Was ist deine Meinung?

Ich bin gegen covid 19. Was ist deine Meinung? mituns

Thank you very much for the invitation

thx much for the invitation :). I am expert of pandemic, and i can help you. PS: How are you? I am from France :) very good forum :) mixx

IMVU Generator No Surveys

IMVU Free Credits No Surveys 2021 =========== Belts are a valuable addition to intensify your overall look. handy in a broad array of fabrics and styles, belts offer endless opportunities to reveal your fashion style. A shining partner in crime is the absolute way to increase fun to a easy pair of jeans. If you tend to be a bit on the heavy side, get not try to conceal your imitate by dressing in baggy clothing. The extra volume by yourself accentuates your size and makes you look frumpy. see for clothing that is more fitted not far off from your waistline, but then flows away from your demean body to make more shape. If you have patches of gray in your hair, find using a semipermanent dye. The gray will appear to be the similar color as the perch of your hair and will last approximately two months. though you can't truly lighten your hair when this tactic, you can pick to darken your locks if you want. Never depart house without lotion! following you're out and about, your hands can struggle the effects of a ventilation world. Regular hand-washing alone can wreak havoc upon both your hands and your cuticles. Your best explanation is to always carry a small bottle of lotion in your handbag. That way, you can always put your best hand forward. Hats are a good accessory to be in agreement any nice of outfit. For men, there are the typical fisherman hats and baseball caps, but for women, the possibilities run much deeper. For instance, you can wear a sweet sun hat, floppy cap or beach hat behind any casual dress you own. Use a leave-in conditioner if you have distress behind frizz. You desire to apply this product like a shower, past the hair dries. Don't be scared to put a large amount all over your head, and create definite to point both the roots and the unquestionably tips of the hair. KW: Free IMVU Credits 2021 IMVU Hack Free IMVU Credits Free IMVU Credits 2021 Article sources: 1. https://www.cdc.gov/mobile/mobileapp.html

IMVU Hack No Human Verification

https://lbwic.com =========== Belts are a necessary adjunct to total your overall look. clear in a broad array of fabrics and styles, belts have enough money endless opportunities to ventilate your fashion style. A gleaming scarf is the absolute habit to amass fun to a simple pair of jeans. Use a leave-in conditioner if you have make miserable taking into account frizz. You desire to apply this product afterward a shower, in the past the hair dries. Don't be scared to put a large amount every beyond your head, and make determined to plan both the roots and the agreed tips of the hair. KW: IMVU Credits Hack No Surveys 2021 IMVU Credit Hack No Surveys

Ich bin gegen covid 19. Was ist deine Meinung?

Ich bin gegen covid 19. Was ist deine Meinung? mituns

Ich bin gegen covid 19. Was ist deine Meinung?

Ich bin gegen covid 19. Was ist deine Meinung? mituns

I want to explain you about pandemiuc

hi, i am woo from Sweden and i want to explain any thing about "pandemic". Please ask me :)

I want to explain you about pandemiuc

hi, i am woo from Sweden and i want to explain any thing about "pandemic". Please ask me :)

HI Guys. Thanks for my approving

HI Guys. Thanks for my approving / wazz user, new user hehe

HI Guys. Thanks for my approving

HI Guys. Thanks for my approving / wazz user, new user hehe

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Syntax highlight code surrounded by the {syntaxhighlighter SPEC}...{/syntaxhighlighter} tags, where SPEC is a Syntaxhighlighter options string or "class="OPTIONS" title="the title".
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <p> <span> <s> <strike> <div> <h1> <h2> <h3> <h4> <h5> <h6> <img> <map> <area> <hr> <br> <br /> <ul> <ol> <li> <dl> <dt> <dd> <table> <caption> <tbody> <tr> <td> <em> <b> <u> <i> <strong> <del> <ins> <sub> <sup> <quote> <blockquote> <pre> <address> <code> <cite> <embed> <object> <param> <strike>
  • Использовать как разделитель страниц.

Подробнее о форматировании