Еще один вопрос по ARM925. Что-то совсем странное творится с прерываниями. Работаю под эмулятором (sm510) - может в этом дело ?
1. Размаскировал прерывание первого уровня
2. Вызываю его либо софтово (прописыванием бита в MPU_L1_ISR) либо запуская таймер( и ожидая его обнуления)
3. В этот момент в регистре MPU_L1_ITR соответствующий бит четко становится единицей.
Так вот вопрос, как заставить процессор вызвать обработкчик ?
Все делаю так, как в мануале, но в результате обработчик не запускается:
1. Сначала (в самом начале загрузки) перевел процессор в один из privileged mode (system, supervisor, ...)
mrs r0, CPSR
orr r0, r0, #ARM_MODE_FIQ
msr CPSR_c, r0
2. Дальше разрешаю прерывание (уже в теле программы)
asm(" mrs r0, cpsr");
asm(" bic r0, r0, #10000000b");
asm(" msr cpsr_c, r0");
Причем есть странный эффект:
Если при разрешенном irq (либо fiq) пошагово ходить по программе - то все работает корректно (за исключением отстутствия собственно ожидаемых прерываний). Если сделать run - тто программа сразу же улетает в какие-то левые адреса и там где-то крутится.
ПОдскажите, что можно здесь попробовать ?