📄 main.lst
字号:
\ 00000010 0098 LDR R0,[SP, #+0]
\ 00000012 8842 CMP R0,R1
\ 00000014 F9D3 BCC ??delay_2
104 }
\ 00000016 08BC POP {R3}
\ 00000018 00B0 ADD SP,#+0
\ 0000001A 7047 BX LR ;; return
\ ??delay_0:
\ 0000001C 24550700 DC32 0x75524
105
106 //*----------------------------------------------------------------------------
107 //* Function Name : main
108 //* Object : Main interrupt function
109 //* Input Parameters : none
110 //* Output Parameters : TRUE
111 //*----------------------------------------------------------------------------
\ In segment CODE, align 4, keep-with-next
112 int main( void )
113 //* Begin
114 {
\ main:
\ 00000000 F0B5 PUSH {R4-R7,LR}
115 unsigned int loop_count ;
116 AT91PS_AIC pAic;
117 //* Load System pAic Base address
118 pAic = AT91C_BASE_AIC;
119
120 //* Enable User Reset and set its minimal assertion to 960 us
121 AT91C_BASE_RSTC->RSTC_RMR = AT91C_RSTC_URSTEN | (0x4<<8) | (unsigned int)(0xA5<<24);
\ 00000002 2B48 LDR R0,??main_0 ;; 0xfffffd08
\ 00000004 2B49 LDR R1,??main_0+0x4 ;; 0xa5000401
\ 00000006 0160 STR R1,[R0, #+0]
\ 00000008 0024 MOV R4,#+0
122
123 //* Init
124 loop_count = 0 ;
125 // First, enable the clock of the PIOB
126 AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOB ) ;
\ 0000000A 2B48 LDR R0,??main_0+0x8 ;; 0xfffffc10
\ 0000000C 0821 MOV R1,#+0x8
\ 0000000E 0160 STR R1,[R0, #+0]
127
128 //* then, we configure the PIO Lines corresponding to AT91B_LEDx
129 //* to be outputs. No need to set these pins to be driven by the PIO because it is GPIO pins only.
130 AT91F_PIO_CfgOutput( AT91C_BASE_PIOB, AT91B_LED_MASK ) ;
\ 00000010 F021 MOV R1,#+0xF0
\ 00000012 C903 LSL R1,R1,#+0xF ;; #+0x780000
\ 00000014 294A LDR R2,??main_0+0xC ;; 0xfffff600
\ 00000016 1160 STR R1,[R2, #+0]
\ 00000018 294A LDR R2,??main_0+0x10 ;; 0xfffff610
\ 0000001A 1160 STR R1,[R2, #+0]
\ 0000001C .... LDR R2,??DataTable4 ;; 0xfffff630
\ 0000001E 1160 STR R1,[R2, #+0]
131 //* Clear the AT91B_LED's. On the EK we must apply a "1" to turn off AT91B_LEDs
132 AT91F_PIO_SetOutput( AT91C_BASE_PIOB, AT91B_LED_MASK ) ;
133 //* Clear the AT91B_LED's. On the EK we must apply a "1" to turn off AT91B_LEDs
134
135
136 //* open external PIO interrupt
137 //* define switch SW5 at PIO input for interrupt IRQ loop
138 AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_PIOA ) ;
\ 00000020 0427 MOV R7,#+0x4
\ 00000022 0760 STR R7,[R0, #+0]
139 AT91F_PIO_CfgInput(AT91C_BASE_PIOA, AT91B_SW5 | AT91B_SW4);
\ 00000024 C020 MOV R0,#+0xC0
\ 00000026 8004 LSL R0,R0,#+0x12 ;; #+0x3000000
\ 00000028 2649 LDR R1,??main_0+0x14 ;; 0xfffff414
\ 0000002A 0860 STR R0,[R1, #+0]
\ 0000002C 2649 LDR R1,??main_0+0x18 ;; 0xfffff400
\ 0000002E 0860 STR R0,[R1, #+0]
140
141 AT91F_AIC_ConfigureIt ( pAic, AT91C_ID_PIOA, PIO_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, pio_c_irq_handler);
\ 00000030 264D LDR R5,??main_0+0x1C ;; 0xfffff000
\ 00000032 2748 LDR R0,??main_0+0x20 ;; pio_c_irq_handler
\ 00000034 01B4 PUSH {R0}
\ 00000036 0023 MOV R3,#+0
\ 00000038 0622 MOV R2,#+0x6
\ 0000003A 0221 MOV R1,#+0x2
\ 0000003C 281C MOV R0,R5
\ 0000003E ........ _BLF AT91F_AIC_ConfigureIt,AT91F_AIC_ConfigureIt??rT
142 AT91F_PIO_InterruptEnable(AT91C_BASE_PIOA,AT91B_SW4);
\ 00000042 2448 LDR R0,??main_0+0x24 ;; 0xfffff440
\ 00000044 B905 LSL R1,R7,#+0x16
\ 00000046 0160 STR R1,[R0, #+0]
143 //* set the interrupt by software
144 AT91F_AIC_EnableIt (pAic, AT91C_ID_PIOA);
\ 00000048 234E LDR R6,??main_0+0x28 ;; 0xfffff120
\ 0000004A 3760 STR R7,[R6, #+0]
145
146 //* Open the software interrupt on the AIC
147 AT91F_AIC_ConfigureIt ( pAic, AT91C_ID_SYS, SOFT_INTERRUPT_LEVEL, AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE, aic_software_interrupt);
\ 0000004C 2348 LDR R0,??main_0+0x2C ;; aic_software_interrupt
\ 0000004E 01B4 PUSH {R0}
\ 00000050 2023 MOV R3,#+0x20
\ 00000052 0222 MOV R2,#+0x2
\ 00000054 0121 MOV R1,#+0x1
\ 00000056 281C MOV R0,R5
\ 00000058 ........ _BLF AT91F_AIC_ConfigureIt,AT91F_AIC_ConfigureIt??rT
148 AT91F_AIC_EnableIt (pAic, AT91C_ID_SYS);
\ 0000005C 0227 MOV R7,#+0x2
\ 0000005E 3760 STR R7,[R6, #+0]
149
150 //* open FIQ interrupt
151 AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA,AT91B_SW1,0);
\ 00000060 3805 LSL R0,R7,#+0x14
\ 00000062 1F49 LDR R1,??main_0+0x30 ;; 0xfffff470
\ 00000064 0860 STR R0,[R1, #+0]
\ 00000066 1F49 LDR R1,??main_0+0x34 ;; 0xfffff474
\ 00000068 0C60 STR R4,[R1, #+0]
\ 0000006A 1F49 LDR R1,??main_0+0x38 ;; 0xfffff404
\ 0000006C 0860 STR R0,[R1, #+0]
152 AT91F_AIC_ConfigureIt ( pAic, AT91C_ID_FIQ, FIQ_INTERRUPT_LEVEL,AT91C_AIC_SRCTYPE_EXT_NEGATIVE_EDGE, FIQ_init_handler);
\ 0000006E 1F48 LDR R0,??main_0+0x3C ;; FIQ_init_handler
\ 00000070 01B4 PUSH {R0}
\ 00000072 2023 MOV R3,#+0x20
\ 00000074 0722 MOV R2,#+0x7
\ 00000076 211C MOV R1,R4
\ 00000078 281C MOV R0,R5
\ 0000007A ........ _BLF AT91F_AIC_ConfigureIt,AT91F_AIC_ConfigureIt??rT
153 AT91F_AIC_EnableIt (pAic, AT91C_ID_FIQ);
\ 0000007E 0120 MOV R0,#+0x1
\ 00000080 3060 STR R0,[R6, #+0]
154 //* generate FIQ interrupt by software
155 AT91F_AIC_Trig (pAic,AT91C_ID_FIQ) ;
\ 00000082 1B4D LDR R5,??main_0+0x40 ;; 0xfffff12c
\ 00000084 2860 STR R0,[R5, #+0]
156
157 //* Init timer interrupt
158 timer_init();
\ 00000086 ........ _BLF timer_init,timer_init??rT
159
160 //* Init Usart
161 Usart_init();
\ 0000008A ........ _BLF Usart_init,Usart_init??rT
162
163 //* generate software interrupt
164 AT91F_AIC_Trig (pAic,AT91C_ID_SYS) ;
\ 0000008E 2F60 STR R7,[R5, #+0]
\ 00000090 BE04 LSL R6,R7,#+0x12
\ 00000092 03B0 ADD SP,#+0xC
165
166 for (;;)
167 {
168 AT91F_PIO_ClearOutput( AT91C_BASE_PIOB, AT91B_LED1 );
\ ??main_1:
\ 00000094 .... LDR R0,??DataTable3 ;; 0xfffff634
\ 00000096 0660 STR R6,[R0, #+0]
169 delay () ;
\ 00000098 ........ BL delay
170 AT91F_PIO_SetOutput( AT91C_BASE_PIOB, AT91B_LED1 );
\ 0000009C .... LDR R0,??DataTable4 ;; 0xfffff630
\ 0000009E 0660 STR R6,[R0, #+0]
171 delay () ;
\ 000000A0 ........ BL delay
172
173 loop_count ++ ;
\ 000000A4 641C ADD R4,R4,#+0x1
174 //* Set AT91B_LED by software interrupt
175 if (loop_count == 10)
\ 000000A6 0A2C CMP R4,#+0xA
\ 000000A8 F4D1 BNE ??main_1
176 {
177 loop_count=0;
\ 000000AA 0024 MOV R4,#+0
178 //* Software interrupt
179 AT91F_AIC_Trig (pAic,AT91C_ID_SYS) ;
\ 000000AC 2F60 STR R7,[R5, #+0]
\ 000000AE F1E7 B ??main_1
\ ??main_0:
\ 000000B0 08FDFFFF DC32 0xfffffd08
\ 000000B4 010400A5 DC32 0xa5000401
\ 000000B8 10FCFFFF DC32 0xfffffc10
\ 000000BC 00F6FFFF DC32 0xfffff600
\ 000000C0 10F6FFFF DC32 0xfffff610
\ 000000C4 14F4FFFF DC32 0xfffff414
\ 000000C8 00F4FFFF DC32 0xfffff400
\ 000000CC 00F0FFFF DC32 0xfffff000
\ 000000D0 ........ DC32 pio_c_irq_handler
\ 000000D4 40F4FFFF DC32 0xfffff440
\ 000000D8 20F1FFFF DC32 0xfffff120
\ 000000DC ........ DC32 aic_software_interrupt
\ 000000E0 70F4FFFF DC32 0xfffff470
\ 000000E4 74F4FFFF DC32 0xfffff474
\ 000000E8 04F4FFFF DC32 0xfffff404
\ 000000EC ........ DC32 FIQ_init_handler
\ 000000F0 2CF1FFFF DC32 0xfffff12c
180 }
181 }
182
183 //* End
184 }
\ In segment CODE, align 4, keep-with-next
\ ??DataTable3:
\ 00000000 34F6FFFF DC32 0xfffff634
\ In segment CODE, align 4, keep-with-next
\ ??DataTable4:
\ 00000000 30F6FFFF DC32 0xfffff630
Maximum stack usage in bytes:
Function CSTACK
-------- ------
AT91F_AIC_ConfigureIt 20
aic_software_interrupt 4
delay 8
main 32
pio_c_irq_handler 4
Segment part sizes:
Function/Label Bytes
-------------- -----
AT91F_AIC_ConfigureIt 44
count_timer0_interrupt 4
count_timer1_interrupt 4
aic_software_interrupt 36
pio_c_irq_handler 48
delay 32
main 244
??DataTable3 4
??DataTable4 4
Others 88
432 bytes in segment CODE
44 bytes in segment CODE_I
8 bytes in segment DATA_Z
24 bytes in segment INITTAB
368 bytes of CODE memory (+ 132 bytes shared)
8 bytes of DATA memory
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -