📄 at91drivers.s
字号:
AT91Drivers: file format elf32-littlearmAT91Driversarchitecture: arm, flags 0x00000112:EXEC_P, HAS_SYMS, D_PAGEDstart address 0x01000000???: LOAD off 0x00008000 vaddr 0x01000000 paddr 0x01000000 align 2**15 filesz 0x00004038 memsz 0x000040b8 flags rwx???? = 0: [interworking not enabled] [APCS-32] [????????????] [????]Sections:Idx Name Size VMA LMA File off Algn 0 .text 00000590 01000000 01000000 00008000 2**4 CONTENTS, ALLOC, LOAD, READONLY, CODE 1 .data 00002038 01002000 01002000 0000a000 2**4 CONTENTS, ALLOC, LOAD, DATA 2 .bss 00000080 01004038 01004038 0000c038 2**2 ALLOC 3 .debug_abbrev 0000039b 00000000 00000000 0000c038 2**0 CONTENTS, READONLY, DEBUGGING 4 .debug_info 00001154 00000000 00000000 0000c3d3 2**0 CONTENTS, READONLY, DEBUGGING 5 .debug_line 0000057e 00000000 00000000 0000d527 2**0 CONTENTS, READONLY, DEBUGGING 6 .debug_pubnames 00000173 00000000 00000000 0000daa5 2**0 CONTENTS, READONLY, DEBUGGING 7 .debug_aranges 000000a0 00000000 00000000 0000dc18 2**0 CONTENTS, READONLY, DEBUGGINGSYMBOL TABLE:01000000 l d .text 00000000 01002000 l d .data 00000000 01004038 l d .bss 00000000 00000000 l d .debug_abbrev 00000000 00000000 l d .debug_info 00000000 00000000 l d .debug_line 00000000 00000000 l d .debug_pubnames 00000000 00000000 l d .debug_aranges 00000000 00000000 l d *ABS* 00000000 00000000 l d *ABS* 00000000 00000000 l d *ABS* 00000000 00000000 l df *ABS* 00000000 start.S01002000 l .data 00000000 irq_stack01003004 l .data 00000000 svc_stack00000000 l df *ABS* 00000000 at91_aic.c0100004c l .text 00000000 .gcc2_compiled.01004008 l O .data 00000020 at91_irq_prtable00000000 l df *ABS* 00000000 at91_timer.c01000190 l .text 00000000 .gcc2_compiled.00000000 l df *ABS* 00000000 at91.c010002f0 l .text 00000000 .gcc2_compiled.00000000 l df *ABS* 00000000 at91_usart.c0100038c l .text 00000000 .gcc2_compiled.01004028 l O .data 00000008 usarts0100038c l F .text 00000054 usart_init01000400 l F .text 00000018 usart_printf00000000 l df *ABS* 00000000 main.c01000460 l .text 00000000 .gcc2_compiled.01004030 l O .data 00000004 cnt.301004034 l O .data 00000004 count.7010004c4 g F .text 000000bc maintest01000418 g F .text 00000048 printf010001ec g F .text 00000104 at91_set_timer010000e4 g F .text 00000048 at91_release_irq01000460 g F .text 00000064 deal_TimerIrq01000590 g O .text 00000000 _etext01000590 g O .text 00000000 __stop___kallsyms01000090 g F .text 00000020 at91_mask_ack_irq0100004c g F .text 00000020 at91_mask_irq0100012c g F .text 00000064 at91_init_aic010000b0 g F .text 00000034 at91_request_irq0100031c g F .text 00000058 do_irq010003e0 g F .text 00000020 at91_init_usart01000374 g F .text 00000018 at91_init01004038 g O .bss 00000080 svr0100006c g F .text 00000024 at91_unmask_irq01000000 g F .text 00000000 begin01000590 g O .text 00000000 __stop___ex_table01004038 g O .bss 00000000 __bss_start01000590 g O .text 00000000 __start___kallsyms01000190 g F .text 0000005c at91_del_timer010002f0 g F .text 0000002c at91_install_irqhandler01000590 g O .text 00000000 __stop___ksymtab01000024 g F .text 00000000 irq_handler01000000 g O .text 00000000 _begin01000590 g O .text 00000000 __start___ex_table01004038 g O .data 00000000 _edata010040b8 g O .bss 00000000 _end01006000 g O *ABS* 00000000 _end_kernel01000590 g O .text 00000000 __start___ksymtabDisassembly of section .text:01000000 <begin>: 1000000: e3a000d2 mov r0, #210 ; 0xd2 1000004: e129f000 msr CPSR_all, r0 1000008: e59fd034 ldr sp, [pc, #34] ; 1000044 <irq_handler+0x20> 100000c: e3a000d3 mov r0, #211 ; 0xd3 1000010: e129f000 msr CPSR_all, r0 1000014: e59fd02c ldr sp, [pc, #2c] ; 1000048 <irq_handler+0x24> 1000018: e3a00013 mov r0, #19 ; 0x13 100001c: e129f000 msr CPSR_all, r0 1000020: ea000127 b 10004c4 <maintest>01000024 <irq_handler>: 1000024: e24ee004 sub lr, lr, #4 ; 0x4 1000028: e92d5fff stmdb sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, lr} 100002c: e14f4000 mrs r4, SPSR 1000030: e92d0010 stmdb sp!, {r4} 1000034: eb0000b8 bl 100031c <do_irq> 1000038: e8bd0010 ldmia sp!, {r4} 100003c: e169f004 msr SPSR_all, r4 1000040: e8fd9fff ldmia sp!, {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, pc}^ 1000044: 01002000 tsteq r0, r0 1000048: 01003004 tsteq r0, r40100004c <at91_mask_irq>: 100004c: e1a0c00d mov r12, sp 1000050: e92dd800 stmdb sp!, {r11, r12, lr, pc} 1000054: e24cb004 sub r11, r12, #4 ; 0x47,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,0};void at91_mask_irq(unsigned int irq){ unsigned long mask=1<<irq; 1000058: e3a03001 mov r3, #1 ; 0x1 100005c: e1a03013 mov r3, r3, lsl r0 *(volatile unsigned int *)AIC_IDCR=mask; 1000060: e3e02eed mvn r2, #3792 ; 0xed0 1000064: e502300b str r3, [r2, -#11]} 1000068: e91ba800 ldmdb r11, {r11, sp, pc}0100006c <at91_unmask_irq>: 100006c: e1a0c00d mov r12, sp 1000070: e92dd800 stmdb sp!, {r11, r12, lr, pc} 1000074: e24cb004 sub r11, r12, #4 ; 0x4void at91_unmask_irq(unsigned int irq){ unsigned long mask=1<<irq; *(volatile unsigned int *)AIC_IECR=mask; 1000078: e3a02489 mov r2, #-1996488704 ; 0x89000000 100007c: e1a029c2 mov r2, r2, asr #19 1000080: e3a03001 mov r3, #1 ; 0x1 1000084: e1a03013 mov r3, r3, lsl r0 1000088: e5823000 str r3, [r2]} 100008c: e91ba800 ldmdb r11, {r11, sp, pc}01000090 <at91_mask_ack_irq>: 1000090: e1a0c00d mov r12, sp 1000094: e92dd800 stmdb sp!, {r11, r12, lr, pc} 1000098: e24cb004 sub r11, r12, #4 ; 0x4void at91_mask_ack_irq(unsigned int irq){ at91_mask_irq(irq); 100009c: ebffffea bl 100004c <at91_mask_irq> *(volatile unsigned int *)AIC_EOICR=0x00; 10000a0: e3e02d3b mvn r2, #3776 ; 0xec0 10000a4: e3a03000 mov r3, #0 ; 0x0 10000a8: e502300f str r3, [r2, -#15] 10000ac: e91ba800 ldmdb r11, {r11, sp, pc}010000b0 <at91_request_irq>: 10000b0: e1a0c00d mov r12, sp 10000b4: e92dd800 stmdb sp!, {r11, r12, lr, pc} 10000b8: e24cb004 sub r11, r12, #4 ; 0x4}int at91_request_irq(unsigned int irq_num,void *irq_isr){ 10000bc: e1a02000 mov r2, r0 if(irq_num>0&&irq_num<32) 10000c0: e2423001 sub r3, r2, #1 ; 0x1 10000c4: e353001e cmp r3, #30 ; 0x1e { svr[irq_num] = (unsigned long)irq_isr; return 1; } else return -1; 10000c8: 83e00000 mvnhi r0, #0 ; 0x0 10000cc: 891ba800 ldmhidb r11, {r11, sp, pc} 10000d0: e59f3008 ldr r3, [pc, #8] ; 10000e0 <at91_request_irq+0x30> 10000d4: e3a00001 mov r0, #1 ; 0x1 10000d8: e7831102 str r1, [r3, r2, lsl #2] 10000dc: e91ba800 ldmdb r11, {r11, sp, pc} 10000e0: 01004038 tsteq r0, r8, lsr r0010000e4 <at91_release_irq>: 10000e4: e1a0c00d mov r12, sp 10000e8: e92dd800 stmdb sp!, {r11, r12, lr, pc} 10000ec: e24cb004 sub r11, r12, #4 ; 0x4}int at91_release_irq(unsigned int irq_num){ if(irq_num>0&&irq_num<32) 10000f0: e2403001 sub r3, r0, #1 ; 0x1 10000f4: e353001e cmp r3, #30 ; 0x1e 10000f8: 8a000008 bhi 1000120 <at91_release_irq+0x3c> { if( svr[irq_num] != 0) 10000fc: e59f1024 ldr r1, [pc, #24] ; 1000128 <at91_release_irq+0x44> 1000100: e1a02100 mov r2, r0, lsl #2 1000104: e7913002 ldr r3, [r1, r2] 1000108: e3530000 cmp r3, #0 ; 0x0 { svr[irq_num] = (unsigned long)0; return 1; 100010c: 13a00001 movne r0, #1 ; 0x1 1000110: 13a03000 movne r3, #0 ; 0x0 1000114: 17813002 strne r3, [r1, r2] } else return -1; 1000118: 03e00000 mvneq r0, #0 ; 0x0 100011c: e91ba800 ldmdb r11, {r11, sp, pc} } else return -1; 1000120: e3e00000 mvn r0, #0 ; 0x0 1000124: e91ba800 ldmdb r11, {r11, sp, pc} 1000128: 01004038 tsteq r0, r8, lsr r00100012c <at91_init_aic>: 100012c: e1a0c00d mov r12, sp 1000130: e92dd800 stmdb sp!, {r11, r12, lr, pc} 1000134: e24cb004 sub r11, r12, #4 ; 0x4}void at91_init_aic(void){ int irqnum; *(volatile unsigned int *)AIC_IDCR=0xffffffff; *(volatile unsigned int *)AIC_ICCR=0xffffffff; for(irqnum=0;irqnum<32;irqnum++) *(volatile unsigned int *)AIC_EOICR=irqnum; 1000138: e3a01000 mov r1, #0 ; 0x0 100013c: e3e02eed mvn r2, #3792 ; 0xed0 1000140: e3e03000 mvn r3, #0 ; 0x0 1000144: e502300b str r3, [r2, -#11] 1000148: e3e00d3b mvn r0, #3776 ; 0xec0 100014c: e5023007 str r3, [r2, -#7] 1000150: e500100f str r1, [r0, -#15] 1000154: e2811001 add r1, r1, #1 ; 0x1 1000158: e351001f cmp r1, #31 ; 0x1f 100015c: dafffffb ble 1000150 <at91_init_aic+0x24> for(irqnum=0;irqnum<32;irqnum++) *(volatile unsigned int *)(AIC_SMR(irqnum))=at91_irq_prtable[irqnum] | EdgeTriggered; 1000160: e3a01000 mov r1, #0 ; 0x0 1000164: e3a02102 mov r2, #-2147483648 ; 0x80000000 1000168: e1a029c2 mov r2, r2, asr #19 100016c: e59f0018 ldr r0, [pc, #18] ; 100018c <at91_init_aic+0x60> 1000170: e7d03001 ldrb r3, [r0, r1] 1000174: e3833020 orr r3, r3, #32 ; 0x20 1000178: e7823101 str r3, [r2, r1, lsl #2] 100017c: e2811001 add r1, r1, #1 ; 0x1 1000180: e351001f cmp r1, #31 ; 0x1f 1000184: dafffff9 ble 1000170 <at91_init_aic+0x44>} 1000188: e91ba800 ldmdb r11, {r11, sp, pc} 100018c: 01004008 tsteq r0, r801000190 <at91_del_timer>: 1000190: e1a0c00d mov r12, sp 1000194: e92dd8f0 stmdb sp!, {r4, r5, r6, r7, r11, r12, lr, pc} 1000198: e24cb004 sub r11, r12, #4 ; 0x4extern unsigned long svr[32];int at91_del_timer(unsigned char TimerNum){ register volatile struct at91_timers* tt=(struct at91_timers*)(AT91_TC_BASE); 100019c: e3a05102 mov r5, #-2147483648 ; 0x80000000 10001a0: e1a05745 mov r5, r5, asr #14 10001a4: e20000ff and r0, r0, #255 ; 0xff register volatile struct at91_timer_channel* tc = &tt->chans[TimerNum].ch; 10001a8: e1a06300 mov r6, r0, lsl #6 10001ac: e0867005 add r7, r6, r5 if(TimerNum>2) 10001b0: e3500002 cmp r0, #2 ; 0x2 10001b4: 8a00000a bhi 10001e4 <at91_del_timer+0x54> return -1; at91_mask_irq(TimerNum+4); 10001b8: e2804004 add r4, r0, #4 ; 0x4 10001bc: e1a00004 mov r0, r4 10001c0: ebffffa1 bl 100004c <at91_mask_irq> tc->ccr= 0x02; tc->rc = 0; at91_release_irq(TimerNum+4); 10001c4: e1a00004 mov r0, r4 10001c8: e3a03002 mov r3, #2 ; 0x2 10001cc: e7863005 str r3, [r6, r5] 10001d0: e3a02000 mov r2, #0 ; 0x0 10001d4: e587201c str r2, [r7, #28] 10001d8: ebffffc1 bl 10000e4 <at91_release_irq> return 1; 10001dc: e3a00001 mov r0, #1 ; 0x1 10001e0: e91ba8f0 ldmdb r11, {r4, r5, r6, r7, r11, sp, pc} 10001e4: e3e00000 mvn r0, #0 ; 0x0} 10001e8: e91ba8f0 ldmdb r11, {r4, r5, r6, r7, r11, sp, pc}010001ec <at91_set_timer>: 10001ec: e1a0c00d mov r12, sp 10001f0: e92dd830 stmdb sp!, {r4, r5, r11, r12, lr, pc} 10001f4: e24cb004 sub r11, r12, #4 ; 0x4int at91_set_timer(at91_timer_param param){ 10001f8: e24b3020 sub r3, r11, #32 ; 0x20 10001fc: e24dd00c sub sp, sp, #12 ; 0xc 1000200: e8830007 stmia r3, {r0, r1, r2} register volatile struct at91_timers* tt=(struct at91_timers*)(AT91_TC_BASE); 1000204: e3a04102 mov r4, #-2147483648 ; 0x80000000 register volatile struct at91_timer_channel* tc = &tt->chans[param.TimerNum].ch; 1000208: e51b0020 ldr r0, [r11, -#32] 100020c: e1a04744 mov r4, r4, asr #14 unsigned long v; if(param.TimerNum>2 || param.CycleTime==0 || param.irq_svr==0) 1000210: e3500002 cmp r0, #2 ; 0x2 1000214: e0845300 add r5, r4, r0, lsl #6 1000218: 8a00001c bhi 1000290 <at91_set_timer+0xa4> 100021c: e51b301c ldr r3, [r11, -#28] 1000220: e3530000 cmp r3, #0 ; 0x0 1000224: 0a000019 beq 1000290 <at91_set_timer+0xa4> 1000228: e51b1018 ldr r1, [r11, -#24] 100022c: e3510000 cmp r1, #0 ; 0x0 1000230: 0a000016 beq 1000290 <at91_set_timer+0xa4> return -1; at91_request_irq(param.TimerNum+4,param.irq_svr); 1000234: e2800004 add r0, r0, #4 ; 0x4 1000238: ebffff9c bl 10000b0 <at91_request_irq> tt->bcr=0; 100023c: e3a03000 mov r3, #0 ; 0x0 1000240: e58430c0 str r3, [r4, #192] switch(param.TimerNum) 1000244: e51b3020 ldr r3, [r11, -#32] 1000248: e3530001 cmp r3, #1 ; 0x1 100024c: 0a000007 beq 1000270 <at91_set_timer+0x84> 1000250: 3a000002 bcc 1000260 <at91_set_timer+0x74> 1000254: e3530002 cmp r3, #2 ; 0x2 1000258: 0a000008 beq 1000280 <at91_set_timer+0x94> 100025c: ea00000b b 1000290 <at91_set_timer+0xa4> { case 0: v=tt->bmr&0xfc;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -