Предыдущая Следующая

• управлять прохождением данных к подпрограмме RealMonitor (например, rm_irqhandler2 ());

• требовать ИС для приложения непосредственно (например, appJRQHandler ()).

Reset

Undefined

SWI

Prefetch Abort

Data Abort

Reserved

IRQ

FIQ

RealMonitor снабжен обработчиками векторов исключений

rm_undef_handler() rm_prefetcabort_handler() rm_dataabort_handler() rmJrqhandlerO

Совместное использование запросов IRQ RealMonitor и пользовательским обработчиком запросов IRQ

rmjrqhandler2()

AppJRQHandlerQ

Рис. 24.3. Исключительные ситуации, обрабатываемые RealMonitor

В самом простом случае, когда приложение не имеет никаких собственных обработчиков исключительных ситуаций, приложение может поместить обработчик исключительных ситуаций низкого уровня, входящий в состав RealMonitor, непосредственно в векторную таблицу процессора. Обработчик запроса IRQ должен передавать управление по адресу контроллера векторов прерываний. Самый простой способ сделать это состоит в том, чтобы записать команду перехода (<адрес>) в векторную таблицу с тем, чтобы переход производился на начальный адрес встроенного в RealMonitor обработчика ИС.

24.4.2. Инициализация RMTarget

Когда процессор находится в привилегированном режиме, и запросы IRQ запрещены, пользователь должен включить в последовательность команд, выполняемых при запуске приложения, программную строку, которая вызывает функцию rm_init_entry().

24.5. Пример кода с использованием RealMonitor

В программном фрагменте, предоставленном производителем LPC2000 и приведенном ниже, демонстрируются инициализация стека, VIC, RealMonitor и разрешение некоторых невекторизованных прерываний.

IMPORT rm_init_entry

IMPORT rm_prefetchabort_handler

IMPORT rm_dataabort_handler

IMPORT rm_irqhandler2

IMPORT rm_undef_handler

IMPORT User_Entry ;Точка входа пользовательского приложения.

CODE32

ENTRY

/Определение таблицы исключений. Инструкция компоновщику размещать код

;с адреса 0x0000 0000

AREA exception_table, CODE

LDR рс, Reset_Address

LDR pc, Undefined_Address

LDR pc, SWI_Address

LDR pc, Prefetch_Address

LDR pc, Abort_Address

NOP ;Здесь должна быть вставка пользователя, задающая действительную сигнатуру LDR рс, [рс, #-0xFF0] ;Загрузка вектора IRQ от VIC LDR PC, FIQ_Address

Reset_Address DCD _init ;Вход в точку сброса

UndefiBed_Address DCD rm_undef_handler ; Если RealMonitor SWI_Address- DCD 0 ; Пользователь может поместить здесь адрес обработчика SWI Prefetch_Address DCD rm_prefetchabort_handler ; Если инициализируем и RealMonitor Abort_Address DCD rm_dataabort_handler ; Если инициализируем и RealMonitor FIQ_Address DCD 0 ; Пользователь может здесь поместить адрес обработчика FIQ AREA init_code, CODE

ram_end EQU 0x4000xxxx ; «Вершина» встроенной RAM. _init

. / *********************************************************************

. * установка указателей вершины стека для различных режимов процессора. ; * Стек растет вниз.


Предыдущая Следующая



НА ГЛАВНУЮ | ЧТО ТАКОЕ PIC ? | ПРОГРАММАТОР | ПРОЕКТЫ | СТАТЬИ | ССЫЛКИ | КАРТА САЙТА
Hosted by uCoz