📄 interrupt.lst
字号:
000000C8 E3A01102 MOV R1,#0x80000000
000000CC E1100001 TST R0,R1
000000D0 0AFFFFF6 BEQ L_6 ; Targ=0xB0
33: AD0CR &= ~0x01000000; // Stop A/D Conversion
000000D4 E3A02401 MOV R2,#0x1000000
000000D8 E5100000 LDR R0,=0xE0034000
000000DC E5901000 LDR R1,[R0,#0x0]
000000E0 E1C11002 BIC R1,R1,R2
000000E4 E5801000 STR R1,[R0,#0x0]
34: tval = (tval >> 6) & 0x03FF; // Extract AIN0 Value
000000E8 E5100000 LDR R0,=tval ; tval
000000EC E5901000 LDR R1,[R0,#0x0] ; tval
000000F0 E1A01321 MOV R1,R1,LSR #6
000000F4 E5100000 LDR R0,=0x3FF
000000F8 E0011000 AND R1,R1,R0
000000FC E5100000 LDR R0,=tval ; tval
00000100 E5801000 STR R1,[R0,#0x0] ; tval
36: T1IR |= 0x11; // clear all interrupts
00000104 E5100000 LDR R0,=0xE0008000
00000108 E5901000 LDR R1,[R0,#0x0]
0000010C E3811011 ORR R1,R1,#0x0011
00000110 E5801000 STR R1,[R0,#0x0]
37: VICVectAddr = 0; // Acknowledge Interrupt
00000114 E3A01000 MOV R1,#0x0
00000118 E5100000 LDR R0,=0xFFFFF030
0000011C E5801000 STR R1,[R0,#0x0]
38: }
ARM COMPILER V2.00d, interrupt 23/10/05 18:16:18 PAGE 5
00000120 E8BD000F LDMIA R13!,{R0-R3}
00000124 E25EF004 SUBS R15,R14,#0x0004
00000128 ENDP ; 'tc1?A'
*** CODE SEGMENT '?PR?init_timer_1?T?interrupt':
42: T1MR0 = 1874; // 0.125uSec = 1875-1 counts
00000000 4800 LDR R1,=0x752
00000002 4800 LDR R0,=0xE0008018
00000004 6001 STR R1,[R0,#0x0]
43: T1MCR = 3; // Interrupt and Reset on MR0
00000006 2103 MOV R1,#0x3
00000008 4800 LDR R0,=0xE0008014
0000000A 6001 STR R1,[R0,#0x0]
45: T1CCR = 0x05; // init control reg.
0000000C 2105 MOV R1,#0x5
0000000E 4800 LDR R0,=0xE0008028
00000010 6001 STR R1,[R0,#0x0]
46: T1TCR = 1; // Timer1 Enable
00000012 2101 MOV R1,#0x1
00000014 4800 LDR R0,=0xE0008004
00000016 6001 STR R1,[R0,#0x0]
47: VICVectAddr1 = (unsigned long)tc1; // set interrupt vector in 0
00000018 4900 LDR R1,=tc1?A ; tc1?A
0000001A 4800 LDR R0,=0xFFFFF104
0000001C 6001 STR R1,[R0,#0x0]
48: VICVectCntl1 = 0x20 | 5; // use it for Timer 1 Interrupt
0000001E 2125 MOV R1,#0x25
00000020 4800 LDR R0,=0xFFFFF204
00000022 6001 STR R1,[R0,#0x0]
49: }
00000024 4770 BX R14
00000026 ENDP ; 'init_timer_1?T'
*** CODE SEGMENT '?PR?delay?T?interrupt':
51: void delay (int delay_val) { // Delay function
00000000 ---- Variable 'delay_val' assigned to Register 'R0' ----
00000000 ; SCOPE-START
55: timeval = delay_val; // init timeer 1 value to delay
00000000 4800 LDR R1,=timeval ; timeval
00000002 6008 STR R0,[R1,#0x0] ; delay_val
56: while (timeval > 0); // wait until Timer 1 decrements delay_val to zero
00000004 L_10:
00000004 4800 LDR R0,=timeval ; timeval
00000006 6800 LDR R0,[R0,#0x0] ; timeval
00000008 2800 CMP R0,#0x0
0000000A DCFB BGT L_10 ; T=0x00000004
0000000C ; SCOPE-END
57: }
0000000C 4770 BX R14
0000000E ENDP ; 'delay?T'
*** CODE SEGMENT '?PR?tc0?A?interrupt':
60: void tc0 (void) __irq { // Timer 0 is used to measure anonmometer period
00000000 E92D5F0F STMDB R13!,{R0-R3,R8-R12,LR}
63: if (T0IR==0x10) {
00000004 E5100000 LDR R0,=0xE0004000
00000008 E5900000 LDR R0,[R0,#0x0]
0000000C E3500010 CMP R0,#0x0010
00000010 1A000021 BNE L_14 ; Targ=0x9C
64: set_LED(ONE,ON);
00000014 E3A00001 MOV R0,#0x1
00000018 E3A01001 MOV R1,#0x1
0000001C EBFFFFF7 BL set_LED?A ; Targ=0x0
65: T0_flag++; // measure one full rev
00000020 E5100000 LDR R0,=T0_flag ; T0_flag
00000024 E5901000 LDR R1,[R0,#0x0] ; T0_flag
00000028 E2811001 ADD R1,R1,#0x0001
0000002C E5801000 STR R1,[R0,#0x0] ; T0_flag
66: if (T0_flag>4) {
ARM COMPILER V2.00d, interrupt 23/10/05 18:16:18 PAGE 6
00000030 E5100000 LDR R0,=T0_flag ; T0_flag
00000034 E5900000 LDR R0,[R0,#0x0] ; T0_flag
00000038 E3500004 CMP R0,#0x0004
0000003C DA000011 BLE L_15 ; Targ=0x88
67: timer_0_capture = T0TC; // get timer counts
00000040 E5100000 LDR R0,=0xE0004008
00000044 E5901000 LDR R1,[R0,#0x0]
00000048 E5100000 LDR R0,=timer_0_capture ; timer_0_capture
0000004C E5801000 STR R1,[R0,#0x0] ; timer_0_capture
68: if (timer_0_capture > 50000000) timer_0_capture = 50000000; // set to lowest speed
00000050 E5100000 LDR R0,=timer_0_capture ; timer_0_capture
00000054 E5900000 LDR R0,[R0,#0x0] ; timer_0_capture
00000058 E5101000 LDR R1,=0x2FAF080
0000005C E1500001 CMP R0,R1
00000060 9A000002 BLS L_16 ; Targ=0x70
00000064 E5101000 LDR R1,=0x2FAF080
00000068 E5100000 LDR R0,=timer_0_capture ; timer_0_capture
0000006C E5801000 STR R1,[R0,#0x0] ; timer_0_capture
00000070 L_16:
69: T0TC = 0; // reset counter
00000070 E3A01000 MOV R1,#0x0
00000074 E5100000 LDR R0,=0xE0004008
00000078 E5801000 STR R1,[R0,#0x0]
70: T0_flag = 0; // reset flag to measure 4 pulses (1 rev)
0000007C E3A01000 MOV R1,#0x0
00000080 E5100000 LDR R0,=T0_flag ; T0_flag
00000084 E5801000 STR R1,[R0,#0x0] ; T0_flag
71: }
00000088 L_15:
72: T0IR |= 0x10; // Clear capture interrupt flag
00000088 E5100000 LDR R0,=0xE0004000
0000008C E5901000 LDR R1,[R0,#0x0]
00000090 E3811010 ORR R1,R1,#0x0010
00000094 E5801000 STR R1,[R0,#0x0]
73: }
00000098 EA00000C B L_17 ; Targ=0xD0
0000009C L_14:
74: else if (T0IR==0x01) { // Is it a match interrupt?
0000009C E5100000 LDR R0,=0xE0004000
000000A0 E5900000 LDR R0,[R0,#0x0]
000000A4 E3500001 CMP R0,#0x0001
000000A8 1A000008 BNE L_17 ; Targ=0xD0
75: set_LED(ONE,OFF); // overflow - no wind
000000AC E3A00001 MOV R0,#0x1
000000B0 E3A01000 MOV R1,#0x0
000000B4 EBFFFFD1 BL set_LED?A ; Targ=0x0
76: timer_0_capture = 50000000; // no conversion, set to lowest speed
000000B8 E5101000 LDR R1,=0x2FAF080
000000BC E5100000 LDR R0,=timer_0_capture ; timer_0_capture
000000C0 E5801000 STR R1,[R0,#0x0] ; timer_0_capture
77: T0TC = 0; // make use counter is reset
000000C4 E3A01000 MOV R1,#0x0
000000C8 E5100000 LDR R0,=0xE0004008
000000CC E5801000 STR R1,[R0,#0x0]
78: }
000000D0 L_17:
80: T0IR |= 0x11; // clear all interrupts
000000D0 E5100000 LDR R0,=0xE0004000
000000D4 E5901000 LDR R1,[R0,#0x0]
000000D8 E3811011 ORR R1,R1,#0x0011
000000DC E5801000 STR R1,[R0,#0x0]
81: VICVectAddr = 0; // Acknowledge Interrupt
000000E0 E3A01000 MOV R1,#0x0
000000E4 E5100000 LDR R0,=0xFFFFF030
000000E8 E5801000 STR R1,[R0,#0x0]
82: }
ARM COMPILER V2.00d, interrupt 23/10/05 18:16:18 PAGE 7
000000EC E8BD5F0F LDMIA R13!,{R0-R3,R8-R12,LR}
000000F0 E25EF004 SUBS R15,R14,#0x0004
000000F4 ENDP ; 'tc0?A'
*** CODE SEGMENT '?PR?init_timer?T?interrupt':
86: T0_flag = 0; // init flag to measure one rev.
00000000 2100 MOV R1,#0x0
00000002 4800 LDR R0,=T0_flag ; T0_flag
00000004 6001 STR R1,[R0,#0x0] ; T0_flag
87: T0MR0 = 0x02FFFFFF; // large duration for no wind
00000006 4800 LDR R1,=0x2FFFFFF
00000008 4800 LDR R0,=0xE0004018
0000000A 6001 STR R1,[R0,#0x0]
88: T0CCR = 0x05; // cause capture on P0.0
0000000C 2105 MOV R1,#0x5
0000000E 4800 LDR R0,=0xE0004028
00000010 6001 STR R1,[R0,#0x0]
89: T0MCR = 3; // Interrupt and Reset on MR0
00000012 2103 MOV R1,#0x3
00000014 4800 LDR R0,=0xE0004014
00000016 6001 STR R1,[R0,#0x0]
90: T0TCR = 1; // Timer0 Enable
00000018 2101 MOV R1,#0x1
0000001A 4800 LDR R0,=0xE0004004
0000001C 6001 STR R1,[R0,#0x0]
91: VICVectAddr0 = (unsigned long)tc0; // set interrupt vector in 0
0000001E 4900 LDR R1,=tc0?A ; tc0?A
00000020 4800 LDR R0,=0xFFFFF100
00000022 6001 STR R1,[R0,#0x0]
92: VICVectCntl0 = 0x20 | 4; // use it for Timer 0 Interrupt
00000024 2124 MOV R1,#0x24
00000026 4800 LDR R0,=0xFFFFF200
00000028 6001 STR R1,[R0,#0x0]
0000002A 4770 BX R14
0000002C ENDP ; 'init_timer?T'
Module Information Static
----------------------------------
code size = ------
data size = 28
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 + -