⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 irq.lst

📁 lpc2478开发板基于IAR编译器移植ucos实验例程
💻 LST
字号:
##############################################################################
#                                                                            #
# IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION    12/Dec/2008  17:14:24 #
# Copyright 1999-2005 IAR Systems. All rights reserved.                      #
#                                                                            #
#    Cpu mode        =  arm                                                  #
#    Endian          =  little                                               #
#    Stack alignment =  4                                                    #
#    Source file     =  E:\IAR_2478\IAR_2478\26uCOS\Src\uCOS\Common\src\irq. #
#                       c                                                    #
#    Command line    =  E:\IAR_2478\IAR_2478\26uCOS\Src\uCOS\Common\src\irq. #
#                       c -lCN E:\IAR_2478\IAR_2478\26uCOS\Src\uCOS\RAM_Debu #
#                       g\List\ -o E:\IAR_2478\IAR_2478\26uCOS\Src\uCOS\RAM_ #
#                       Debug\Obj\ -z2 --no_cse --no_unroll --no_inline      #
#                       --no_code_motion --no_tbaa --no_clustering           #
#                       --no_scheduling --debug --cpu_mode arm --endian      #
#                       little --cpu ARM7TDMI-S --stack_align 4 -e --fpu     #
#                       None --dlib_config "C:\Program Files\IAR             #
#                       Systems\Embedded Workbench 4.0                       #
#                       Evaluation\arm\LIB\dl4tpannl8n.h" -I                 #
#                       E:\IAR_2478\IAR_2478\26uCOS\Src\uCOS\include\ -I     #
#                       E:\IAR_2478\IAR_2478\26uCOS\Src\uCOS\ucos-ii\include #
#                       \ -I "C:\Program Files\IAR Systems\Embedded          #
#                       Workbench 4.0 Evaluation\arm\INC\"                   #
#    List file       =  E:\IAR_2478\IAR_2478\26uCOS\Src\uCOS\RAM_Debug\List\ #
#                       irq.lst                                              #
#    Object file     =  E:\IAR_2478\IAR_2478\26uCOS\Src\uCOS\RAM_Debug\Obj\i #
#                       rq.r79                                               #
#                                                                            #
#                                                                            #
##############################################################################

E:\IAR_2478\IAR_2478\26uCOS\Src\uCOS\Common\src\irq.c
      1          /*****************************************************************************
      2           *   irq.c: Interrupt handler C file for NXP LPC24xx Family Microprocessors
      3           *
      4           *   Copyright(C) 2006, NXP Semiconductor
      5           *   All rights reserved.
      6           *
      7           *   History
      8           *   2006.07.13  ver 1.00    Prelimnary version, first Release
      9           *
     10          ******************************************************************************/
     11          #include "LPC2468.h"			/* LPC24XX Peripheral Registers	*/
     12          #include "type.h"
     13          #include "irq.h"
     14          
     15          /* Initialize the interrupt controller */
     16          /******************************************************************************
     17          ** Function name:		init_VIC
     18          **
     19          ** Descriptions:		Initialize VIC interrupt controller.
     20          ** parameters:			None
     21          ** Returned value:		None
     22          **
     23          ******************************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
     24          void init_VIC(void)
     25          {
     26              DWORD i = 0;
   \                     init_VIC:
   \   00000000   0030A0E3           MOV      R3,#+0
   \   00000004   0300B0E1           MOVS     R0,R3
     27              DWORD *vect_addr, *vect_cntl;
     28             	
     29              /* initialize VIC*/
     30              VICIntEnClr = 0xffffffff;           // 使能全部清零
   \   00000008   EB30E0E3           MVN      R3,#+235
   \   0000000C   F03EC3E3           BIC      R3,R3,#0xF00
   \   00000010   00C0E0E3           MVN      R12,#+0
   \   00000014   00C083E5           STR      R12,[R3, #+0]
     31              VICVectAddr = 0;                    // 默认向量地址为0
   \   00000018   FF30E0E3           MVN      R3,#+255
   \   0000001C   00C0A0E3           MOV      R12,#+0
   \   00000020   00C083E5           STR      R12,[R3, #+0]
     32              VICIntSelect = 0;                   // 没有FIQ
   \   00000024   F330E0E3           MVN      R3,#+243
   \   00000028   F03EC3E3           BIC      R3,R3,#0xF00
   \   0000002C   00C0A0E3           MOV      R12,#+0
   \   00000030   00C083E5           STR      R12,[R3, #+0]
     33          
     34              /* set all the vector and vector control register to 0 */
     35              for ( i = 0; i < VIC_SIZE; i++ )    // 32个中断服务向量复位
   \   00000034   0030A0E3           MOV      R3,#+0
   \   00000038   0300B0E1           MOVS     R0,R3
   \                     ??init_VIC_0:
   \   0000003C   200050E3           CMP      R0,#+32
   \   00000040   0F00002A           BCS      ??init_VIC_1
     36              {
     37          		vect_addr = (DWORD *)(VIC_BASE_ADDR + VECT_ADDR_INDEX + i*4);
   \   00000044   0430A0E3           MOV      R3,#+4
   \   00000048   FFC0E0E3           MVN      R12,#+255
   \   0000004C   E0CECCE3           BIC      R12,R12,#0xE00
   \   00000050   93C02CE0           MLA      R12,R3,R0,R12
   \   00000054   0C10B0E1           MOVS     R1,R12
     38          		vect_cntl = (DWORD *)(VIC_BASE_ADDR + VECT_CNTL_INDEX + i*4);
   \   00000058   0430A0E3           MOV      R3,#+4
   \   0000005C   FFC0E0E3           MVN      R12,#+255
   \   00000060   D0CECCE3           BIC      R12,R12,#0xD00
   \   00000064   93C02CE0           MLA      R12,R3,R0,R12
   \   00000068   0C20B0E1           MOVS     R2,R12
     39          		*vect_addr = 0x0;	//中断服务函数都指向开头
   \   0000006C   0030A0E3           MOV      R3,#+0
   \   00000070   003081E5           STR      R3,[R1, #+0]
     40          		*vect_cntl = 0xF;       //优先级最低
   \   00000074   0F30A0E3           MOV      R3,#+15
   \   00000078   003082E5           STR      R3,[R2, #+0]
     41              }
   \   0000007C   010090E2           ADDS     R0,R0,#+1
   \   00000080   EDFFFFEA           B        ??init_VIC_0
     42              return;
   \                     ??init_VIC_1:
   \   00000084   0EF0A0E1           MOV      PC,LR            ;; return
     43          }
     44          
     45          /******************************************************************************
     46          ** Function name:		install_irq
     47          **
     48          ** Descriptions:		Install interrupt handler
     49          ** parameters:			Interrupt number, interrupt handler address,
     50          **						interrupt priority
     51          ** Returned value:		true or false, return false if IntNum is out of range
     52          **
     53          ******************************************************************************/

   \                                 In segment CODE, align 4, keep-with-next
     54          DWORD install_irq( DWORD IntNumber, void *HandlerAddr, DWORD Priority )
     55          {
   \                     install_irq:
   \   00000000   30002DE9           PUSH     {R4,R5}
   \   00000004   0030B0E1           MOVS     R3,R0
     56              DWORD *vect_addr;
     57              DWORD *vect_cntl;
     58          
     59              VICIntEnClr = 1 << IntNumber;	/* Disable Interrupt */
   \   00000008   EB00E0E3           MVN      R0,#+235
   \   0000000C   F00EC0E3           BIC      R0,R0,#0xF00
   \   00000010   0150A0E3           MOV      R5,#+1
   \   00000014   1553B0E1           LSLS     R5,R5,R3
   \   00000018   005080E5           STR      R5,[R0, #+0]
     60              if ( IntNumber >= VIC_SIZE )
   \   0000001C   200053E3           CMP      R3,#+32
   \   00000020   0100003A           BCC      ??install_irq_0
     61              {
     62          		return ( FALSE );
   \   00000024   0000A0E3           MOV      R0,#+0
   \   00000028   110000EA           B        ??install_irq_1
     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);
   \                     ??install_irq_0:
   \   0000002C   0400A0E3           MOV      R0,#+4
   \   00000030   FF50E0E3           MVN      R5,#+255
   \   00000034   E05EC5E3           BIC      R5,R5,#0xE00
   \   00000038   905325E0           MLA      R5,R0,R3,R5
   \   0000003C   05C0B0E1           MOVS     R12,R5
     68          		vect_cntl = (DWORD *)(VIC_BASE_ADDR + VECT_CNTL_INDEX + IntNumber*4);
   \   00000040   0400A0E3           MOV      R0,#+4
   \   00000044   FF50E0E3           MVN      R5,#+255
   \   00000048   D05EC5E3           BIC      R5,R5,#0xD00
   \   0000004C   905325E0           MLA      R5,R0,R3,R5
   \   00000050   0540B0E1           MOVS     R4,R5
     69          		*vect_addr = (DWORD)HandlerAddr;	/* set interrupt vector */
   \   00000054   00108CE5           STR      R1,[R12, #+0]
     70          		*vect_cntl = Priority;
   \   00000058   002084E5           STR      R2,[R4, #+0]
     71          
     72          		VICIntEnable = 1 << IntNumber;	        /* Enable Interrupt */
   \   0000005C   EF00E0E3           MVN      R0,#+239
   \   00000060   F00EC0E3           BIC      R0,R0,#0xF00
   \   00000064   0150A0E3           MOV      R5,#+1
   \   00000068   1553B0E1           LSLS     R5,R5,R3
   \   0000006C   005080E5           STR      R5,[R0, #+0]
     73          
     74          		return( TRUE );
   \   00000070   0100A0E3           MOV      R0,#+1
   \                     ??install_irq_1:
   \   00000074   3000BDE8           POP      {R4,R5}
   \   00000078   0EF0A0E1           MOV      PC,LR            ;; return
     75              }
     76          }
     77          
     78          /******************************************************************************
     79          **                            End Of File
     80          ******************************************************************************/

   Maximum stack usage in bytes:

     Function    CSTACK
     --------    ------
     init_VIC        0
     install_irq     8


   Segment part sizes:

     Function/Label Bytes
     -------------- -----
     init_VIC        136
     install_irq     124

 
 260 bytes in segment CODE
 
 260 bytes of CODE memory

Errors: none
Warnings: none

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -