__program_start ldr pc,[pc,0x18] org 0x04 ldr pc,[pc,0x18] org 0x08 ldr pc,[pc,0x18] org 0x0c ldr pc,[pc,0x18] org 0x10 ldr pc,[pc,0x18] org 0x18 LDR pc,[pc,#-0xFF0];get irq adr fr VicVectAdr to PC org 0x1c LDR pc,[pc,#-0xFF0] vectortab dcd ?cstartup dcd undefhndlr dcd swihndlr dcd prefetchaborthndlr dcd dataaborthndlr dcd notusedhndlr undefhndlr b undefhndlr swihndlr b swihndlr prefetchaborthndlr b prefetchaborthndlr dataaborthndlr b dataaborthndlr notusedhndlr b notusedhndlr Сразу после метки ?cstartup добавляешь парочку команд: ?cstartup ldr r11,=__program_start ldr r12,=0x40000000 ldmia r11!,{r0-r10} stmia r12!,{r0-r10] ldmia r11!,{r0-r1} stmia r12!,{r0-r1} это достаточно универсальный способ годящийся для работы как из ОЗУ так и из ПЗУ. В таблице vectortab можно размещать динамически адреса обработчиков прерываний. Это не точный шаблон конкретной программы, только прорисоывна концепция решения проблемы...
|