📄 twid.lst
字号:
252 unsigned char *pData,
253 unsigned int num,
254 Async *pAsync)
255 {
\ TWID_Write:
\ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR}
\ 00000004 01A0B0E1 MOVS R10,R1
\ 00000008 0290B0E1 MOVS R9,R2
\ 0000000C 0380B0E1 MOVS R8,R3
\ 00000010 28409DE5 LDR R4,[SP, #+40]
\ 00000014 2C509DE5 LDR R5,[SP, #+44]
\ 00000018 30B09DE5 LDR R11,[SP, #+48]
256 AT91S_TWI *pTwi = pTwid->pTwi;
\ 0000001C 00009DE5 LDR R0,[SP, #+0]
\ 00000020 000090E5 LDR R0,[R0, #+0]
\ 00000024 0060B0E1 MOVS R6,R0
257 AsyncTwi *pTransfer = (AsyncTwi *) pTwid->pTransfer;
\ 00000028 00009DE5 LDR R0,[SP, #+0]
\ 0000002C 040090E5 LDR R0,[R0, #+4]
\ 00000030 0070B0E1 MOVS R7,R0
258
259 trace_LOG(trace_DEBUG, "-D- TWID_Write()\n\r");
260 SANITY_CHECK(pTwi);
\ 00000034 000056E3 CMP R6,#+0
\ 00000038 0400001A BNE ??TWID_Write_0
\ 0000003C 412FA0E3 MOV R2,#+260
\ 00000040 ........ LDR R1,??DataTable20 ;; `?<Constant "E:\\\\IAR\\\\at91lib\\\\driver...">`
\ 00000044 ........ LDR R0,??DataTable21 ;; `?<Constant "Sanity check failed a...">`
\ 00000048 ........ BL printf
\ ??TWID_Write_1:
\ 0000004C FEFFFFEA B ??TWID_Write_1
261 SANITY_CHECK((address & 0x80) == 0);
\ ??TWID_Write_0:
\ 00000050 80001AE3 TST R10,#0x80
\ 00000054 0500000A BEQ ??TWID_Write_2
\ 00000058 0520A0E3 MOV R2,#+5
\ 0000005C 402F82E3 ORR R2,R2,#0x100
\ 00000060 ........ LDR R1,??DataTable20 ;; `?<Constant "E:\\\\IAR\\\\at91lib\\\\driver...">`
\ 00000064 ........ LDR R0,??DataTable21 ;; `?<Constant "Sanity check failed a...">`
\ 00000068 ........ BL printf
\ ??TWID_Write_3:
\ 0000006C FEFFFFEA B ??TWID_Write_3
262 SANITY_CHECK((iaddress & 0xFF000000) == 0);
\ ??TWID_Write_2:
\ 00000070 FF0419E3 TST R9,#0xFF000000
\ 00000074 0500000A BEQ ??TWID_Write_4
\ 00000078 0620A0E3 MOV R2,#+6
\ 0000007C 402F82E3 ORR R2,R2,#0x100
\ 00000080 ........ LDR R1,??DataTable20 ;; `?<Constant "E:\\\\IAR\\\\at91lib\\\\driver...">`
\ 00000084 ........ LDR R0,??DataTable21 ;; `?<Constant "Sanity check failed a...">`
\ 00000088 ........ BL printf
\ ??TWID_Write_5:
\ 0000008C FEFFFFEA B ??TWID_Write_5
263 SANITY_CHECK(isize < 4);
\ ??TWID_Write_4:
\ 00000090 FF8018E2 ANDS R8,R8,#0xFF ;; Zero extend
\ 00000094 040058E3 CMP R8,#+4
\ 00000098 0500003A BCC ??TWID_Write_6
\ 0000009C 0720A0E3 MOV R2,#+7
\ 000000A0 402F82E3 ORR R2,R2,#0x100
\ 000000A4 ........ LDR R1,??DataTable20 ;; `?<Constant "E:\\\\IAR\\\\at91lib\\\\driver...">`
\ 000000A8 ........ LDR R0,??DataTable21 ;; `?<Constant "Sanity check failed a...">`
\ 000000AC ........ BL printf
\ ??TWID_Write_7:
\ 000000B0 FEFFFFEA B ??TWID_Write_7
264
265 // Check that no transfer is already pending
266 if (pTransfer) {
\ ??TWID_Write_6:
\ 000000B4 000057E3 CMP R7,#+0
\ 000000B8 0300000A BEQ ??TWID_Write_8
267
268 trace_LOG(trace_ERROR, "-E- TWI_Write: A transfer is already pending\n\r");
\ 000000BC E4009FE5 LDR R0,??TWID_Write_9 ;; `?<Constant "-E- TWI_Write: A tran...">`
\ 000000C0 ........ BL printf
269 return TWID_ERROR_BUSY;
\ 000000C4 0100A0E3 MOV R0,#+1
\ 000000C8 350000EA B ??TWID_Write_10
270 }
271
272 // Asynchronous transfer
273 if (pAsync) {
\ ??TWID_Write_8:
\ 000000CC 00005BE3 CMP R11,#+0
\ 000000D0 1600000A BEQ ??TWID_Write_11
274
275 // Update the transfer descriptor
276 pTwid->pTransfer = pAsync;
\ 000000D4 00009DE5 LDR R0,[SP, #+0]
\ 000000D8 04B080E5 STR R11,[R0, #+4]
277 pTransfer = (AsyncTwi *) pAsync;
\ 000000DC 0B70B0E1 MOVS R7,R11
278 pTransfer->status = ASYNC_STATUS_PENDING;
\ 000000E0 FF00A0E3 MOV R0,#+255
\ 000000E4 0000C7E5 STRB R0,[R7, #+0]
279 pTransfer->pData = pData;
\ 000000E8 084087E5 STR R4,[R7, #+8]
280 pTransfer->num = num;
\ 000000EC 0C5087E5 STR R5,[R7, #+12]
281 pTransfer->transferred = 1;
\ 000000F0 0100A0E3 MOV R0,#+1
\ 000000F4 100087E5 STR R0,[R7, #+16]
282
283 // Enable write interrupt and start the transfer
284 TWI_StartWrite(pTwi, address, iaddress, isize, *pData);
\ 000000F8 0000D4E5 LDRB R0,[R4, #+0]
\ 000000FC 08002DE5 STR R0,[SP, #-8]!
\ 00000100 0830B0E1 MOVS R3,R8
\ 00000104 FF3013E2 ANDS R3,R3,#0xFF ;; Zero extend
\ 00000108 0920B0E1 MOVS R2,R9
\ 0000010C 0A10B0E1 MOVS R1,R10
\ 00000110 FF1011E2 ANDS R1,R1,#0xFF ;; Zero extend
\ 00000114 0600B0E1 MOVS R0,R6
\ 00000118 ........ BL TWI_StartWrite
\ 0000011C 08D08DE2 ADD SP,SP,#+8 ;; stack cleaning
285 TWI_EnableIt(pTwi, AT91C_TWI_TXRDY);
\ 00000120 0410A0E3 MOV R1,#+4
\ 00000124 0600B0E1 MOVS R0,R6
\ 00000128 ........ BL TWI_EnableIt
\ 0000012C 1B0000EA B ??TWID_Write_12
286 }
287 // Synchronous transfer
288 else {
289
290 // Start write
291 TWI_StartWrite(pTwi, address, iaddress, isize, *pData++);
\ ??TWID_Write_11:
\ 00000130 0000D4E5 LDRB R0,[R4, #+0]
\ 00000134 08002DE5 STR R0,[SP, #-8]!
\ 00000138 0830B0E1 MOVS R3,R8
\ 0000013C FF3013E2 ANDS R3,R3,#0xFF ;; Zero extend
\ 00000140 0920B0E1 MOVS R2,R9
\ 00000144 0A10B0E1 MOVS R1,R10
\ 00000148 FF1011E2 ANDS R1,R1,#0xFF ;; Zero extend
\ 0000014C 0600B0E1 MOVS R0,R6
\ 00000150 ........ BL TWI_StartWrite
\ 00000154 08D08DE2 ADD SP,SP,#+8 ;; stack cleaning
\ 00000158 014094E2 ADDS R4,R4,#+1
292 num--;
\ 0000015C 015055E2 SUBS R5,R5,#+1
293
294 // Send all bytes
295 while (num > 0) {
\ ??TWID_Write_13:
\ 00000160 000055E3 CMP R5,#+0
\ 00000164 0900000A BEQ ??TWID_Write_14
296
297 // Wait before sending the next byte
298 while (!TWI_ByteSent(pTwi));
\ ??TWID_Write_15:
\ 00000168 0600B0E1 MOVS R0,R6
\ 0000016C ........ BL TWI_ByteSent
\ 00000170 000050E3 CMP R0,#+0
\ 00000174 FBFFFF0A BEQ ??TWID_Write_15
299 TWI_WriteByte(pTwi, *pData++);
\ 00000178 0010D4E5 LDRB R1,[R4, #+0]
\ 0000017C 0600B0E1 MOVS R0,R6
\ 00000180 ........ BL TWI_WriteByte
\ 00000184 014094E2 ADDS R4,R4,#+1
300 num--;
\ 00000188 015055E2 SUBS R5,R5,#+1
\ 0000018C F3FFFFEA B ??TWID_Write_13
301 }
302
303 // Wait for actual end of transfer
304 while (!TWI_TransferComplete(pTwi));
\ ??TWID_Write_14:
\ 00000190 0600B0E1 MOVS R0,R6
\ 00000194 ........ BL TWI_TransferComplete
\ 00000198 000050E3 CMP R0,#+0
\ 0000019C FBFFFF0A BEQ ??TWID_Write_14
305 }
306
307 return 0;
\ ??TWID_Write_12:
\ 000001A0 0000A0E3 MOV R0,#+0
\ ??TWID_Write_10:
\ 000001A4 F28FBDE8 POP {R1,R4-R11,PC} ;; return
\ ??TWID_Write_9:
\ 000001A8 ........ DC32 `?<Constant "-E- TWI_Write: A tran...">`
308 }
\ In section .text, align 4, keep-with-next
\ ??DataTable20:
\ 00000000 ........ DC32 `?<Constant "E:\\\\IAR\\\\at91lib\\\\driver...">`
\ In section .text, align 4, keep-with-next
\ ??DataTable21:
\ 00000000 ........ DC32 `?<Constant "Sanity check failed a...">`
\ In section .rodata, align 4
\ `?<Constant "Sanity check failed a...">`:
\ 00000000 53616E697479 DC8 "Sanity check failed at %s:%d\012\015"
\ 20636865636B
\ 206661696C65
\ 642061742025
\ 733A25640A0D
\ 00
\ 0000001F 00 DC8 0
\ In section .rodata, align 4
\ `?<Constant "E:\\\\IAR\\\\at91lib\\\\driver...">`:
\ 00000000 453A5C494152 DC8 "E:\\IAR\\at91lib\\drivers\\twi\\twid.c"
\ 5C617439316C
\ 69625C647269
\ 766572735C74
\ 77695C747769
\ 642E6300
\ 00000022 0000 DC8 0, 0
\ In section .rodata, align 4
\ `?<Constant "-E- TWID_Read: A tran...">`:
\ 00000000 2D452D205457 DC8 "-E- TWID_Read: A transfer is already pending\012\015"
\ 49445F526561
\ 643A20412074
\ 72616E736665
\ 722069732061
\ 6C7265616479
\ 2070656E6469
\ 6E670A0D00
\ 0000002F 00 DC8 0
\ In section .rodata, align 4
\ `?<Constant "-E- TWI_Write: A tran...">`:
\ 00000000 2D452D205457 DC8 "-E- TWI_Write: A transfer is already pending\012\015"
\ 495F57726974
\ 653A20412074
\ 72616E736665
\ 722069732061
\ 6C7265616479
\ 2070656E6469
\ 6E670A0D00
\ 0000002F 00 DC8 0
309
Maximum stack usage in bytes:
Function .cstack
-------- -------
TWID_Handler 0
TWID_Initialize 0
TWID_Read 0
TWID_Write 8
Section sizes:
Function/Label Bytes
-------------- -----
TWID_Initialize 84
TWID_Handler 356
TWID_Read 420
TWID_Write 428
??DataTable20 4
??DataTable21 4
?<Constant "Sanity check failed a..."> 32
?<Constant "E:\\IAR\\at91lib\\driver..."> 36
?<Constant "-E- TWID_Read: A tran..."> 48
?<Constant "-E- TWI_Write: A tran..."> 48
164 bytes in section .rodata
1 296 bytes in section .text
1 296 bytes of CODE memory
164 bytes of CONST memory
Errors: none
Warnings: none
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -