📄 interrupt_timer.lst
字号:
\ In segment CODE_I, align 4, keep-with-next
\ ?Subroutine4:
\ 00000000 0842 TST R0,R1
\ 00000002 01D0 BEQ ??Subroutine4_1
\ 00000004 .... LDR R0,??DataTable2 ;; 0xfffff634
\ 00000006 00E0 B ??Subroutine4_2
\ ??Subroutine4_1:
\ 00000008 .... LDR R0,??DataTable3 ;; 0xfffff630
\ ??Subroutine4_2:
\ 0000000A 0160 STR R1,[R0, #+0]
\ 0000000C 00B0 ADD SP,#+0
\ 0000000E 7047 BX LR ;; return
\ ??Subroutine4_0:
\ 00000010 6000FAFF DC32 0xfffa0060
\ 00000014 ........ DC32 count_timer1_interrupt
100 //*----------------------------------------------------------------------------
101 //* Function Name : timer1_c_irq_handler
102 //* Object : C handler interrupt function calAT91B_LED by the interrupts
103 //* assembling routine
104 //* Output Parameters : increment count_timer1_interrupt
105 //*----------------------------------------------------------------------------
\ In segment CODE_I, align 4, keep-with-next
106 __ramfunc void timer1_c_irq_handler(void)
107 {
108 AT91PS_TC TC_pt = AT91C_BASE_TC1;
109 unsigned int dummy;
110 //* AcknowAT91B_LEDge interrupt status
111 dummy = TC_pt->TC_SR;
\ timer1_c_irq_handler:
\ 00000000 .... LDR R0,??Subroutine4_0 ;; 0xfffa0060
\ 00000002 0068 LDR R0,[R0, #+0]
112 //* Suppress warning variable "dummy" was set but never used
113 dummy = dummy;
114 count_timer1_interrupt++;
\ 00000004 .... LDR R0,??Subroutine4_0+0x4 ;; count_timer1_interrupt
\ 00000006 0168 LDR R1,[R0, #+0]
\ 00000008 491C ADD R1,R1,#+0x1
\ 0000000A 0160 STR R1,[R0, #+0]
115
116 //* Read the output state
117 if ( (AT91F_PIO_GetInput(AT91C_BASE_PIOB) & AT91B_LED4 ) == AT91B_LED4 )
\ 0000000C .... LDR R0,??DataTable1 ;; 0xfffff63c
\ 0000000E 0068 LDR R0,[R0, #+0]
\ 00000010 8021 MOV R1,#+0x80
\ 00000012 C903 LSL R1,R1,#+0xF ;; #+0x400000
\ 00000014 REQUIRE ?Subroutine4
\ 00000014 ;; // Fall through to label ?Subroutine4
118 {
119 AT91F_PIO_ClearOutput( AT91C_BASE_PIOB, AT91B_LED4 );
120 }
121 else
122 {
123 AT91F_PIO_SetOutput( AT91C_BASE_PIOB, AT91B_LED4 );
124 }
125 }
126 //*-------------------------- External Function -------------------------------
127
128 //*----------------------------------------------------------------------------
129 //* Function Name : timer_init
130 //* Object : Init timer counter
131 //* Input Parameters : none
132 //* Output Parameters : TRUE
133 //*----------------------------------------------------------------------------
\ In segment CODE, align 4, keep-with-next
134 void timer_init ( void )
135 //* Begin
136 {
\ timer_init:
\ 00000000 F0B5 PUSH {R4-R7,LR}
137 //init the timer interrupt counter
138 count_timer0_interrupt=0;
\ 00000002 0020 MOV R0,#+0
\ 00000004 1749 LDR R1,??timer_init_0 ;; count_timer0_interrupt
\ 00000006 0860 STR R0,[R1, #+0]
139 count_timer1_interrupt=0;
\ 00000008 1749 LDR R1,??timer_init_0+0x4 ;; count_timer1_interrupt
\ 0000000A 0860 STR R0,[R1, #+0]
140
141 //* Open timer0
142 AT91F_TC_Open(AT91C_BASE_TC0,TC_CLKS_MCK1024,AT91C_ID_TC0);
\ 0000000C 174C LDR R4,??timer_init_0+0x8 ;; 0xfffa0000
\ 0000000E 0C22 MOV R2,#+0xC
\ 00000010 0421 MOV R1,#+0x4
\ 00000012 201C MOV R0,R4
\ 00000014 ........ BL AT91F_TC_Open
\ 00000018 1548 LDR R0,??timer_init_0+0xC ;; timer0_c_irq_handler
\ 0000001A 01B4 PUSH {R0}
\ 0000001C 0023 MOV R3,#+0
\ 0000001E 0122 MOV R2,#+0x1
\ 00000020 0C21 MOV R1,#+0xC
\ 00000022 1448 LDR R0,??timer_init_0+0x10 ;; 0xfffff000
143
144 //* Open Timer 0 interrupt
145 AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_TC0, TIMER0_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, timer0_c_irq_handler);
\ 00000024 ........ _BLF AT91F_AIC_ConfigureIt,AT91F_AIC_ConfigureIt??rT
146 AT91C_BASE_TC0->TC_IER = AT91C_TC_CPCS; // IRQ enable CPC
\ 00000028 1026 MOV R6,#+0x10
\ 0000002A 1348 LDR R0,??timer_init_0+0x14 ;; 0xfffa0024
\ 0000002C 0660 STR R6,[R0, #+0]
147 AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_TC0);
\ 0000002E 134F LDR R7,??timer_init_0+0x18 ;; 0xfffff120
\ 00000030 3002 LSL R0,R6,#+0x8
\ 00000032 3860 STR R0,[R7, #+0]
148
149 //* Open timer1
150 AT91F_TC_Open(AT91C_BASE_TC1,TC_CLKS_MCK128,AT91C_ID_TC1);
\ 00000034 124D LDR R5,??timer_init_0+0x1C ;; 0xfffa0040
\ 00000036 0D22 MOV R2,#+0xD
\ 00000038 0321 MOV R1,#+0x3
\ 0000003A 281C MOV R0,R5
\ 0000003C ........ BL AT91F_TC_Open
151
152 //* Open Timer 1 interrupt
153 AT91F_AIC_ConfigureIt ( AT91C_BASE_AIC, AT91C_ID_TC1, TIMER1_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, timer1_c_irq_handler);
\ 00000040 1048 LDR R0,??timer_init_0+0x20 ;; timer1_c_irq_handler
\ 00000042 01B4 PUSH {R0}
\ 00000044 0023 MOV R3,#+0
\ 00000046 0722 MOV R2,#+0x7
\ 00000048 0D21 MOV R1,#+0xD
\ 0000004A 0A48 LDR R0,??timer_init_0+0x10 ;; 0xfffff000
\ 0000004C ........ _BLF AT91F_AIC_ConfigureIt,AT91F_AIC_ConfigureIt??rT
154 AT91C_BASE_TC1->TC_IER = AT91C_TC_CPCS; // IRQ enable CPC
\ 00000050 0D48 LDR R0,??timer_init_0+0x24 ;; 0xfffa0064
\ 00000052 0660 STR R6,[R0, #+0]
155 AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_TC1);
\ 00000054 7002 LSL R0,R6,#+0x9
\ 00000056 3860 STR R0,[R7, #+0]
156
157
158 //* Start timer0
159 AT91C_BASE_TC0->TC_CCR = AT91C_TC_SWTRG ;
\ 00000058 0420 MOV R0,#+0x4
\ 0000005A 2060 STR R0,[R4, #+0]
160
161 //* Start timer1
162 AT91C_BASE_TC1->TC_CCR = AT91C_TC_SWTRG ;
\ 0000005C 2860 STR R0,[R5, #+0]
163
164 //* End
165 }
\ 0000005E FCBC POP {R2-R7}
\ 00000060 01BC POP {R0}
\ 00000062 0047 BX R0 ;; return
\ ??timer_init_0:
\ 00000064 ........ DC32 count_timer0_interrupt
\ 00000068 ........ DC32 count_timer1_interrupt
\ 0000006C 0000FAFF DC32 0xfffa0000
\ 00000070 ........ DC32 timer0_c_irq_handler
\ 00000074 00F0FFFF DC32 0xfffff000
\ 00000078 2400FAFF DC32 0xfffa0024
\ 0000007C 20F1FFFF DC32 0xfffff120
\ 00000080 4000FAFF DC32 0xfffa0040
\ 00000084 ........ DC32 timer1_c_irq_handler
\ 00000088 6400FAFF DC32 0xfffa0064
\ In segment CODE_I, align 4, keep-with-next
\ ??DataTable1:
\ 00000000 3CF6FFFF DC32 0xfffff63c
\ In segment CODE_I, align 4, keep-with-next
\ ??DataTable2:
\ 00000000 34F6FFFF DC32 0xfffff634
\ In segment CODE_I, align 4, keep-with-next
\ ??DataTable3:
\ 00000000 30F6FFFF DC32 0xfffff630
Maximum stack usage in bytes:
Function CSTACK
-------- ------
AT91F_AIC_ConfigureIt 20
AT91F_TC_Open 4
timer0_c_irq_handler 4
timer1_c_irq_handler 4
timer_init 28
Segment part sizes:
Function/Label Bytes
-------------- -----
AT91F_AIC_ConfigureIt 44
AT91F_TC_Open 36
timer0_c_irq_handler 32
?Subroutine4 24
timer1_c_irq_handler 20
timer_init 140
??DataTable1 4
??DataTable2 4
??DataTable3 4
Others 60
252 bytes in segment CODE
104 bytes in segment CODE_I
12 bytes in segment INITTAB
264 bytes of CODE memory (+ 104 bytes shared)
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -