Проект под IAR 4.41 Язык С/С++
Программа сделана для работы с внешнего ОЗУ 0х21000000 Вектора прописываются там же 0х21000000 Появиласть проблема с IRQ прерыванием... так как нужно послать PC по адресу 0хfffff100 где расположен AIC_SVR. Но при срабатывании прерывания попадаем по адрессу 0х00000018.
Как мне быть есть два пути: 1 - разместить вектора по адр 0х00000018 2 - добится того чтобы ldr pc, [pc,#-0xF20] посылала на 0xfffff100, но тогда необходимо прибавить к PC,#0xdefff0e8 , синтаксис не позволяет мне этого сделать.
Может есть еще какие решения? from startup code ;--------------------------------------------------------------- ; ?RESET ; Reset Vector. ; Normally, segment INTVEC is linked at address 0. ; For debugging purposes, INTVEC may be placed at other ; addresses. ; A debugger that honors the entry point will start the ; program in a normal way even if INTVEC is not at address 0. ;--------------------------------------------------------------- MODULE ?RESET ; COMMON INTVEC:CODE:NOROOT(2); RSEG ICODE:CODE:NOROOT(2) PUBLIC __program_start EXTERN ?cstartup ; EXTERN undef_handler, swi_handler, prefetch_handler ; EXTERN data_handler, irq_handler, fiq_handler CODE32; Always ARM mode after reset ADRSTART: org 0x00+ADRSTART __program_start ldr pc,=?cstartup; Absolute jump org 0x04+ADRSTART undef_handler: ldr pc,=undef_handler org 0x08+ADRSTART swi_handler: ldr pc,=swi_handler org 0x0c+ADRSTART prefetch_handler: ldr pc,=prefetch_handler org 0x10+ADRSTART data_handler: ldr pc,=data_handler org 0x18+ADRSTART ldr pc, [pc,#-0xF20] ; IRQ : read the AIC org 0x1c+ADRSTART fiq_handler: ldr pc,=fiq_handler
; Constant table entries (for ldr pc) will be placed at 0x20 org 0x20+ADRSTART LTORG ; ENDMOD __program_start ENDMOD
Сообщение отредактировал Daermon - Oct 30 2007, 11:20
|