📄 time.lst
字号:
ARM COMPILER V2.51a, Time 21/06/06 16:05:08 PAGE 1
ARM COMPILER V2.51a, COMPILATION OF MODULE Time
OBJECT MODULE PLACED IN Time.OBJ
COMPILER INVOKED BY: f:\Keilarm\ARM\BIN\CA.exe Time.c THUMB BROWSE DEBUG TABS(4)
stmt level source
1 //文件名:Time.c
2 //功能: 定时器Timer0的初始化以及定时器中断函数和延时函数
3
4 #include <LPC210x.H>
5 #include "Timer.h"
6
7
8 long timeval; //延时用的全局变量
9
10 /************************************************************/
11 /* 函数名称 : tc0 */
12 /* 函数功能 : 定时器中断函数,每进入一次中断,timeval加1 */
13 /* 参数 : 无 */
14 /* 返回值 : 无 */
15 /*----------------------------------------------------------*/
16
17 void tc0 (void) __irq
18 {
19 1 ++timeval;
20 1 T0IR = 1; // 清除中断标志
21 1 VICVectAddr = 0; // 对VICVectAddr执行写操作,通知VIC中断处理结束
22 1 }
23
24
25 /**********************************************************************/
26 /* 函数名称 : init_timer */
27 /* 函数功能 : 定时器timer0的初始化,包括计数初值,设置中断优先级等 */
28 /* 参数 : 无 */
29 /* 返回值 : 无 */
30 /*--------------------------------------------------------------------*/
31 void init_timer (void)
32 {
33 1 T0MR0 = 13823;//1ms的计数初值,当前处理器的时钟频率为11.0592 * 5 = 55.296M,具体设置见startup.s
34 1 T0MCR = 3; // 设置T0MR0匹配后复位T0TC,并产生中断标志
35 1 T0TCR = 1; //启动定时器
36 1 VICVectAddr0 = (unsigned long)tc0;//设置中断服务程序的地址
37 1 VICVectCntl0 = 0x20 | 4;//分配timer0中断到中断向量0
38 1 VICIntEnable = 0x00000010;//timer0中断使能
39 1 }
40
41
42 /**********************************************************************/
43 /* 函数名称 : wait */
44 /* 函数功能 : 延时函数 */
45 /* 参数 : ms,单位ms(毫秒) */
46 /* 返回值 : 无 */
47 /*--------------------------------------------------------------------*/
48 void wait (unsigned int ms)
49 {
50 1 unsigned long i;
51 1 i = timeval;
52 1 while ((i + ms) != timeval);
53 1 }
ARM COMPILER V2.51a, Time 21/06/06 16:05:08 PAGE 2
ASSEMBLY LISTING OF GENERATED OBJECT CODE
*** PUBLICS:
PUBLIC init_timer?T
PUBLIC wait?T
PUBLIC tc0?A
PUBLIC timeval
*** DATA SEGMENT '?DT0?Time':
00000000 timeval:
00000000 DS 4
*** CODE SEGMENT '?PR?tc0?A?Time':
17: void tc0 (void) __irq
00000000 E92D0003 STMDB R13!,{R0-R1}
19: ++timeval;
00000004 E5100000 LDR R0,=timeval ; timeval
00000008 E5901000 LDR R1,[R0,#0x0] ; timeval
0000000C E2811001 ADD R1,R1,#0x0001
00000010 E5801000 STR R1,[R0,#0x0] ; timeval
20: T0IR = 1; // 清除中断标志
00000014 E3A01001 MOV R1,#0x1
00000018 E5100000 LDR R0,=0xE0004000
0000001C E5801000 STR R1,[R0,#0x0]
21: VICVectAddr = 0; // 对VICVectAddr执行写操作,通知VIC中断处理结束
00000020 E3A01000 MOV R1,#0x0
00000024 E5100000 LDR R0,=0xFFFFF030
00000028 E5801000 STR R1,[R0,#0x0]
22: }
0000002C E8BD0003 LDMIA R13!,{R0-R1}
00000030 E25EF004 SUBS R15,R14,#0x0004
00000034 ENDP ; 'tc0?A'
*** CODE SEGMENT '?PR?init_timer?T?Time':
33: T0MR0 = 13823;//1ms的计数初值,当前处理器的时钟频率为11.0592 * 5 = 55.296M,具体设置见startup.s
00000000 4800 LDR R1,=0x35FF
00000002 4800 LDR R0,=0xE0004018
00000004 6001 STR R1,[R0,#0x0]
34: T0MCR = 3; // 设置T0MR0匹配后复位T0TC,并产生中断标志
00000006 2103 MOV R1,#0x3
00000008 4800 LDR R0,=0xE0004014
0000000A 6001 STR R1,[R0,#0x0]
35: T0TCR = 1; //启动定时器
0000000C 2101 MOV R1,#0x1
0000000E 4800 LDR R0,=0xE0004004
00000010 6001 STR R1,[R0,#0x0]
36: VICVectAddr0 = (unsigned long)tc0;//设置中断服务程序的地址
00000012 4900 LDR R1,=tc0?A ; tc0?A
00000014 4800 LDR R0,=0xFFFFF100
00000016 6001 STR R1,[R0,#0x0]
37: VICVectCntl0 = 0x20 | 4;//分配timer0中断到中断向量0
00000018 2124 MOV R1,#0x24
0000001A 4800 LDR R0,=0xFFFFF200
0000001C 6001 STR R1,[R0,#0x0]
38: VICIntEnable = 0x00000010;//timer0中断使能
0000001E 2110 MOV R1,#0x10
00000020 4800 LDR R0,=0xFFFFF010
00000022 6001 STR R1,[R0,#0x0]
39: }
00000024 4770 BX R14
00000026 ENDP ; 'init_timer?T'
*** CODE SEGMENT '?PR?wait?T?Time':
48: void wait (unsigned int ms)
00000000 ---- Variable 'ms' assigned to Register 'R0' ----
49: {
00000000 ; SCOPE-START
ARM COMPILER V2.51a, Time 21/06/06 16:05:08 PAGE 3
51: i = timeval;
00000000 4800 LDR R1,=timeval ; timeval
00000002 6809 LDR R1,[R1,#0x0] ; timeval
00000004 ---- Variable 'i' assigned to Register 'R1' ----
52: while ((i + ms) != timeval);
00000004 L_1:
00000004 1C03 MOV R3,R0 ; ms
00000006 1C0A MOV R2,R1 ; i
00000008 18D2 ADD R2,R3 ; i
0000000A 4800 LDR R3,=timeval ; timeval
0000000C 681B LDR R3,[R3,#0x0] ; timeval
0000000E 429A CMP R2,R3
00000010 D1F8 BNE L_1 ; T=0x00000004
00000012 ; SCOPE-END
00000012 4770 BX R14
00000014 ENDP ; 'wait?T'
Module Information Static
----------------------------------
code size = ------
data size = 4
const size = ------
End of Module Information.
ARM COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -