ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
18 июля
59629
bp (26.05.2006 19:16, просмотров: 398)
Еще один вопрос по 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 - тто программа сразу же улетает в какие-то левые адреса и там где-то крутится. ПОдскажите, что можно здесь попробовать ?