📄 irq.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 + -