Обработка прерываний в процессоре TMS320VC5402. Сохранение контекста при прерываниях

Обработка прерывания состоит из трех стадий:

1) Получение запроса на прерывание. Приостановка главной программы запрашивается программным обеспечением или аппаратными средствами. Если это маскируемое прерывание, устанавливается соответствующий бит в регистре флажков прерываний (IFR), когда прерывание получено.

2) Подтверждение прерывания. C54x DSP должен подтвердить запрос на прерывание. Если прерывание маскируемое, должны быть выполнены определенные условия для того, чтобы C54x DSP подтвердил их. Для немаскируемых аппаратных прерываний и для программных прерываний подтверждение следует немедленно.

3) Выполнение подпрограммы обслуживания прерывания (ISR). Когда прерывание подтверждено C54x DSP выполняет команду перехода, которая размещается по определенному адресу (вектор прерывания) и выполняет ISR.

Регистр флагов прерывания IFR – отображаемый на память регистр ЦП, который идентифицирует и сбрасывает активное прерывание (рис. 6.1). Прерывание устанавливает соответстующий флажок в IFR, пока он не будет определен ЦП. Любое из следующихо четырех события очищает флажок прерывания:

• C54x DSP сброшен (RS - низкий).

• Прерывание принято.

• Записана 1 в соответствующий бит IFR.

• Выполнена команда INTR с соответствующим номеро прерывания.

1 в любом бите IFR указывает отложенное прерывание. Чтобы очищать прерывающийся, пишите 1 соответствующему биту interrupt's в IFR. Все отложенные прерывания могут быть очищены, писать текущее содержание IFR назад в IFR.

Если INTM = 0 в регистре состояния ST1, 1 в любом бите IMR допускает соответствующее прерывание. Ни NMI ни RS не включены в IMR, потому что IMR не влияет на эти прерывания. Вы можете читать или писать в IMR.

Когда выполняется подпрограмма обслуживания прерывания, некоторые регистры должны быть сохранены в стеке. Когда выполняется возврат из подпрограммы ISR (RC[D], RETE[D] или RETF[D]), ваша программа должна восстановить содержимое этих регистров. Вы можете использовать память стека, пока стек не превышает пространство памяти. Этот стек также используется для вызова подпрограмм. Поскольку регистры ЦП и периферийные регистры отображаются на память, команды PSHM и POPM могут передавать эти регистры в стек и из стека, а команды PSHD и POPD могут передавать содержимое ячеек памяти данных в стек и обратно.

Вектора прерываний могут быть расположены с начала любой 128-словной страницы в памяти программ кроме зарезервированных областей. Адрес вектора прервания генерируется объединением поля указателя прерывания (IPTR) из PMST с номером вектора прервания (0-31), сдвинутым на 2. На рис. 6.3 приведен пример для прерывания INT0 и IPTR = 0 001h, прерывающийся вектор выбран от 00C0h. Номер вектора прервания для INT0 равен 16 или 10h, и вектор прерывания получается равным 00C0h.

При сбросе биты IPTR установливаются в 1 (IPTR = 1FFh) и это значение отображает вектора на страницу 511 в области памяти программ. Поэтому, вектор сброса для аппаратного сброса всегда расположен по адресу 0FF80h. Вектора прерываний могут быть отображены в другую область загрузкой IPTR значением, отличным от 1FFh. Например, вектора прерываний могут быть перемещены, чтобы начинаться с адреса 0080h, загрузкой в IPTR значения 0001h.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: