📄 dbgu.lst
字号:
\ In section .text, align 4, keep-with-next
118 static void DBGU_PutChar(unsigned char c)
119 {
120 //* Wait for the transmitter to be ready
121 //* 等待发送缓存器空
122 while ((AT91C_BASE_DBGU->DBGU_CSR & AT91C_US_TXEMPTY) == 0);
\ DBGU_PutChar:
\ ??DBGU_PutChar_0:
\ 00000000 EB10E0E3 MVN R1,#+235
\ 00000004 D01EC1E3 BIC R1,R1,#0xD00
\ 00000008 001091E5 LDR R1,[R1, #+0]
\ 0000000C 800F11E3 TST R1,#0x200
\ 00000010 FAFFFF0A BEQ ??DBGU_PutChar_0
123
124 //* Send character
125 //* 发送字符
126 AT91C_BASE_DBGU->DBGU_THR = c;
\ 00000014 E310E0E3 MVN R1,#+227
\ 00000018 D01EC1E3 BIC R1,R1,#0xD00
\ 0000001C 0020B0E1 MOVS R2,R0
\ 00000020 FF2012E2 ANDS R2,R2,#0xFF ;; Zero extend
\ 00000024 002081E5 STR R2,[R1, #+0]
127
128 //* Wait for the transfer to complete
129 //* 等待发送完成
130 while ((AT91C_BASE_DBGU->DBGU_CSR & AT91C_US_TXEMPTY) == 0);
\ ??DBGU_PutChar_1:
\ 00000028 EB10E0E3 MVN R1,#+235
\ 0000002C D01EC1E3 BIC R1,R1,#0xD00
\ 00000030 001091E5 LDR R1,[R1, #+0]
\ 00000034 800F11E3 TST R1,#0x200
\ 00000038 FAFFFF0A BEQ ??DBGU_PutChar_1
131 }
\ 0000003C 1EFF2FE1 BX LR ;; return
132
133
134 //*-----------------------------------------------------------------------------
135 //* 函数名称: DBGU_GetChar
136 //* 函数功能: 从串获取一个字符
137 //* 入口参数: 无
138 //* 返回值 : 获取的字符
139 //*-----------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
140 unsigned char DBGU_GetChar()
141 {
142 while ((AT91C_BASE_DBGU->DBGU_CSR & AT91C_US_RXRDY) == 0);
\ DBGU_GetChar:
\ ??DBGU_GetChar_0:
\ 00000000 EB00E0E3 MVN R0,#+235
\ 00000004 D00EC0E3 BIC R0,R0,#0xD00
\ 00000008 000090E5 LDR R0,[R0, #+0]
\ 0000000C 010010E3 TST R0,#0x1
\ 00000010 FAFFFF0A BEQ ??DBGU_GetChar_0
143 return AT91C_BASE_DBGU->DBGU_RHR;
\ 00000014 E700E0E3 MVN R0,#+231
\ 00000018 D00EC0E3 BIC R0,R0,#0xD00
\ 0000001C 000090E5 LDR R0,[R0, #+0]
\ 00000020 FF0010E2 ANDS R0,R0,#0xFF ;; Zero extend
\ 00000024 1EFF2FE1 BX LR ;; return
144 }
145
146
147 #ifndef NOFPUT
148
149 #include <stdio.h>
150
151 //------------------------------------------------------------------------------
152 /// Implementation of fputc using the DBGU as the standard output. Required
153 /// for printf().
154 /// Returns the character written if successful, or -1 if the output stream is
155 /// not stdout or stderr.
156 /// \param c Character to write.
157 /// \param pStream Output stream.
158 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
159 signed int fputc(signed int c, FILE *pStream)
160 {
\ fputc:
\ 00000000 38402DE9 PUSH {R3-R5,LR}
\ 00000004 0050B0E1 MOVS R5,R0
\ 00000008 0140B0E1 MOVS R4,R1
161 if ((pStream == stdout) || (pStream == stderr))
\ 0000000C ........ LDR R0,??DataTable1 ;; __iar_Stdout
\ 00000010 000054E1 CMP R4,R0
\ 00000014 0200000A BEQ ??fputc_0
\ 00000018 20009FE5 LDR R0,??fputc_1 ;; __iar_Stderr
\ 0000001C 000054E1 CMP R4,R0
\ 00000020 0400001A BNE ??fputc_2
162 {
163 DBGU_PutChar(c);
\ ??fputc_0:
\ 00000024 0500B0E1 MOVS R0,R5
\ 00000028 FF0010E2 ANDS R0,R0,#0xFF ;; Zero extend
\ 0000002C ........ BL DBGU_PutChar
164 return c;
\ 00000030 0500B0E1 MOVS R0,R5
\ 00000034 000000EA B ??fputc_3
165 }
166 else
167 return EOF;
\ ??fputc_2:
\ 00000038 0000E0E3 MVN R0,#+0
\ ??fputc_3:
\ 0000003C 3280BDE8 POP {R1,R4,R5,PC} ;; return
\ ??fputc_1:
\ 00000040 ........ DC32 __iar_Stderr
168 }
169
170
171 //------------------------------------------------------------------------------
172 /// Implementation of fputs using the DBGU as the standard output. Required
173 /// for printf(). Does NOT currently use the PDC.
174 /// Returns the number of characters written if successful, or -1 if the output
175 /// stream is not stdout or stderr.
176 /// \param pStr String to write.
177 /// \param pStream Output stream.
178 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
179 signed int fputs(const char *pStr, FILE *pStream)
180 {
\ fputs:
\ 00000000 70402DE9 PUSH {R4-R6,LR}
\ 00000004 0050B0E1 MOVS R5,R0
\ 00000008 0140B0E1 MOVS R4,R1
181 signed int num = 0;
\ 0000000C 0000A0E3 MOV R0,#+0
\ 00000010 0060B0E1 MOVS R6,R0
182
183 while (*pStr != 0)
\ ??fputs_0:
\ 00000014 0000D5E5 LDRB R0,[R5, #+0]
\ 00000018 000050E3 CMP R0,#+0
\ 0000001C 0900000A BEQ ??fputs_1
184 {
185 if (fputc(*pStr, pStream) == -1)
\ 00000020 0410B0E1 MOVS R1,R4
\ 00000024 0000D5E5 LDRB R0,[R5, #+0]
\ 00000028 ........ BL fputc
\ 0000002C 010070E3 CMN R0,#+1
\ 00000030 0100001A BNE ??fputs_2
186 return -1;
\ 00000034 0000E0E3 MVN R0,#+0
\ 00000038 030000EA B ??fputs_3
187 num++;
\ ??fputs_2:
\ 0000003C 016096E2 ADDS R6,R6,#+1
188 pStr++;
\ 00000040 015095E2 ADDS R5,R5,#+1
\ 00000044 F2FFFFEA B ??fputs_0
189 }
190
191 return num;
\ ??fputs_1:
\ 00000048 0600B0E1 MOVS R0,R6
\ ??fputs_3:
\ 0000004C 7080BDE8 POP {R4-R6,PC} ;; return
192 }
193
194 #undef putchar
195
196 //------------------------------------------------------------------------------
197 /// Outputs a character on the DBGU. Returns the character itself.
198 /// \param c Character to output.
199 //------------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
200 signed int putchar(signed int c)
201 {
\ putchar:
\ 00000000 10402DE9 PUSH {R4,LR}
\ 00000004 0040B0E1 MOVS R4,R0
202 return fputc(c, stdout);
\ 00000008 ........ LDR R1,??DataTable1 ;; __iar_Stdout
\ 0000000C 0400B0E1 MOVS R0,R4
\ 00000010 ........ BL fputc
\ 00000014 1080BDE8 POP {R4,PC} ;; return
203 }
\ In section .text, align 4, keep-with-next
\ ??DataTable1:
\ 00000000 ........ DC32 __iar_Stdout
204
205 #endif //#ifndef NOFPUT
206
Maximum stack usage in bytes:
Function .cstack
-------- -------
AT91F_US_PutChar 0
AT91F_US_TxReady 0
DBGU_Configure 0
DBGU_GetChar 0
DBGU_Printk 0
DBGU_PutChar 0
fputc 0
fputs 0
putchar 0
Section sizes:
Function/Label Bytes
-------------- -----
DBGU_Configure 128
AT91F_US_TxReady 12
AT91F_US_PutChar 16
DBGU_Printk 68
DBGU_PutChar 64
DBGU_GetChar 40
fputc 68
fputs 80
putchar 24
??DataTable1 4
504 bytes in section .text
504 bytes of CODE memory
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -