📄 main.lst
字号:
##############################################################################
# #
# IAR ARM ANSI C/C++ Compiler V4.31A/W32 21/Jul/2006 08:58:24 #
# Copyright 1999-2005 IAR Systems. All rights reserved. #
# Time limited license: 29 days left #
# #
# Cpu mode = interwork #
# Endian = little #
# Stack alignment = 4 #
# Source file = E:\Project\examples\IAR\基础实验\EINT1\main.c #
# Command line = E:\Project\examples\IAR\基础实验\EINT1\main.c -lCN #
# E:\Project\examples\IAR\基础实验\EINT1\Debug\List\ #
# -lA E:\Project\examples\IAR\基础实验\EINT1\Debug\Lis #
# t\ -o E:\Project\examples\IAR\基础实验\EINT1\Debug\O #
# bj\ -s9 --debug --cpu_mode thumb --endian little #
# --cpu ARM7TDMI-S --stack_align 4 --interwork -e #
# --fpu None --dlib_config "E:\Program Files\IAR #
# Systems\Embedded Workbench #
# 4.0\ARM\LIB\dl4tptinl8n.h" -I "E:\Program Files\IAR #
# Systems\Embedded Workbench 4.0\ARM\INC\" #
# List file = E:\Project\examples\IAR\基础实验\EINT1\Debug\List\ma #
# in.lst #
# Object file = E:\Project\examples\IAR\基础实验\EINT1\Debug\Obj\mai #
# n.r79 #
# #
# #
##############################################################################
E:\Project\examples\IAR\基础实验\EINT1\main.c
1 /*******************************************************************************
2 *File: EINT1_LED.c
3 *功能: 使用外部中断1进行LED控制,每当有一次中断时,即取反LED,以便指示中断输入
4 *******************************************************************************/
5 #include "config.h"
6 #include <intrinsics.h>
7 #define LEDCON 0x00000800 /*P0.11 引脚控制LED(DS12),低电平点亮*/
8
9
10 /*******************************************************************************
11 *名称:IRQ_EINT1()
12 *功能:外部中断1处理函数
13 *******************************************************************************/
\ In segment CODE, align 4, keep-with-next
14 __irq void IRQ_Eint1(void)
15 { uint32 i;
\ IRQ_Eint1:
\ 00000000 03002DE9 STMDB SP!,{R0,R1} ;; Push
16
17 i=VICIRQStatus; //读出VICIRQStatus的值
\ 00000004 FF00E0E3 MVN R0,#+255
\ 00000008 F00EC0E3 BIC R0,R0,#0xF00
\ 0000000C 000090E5 LDR R0,[R0, #+0]
18 i=IOSET; //读出当前LED控制值
\ 00000010 4E02A0E3 MOV R0,#-536870908
\ 00000014 A00B80E3 ORR R0,R0,#0x28000
\ 00000018 000090E5 LDR R0,[R0, #+0]
19 if((i&LEDCON)==0) //控制LED输出
\ 0000001C 801EA0E3 MOV R1,#+2048
\ 00000020 800E10E2 ANDS R0,R0,#0x800
\ 00000024 CE02A013 MOVNE R0,#-536870900
20 { IOSET=LEDCON;
\ 00000028 4E02A003 MOVEQ R0,#-536870908
\ 0000002C A00B80E3 ORR R0,R0,#0x28000
\ 00000030 001080E5 STR R1,[R0, #+0]
\ 00000034 020000EA B ??IRQ_Eint1_0
21 }
22 else
23 { IOCLR=LEDCON;
24 }
25 while((EXTINT&0x02)!=0) //等待外部中断信号恢复为高电平
26 { EXTINT=0x02;
\ ??IRQ_Eint1_1:
\ 00000038 ........ LDR R0,??DataTable2 ;; 0xe01fc140
\ 0000003C 0210A0E3 MOV R1,#+2
\ 00000040 0010C0E5 STRB R1,[R0, #+0]
27 }
\ ??IRQ_Eint1_0:
\ 00000044 ........ LDR R0,??DataTable2 ;; 0xe01fc140
\ 00000048 0000D0E5 LDRB R0,[R0, #+0]
\ 0000004C 020010E2 ANDS R0,R0,#0x2
\ 00000050 F8FFFF1A BNE ??IRQ_Eint1_1
28 }
\ 00000054 0300BDE8 LDMIA SP!,{R0,R1} ;; Pop
\ 00000058 04F05EE2 SUBS PC,LR,#+4 ;; return
29 /*******************************************************************************
30 *名称: main()
31 *功能:初始化外部中断1及I/O连接等
32 *******************************************************************************/
33
\ In segment CODE, align 4, keep-with-next
34 int main()
35 { PINSEL0=0x20000000; //设置I/O口工作模式,P0.14设置为EINT1
\ main:
\ 00000000 00B5 PUSH {LR}
\ 00000002 0B48 LDR R0,??main_0 ;; 0xe002c000
\ 00000004 8021 MOV R1,#+128
\ 00000006 8905 LSL R1,R1,#+22 ;; #+536870912
\ 00000008 0160 STR R1,[R0, #+0]
36 PINSEL1=0x00000000;
\ 0000000A 0020 MOV R0,#+0
\ 0000000C 0949 LDR R1,??main_0+0x4 ;; 0xe002c004
\ 0000000E 0860 STR R0,[R1, #+0]
37 IODIR=LEDCON; //设置LED控制口为输出,其它I/O为输入
\ 00000010 0949 LDR R1,??main_0+0x8 ;; 0xe0028008
\ 00000012 8022 MOV R2,#+128
\ 00000014 1201 LSL R2,R2,#+4 ;; #+2048
\ 00000016 0A60 STR R2,[R1, #+0]
38
39 /*打开EINT1中断(不设置向量控制器,即使用非向量IRQ)*/
40 VICIntSelect=0x00000000;
\ 00000018 0849 LDR R1,??main_0+0xC ;; 0xfffff00c
\ 0000001A 0860 STR R0,[R1, #+0]
41 VICIntEnable=0x00008000;
\ 0000001C 0848 LDR R0,??main_0+0x10 ;; 0xfffff010
\ 0000001E 1101 LSL R1,R2,#+4
\ 00000020 0160 STR R1,[R0, #+0]
42 EXTINT=0x07; //清除外部中断标志
\ 00000022 .... LDR R0,??DataTable2 ;; 0xe01fc140
\ 00000024 0721 MOV R1,#+7
\ 00000026 0170 STRB R1,[R0, #+0]
43 __enable_interrupt();
\ 00000028 ........ _BLF ??EnI_t,??rT??EnI_t
44 //enable_irq();
45 while(1); //等待中断
\ ??main_1:
\ 0000002C FEE7 B ??main_1
\ 0000002E C046 NOP
\ ??main_0:
\ 00000030 00C002E0 DC32 0xe002c000
\ 00000034 04C002E0 DC32 0xe002c004
\ 00000038 088002E0 DC32 0xe0028008
\ 0000003C 0CF0FFFF DC32 0xfffff00c
\ 00000040 10F0FFFF DC32 0xfffff010
46
47 }
\ In segment CODE, align 4, keep-with-next
\ ??DataTable2:
\ 00000000 40C11FE0 DC32 0xe01fc140
Maximum stack usage in bytes:
Function CSTACK
-------- ------
IRQ_Eint1 8
main 4
Segment part sizes:
Function/Label Bytes
-------------- -----
IRQ_Eint1 92
main 68
??DataTable2 4
Others 24
188 bytes in segment CODE
164 bytes of CODE memory (+ 24 bytes shared)
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -