📄 interrupt_usart.lst
字号:
89 COM0->US_RPR = (unsigned int) buff_rx1;
\ 00000092 0099 LDR R1,[SP, #+0]
\ 00000094 0160 STR R1,[R0, #+0]
90 COM0->US_RCR = 100;
\ 00000096 6421 MOV R1,#+100
\ 00000098 4160 STR R1,[R0, #+4]
91 pCDC.Write(&pCDC, buff_rx,status);
\ 0000009A 321C MOV R2,R6
\ 0000009C 211C MOV R1,R4
\ 0000009E 0831 ADD R1,#+8
\ 000000A0 381C MOV R0,R7
\ 000000A2 3B69 LDR R3,[R7, #+16]
\ 000000A4 ........ BL ??rT_BX_R3
92 first =1;
\ 000000A8 0120 MOV R0,#+1
\ 000000AA 0BE0 B ??Usart_c_irq_handler_6
93 }else{
94 COM0->US_RPR = (unsigned int) buff_rx;
\ ??Usart_c_irq_handler_5:
\ 000000AC 0199 LDR R1,[SP, #+4]
\ 000000AE 0160 STR R1,[R0, #+0]
95 COM0->US_RCR = 100;
\ 000000B0 6421 MOV R1,#+100
\ 000000B2 4160 STR R1,[R0, #+4]
96 pCDC.Write(&pCDC, buff_rx1,status);
\ 000000B4 321C MOV R2,R6
\ 000000B6 211C MOV R1,R4
\ 000000B8 6C31 ADD R1,#+108
\ 000000BA 381C MOV R0,R7
\ 000000BC 3B69 LDR R3,[R7, #+16]
\ 000000BE ........ BL ??rT_BX_R3
97 first=0;
\ 000000C2 0020 MOV R0,#+0
\ ??Usart_c_irq_handler_6:
\ 000000C4 6060 STR R0,[R4, #+4]
98 }
99 COM0->US_CR = AT91C_US_STTTO;
\ 000000C6 2068 LDR R0,[R4, #+0]
\ 000000C8 8021 MOV R1,#+128
\ 000000CA 0901 LSL R1,R1,#+4 ;; #+2048
\ 000000CC 0160 STR R1,[R0, #+0]
100 }
101 }
102 //* Reset the satus bit for error
103 USART_pt->US_CR = AT91C_US_RSTSTA;
\ ??Usart_c_irq_handler_4:
\ 000000CE 8020 MOV R0,#+128
\ 000000D0 4000 LSL R0,R0,#+1 ;; #+256
\ 000000D2 2860 STR R0,[R5, #+0]
104 }
\ 000000D4 FCBC POP {R2-R7}
\ 000000D6 01BC POP {R0}
\ 000000D8 0047 BX R0 ;; return
\ 000000DA C046 NOP
\ ??Usart_c_irq_handler_0:
\ 000000DC ........ DC32 pCDC
105 //*-------------------------- External Function -------------------------------
106
107 //*----------------------------------------------------------------------------
108 //* \fn AT91F_US_Printk
109 //* \brief This function is used to send a string through the US channel
110 //*----------------------------------------------------------------------------
\ In segment CODE, align 4, keep-with-next
111 void AT91F_US_Put( char *buffer) // \arg pointer to a string ending by \0
112 {
\ AT91F_US_Put:
\ 00000000 06E0 B ??AT91F_US_Put_0
113 while(*buffer != '\0') {
114 while (!AT91F_US_TxReady(COM0));
\ ??AT91F_US_Put_1:
\ 00000002 .... LDR R1,??DataTable2 ;; COM0
\ 00000004 0968 LDR R1,[R1, #+0]
\ 00000006 4A69 LDR R2,[R1, #+20]
\ 00000008 9207 LSL R2,R2,#+30
\ 0000000A FAD5 BPL ??AT91F_US_Put_1
115 AT91F_US_PutChar(COM0, *buffer++);
\ 0000000C CB61 STR R3,[R1, #+28]
\ 0000000E 401C ADD R0,R0,#+1
116 }
\ ??AT91F_US_Put_0:
\ 00000010 0378 LDRB R3,[R0, #+0]
\ 00000012 002B CMP R3,#+0
\ 00000014 F5D1 BNE ??AT91F_US_Put_1
117 }
\ 00000016 00B0 ADD SP,#+0
\ 00000018 7047 BX LR ;; return
118
119 //*----------------------------------------------------------------------------
120 //* Function Name : Usart_init
121 //* Object : USART initialization
122 //* Input Parameters : none
123 //* Output Parameters : TRUE
124 //*----------------------------------------------------------------------------
\ In segment CODE, align 4, keep-with-next
125 void Usart_init ( void )
126 //* Begin
127 {
\ Usart_init:
\ 00000000 F0B5 PUSH {R4-R7,LR}
128 COM0= AT91C_BASE_US0;
\ 00000002 .... LDR R4,??DataTable2 ;; COM0
\ 00000004 2148 LDR R0,??Usart_init_0 ;; 0xfffc0000
\ 00000006 2060 STR R0,[R4, #+0]
129 //* Define RXD and TXD as peripheral
130 // Configure PIO controllers to periph mode
131 AT91F_PIO_CfgPeriph(
132 AT91C_BASE_PIOA, // PIO controller base address
133 ((unsigned int) AT91C_PA5_RXD0 ) |
134 ((unsigned int) AT91C_PA6_TXD0 ) , // Peripheral A
135 0 ); // Peripheral B
\ 00000008 6020 MOV R0,#+96
\ 0000000A 2149 LDR R1,??Usart_init_0+0x4 ;; 0xfffff470
\ 0000000C 0860 STR R0,[R1, #+0]
\ 0000000E 0025 MOV R5,#+0
\ 00000010 2049 LDR R1,??Usart_init_0+0x8 ;; 0xfffff474
\ 00000012 0D60 STR R5,[R1, #+0]
\ 00000014 2049 LDR R1,??Usart_init_0+0xC ;; 0xfffff404
\ 00000016 0860 STR R0,[R1, #+0]
136
137 //* First, enable the clock of the PIOB
138 AT91F_PMC_EnablePeriphClock ( AT91C_BASE_PMC, 1 << AT91C_ID_US0 ) ;
\ 00000018 4026 MOV R6,#+64
\ 0000001A 2048 LDR R0,??Usart_init_0+0x10 ;; 0xfffffc10
\ 0000001C 0660 STR R6,[R0, #+0]
139
140 //* Usart Configure
141 AT91F_US_Configure (COM0, AT91B_MCK,AT91C_US_ASYNC_MODE,USART_BAUD_RATE , 0);
\ 0000001E 2768 LDR R7,[R4, #+0]
\ 00000020 0020 MOV R0,#+0
\ 00000022 C043 MVN R0,R0 ;; #-1
\ 00000024 F860 STR R0,[R7, #+12]
\ 00000026 AC20 MOV R0,#+172
\ 00000028 3860 STR R0,[R7, #+0]
\ 0000002A 1A20 MOV R0,#+26
\ 0000002C 3862 STR R0,[R7, #+32]
\ 0000002E BD62 STR R5,[R7, #+40]
\ 00000030 E630 ADD R0,#+230
\ 00000032 3818 ADD R0,R7,R0
\ 00000034 ........ _BLF AT91F_PDC_Open,??AT91F_PDC_Open??rT
\ 00000038 8C20 MOV R0,#+140
\ 0000003A 0001 LSL R0,R0,#+4 ;; #+2240
\ 0000003C 7860 STR R0,[R7, #+4]
142
143 //* Enable usart
144 COM0->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;
\ 0000003E 2068 LDR R0,[R4, #+0]
\ 00000040 5021 MOV R1,#+80
\ 00000042 0160 STR R1,[R0, #+0]
145
146 //* open Usart interrupt
147 AT91F_AIC_ConfigureIt (AT91C_BASE_AIC, AT91C_ID_US0, USART_INTERRUPT_LEVEL,
148 AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL, Usart_c_irq_handler);
\ 00000044 1648 LDR R0,??Usart_init_0+0x14 ;; 0xfffff098
\ 00000046 0168 LDR R1,[R0, #+0]
\ 00000048 1649 LDR R1,??Usart_init_0+0x18 ;; 0xfffff124
\ 0000004A 0E60 STR R6,[R1, #+0]
\ 0000004C 1649 LDR R1,??Usart_init_0+0x1C ;; Usart_c_irq_handler
\ 0000004E 0160 STR R1,[R0, #+0]
\ 00000050 1648 LDR R0,??Usart_init_0+0x20 ;; 0xfffff018
\ 00000052 0121 MOV R1,#+1
\ 00000054 0160 STR R1,[R0, #+0]
\ 00000056 1648 LDR R0,??Usart_init_0+0x24 ;; 0xfffff128
\ 00000058 0660 STR R6,[R0, #+0]
149 AT91F_AIC_EnableIt (AT91C_BASE_AIC, AT91C_ID_US0);
\ 0000005A 1648 LDR R0,??Usart_init_0+0x28 ;; 0xfffff120
\ 0000005C 0660 STR R6,[R0, #+0]
150 // Set the PDC
151 AT91F_PDC_Open (AT91C_BASE_PDC_US0);
\ 0000005E 1648 LDR R0,??Usart_init_0+0x2C ;; 0xfffc0100
\ 00000060 ........ _BLF AT91F_PDC_Open,??AT91F_PDC_Open??rT
152 COM0->US_RPR = (unsigned int) buff_rx;
\ 00000064 B000 LSL R0,R6,#+2
\ 00000066 2168 LDR R1,[R4, #+0]
\ 00000068 221C MOV R2,R4
\ 0000006A 0832 ADD R2,#+8
\ 0000006C 0A50 STR R2,[R1, R0]
153 COM0->US_RCR = 100;
\ 0000006E 001D ADD R0,R0,#+4
\ 00000070 2168 LDR R1,[R4, #+0]
\ 00000072 6422 MOV R2,#+100
\ 00000074 0A50 STR R2,[R1, R0]
154 first = 0;
\ 00000076 6560 STR R5,[R4, #+4]
155 COM0->US_RTOR = 10;
\ 00000078 2068 LDR R0,[R4, #+0]
\ 0000007A 0A21 MOV R1,#+10
\ 0000007C 4162 STR R1,[R0, #+36]
156 //* Enable USART IT error and AT91C_US_ENDRX
157 AT91F_US_EnableIt(COM0,AT91C_US_RXBUFF | AT91C_US_TIMEOUT );
\ 0000007E 2068 LDR R0,[R4, #+0]
\ 00000080 8821 MOV R1,#+136
\ 00000082 4901 LSL R1,R1,#+5 ;; #+4352
\ 00000084 8160 STR R1,[R0, #+8]
158 //* End
159 }
\ 00000086 F0BC POP {R4-R7}
\ 00000088 01BC POP {R0}
\ 0000008A 0047 BX R0 ;; return
\ ??Usart_init_0:
\ 0000008C 0000FCFF DC32 0xfffc0000
\ 00000090 70F4FFFF DC32 0xfffff470
\ 00000094 74F4FFFF DC32 0xfffff474
\ 00000098 04F4FFFF DC32 0xfffff404
\ 0000009C 10FCFFFF DC32 0xfffffc10
\ 000000A0 98F0FFFF DC32 0xfffff098
\ 000000A4 24F1FFFF DC32 0xfffff124
\ 000000A8 ........ DC32 Usart_c_irq_handler
\ 000000AC 18F0FFFF DC32 0xfffff018
\ 000000B0 28F1FFFF DC32 0xfffff128
\ 000000B4 20F1FFFF DC32 0xfffff120
\ 000000B8 0001FCFF DC32 0xfffc0100
\ In segment CODE, align 4, keep-with-next
\ ??DataTable2:
\ 00000000 ........ DC32 COM0
Maximum stack usage in bytes:
Function CSTACK
-------- ------
AT91F_PDC_Open 0
AT91F_US_Put 4
Trace_Toggel_LED 4
Usart_c_irq_handler 28
Usart_init 20
Segment part sizes:
Function/Label Bytes
-------------- -----
AT91F_PDC_Open 36
COM0 208
Trace_Toggel_LED 36
Usart_c_irq_handler 224
AT91F_US_Put 26
Usart_init 188
??DataTable2 4
Others 54
556 bytes in segment CODE
208 bytes in segment DATA_Z
12 bytes in segment INITTAB
478 bytes of CODE memory (+ 90 bytes shared)
208 bytes of DATA memory
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -