irq.txt
来自「工厂环境污染控制数据采集器」· 文本 代码 · 共 111 行
TXT
111 行
; generated by ARM/Thumb C/C++ Compiler with , RVCT3.1 [Build 939] for uVision
; commandline ArmCC [--debug -c --asm --interleave -o.\obj\irq.o --depend=.\obj\irq.d --device=DARMP --apcs=interwork -O0 -IC:\Keil\ARM\INC\Philips --omf_browse=.\obj\irq.crf irq.c]
ARM
AREA ||.text||, CODE, READONLY, ALIGN=2
init_VIC PROC
;;;25 {
;;;26 DWORD i = 0;
000000 e3a00000 MOV r0,#0
;;;27 DWORD *vect_addr, *vect_cntl;
;;;28
;;;29 /* initialize VIC*/
;;;30 VICIntEnClr = 0xffffffff;
000004 e3e03000 MVN r3,#0
000008 e3a0c000 MOV r12,#0
00000c e50c3fec STR r3,[r12,#-0xfec]
;;;31 VICVectAddr = 0;
000010 e3a03000 MOV r3,#0
000014 e5033100 STR r3,[r3,#-0x100]
;;;32 VICIntSelect = 0;
000018 e3a03000 MOV r3,#0
00001c e5033ff4 STR r3,[r3,#-0xff4]
;;;33
;;;34 /* set all the vector and vector control register to 0 */
;;;35 for ( i = 0; i < VIC_SIZE; i++ )
000020 e1a00000 MOV r0,r0
000024 ea000008 B |L1.76|
|L1.40|
;;;36 {
;;;37 vect_addr = (DWORD *)(VIC_BASE_ADDR + VECT_ADDR_INDEX + i*4);
000028 e59fc084 LDR r12,|L1.180|
00002c e08c1100 ADD r1,r12,r0,LSL #2
;;;38 vect_cntl = (DWORD *)(VIC_BASE_ADDR + VECT_CNTL_INDEX + i*4);
000030 e28ccc01 ADD r12,r12,#0x100
000034 e08c2100 ADD r2,r12,r0,LSL #2
;;;39 *vect_addr = 0x0;
000038 e3a03000 MOV r3,#0
00003c e5813000 STR r3,[r1,#0]
;;;40 *vect_cntl = 0xF;
000040 e3a0300f MOV r3,#0xf
000044 e5823000 STR r3,[r2,#0]
000048 e2800001 ADD r0,r0,#1 ;35
|L1.76|
00004c e3500020 CMP r0,#0x20 ;35
000050 3afffff4 BCC |L1.40|
;;;41 }
;;;42 return;
;;;43 }
000054 e12fff1e BX lr
;;;44
ENDP
install_irq PROC
;;;54 DWORD install_irq( DWORD IntNumber, void *HandlerAddr, DWORD Priority )
;;;55 {
000058 e92d4010 PUSH {r4,lr}
00005c e1a03000 MOV r3,r0
;;;56 DWORD *vect_addr;
;;;57 DWORD *vect_cntl;
;;;58
;;;59 VICIntEnClr = 1 << IntNumber; /* Disable Interrupt */
000060 e3a00001 MOV r0,#1
000064 e1a00310 LSL r0,r0,r3
000068 e3a04000 MOV r4,#0
00006c e5040fec STR r0,[r4,#-0xfec]
;;;60 if ( IntNumber >= VIC_SIZE )
000070 e3530020 CMP r3,#0x20
000074 3a000002 BCC |L1.132|
;;;61 {
;;;62 return ( FALSE );
000078 e3a00000 MOV r0,#0
|L1.124|
00007c e8bd4010 POP {r4,lr}
;;;63 }
;;;64 else
;;;65 {
;;;66 /* find first un-assigned VIC address for the handler */
;;;67 vect_addr = (DWORD *)(VIC_BASE_ADDR + VECT_ADDR_INDEX + IntNumber*4);
;;;68 vect_cntl = (DWORD *)(VIC_BASE_ADDR + VECT_CNTL_INDEX + IntNumber*4);
;;;69 *vect_addr = (DWORD)HandlerAddr; /* set interrupt vector */
;;;70 *vect_cntl = Priority;
;;;71 VICIntEnable = 1 << IntNumber; /* Enable Interrupt */
;;;72 return( TRUE );
;;;73 }
;;;74 }
000080 e12fff1e BX lr
|L1.132|
000084 e59f4028 LDR r4,|L1.180|
000088 e084c103 ADD r12,r4,r3,LSL #2 ;67
00008c e2844c01 ADD r4,r4,#0x100 ;68
000090 e084e103 ADD lr,r4,r3,LSL #2 ;68
000094 e58c1000 STR r1,[r12,#0] ;69
000098 e58e2000 STR r2,[lr,#0] ;70
00009c e3a00001 MOV r0,#1 ;71
0000a0 e1a00310 LSL r0,r0,r3 ;71
0000a4 e3a04000 MOV r4,#0 ;71
0000a8 e5040ff0 STR r0,[r4,#-0xff0] ;71
0000ac e3a00001 MOV r0,#1 ;72
0000b0 eafffff1 B |L1.124|
;;;75
ENDP
|L1.180|
0000b4 fffff100 DCD 0xfffff100
AREA ||.data||, DATA, ALIGN=2
sysreg
000000 00000000 DCD 0x00000000
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?