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

. ****************** ****************************************************^

LDR r2, =ram_end /Получаем «вершину» RAM

MRS rO, CPSR ;Сохранение текущего режима процессора

; Инициализировать стек для режима Undefined для использования RealMonitor BIC rl, rO, #0xlf ORR rl, rl, #0xlb MSR CPSR_c, rl

; Выделить 32 байта для подпрограмм программирования Flash-памяти

; (Обратитесь к главе, где рассказано о программировании Flash-памяти)

SUB sp,r2,#0xlF

; Инициализировать стек для режима Abort для использования RealMonitor BIC rl, rO, #0xlf ORR rl, rl, #0x17 MSR CPSR_c, rl

; Выделить 64 байта для стека режима Undefined SUB sp,r2,#0x5F

; Инициализировать стек для режима IRQ для RealMonitor и Пользователя BIC rl, rO, #0xlf ORR rl, rl, #0x12 MSR CPSR_c, rl

; Выделить 32 байта для стека режима Abort SUB sp,r2,#0x7F

;Возврат в первоначальный режим MSR CPSR_c, гО

; Инициализировать стек для пользовательского приложения ; Выделить 256 байтов для стека режима IQR SUB sp,r2,#0xl7F ; /

************************************************************************

; * Инициализация контроллера VIC. Прерывания Rx и Тх DCC

; * генерируются как невекторизованные запросы IRQ. rm_init_entry «знает»

; * о VIC и разрешает прерывания DBGCommTx и DBGCommRX.

; * Заданный по умолчанию векторный регистр адреса запрограммирован адресом

; * невекторизованного app_irqDispatch, упомянутого в этом примере.

; * Пользователь может установить здесь векторизованные запросы IRQ или FIQ.

**************************************************************************

/

VICBaseAddr EQU OxFFFFFOOO /Базовый адрес VIC

VICDefVectAddrOffset EQU 0x34

LDR rO, =VICBaseAddr

LDR rl, =app_irqDiSpatch

STR rl, [rO,#VICDeiVectAddrOffset]

BL rm_init_entry /Инициализация RealMonitor

/Разрешить прерывания FIQ и IRQ в процессоре ARM

MRS rl, CPSR /Получение CPSR

BIC rl, rl, #0хС0 /Разрешение IRQ и FIQ

MSR CPSR_c, rl /Модификация CPSR

./********************************************************************* ;* Получение адреса пользовательской точки входа.

.******************************************************* LDR lr, =User_Entry MOV pc, lr

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

;* Невекторизованный обработчик IRQ (app_irqDispatch) .*****************************************************

AREA app_irqDispatch, CODE VICVectAddrOffset EQU 0x30 app_irqDispatch

; Разрешить вложенные прерывания

STMFD sp!, {rl2,rl4}

PMRS rl2, spsr /Сохранение SPSR в rl2

MSR cpsr_c,OxlF ;Повторное разрешение IRQ, перейти в режим System ; Пользователь должен вставить здесь свой код, если требуется совместно ; используемое невекторизованное прерывание. Каждый обработчик совместно ; используемого IRQ должен возвращаться к прерванной команде, используя ; следующий код.

;MSR cpsr_c, #0x52 /Запрещение IRQ, перейти в режим IRQ

;MSR spsr, г12 /Восстановление SPSR из rl2


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



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