. ****************** ****************************************************^
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 ? | | ПРОГРАММАТОР | | ПРОЕКТЫ | | СТАТЬИ | | ССЫЛКИ | | КАРТА САЙТА |