📄 pdc.lst
字号:
\ In section .text, align 4, keep-with-next
140 void AT91F_PDC_Open (AT91PS_PDC pPDC) // \arg pointer to a PDC controller
141 {
\ AT91F_PDC_Open:
\ 00000000 10402DE9 PUSH {R4,LR}
\ 00000004 0040B0E1 MOVS R4,R0
142 //* Disable the RX and TX PDC transfer requests
143 AT91F_PDC_DisableRx(pPDC);
\ 00000008 0400B0E1 MOVS R0,R4
\ 0000000C ........ BL AT91F_PDC_DisableRx
144 AT91F_PDC_DisableTx(pPDC);
\ 00000010 0400B0E1 MOVS R0,R4
\ 00000014 ........ BL AT91F_PDC_DisableTx
145
146 //* Reset all Counter register Next buffer first
147 AT91F_PDC_SetNextTx(pPDC, (char *) 0, 0);
\ 00000018 0020A0E3 MOV R2,#+0
\ 0000001C 0010A0E3 MOV R1,#+0
\ 00000020 0400B0E1 MOVS R0,R4
\ 00000024 ........ BL AT91F_PDC_SetNextTx
148 AT91F_PDC_SetNextRx(pPDC, (char *) 0, 0);
\ 00000028 0020A0E3 MOV R2,#+0
\ 0000002C 0010A0E3 MOV R1,#+0
\ 00000030 0400B0E1 MOVS R0,R4
\ 00000034 ........ BL AT91F_PDC_SetNextRx
149 AT91F_PDC_SetTx(pPDC, (char *) 0, 0);
\ 00000038 0020A0E3 MOV R2,#+0
\ 0000003C 0010A0E3 MOV R1,#+0
\ 00000040 0400B0E1 MOVS R0,R4
\ 00000044 ........ BL AT91F_PDC_SetTx
150 AT91F_PDC_SetRx(pPDC, (char *) 0, 0);
\ 00000048 0020A0E3 MOV R2,#+0
\ 0000004C 0010A0E3 MOV R1,#+0
\ 00000050 0400B0E1 MOVS R0,R4
\ 00000054 ........ BL AT91F_PDC_SetRx
151
152 //* Enable the RX and TX PDC transfer requests
153 AT91F_PDC_EnableRx(pPDC);
\ 00000058 0400B0E1 MOVS R0,R4
\ 0000005C ........ BL AT91F_PDC_EnableRx
154 AT91F_PDC_EnableTx(pPDC);
\ 00000060 0400B0E1 MOVS R0,R4
\ 00000064 ........ BL AT91F_PDC_EnableTx
155 }
\ 00000068 1080BDE8 POP {R4,PC} ;; return
156
157 //*----------------------------------------------------------------------------
158 //* \fn AT91F_PDC_Close
159 //* \brief Close PDC: disable TX and RX reset transfer descriptors
160 //*----------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
161 void AT91F_PDC_Close (AT91PS_PDC pPDC) // \arg pointer to a PDC controller
162 {
\ AT91F_PDC_Close:
\ 00000000 10402DE9 PUSH {R4,LR}
\ 00000004 0040B0E1 MOVS R4,R0
163 //* Disable the RX and TX PDC transfer requests
164 AT91F_PDC_DisableRx(pPDC);
\ 00000008 0400B0E1 MOVS R0,R4
\ 0000000C ........ BL AT91F_PDC_DisableRx
165 AT91F_PDC_DisableTx(pPDC);
\ 00000010 0400B0E1 MOVS R0,R4
\ 00000014 ........ BL AT91F_PDC_DisableTx
166
167 //* Reset all Counter register Next buffer first
168 AT91F_PDC_SetNextTx(pPDC, (char *) 0, 0);
\ 00000018 0020A0E3 MOV R2,#+0
\ 0000001C 0010A0E3 MOV R1,#+0
\ 00000020 0400B0E1 MOVS R0,R4
\ 00000024 ........ BL AT91F_PDC_SetNextTx
169 AT91F_PDC_SetNextRx(pPDC, (char *) 0, 0);
\ 00000028 0020A0E3 MOV R2,#+0
\ 0000002C 0010A0E3 MOV R1,#+0
\ 00000030 0400B0E1 MOVS R0,R4
\ 00000034 ........ BL AT91F_PDC_SetNextRx
170 AT91F_PDC_SetTx(pPDC, (char *) 0, 0);
\ 00000038 0020A0E3 MOV R2,#+0
\ 0000003C 0010A0E3 MOV R1,#+0
\ 00000040 0400B0E1 MOVS R0,R4
\ 00000044 ........ BL AT91F_PDC_SetTx
171 AT91F_PDC_SetRx(pPDC, (char *) 0, 0);
\ 00000048 0020A0E3 MOV R2,#+0
\ 0000004C 0010A0E3 MOV R1,#+0
\ 00000050 0400B0E1 MOVS R0,R4
\ 00000054 ........ BL AT91F_PDC_SetRx
172
173 }
\ 00000058 1080BDE8 POP {R4,PC} ;; return
174
175 //*----------------------------------------------------------------------------
176 //* \fn AT91F_PDC_SendFrame
177 //* \brief Close PDC: disable TX and RX reset transfer descriptors
178 //*----------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
179 unsigned int AT91F_PDC_SendFrame(
180 AT91PS_PDC pPDC,
181 char *pBuffer,
182 unsigned int szBuffer,
183 char *pNextBuffer,
184 unsigned int szNextBuffer )
185 {
\ AT91F_PDC_SendFrame:
\ 00000000 F0412DE9 PUSH {R4-R8,LR}
\ 00000004 0050B0E1 MOVS R5,R0
\ 00000008 0160B0E1 MOVS R6,R1
\ 0000000C 0270B0E1 MOVS R7,R2
\ 00000010 0340B0E1 MOVS R4,R3
\ 00000014 18809DE5 LDR R8,[SP, #+24]
186 if (AT91F_PDC_IsTxEmpty(pPDC))
\ 00000018 0500B0E1 MOVS R0,R5
\ 0000001C ........ BL AT91F_PDC_IsTxEmpty
\ 00000020 000050E3 CMP R0,#+0
\ 00000024 0900000A BEQ ??AT91F_PDC_SendFrame_0
187 {
188 //* Buffer and next buffer can be initialized
189 AT91F_PDC_SetTx(pPDC, pBuffer, szBuffer);
\ 00000028 0720B0E1 MOVS R2,R7
\ 0000002C 0610B0E1 MOVS R1,R6
\ 00000030 0500B0E1 MOVS R0,R5
\ 00000034 ........ BL AT91F_PDC_SetTx
190 AT91F_PDC_SetNextTx(pPDC, pNextBuffer, szNextBuffer);
\ 00000038 0820B0E1 MOVS R2,R8
\ 0000003C 0410B0E1 MOVS R1,R4
\ 00000040 0500B0E1 MOVS R0,R5
\ 00000044 ........ BL AT91F_PDC_SetNextTx
191 return 2;
\ 00000048 0200A0E3 MOV R0,#+2
\ 0000004C 0A0000EA B ??AT91F_PDC_SendFrame_1
192 }
193 else if (AT91F_PDC_IsNextTxEmpty(pPDC))
\ ??AT91F_PDC_SendFrame_0:
\ 00000050 0500B0E1 MOVS R0,R5
\ 00000054 ........ BL AT91F_PDC_IsNextTxEmpty
\ 00000058 000050E3 CMP R0,#+0
\ 0000005C 0500000A BEQ ??AT91F_PDC_SendFrame_2
194 {
195 //* Only one buffer can be initialized
196 AT91F_PDC_SetNextTx(pPDC, pBuffer, szBuffer);
\ 00000060 0720B0E1 MOVS R2,R7
\ 00000064 0610B0E1 MOVS R1,R6
\ 00000068 0500B0E1 MOVS R0,R5
\ 0000006C ........ BL AT91F_PDC_SetNextTx
197 return 1;
\ 00000070 0100A0E3 MOV R0,#+1
\ 00000074 000000EA B ??AT91F_PDC_SendFrame_1
198 }
199 else
200 {
201 //* All buffer are in use...
202 return 0;
\ ??AT91F_PDC_SendFrame_2:
\ 00000078 0000A0E3 MOV R0,#+0
\ ??AT91F_PDC_SendFrame_1:
\ 0000007C F081BDE8 POP {R4-R8,PC} ;; return
203 }
204 }
205
206 //*----------------------------------------------------------------------------
207 //* \fn AT91F_PDC_ReceiveFrame
208 //* \brief Close PDC: disable TX and RX reset transfer descriptors
209 //*----------------------------------------------------------------------------
\ In section .text, align 4, keep-with-next
210 unsigned int AT91F_PDC_ReceiveFrame (
211 AT91PS_PDC pPDC,
212 char *pBuffer,
213 unsigned int szBuffer,
214 char *pNextBuffer,
215 unsigned int szNextBuffer )
216 {
\ AT91F_PDC_ReceiveFrame:
\ 00000000 F0412DE9 PUSH {R4-R8,LR}
\ 00000004 0050B0E1 MOVS R5,R0
\ 00000008 0160B0E1 MOVS R6,R1
\ 0000000C 0270B0E1 MOVS R7,R2
\ 00000010 0340B0E1 MOVS R4,R3
\ 00000014 18809DE5 LDR R8,[SP, #+24]
217 if (AT91F_PDC_IsRxEmpty(pPDC)) {
\ 00000018 0500B0E1 MOVS R0,R5
\ 0000001C ........ BL AT91F_PDC_IsRxEmpty
\ 00000020 000050E3 CMP R0,#+0
\ 00000024 0900000A BEQ ??AT91F_PDC_ReceiveFrame_0
218 //* Buffer and next buffer can be initialized
219 AT91F_PDC_SetRx(pPDC, pBuffer, szBuffer);
\ 00000028 0720B0E1 MOVS R2,R7
\ 0000002C 0610B0E1 MOVS R1,R6
\ 00000030 0500B0E1 MOVS R0,R5
\ 00000034 ........ BL AT91F_PDC_SetRx
220 AT91F_PDC_SetNextRx(pPDC, pNextBuffer, szNextBuffer);
\ 00000038 0820B0E1 MOVS R2,R8
\ 0000003C 0410B0E1 MOVS R1,R4
\ 00000040 0500B0E1 MOVS R0,R5
\ 00000044 ........ BL AT91F_PDC_SetNextRx
221 return 2;
\ 00000048 0200A0E3 MOV R0,#+2
\ 0000004C 0A0000EA B ??AT91F_PDC_ReceiveFrame_1
222 }
223 else if (AT91F_PDC_IsNextRxEmpty(pPDC)) {
\ ??AT91F_PDC_ReceiveFrame_0:
\ 00000050 0500B0E1 MOVS R0,R5
\ 00000054 ........ BL AT91F_PDC_IsNextRxEmpty
\ 00000058 000050E3 CMP R0,#+0
\ 0000005C 0500000A BEQ ??AT91F_PDC_ReceiveFrame_2
224 //* Only one buffer can be initialized
225 AT91F_PDC_SetNextRx(pPDC, pBuffer, szBuffer);
\ 00000060 0720B0E1 MOVS R2,R7
\ 00000064 0610B0E1 MOVS R1,R6
\ 00000068 0500B0E1 MOVS R0,R5
\ 0000006C ........ BL AT91F_PDC_SetNextRx
226 return 1;
\ 00000070 0100A0E3 MOV R0,#+1
\ 00000074 000000EA B ??AT91F_PDC_ReceiveFrame_1
227 }
228 else
229 {
230 //* All buffer are in use...
231 return 0;
\ ??AT91F_PDC_ReceiveFrame_2:
\ 00000078 0000A0E3 MOV R0,#+0
\ ??AT91F_PDC_ReceiveFrame_1:
\ 0000007C F081BDE8 POP {R4-R8,PC} ;; return
232 }
233 }
Maximum stack usage in bytes:
Function .cstack
-------- -------
AT91F_PDC_Close 0
AT91F_PDC_DisableRx 0
AT91F_PDC_DisableTx 0
AT91F_PDC_EnableRx 0
AT91F_PDC_EnableTx 0
AT91F_PDC_IsNextRxEmpty 0
AT91F_PDC_IsNextTxEmpty 0
AT91F_PDC_IsRxEmpty 0
AT91F_PDC_IsTxEmpty 0
AT91F_PDC_Open 0
AT91F_PDC_ReceiveFrame 0
AT91F_PDC_SendFrame 0
AT91F_PDC_SetNextRx 0
AT91F_PDC_SetNextTx 0
AT91F_PDC_SetRx 0
AT91F_PDC_SetTx 0
Section sizes:
Function/Label Bytes
-------------- -----
AT91F_PDC_SetNextRx 12
AT91F_PDC_SetNextTx 12
AT91F_PDC_SetRx 12
AT91F_PDC_SetTx 12
AT91F_PDC_EnableTx 12
AT91F_PDC_EnableRx 12
AT91F_PDC_DisableTx 12
AT91F_PDC_DisableRx 12
AT91F_PDC_IsTxEmpty 32
AT91F_PDC_IsNextTxEmpty 32
AT91F_PDC_IsRxEmpty 32
AT91F_PDC_IsNextRxEmpty 32
AT91F_PDC_Open 108
AT91F_PDC_Close 92
AT91F_PDC_SendFrame 128
AT91F_PDC_ReceiveFrame 128
680 bytes in section .text
680 bytes of CODE memory
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -