Вопрос по TNK-loader:
Код
...
//---- Set interrupts vectors
ptr = (unsigned int *)IRQ_RAM_ADDR;
*ptr = 0xE59FF018; //-- ldr pc, [pc, #24]
ptr = (unsigned int *)FIQ_RAM_ADDR;
*ptr = 0xE59FF018;
...
Зачем по адресу IRQ_RAM_ADDR(FIQ_RAM_ADDR) кладется число 0xE59FF018?
И попутный вопрос:
Код
void tn_usb_lpc_cmd_write(int cmd, int data)
{
E1A0C00D mov r12, sp
E92DD800 stmfd sp!, {r11-r12, lr-pc}
E24CB004 sub r11, r12, #0x00000004
E24DD008 sub sp, sp, #0x00000008
E50B0010 str r0, [r11, #-0x010]
E50B1014 str r1, [r11, #-0x014]
USBDevIntClr = CDFULL | CCEMTY; // clear CDFULL/CCEMTY
E3A0328F mov r3, #0xF0000008
E28336FE add r3, r3, #0x0FE00000
E2833CC2 add r3, r3, #0x0000C200
E3A02030 mov r2, #0x00000030
E5832000 str r2, [r3]
USBCmdCode = 0x00000500 | (cmd << 16); // write command code
E59F208C ldr r2, [pc, #+0x08C]
E51B3010 ldr r3, [r11, #-0x010]
E1A03803 mov r3, r3, lsl #0x10
E3833C05 orr r3, r3, #0x00000500
[color=#FF0000]===>>>E5823000 str r3, [r2] <<<<<<=============[/color]
while(!(USBDevIntSt & CCEMTY));
E3A034FF mov r3, #0xFF000000
E283360E add r3, r3, #0x00E00000
E2833CC2 add r3, r3, #0x0000C200
E5933000 ldr r3, [r3]
E2033010 and r3, r3, #0x00000010
E3530000 cmp r3, #0x00000000
0AFFFFF8 beq 0x000032E0
...
До выполнения указанной строчки регистры:
r0 = 0xfe
r1 = 0x00
r2 = 0xffe0c210
r3 = 0x00fe0500
c r4 по r10 = 0x00
r11 = 0x4000209c
r12 = 0x400020a0
r13(sp) = 0x40002088
r14 = 0x00000db0
r15 = 0x000032dc
cpsr = 0xa00000df
данные:
data = 0x00
cmd = 0x000000fe
После выполнения указанной строчки проваливаемся в dabort_handler.
Может кто-то сможет пояснить?