?? twi.lst
字號:
415 // 如果發送完一個字節后沒收到應答信號,則表明有一次傳輸錯誤
416 if ((status & ERROR) == ERROR)
\ 00000074 400F14E3 TST R4,#0x100
\ 00000078 F8FFFF0A BEQ ??TWI_Write_2
417 error++;
\ 0000007C 010090E2 ADDS R0,R0,#+1
\ 00000080 F6FFFFEA B ??TWI_Write_2
418 }
419
420 // 發送下一個字節
421 pTwi->TWI_THR = *(data2send++);
\ ??TWI_Write_3:
\ 00000084 0060D3E5 LDRB R6,[R3, #+0]
\ 00000088 34608CE5 STR R6,[R12, #+52]
\ 0000008C 013093E2 ADDS R3,R3,#+1
\ 00000090 EEFFFFEA B ??TWI_Write_0
422 //delay_ms();
423 }
424
425 // 發送停止位
426 pTwi->TWI_CR = AT91C_TWI_STOP;
\ ??TWI_Write_1:
\ 00000094 0260A0E3 MOV R6,#+2
\ 00000098 00608CE5 STR R6,[R12, #+0]
427
428 status = pTwi->TWI_SR;
\ 0000009C 20609CE5 LDR R6,[R12, #+32]
\ 000000A0 0640B0E1 MOVS R4,R6
429 if ((status & ERROR) == ERROR)
\ 000000A4 400F14E3 TST R4,#0x100
\ 000000A8 0000000A BEQ ??TWI_Write_4
430 error++;
\ 000000AC 010090E2 ADDS R0,R0,#+1
431
432 // 等待數據發送完畢
433 while (!(pTwi->TWI_SR & AT91C_TWI_TXCOMP))
\ ??TWI_Write_4:
\ 000000B0 20609CE5 LDR R6,[R12, #+32]
\ 000000B4 010016E3 TST R6,#0x1
\ 000000B8 0500001A BNE ??TWI_Write_5
434 {
435 status = pTwi->TWI_SR;
\ 000000BC 20609CE5 LDR R6,[R12, #+32]
\ 000000C0 0640B0E1 MOVS R4,R6
436 if ((status & ERROR) == ERROR)
\ 000000C4 400F14E3 TST R4,#0x100
\ 000000C8 F8FFFF0A BEQ ??TWI_Write_4
437 error++;
\ 000000CC 010090E2 ADDS R0,R0,#+1
\ 000000D0 F6FFFFEA B ??TWI_Write_4
438 }
439 return error;
\ ??TWI_Write_5:
\ 000000D4 7080BDE8 POP {R4-R6,PC} ;; return
440 }
441
442
443 //*============================================================================
444 //* 函數名稱:TWI_Read
445 //* 函數功能:從從設備中讀取 size 字節數據
446 //* 入口參數:pTwi : 指向TWI結構的首地址-----設為AT91C_BASE_TWI
447 //* slvAddr : 從設備地址
448 //* address : 從設備內部地址(要讀取數據的位置)
449 //* *data : 要讀取數據的起始地址
450 //* size : 要讀取數據的長度
451 //* 返回值 :0 : 讀正常
452 //* 非0:讀過程發生錯誤
453 //*============================================================================
\ In section .text, align 4, keep-with-next
454 int TWI_Read(const AT91PS_TWI pTwi ,char slvAddr, int address, char *data, int size)
455 {
\ TWI_Read:
\ 00000000 70402DE9 PUSH {R4-R6,LR}
\ 00000004 00C0B0E1 MOVS R12,R0
\ 00000008 10509DE5 LDR R5,[SP, #+16]
456 unsigned int status,SLV_ADDR,error;
457
458 SLV_ADDR = slvAddr << 16;
\ 0000000C 0160B0E1 MOVS R6,R1
\ 00000010 FF6016E2 ANDS R6,R6,#0xFF ;; Zero extend
\ 00000014 0668B0E1 LSLS R6,R6,#+16
\ 00000018 0640B0E1 MOVS R4,R6
459 // 設置 TWI 為主接收模式,內部地址為 1 字節
460 pTwi->TWI_MMR = SLV_ADDR | AT91C_TWI_IADRSZ_1_BYTE | AT91C_TWI_MREAD;
\ 0000001C 446D94E3 ORRS R6,R4,#0x1100
\ 00000020 04608CE5 STR R6,[R12, #+4]
461
462 // 裝載從設備地址
463 pTwi->TWI_IADR = address;
\ 00000024 0C208CE5 STR R2,[R12, #+12]
464
465 // 發送起始位
466 pTwi->TWI_CR = AT91C_TWI_START;
\ 00000028 0160A0E3 MOV R6,#+1
\ 0000002C 00608CE5 STR R6,[R12, #+0]
467
468 status = pTwi->TWI_SR;
\ 00000030 20609CE5 LDR R6,[R12, #+32]
\ 00000034 06E0B0E1 MOVS LR,R6
469
470 while (size-- >1)
\ ??TWI_Read_0:
\ 00000038 0560B0E1 MOVS R6,R5
\ 0000003C 015056E2 SUBS R5,R6,#+1
\ 00000040 020056E3 CMP R6,#+2
\ 00000044 0C0000BA BLT ??TWI_Read_1
471 {
472 // 等待接收保存寄存器滿
473 while (!(pTwi->TWI_SR & AT91C_TWI_RXRDY))
\ ??TWI_Read_2:
\ 00000048 20609CE5 LDR R6,[R12, #+32]
\ 0000004C 020016E3 TST R6,#0x2
\ 00000050 0500001A BNE ??TWI_Read_3
474 {
475 // 讀取狀態寄存器
476 status = pTwi->TWI_SR;
\ 00000054 20609CE5 LDR R6,[R12, #+32]
\ 00000058 06E0B0E1 MOVS LR,R6
477 // 如果發送完一個字節后沒收到應答信號,則表明有一次傳輸錯誤
478 if ((status & ERROR) == ERROR)
\ 0000005C 400F1EE3 TST LR,#0x100
\ 00000060 F8FFFF0A BEQ ??TWI_Read_2
479 error++;
\ 00000064 010090E2 ADDS R0,R0,#+1
\ 00000068 F6FFFFEA B ??TWI_Read_2
480 }
481
482 // 接收數據
483 *(data++) = pTwi->TWI_RHR;
\ ??TWI_Read_3:
\ 0000006C 30609CE5 LDR R6,[R12, #+48]
\ 00000070 0060C3E5 STRB R6,[R3, #+0]
\ 00000074 013093E2 ADDS R3,R3,#+1
\ 00000078 EEFFFFEA B ??TWI_Read_0
484 }
485
486 // 發送停止位
487 pTwi->TWI_CR = AT91C_TWI_STOP;
\ ??TWI_Read_1:
\ 0000007C 0260A0E3 MOV R6,#+2
\ 00000080 00608CE5 STR R6,[R12, #+0]
488
489 status = pTwi->TWI_SR;
\ 00000084 20609CE5 LDR R6,[R12, #+32]
\ 00000088 06E0B0E1 MOVS LR,R6
490 if ((status & ERROR) == ERROR)
\ 0000008C 400F1EE3 TST LR,#0x100
\ 00000090 0000000A BEQ ??TWI_Read_4
491 error++;
\ 00000094 010090E2 ADDS R0,R0,#+1
492
493 // 等待數據傳輸完畢
494 while (!(pTwi->TWI_SR & AT91C_TWI_TXCOMP))
\ ??TWI_Read_4:
\ 00000098 20609CE5 LDR R6,[R12, #+32]
\ 0000009C 010016E3 TST R6,#0x1
\ 000000A0 0500001A BNE ??TWI_Read_5
495 {
496 status = pTwi->TWI_SR;
\ 000000A4 20609CE5 LDR R6,[R12, #+32]
\ 000000A8 06E0B0E1 MOVS LR,R6
497 if ((status & ERROR) == ERROR)
\ 000000AC 400F1EE3 TST LR,#0x100
\ 000000B0 F8FFFF0A BEQ ??TWI_Read_4
498 error++;
\ 000000B4 010090E2 ADDS R0,R0,#+1
\ 000000B8 F6FFFFEA B ??TWI_Read_4
499 }
500
501 // 接收最后一字節
502 *data = pTwi->TWI_RHR;
\ ??TWI_Read_5:
\ 000000BC 30609CE5 LDR R6,[R12, #+48]
\ 000000C0 0060C3E5 STRB R6,[R3, #+0]
503
504 return error;
\ 000000C4 7080BDE8 POP {R4-R6,PC} ;; return
505 }
\ In section .text, align 4, keep-with-next
\ ??DataTable34:
\ 00000000 ........ DC32 `?<Constant "E:\\\\IAR\\\\at91lib\\\\periph...">`
\ In section .text, align 4, keep-with-next
\ ??DataTable35:
\ 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\\\\periph...">`:
\ 00000000 453A5C494152 DC8 "E:\\IAR\\at91lib\\peripherals\\twi\\twi.c"
\ 5C617439316C
\ 69625C706572
\ 697068657261
\ 6C735C747769
\ 5C7477692E63
\ 00
\ 00000025 000000 DC8 0, 0, 0
\ In section .rodata, align 4
\ `?<Constant "-F- Cannot find valid...">`:
\ 00000000 2D462D204361 DC8 "-F- Cannot find valid TWI clock parameters\015\012"
\ 6E6E6F742066
\ 696E64207661
\ 6C6964205457
\ 4920636C6F63
\ 6B2070617261
\ 6D6574657273
\ 0D0A00
\ 0000002D 000000 DC8 0, 0, 0
Maximum stack usage in bytes:
Function .cstack
-------- -------
AT91F_SetTwiClock 0
AT91F_TWI_Configure 0
TWI_ByteReceived 0
TWI_ByteSent 0
TWI_CfgPIO 0
TWI_Cl
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -