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 + -
显示快捷键?