📄 lib_twi.lst
字号:
0000000E 2104 MOV R1,#0x4
00000010 1C10 MOV R0,R2 ; pTWI
00000012 6001 STR R1,[R0,#0x0] ; pTWI
2117: }
00000014 4770 BX R14
00000016 ENDP ; 'AT91F_TWI_Configure?T'
*** CODE SEGMENT '?PR?AT91F_TWI_GetInterruptMaskStatus?T?lib_twi':
2123: __inline unsigned int AT91F_TWI_GetInterruptMaskStatus( // \return TWI Interrupt Mask Status
00000000 1C01 MOV R1,R0 ; pTwi
00000002 ---- Variable 'pTwi' assigned to Register 'R1' ----
2126: return pTwi->TWI_IMR;
00000002 1C08 MOV R0,R1 ; pTwi
00000004 6AC0 LDR R0,[R0,#0x2C]
2127: }
00000006 4770 BX R14
00000008 ENDP ; 'AT91F_TWI_GetInterruptMaskStatus?T'
*** CODE SEGMENT '?PR?AT91F_US_Baudrate?T?lib_twi':
2191: __inline unsigned int AT91F_US_Baudrate (
00000000 B500 PUSH {LR}
00000002 1C0B MOV R3,R1 ; baud_rate
00000004 ---- Variable 'baud_rate' assigned to Register 'R3' ----
00000004 1C02 MOV R2,R0 ; main_clock
00000006 ---- Variable 'main_clock' assigned to Register 'R2' ----
2194: {
00000006 ; SCOPE-START
2195: unsigned int baud_value = ((main_clock*10)/(baud_rate * 16));
00000006 1C19 MOV R1,R3 ; baud_rate
00000008 0109 LSL R1,R1,#0x4 ; baud_rate
0000000A 1C10 MOV R0,R2 ; main_clock
0000000C 230A MOV R3,#0xA
0000000E 4358 MUL R0,R3
00000010 F7FF BL ?C?UDIV?T ; T=0x0001 (1) ; ?C?UDIV?T
00000012 FFF6 BL ?C?UDIV?T ; T=0x0001 (2) ; ?C?UDIV?T
00000014 1C08 MOV R0,R1
00000016 1C02 MOV R2,R0 ; baud_value
00000018 ---- Variable 'baud_value' assigned to Register 'R2' ----
2196: if ((baud_value % 10) >= 5)
00000018 1C10 MOV R0,R2 ; baud_value
0000001A 1C19 MOV R1,R3
0000001C F7FF BL ?C?UDIV?T ; T=0x0001 (1) ; ?C?UDIV?T
0000001E FFF0 BL ?C?UDIV?T ; T=0x0001 (2) ; ?C?UDIV?T
00000020 1C01 MOV R1,R0
00000022 2905 CMP R1,#0x5
00000024 D307 BCC L_52 ; T=0x00000036
2197: baud_value = (baud_value / 10) + 1;
00000026 1C10 MOV R0,R2 ; baud_value
00000028 1C19 MOV R1,R3
0000002A F7FF BL ?C?UDIV?T ; T=0x0001 (1) ; ?C?UDIV?T
0000002C FFE9 BL ?C?UDIV?T ; T=0x0001 (2) ; ?C?UDIV?T
0000002E 1C08 MOV R0,R1
00000030 1C02 MOV R2,R0
00000032 3201 ADD R2,#0x1
00000034 E005 B L_53 ; T=0x00000042
00000036 L_52:
2199: baud_value /= 10;
00000036 1C10 MOV R0,R2 ; baud_value
00000038 1C19 MOV R1,R3
0000003A F7FF BL ?C?UDIV?T ; T=0x0001 (1) ; ?C?UDIV?T
0000003C FFE1 BL ?C?UDIV?T ; T=0x0001 (2) ; ?C?UDIV?T
0000003E 1C08 MOV R0,R1
ARM COMPILER V2.53, lib_twi 19/07/06 08:38:07 PAGE 18
00000040 1C02 MOV R2,R0 ; baud_value
00000042 L_53:
2200: return baud_value;
00000042 1C10 MOV R0,R2 ; baud_value
00000044 ; SCOPE-END
2201: }
00000044 BC08 POP {R3}
00000046 4718 BX R3
00000048 ENDP ; 'AT91F_US_Baudrate?T'
*** CODE SEGMENT '?PR?AT91F_US_SetBaudrate?T?lib_twi':
2207: __inline void AT91F_US_SetBaudrate (
00000000 B510 PUSH {R4,LR}
00000002 ---- Variable 'speed' assigned to Register 'R2' ----
00000002 ---- Variable 'mainClock' assigned to Register 'R1' ----
00000002 1C04 MOV R4,R0 ; pUSART
00000004 ---- Variable 'pUSART' assigned to Register 'R4' ----
2213: pUSART->US_BRGR = AT91F_US_Baudrate(mainClock, speed);
00000004 1C08 MOV R0,R1 ; mainClock
00000006 1C11 MOV R1,R2 ; speed
00000008 F7FF BL AT91F_US_Baudrate?T ; T=0x0001 (1)
0000000A FFFA BL AT91F_US_Baudrate?T ; T=0x0001 (2)
0000000C 1C21 MOV R1,R4 ; pUSART
0000000E 6208 STR R0,[R1,#0x20]
2214: }
00000010 BC10 POP {R4}
00000012 BC08 POP {R3}
00000014 4718 BX R3
00000016 ENDP ; 'AT91F_US_SetBaudrate?T'
*** CODE SEGMENT '?PR?AT91F_US_SetTimeguard?T?lib_twi':
2220: __inline void AT91F_US_SetTimeguard (
00000000 1C0B MOV R3,R1 ; timeguard
00000002 ---- Variable 'timeguard' assigned to Register 'R3' ----
00000002 1C02 MOV R2,R0 ; pUSART
00000004 ---- Variable 'pUSART' assigned to Register 'R2' ----
2225: pUSART->US_TTGR = timeguard ;
00000004 1C19 MOV R1,R3 ; timeguard
00000006 1C10 MOV R0,R2 ; pUSART
00000008 6281 STR R1,[R0,#0x28]
2226: }
0000000A 4770 BX R14
0000000C ENDP ; 'AT91F_US_SetTimeguard?T'
*** CODE SEGMENT '?PR?AT91F_UDP_GetInterruptMaskStatus?T?lib_twi':
2660: __inline unsigned int AT91F_UDP_GetInterruptMaskStatus( // \return UDP Interrupt Mask Status
00000000 1C01 MOV R1,R0 ; pUdp
00000002 ---- Variable 'pUdp' assigned to Register 'R1' ----
2663: return pUdp->UDP_IMR;
00000002 1C08 MOV R0,R1 ; pUdp
00000004 6980 LDR R0,[R0,#0x18]
2664: }
00000006 4770 BX R14
00000008 ENDP ; 'AT91F_UDP_GetInterruptMaskStatus?T'
*** CODE SEGMENT '?PR?AT91F_AIC_ConfigureIt?T?lib_twi':
2686: __inline unsigned int AT91F_AIC_ConfigureIt (
00000000 B4F0 PUSH {R4-R7}
00000002 ---- Variable 'src_type' assigned to Register 'R3' ----
00000002 1C17 MOV R7,R2 ; priority
00000004 ---- Variable 'priority' assigned to Register 'R7' ----
00000004 1C0E MOV R6,R1 ; irq_id
00000006 ---- Variable 'irq_id' assigned to Register 'R6' ----
00000006 1C04 MOV R4,R0 ; pAic
00000008 ---- Variable 'pAic' assigned to Register 'R4' ----
00000008 B081 SUB R13,#0x4
2692: {
0000000A ; SCOPE-START
2696: oldHandler = pAic->AIC_SVR[irq_id];
0000000A 1C31 MOV R1,R6 ; irq_id
ARM COMPILER V2.53, lib_twi 19/07/06 08:38:07 PAGE 19
0000000C 0089 LSL R1,R1,#0x2 ; irq_id
0000000E 1C20 MOV R0,R4 ; pAic
00000010 1840 ADD R0,R1 ; pAic
00000012 3080 ADD R0,#0x80
00000014 6800 LDR R0,[R0,#0x0]
00000016 9000 STR R0,[R13,#0x0] ; oldHandler
2698: mask = 0x1 << irq_id ;
00000018 1C30 MOV R0,R6 ; irq_id
0000001A 2501 MOV R5,#0x1
0000001C 4085 LSL R5,R0
0000001E ---- Variable 'mask' assigned to Register 'R5' ----
2700: pAic->AIC_IDCR = mask ;
0000001E 1C29 MOV R1,R5 ; mask
00000020 4A49 LDR R2,=0x124
00000022 1C20 MOV R0,R4 ; pAic
00000024 5081 STR R1,[R0,R2]
2702: pAic->AIC_SVR[irq_id] = (unsigned int) newHandler ;
00000026 9A01 LDR R2,[R13,#0x4] ; newHandler
00000028 1C31 MOV R1,R6 ; irq_id
0000002A 0089 LSL R1,R1,#0x2 ; irq_id
0000002C 1C20 MOV R0,R4 ; pAic
0000002E 1840 ADD R0,R1 ; pAic
00000030 3080 ADD R0,#0x80
00000032 6002 STR R2,[R0,#0x0]
2704: pAic->AIC_SMR[irq_id] = src_type | priority ;
00000034 1C38 MOV R0,R7 ; priority
00000036 1C1A MOV R2,R3 ; src_type
00000038 4302 ORR R2,R0 ; priority
0000003A 1C31 MOV R1,R6 ; irq_id
0000003C 0089 LSL R1,R1,#0x2 ; irq_id
0000003E 1C20 MOV R0,R4 ; pAic
00000040 5042 STR R2,[R0,R1]
2706: pAic->AIC_ICCR = mask ;
00000042 1C29 MOV R1,R5 ; mask
00000044 4A4A LDR R2,=0x128
00000046 1C20 MOV R0,R4 ; pAic
00000048 5081 STR R1,[R0,R2]
2708: return oldHandler;
0000004A 9800 LDR R0,[R13,#0x0] ; oldHandler
0000004C ; SCOPE-END
2709: }
0000004C B001 ADD R13,#0x4
0000004E BCF0 POP {R4-R7}
00000050 4770 BX R14
00000052 ENDP ; 'AT91F_AIC_ConfigureIt?T'
*** CODE SEGMENT '?PR?AT91F_AIC_DisableIt?T?lib_twi':
2727: __inline void AT91F_AIC_DisableIt (
00000000 B410 PUSH {R4}
00000002 ---- Variable 'irq_id' assigned to Register 'R1' ----
00000002 1C03 MOV R3,R0 ; pAic
00000004 ---- Variable 'pAic' assigned to Register 'R3' ----
2730: {
00000004 ; SCOPE-START
2731: unsigned int mask = 0x1 << irq_id;
00000004 1C08 MOV R0,R1 ; irq_id
00000006 2401 MOV R4,#0x1
00000008 4084 LSL R4,R0
0000000A ---- Variable 'mask' assigned to Register 'R4' ----
2733: pAic->AIC_IDCR = mask ;
0000000A 1C21 MOV R1,R4 ; mask
0000000C 4A49 LDR R2,=0x124
0000000E 1C18 MOV R0,R3 ; pAic
00000010 5081 STR R1,[R0,R2]
2735: pAic->AIC_ICCR = mask ;
00000012 1C21 MOV R1,R4 ; mask
00000014 4A4A LDR R2,=0x128
ARM COMPILER V2.53, lib_twi 19/07/06 08:38:07 PAGE 20
00000016 1C18 MOV R0,R3 ; pAic
00000018 5081 STR R1,[R0,R2]
0000001A ; SCOPE-END
2736: }
0000001A BC10 POP {R4}
0000001C 4770 BX R14
0000001E ENDP ; 'AT91F_AIC_DisableIt?T'
*** CODE SEGMENT '?PR?AT91F_AIC_SetExceptionVector?T?lib_twi':
2764: __inline unsigned int AT91F_AIC_SetExceptionVector (
00000000 B410 PUSH {R4}
00000002 1C0C MOV R4,R1 ; Handler
00000004 ---- Variable 'Handler' assigned to Register 'R4' ----
00000004 1C03 MOV R3,R0 ; pVector
00000006 ---- Variable 'pVector' assigned to Register 'R3' ----
2767: {
00000006 ; SCOPE-START
2768: unsigned int oldVector = *pVector;
00000006 1C18 MOV R0,R3 ; pVector
00000008 6802 LDR R2,[R0,#0x0] ; pVector
0000000A ---- Variable 'oldVector' assigned to Register 'R2' ----
2770: if ((unsigned int) Handler == (unsigned int) AT91C_AIC_BRANCH_OPCODE)
0000000A 1C20 MOV R0,R4 ; Handler
0000000C 4800 LDR R1,=0xE51FFF20
0000000E 4288 CMP R0,R1
00000010 D102 BNE L_57 ; T=0x00000018
2771: *pVector = (unsigned int) AT91C_AIC_BRANCH_OPCODE;
00000012 1C18 MOV R0,R3 ; pVector
00000014 6001 STR R1,[R0,#0x0] ; pVector
00000016 E00A B L_58 ; T=0x0000002E
00000018 L_57:
2773: *pVector = (((((unsigned int) Handler) - ((unsigned int) pVector) - 0x8) >> 2) & 0x00FFFFFF) | 0xEA000000;
00000018 1C18 MOV R0,R3 ; pVector
0000001A 1C21 MOV R1,R4 ; Handler
0000001C 1A09 SUB R1,R0
0000001E 3908 SUB R1,#0x8
00000020 0889 LSR R1,R1,#0x2
00000022 4800 LDR R0,=0xFF000000
00000024 4381 BIC R1,R0
00000026 4800 LDR R0,=0xEA000000
00000028 4301 ORR R1,R0
0000002A 1C18 MOV R0,R3 ; pVector
0000002C 6001 STR R1,[R0,#0x0] ; pVector
0000002E L_58:
2775: return oldVector;
0000002E 1C10 MOV R0,R2 ; oldVector
00000030 ; SCOPE-END
2776: }
00000030 BC10 POP {R4}
00000032 4770 BX R14
00000034 ENDP ; 'AT91F_AIC_SetExceptionVector?T'
*** CODE SEGMENT '?PR?AT91F_TWI_CfgPMC?T?lib_twi':
3149: __inline void AT91F_TWI_CfgPMC (void)
00000000 B500 PUSH {LR}
3153: ((unsigned int) 1 << AT91C_ID_TWI));
00000002 4800 LDR R0,=0xFFFFFC00
00000004 4980 LDR R1,=0x200
00000006 F7FF BL AT91F_PMC_EnablePeriphClock?T ; T=0x0001 (1)
00000008 FFFB BL AT91F_PMC_EnablePeriphClock?T ; T=0x0001 (2)
3154: }
0000000A BC08 POP {R3}
0000000C 4718 BX R3
0000000E ENDP ; 'AT91F_TWI_CfgPMC?T'
*** CODE SEGMENT '?PR?AT91F_TWI_CfgPIO?T?lib_twi':
3160: __inline void AT91F_TWI_CfgPIO (void)
00000000 B500 PUSH {LR}
3166: ((unsigned int) AT91C_PA4_TWCK ), // Peripheral A
ARM COMPI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -