📄 lpc_main.lst
字号:
##############################################################################
# #
# IAR ARM ANSI C/C++ Compiler V4.40A/W32 EVALUATION 05/Apr/2008 02:54:34 #
# Copyright 1999-2005 IAR Systems. All rights reserved. #
# #
# Cpu mode = arm #
# Endian = little #
# Stack alignment = 4 #
# Source file = E:\Projects\IAR\LPC2210\LPC_Main.c #
# Command line = E:\Projects\IAR\LPC2210\LPC_Main.c -lC #
# E:\Projects\IAR\LPC2210\xFLASH\List\ -o #
# E:\Projects\IAR\LPC2210\xFLASH\Obj\ -z3 --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 "d:\Program #
# Files\ARM\EWARM\ARM\LIB\dl4tpannl8n.h" -I #
# "d:\Program Files\ARM\EWARM\ARM\INC\" #
# List file = E:\Projects\IAR\LPC2210\xFLASH\List\LPC_Main.lst #
# Object file = E:\Projects\IAR\LPC2210\xFLASH\Obj\LPC_Main.r79 #
# #
# #
##############################################################################
E:\Projects\IAR\LPC2210\LPC_Main.c
1 //这一段无需改动
2 #ifndef TRUE
3 #define TRUE 1
4 #endif
5
6 #ifndef FALSE
7 #define FALSE 0
8 #endif
9
10 typedef unsigned char uint8; /* 无符号8位整型变量 */
11 typedef signed char int8; /* 有符号8位整型变量 */
12 typedef unsigned short uint16; /* 无符号16位整型变量 */
13 typedef signed short int16; /* 有符号16位整型变量 */
14 typedef unsigned int uint32; /* 无符号32位整型变量 */
15 typedef signed int int32; /* 有符号32位整型变量 */
16 typedef float fp32; /* 单精度浮点数(32位长度) */
17 typedef double fp64; /* 双精度浮点数(64位长度) */
18
19 #include <iolpc2124.h>
\ In segment DATA_AN, at 0xe01fc080
\ union <unnamed> volatile __data _A_PLLCON
\ _A_PLLCON:
\ 00000000 DS8 4
\ In segment DATA_AN, at 0xe01fc084
\ union <unnamed> volatile __data _A_PLLCFG
\ _A_PLLCFG:
\ 00000000 DS8 4
\ In segment DATA_AN, at 0xe01fc088
\ union <unnamed> const volatile __data _A_PLLSTAT
\ _A_PLLSTAT:
\ 00000000 DS8 4
\ In segment DATA_AN, at 0xe01fc08c
\ union <unnamed> volatile __data _A_PLLFEED
\ _A_PLLFEED:
\ 00000000 DS8 4
\ In segment DATA_AN, at 0xe01fc100
\ union <unnamed> volatile __data _A_VPBDIV
\ _A_VPBDIV:
\ 00000000 DS8 4
\ In segment DATA_AN, at 0xe01fc000
\ union <unnamed> volatile __data _A_MAMCR
\ _A_MAMCR:
\ 00000000 DS8 4
\ In segment DATA_AN, at 0xe01fc004
\ union <unnamed> volatile __data _A_MAMTIM
\ _A_MAMTIM:
\ 00000000 DS8 4
\ In segment DATA_AN, at 0xfffff00c
\ union <unnamed> volatile __data _A_VICIntSelect
\ _A_VICIntSelect:
\ 00000000 DS8 4
\ In segment DATA_AN, at 0xfffff014
\ union <unnamed> volatile __data _A_VICIntEnClear
\ _A_VICIntEnClear:
\ 00000000 DS8 4
\ In segment DATA_AN, at 0xfffff030
\ unsigned long volatile __data VICVectAddr
\ VICVectAddr:
\ 00000000 DS8 4
\ In segment DATA_AN, at 0xe002c000
\ union <unnamed> volatile __data _A_PINSEL0
\ _A_PINSEL0:
\ 00000000 DS8 4
\ In segment DATA_AN, at 0xe0028004
\ union <unnamed> volatile __data _A_IO0SET
\ _A_IO0SET:
\ 00000000 DS8 4
\ In segment DATA_AN, at 0xe0028008
\ union <unnamed> volatile __data _A_IO0DIR
\ _A_IO0DIR:
\ 00000000 DS8 4
\ In segment DATA_AN, at 0xe002800c
\ union <unnamed> volatile __data _A_IO0CLR
\ _A_IO0CLR:
\ 00000000 DS8 4
20
21
22 /* 系统设置, Fosc、Fcclk、Fcco、Fpclk必须定义*/
23 #define Fosc 11059200 //晶振频率,10MHz~25MHz,应当与实际一至
24 #define Fcclk (Fosc * 4) //系统频率,必须为Fosc的整数倍(1~32),且<=60MHZ
25 #define Fcco (Fcclk * 4) //CCO频率,必须为Fcclk的2、4、8、16倍,范围为156MHz~320MHz
26 #define Fpclk (Fcclk / 4) * 1 //VPB时钟频率,只能为(Fcclk / 4)的1 ~ 4倍
27
\ In segment CODE, align 4, keep-with-next
28 void TargetResetInit(void)
29 {
30 #ifdef __DEBUG
31 MEMMAP = 0x3; //remap
32 #endif
33
34 #ifdef __xFLASH
35 MEMMAP = 0x3; //remap
36 #endif
37
38 #ifdef __IN_CHIP
39 MEMMAP = 0x1; //remap
40 #endif
41 /**/
42 /* 设置系统各部分时钟 */
43 PLLCON = 1; //激活PLL
\ TargetResetInit:
\ 00000000 CC009FE5 LDR R0,??TargetResetInit_0 ;; 0xe01fc080
\ 00000004 0110A0E3 MOV R1,#+1
\ 00000008 001080E5 STR R1,[R0, #+0]
44 //以下为计算M值
45 #if (Fpclk / (Fcclk / 4)) == 1
46 VPBDIV = 0;
\ 0000000C C4009FE5 LDR R0,??TargetResetInit_0+0x4 ;; 0xe01fc100
\ 00000010 0010A0E3 MOV R1,#+0
\ 00000014 001080E5 STR R1,[R0, #+0]
47 #endif
48 #if (Fpclk / (Fcclk / 4)) == 2
49 VPBDIV = 2;
50 #endif
51 #if (Fpclk / (Fcclk / 4)) == 4
52 VPBDIV = 1;
53 #endif
54 //以下为计算P值
55 #if (Fcco / Fcclk) == 2
56 PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);
57 #endif
58 #if (Fcco / Fcclk) == 4
59 PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);
\ 00000018 BC009FE5 LDR R0,??TargetResetInit_0+0x8 ;; 0xe01fc084
\ 0000001C 2310A0E3 MOV R1,#+35
\ 00000020 001080E5 STR R1,[R0, #+0]
60 #endif
61 #if (Fcco / Fcclk) == 8
62 PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);
63 #endif
64 #if (Fcco / Fcclk) == 16
65 PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);
66 #endif
67 PLLFEED = 0xaa; //更改设置
\ 00000024 B4009FE5 LDR R0,??TargetResetInit_0+0xC ;; 0xe01fc08c
\ 00000028 AA10A0E3 MOV R1,#+170
\ 0000002C 001080E5 STR R1,[R0, #+0]
68 PLLFEED = 0x55;
\ 00000030 A8009FE5 LDR R0,??TargetResetInit_0+0xC ;; 0xe01fc08c
\ 00000034 5510A0E3 MOV R1,#+85
\ 00000038 001080E5 STR R1,[R0, #+0]
69
70 while((PLLSTAT & (1 << 10)) == 0); //等待频率锁定
\ ??TargetResetInit_1:
\ 0000003C A0009FE5 LDR R0,??TargetResetInit_0+0x10 ;; 0xe01fc088
\ 00000040 000090E5 LDR R0,[R0, #+0]
\ 00000044 400E10E3 TST R0,#0x400
\ 00000048 FBFFFF0A BEQ ??TargetResetInit_1
71 PLLCON = 3; //连接PLL
\ 0000004C 80009FE5 LDR R0,??TargetResetInit_0 ;; 0xe01fc080
\ 00000050 0310A0E3 MOV R1,#+3
\ 00000054 001080E5 STR R1,[R0, #+0]
72
73 PLLFEED = 0xaa; //更改设置
\ 00000058 80009FE5 LDR R0,??TargetResetInit_0+0xC ;; 0xe01fc08c
\ 0000005C AA10A0E3 MOV R1,#+170
\ 00000060 001080E5 STR R1,[R0, #+0]
74 PLLFEED = 0x55;
\ 00000064 74009FE5 LDR R0,??TargetResetInit_0+0xC ;; 0xe01fc08c
\ 00000068 5510A0E3 MOV R1,#+85
\ 0000006C 001080E5 STR R1,[R0, #+0]
75
76 /* 设置存储器加速模块 */
77 MAMCR = 0;
\ 00000070 E004A0E3 MOV R0,#-536870912
\ 00000074 7F0980E3 ORR R0,R0,#0x1FC000
\ 00000078 0010A0E3 MOV R1,#+0
\ 0000007C 001080E5 STR R1,[R0, #+0]
78 #if Fcclk < 20000000
79 MAMTIM = 1;
80 #else
81 #if Fcclk < 40000000
82 MAMTIM = 2;
83 #else
84 MAMTIM = 3;
\ 00000080 4E02A0E3 MOV R0,#-536870908
\ 00000084 7F0980E3 ORR R0,R0,#0x1FC000
\ 00000088 0310A0E3 MOV R1,#+3
\ 0000008C 001080E5 STR R1,[R0, #+0]
85 #endif
86 #endif
87 MAMCR = 2;
\ 00000090 E004A0E3 MOV R0,#-536870912
\ 00000094 7F0980E3 ORR R0,R0,#0x1FC000
\ 00000098 0210A0E3 MOV R1,#+2
\ 0000009C 001080E5 STR R1,[R0, #+0]
88
89 /* 初始化VIC */
90 VICIntEnClear = 0xffffffff;
\ 000000A0 EB00E0E3 MVN R0,#+235
\ 000000A4 F00EC0E3 BIC R0,R0,#0xF00
\ 000000A8 0010E0E3 MVN R1,#+0
\ 000000AC 001080E5 STR R1,[R0, #+0]
91 VICVectAddr = 0;
\ 000000B0 CF00E0E3 MVN R0,#+207
\ 000000B4 F00EC0E3 BIC R0,R0,#0xF00
\ 000000B8 0010A0E3 MOV R1,#+0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -