📄 cstartup_sam7.lst
字号:
814: }
00000006 4770 BX R14
00000008 ENDP ; 'AT91F_PIO_GetInterruptStatus?T'
*** CODE SEGMENT '?PR?AT91F_PIO_GetMultiDriverStatus?T?Cstartup_SAM7':
864: __inline unsigned int AT91F_PIO_GetMultiDriverStatus( // \return PIO Multi Driver Status
00000000 1C01 MOV R1,R0 ; pPio
00000002 ---- Variable 'pPio' assigned to Register 'R1' ----
867: return pPio->PIO_MDSR;
00000002 1C08 MOV R0,R1 ; pPio
00000004 6D80 LDR R0,[R0,#0x58]
868: }
00000006 4770 BX R14
ARM COMPILER V2.42, Cstartup_SAM7 14/02/07 10:22:56 PAGE 13
00000008 ENDP ; 'AT91F_PIO_GetMultiDriverStatus?T'
*** CODE SEGMENT '?PR?AT91F_PIO_Get_AB_RegisterStatus?T?Cstartup_SAM7':
907: __inline unsigned int AT91F_PIO_Get_AB_RegisterStatus( // \return PIO AB Register Status
00000000 1C01 MOV R1,R0 ; pPio
00000002 ---- Variable 'pPio' assigned to Register 'R1' ----
910: return pPio->PIO_ABSR;
00000002 1C08 MOV R0,R1 ; pPio
00000004 6F80 LDR R0,[R0,#0x78]
911: }
00000006 4770 BX R14
00000008 ENDP ; 'AT91F_PIO_Get_AB_RegisterStatus?T'
*** CODE SEGMENT '?PR?AT91F_PIO_GetOutputWriteStatus?T?Cstartup_SAM7':
950: __inline unsigned int AT91F_PIO_GetOutputWriteStatus( // \return PIO Output Write Status
00000000 1C01 MOV R1,R0 ; pPio
00000002 ---- Variable 'pPio' assigned to Register 'R1' ----
953: return pPio->PIO_OWSR;
00000002 1C08 MOV R0,R1 ; pPio
00000004 30A8 ADD R0,#0xA8
00000006 6800 LDR R0,[R0,#0x0]
954: }
00000008 4770 BX R14
0000000A ENDP ; 'AT91F_PIO_GetOutputWriteStatus?T'
*** CODE SEGMENT '?PR?AT91F_PIO_GetCfgPullup?T?Cstartup_SAM7':
971: __inline unsigned int AT91F_PIO_GetCfgPullup( // \return PIO Configuration Pullup
00000000 1C01 MOV R1,R0 ; pPio
00000002 ---- Variable 'pPio' assigned to Register 'R1' ----
974: return pPio->PIO_PPUSR;
00000002 1C08 MOV R0,R1 ; pPio
00000004 6E80 LDR R0,[R0,#0x68]
975: }
00000006 4770 BX R14
00000008 ENDP ; 'AT91F_PIO_GetCfgPullup?T'
*** CODE SEGMENT '?PR?AT91F_PMC_EnablePeriphClock?T?Cstartup_SAM7':
1041: __inline void AT91F_PMC_EnablePeriphClock (
00000000 1C0B MOV R3,R1 ; periphIds
00000002 ---- Variable 'periphIds' assigned to Register 'R3' ----
00000002 1C02 MOV R2,R0 ; pPMC
00000004 ---- Variable 'pPMC' assigned to Register 'R2' ----
1045: pPMC->PMC_PCER = periphIds;
00000004 1C19 MOV R1,R3 ; periphIds
00000006 1C10 MOV R0,R2 ; pPMC
00000008 6101 STR R1,[R0,#0x10]
1046: }
0000000A 4770 BX R14
0000000C ENDP ; 'AT91F_PMC_EnablePeriphClock?T'
*** CODE SEGMENT '?PR?AT91F_CKGR_GetMainClock?T?Cstartup_SAM7':
1137: __inline unsigned int AT91F_CKGR_GetMainClock (
00000000 1C0A MOV R2,R1 ; slowClock
00000002 ---- Variable 'slowClock' assigned to Register 'R2' ----
00000002 1C01 MOV R1,R0 ; pCKGR
00000004 ---- Variable 'pCKGR' assigned to Register 'R1' ----
1141: return ((pCKGR->CKGR_MCFR & AT91C_CKGR_MAINF) * slowClock) >> 4;
00000004 1C08 MOV R0,R1 ; pCKGR
00000006 6840 LDR R0,[R0,#0x4]
00000008 4800 LDR R1,=0xFFFF
0000000A 4008 AND R0,R1
0000000C 1C11 MOV R1,R2 ; slowClock
0000000E 4348 MUL R0,R1 ; slowClock
00000010 0900 LSR R0,R0,#0x4
1142: }
00000012 4770 BX R14
00000014 ENDP ; 'AT91F_CKGR_GetMainClock?T'
*** CODE SEGMENT '?PR?AT91F_PMC_GetStatus?T?Cstartup_SAM7':
1244: __inline unsigned int AT91F_PMC_GetStatus( // \return PMC Interrupt Status
00000000 1C01 MOV R1,R0 ; pPMC
00000002 ---- Variable 'pPMC' assigned to Register 'R1' ----
ARM COMPILER V2.42, Cstartup_SAM7 14/02/07 10:22:56 PAGE 14
1247: return pPMC->PMC_SR;
00000002 1C08 MOV R0,R1 ; pPMC
00000004 6E80 LDR R0,[R0,#0x68]
1248: }
00000006 4770 BX R14
00000008 ENDP ; 'AT91F_PMC_GetStatus?T'
*** CODE SEGMENT '?PR?AT91F_PMC_GetInterruptMaskStatus?T?Cstartup_SAM7':
1254: __inline unsigned int AT91F_PMC_GetInterruptMaskStatus( // \return PMC Interrupt Mask Status
00000000 1C01 MOV R1,R0 ; pPMC
00000002 ---- Variable 'pPMC' assigned to Register 'R1' ----
1257: return pPMC->PMC_IMR;
00000002 1C08 MOV R0,R1 ; pPMC
00000004 6EC0 LDR R0,[R0,#0x6C]
1258: }
00000006 4770 BX R14
00000008 ENDP ; 'AT91F_PMC_GetInterruptMaskStatus?T'
*** CODE SEGMENT '?PR?AT91F_MC_EFC_GetModeReg?T?Cstartup_SAM7':
1670: __inline unsigned int AT91F_MC_EFC_GetModeReg(
00000000 1C01 MOV R1,R0 ; pMC
00000002 ---- Variable 'pMC' assigned to Register 'R1' ----
1673: return pMC->MC_FMR;
00000002 1C08 MOV R0,R1 ; pMC
00000004 6E00 LDR R0,[R0,#0x60]
1674: }
00000006 4770 BX R14
00000008 ENDP ; 'AT91F_MC_EFC_GetModeReg?T'
*** CODE SEGMENT '?PR?AT91F_MC_EFC_GetStatus?T?Cstartup_SAM7':
1701: __inline unsigned int AT91F_MC_EFC_GetStatus(
00000000 1C01 MOV R1,R0 ; pMC
00000002 ---- Variable 'pMC' assigned to Register 'R1' ----
1704: return pMC->MC_FSR;
00000002 1C08 MOV R0,R1 ; pMC
00000004 6E80 LDR R0,[R0,#0x68]
1705: }
00000006 4770 BX R14
00000008 ENDP ; 'AT91F_MC_EFC_GetStatus?T'
*** CODE SEGMENT '?PR?AT91F_SPI_GetInterruptMaskStatus?T?Cstartup_SAM7':
1922: __inline unsigned int AT91F_SPI_GetInterruptMaskStatus( // \return SPI Interrupt Mask Status
00000000 1C01 MOV R1,R0 ; pSpi
00000002 ---- Variable 'pSpi' assigned to Register 'R1' ----
1925: return pSpi->SPI_IMR;
00000002 1C08 MOV R0,R1 ; pSpi
00000004 69C0 LDR R0,[R0,#0x1C]
1926: }
00000006 4770 BX R14
00000008 ENDP ; 'AT91F_SPI_GetInterruptMaskStatus?T'
*** CODE SEGMENT '?PR?AT91F_US_Baudrate?T?Cstartup_SAM7':
1990: __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' ----
1993: {
00000006 ; SCOPE-START
1994: 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' ----
ARM COMPILER V2.42, Cstartup_SAM7 14/02/07 10:22:56 PAGE 15
1995: 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_45 ; T=0x00000036
1996: 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_46 ; T=0x00000042
00000036 L_45:
1998: 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
00000040 1C02 MOV R2,R0 ; baud_value
00000042 L_46:
1999: return baud_value;
00000042 1C10 MOV R0,R2 ; baud_value
00000044 ; SCOPE-END
2000: }
00000044 BC08 POP {R3}
00000046 4718 BX R3
00000048 ENDP ; 'AT91F_US_Baudrate?T'
*** CODE SEGMENT '?PR?AT91F_US_SetBaudrate?T?Cstartup_SAM7':
2006: __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' ----
2012: 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]
2013: }
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?Cstartup_SAM7':
2019: __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' ----
2024: pUSART->US_TTGR = timeguard ;
00000004 1C19 MOV R1,R3 ; timeguard
00000006 1C10 MOV R0,R2 ; pUSART
00000008 6281 STR R1,[R0,#0x28]
2025: }
0000000A 4770 BX R14
0000000C ENDP ; 'AT91F_US_SetTimeguard?T'
*** CODE SEGMENT '?PR?AT91F_SSC_SetBaudrate?T?Cstartup_SAM7':
ARM COMPILER V2.42, Cstartup_SAM7 14/02/07 10:22:56 PAGE 16
2315: __inline void AT91F_SSC_SetBaudrate (
00000000 B530 PUSH {R4-R5,LR}
00000002 ---- Variable 'speed' assigned to Register 'R2' ----
00000002 1C0D MOV R5,R1 ; mainClock
00000004 ---- Variable 'mainClock' assigned to Register 'R5' ----
00000004 1C04 MOV R4,R0 ; pSSC
00000006 ---- Variable 'pSSC' assigned to Register 'R4' ----
00000006 ---- Variable 'baud_value' assigned to Register 'R3' ----
2319: {
00000006 ; SCOPE-START
2322: if (speed == 0)
00000006 1C10 MOV R0,R2 ; speed
00000008 2800 CMP R0,#0x0 ; speed
0000000A D101 BNE L_48 ; T=0x00000010
2323: baud_value = 0;
0000000C 2300 MOV R3,#0x0
0000000E E01C B L_49 ; T=0x0000004A
00000010 L_48:
2326: baud_value = (unsigned int) (mainClock * 10)/(2*speed);
00000010 1C11 MOV R1,R2 ; speed
00000012 0049 LSL R1,R1,#0x1 ; speed
00000014 1C28 MOV R0,R5 ; mainClock
00000016 220A MOV R2,#0xA
00000018 4350 MUL R0,R2
0000001A F7FF BL ?C?UDIV?T ; T=0x0001 (1) ; ?C?UDIV?T
0000001C FFF1 BL ?C?UDIV?T ; T=0x0001 (2) ; ?C?UDIV?T
0000001E 1C08 MOV R0,R1
00000020 1C03 MOV R3,R0 ; baud_value
2327: if ((baud_value % 10) >= 5)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -