📄 time.lst
字号:
ARM COMPILER V2.51a, Time 12/06/06 20:31:56 PAGE 1
ARM COMPILER V2.51a, COMPILATION OF MODULE Time
OBJECT MODULE PLACED IN .\ram\Time.obj
COMPILER INVOKED BY: f:\Keilarm\ARM\BIN\CA.exe Time.c THUMB OPTIMIZE(7,SPEED) BROWSE DEBUG PRINT(.\RAM\TIME.LST) TABS(4)
- OBJECT(.\ram\Time.obj)
stmt level source
1 //文件名:Time.c
2 //功能: 定时器Timer0的初始化以及定时器中断函数和延时函数
3 //更多内容,敬请访问www.icdev.com.cn/bbs
4
5 #include <LPC210x.H>
6 #include "Timer.h"
7
8
9 long timeval; //延时用的全局变量
10
11 /************************************************************/
12 /* 函数名称 : tc0 */
13 /* 函数功能 : 定时器中断函数,每进入一次中断,timeval加1 */
14 /* 参数 : 无 */
15 /* 返回值 : 无 */
16 /*----------------------------------------------------------*/
17
18 void tc0 (void) __irq
19 {
20 1 ++timeval;
21 1 T0IR = 1; // 清除中断标志
22 1 VICVectAddr = 0; // 对VICVectAddr执行写操作,通知VIC中断处理结束
23 1 }
24
25
26 /**********************************************************************/
27 /* 函数名称 : init_timer */
28 /* 函数功能 : 定时器timer0的初始化,包括计数初值,设置中断优先级等 */
29 /* 参数 : 无 */
30 /* 返回值 : 无 */
31 /*--------------------------------------------------------------------*/
32 void init_timer (void)
33 {
34 1 T0MR0 = 13823;//1ms的计数初值,当前处理器的时钟频率为11.0592 * 5 = 55.296M,具体设置见startup.s
35 1 T0MCR = 3; // 设置T0MR0匹配后复位T0TC,并产生中断标志
36 1 T0TCR = 1; //启动定时器
37 1 VICVectAddr0 = (unsigned long)tc0;//设置中断服务程序的地址
38 1 VICVectCntl0 = 0x20 | 4;//分配timer0中断到中断向量0
39 1 VICIntEnable = 0x00000010;//timer0中断使能
40 1 }
41
42
43 /**********************************************************************/
44 /* 函数名称 : wait */
45 /* 函数功能 : 延时函数 */
46 /* 参数 : ms,单位ms(毫秒) */
47 /* 返回值 : 无 */
48 /*--------------------------------------------------------------------*/
49 void wait (unsigned int ms)
50 {
51 1 unsigned long i;
52 1 i = timeval;
53 1 while ((i + ms) != timeval);
54 1 }
ARM COMPILER V2.51a, Time 12/06/06 20:31:56 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':
18: void tc0 (void) __irq
00000000 E92D0003 STMDB R13!,{R0-R1}
20: ++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
21: T0IR = 1; // 清除中断标志
00000014 E3A01001 MOV R1,#0x1
00000018 E5100000 LDR R0,=0xE0004000
0000001C E5801000 STR R1,[R0,#0x0]
22: VICVectAddr = 0; // 对VICVectAddr执行写操作,通知VIC中断处理结束
00000020 E3A01000 MOV R1,#0x0
00000024 E5100000 LDR R0,=0xFFFFF030
00000028 E5801000 STR R1,[R0,#0x0]
23: }
0000002C E8BD0003 LDMIA R13!,{R0-R1}
00000030 E25EF004 SUBS R15,R14,#0x0004
00000034 ENDP ; 'tc0?A'
*** CODE SEGMENT '?PR?init_timer?T?Time':
34: 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]
35: T0MCR = 3; // 设置T0MR0匹配后复位T0TC,并产生中断标志
00000006 2103 MOV R1,#0x3
00000008 4800 LDR R0,=0xE0004014
0000000A 6001 STR R1,[R0,#0x0]
36: T0TCR = 1; //启动定时器
0000000C 2101 MOV R1,#0x1
0000000E 4800 LDR R0,=0xE0004004
00000010 6001 STR R1,[R0,#0x0]
37: VICVectAddr0 = (unsigned long)tc0;//设置中断服务程序的地址
00000012 4900 LDR R1,=tc0?A ; tc0?A
00000014 4800 LDR R0,=0xFFFFF100
00000016 6001 STR R1,[R0,#0x0]
38: VICVectCntl0 = 0x20 | 4;//分配timer0中断到中断向量0
00000018 2124 MOV R1,#0x24
0000001A 4800 LDR R0,=0xFFFFF200
0000001C 6001 STR R1,[R0,#0x0]
39: VICIntEnable = 0x00000010;//timer0中断使能
0000001E 2110 MOV R1,#0x10
00000020 4800 LDR R0,=0xFFFFF010
00000022 6001 STR R1,[R0,#0x0]
40: }
00000024 4770 BX R14
00000026 ENDP ; 'init_timer?T'
*** CODE SEGMENT '?PR?wait?T?Time':
49: void wait (unsigned int ms)
00000000 ---- Variable 'ms' assigned to Register 'R0' ----
50: {
00000000 ; SCOPE-START
ARM COMPILER V2.51a, Time 12/06/06 20:31:56 PAGE 3
52: i = timeval;
00000000 4800 LDR R1,=timeval ; timeval
00000002 6809 LDR R1,[R1,#0x0] ; timeval
00000004 ---- Variable 'i' assigned to Register 'R1' ----
53: 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 + -