📄 rccu.lst
字号:
\ 000000C4 ........ LDR R2,??DataTable33 ;; RCCU
\ 000000C8 002092E5 LDR R2,[R2, #+0]
\ 000000CC 002092E5 LDR R2,[R2, #+0]
\ 000000D0 0420D2E3 BICS R2,R2,#+0x4
\ 000000D4 002081E5 STR R2,[R1, #+0]
52 // 关闭 PLL1
53 RCCU->PLL1CR=((RCCU->PLL1CR & ~RCCU_DX_Mask)\
54 |0x00000003) & ~RCCU_FREEN_Mask;
\ 000000D8 ........ LDR R1,??DataTable33 ;; RCCU
\ 000000DC 001091E5 LDR R1,[R1, #+0]
\ 000000E0 ........ LDR R2,??DataTable33 ;; RCCU
\ 000000E4 002092E5 LDR R2,[R2, #+0]
\ 000000E8 182092E5 LDR R2,[R2, #+0x18]
\ 000000EC 8720D2E3 BICS R2,R2,#+0x87
\ 000000F0 032092E3 ORRS R2,R2,#+0x3
\ 000000F4 182081E5 STR R2,[R1, #+0x18]
55 break;}
\ 000000F8 270000EA B ??RCCU_RCLKSourceConfig_4
56 case RCCU_PLL1_Output:{// 置位 CK2_16 位
57 RCCU->CFR = RCCU->CFR | RCCU_CK2_16_Mask;
\ ??RCCU_RCLKSourceConfig_0:
\ 000000FC ........ LDR R1,??DataTable33 ;; RCCU
\ 00000100 001091E5 LDR R1,[R1, #+0]
\ 00000104 ........ LDR R2,??DataTable33 ;; RCCU
\ 00000108 002092E5 LDR R2,[R2, #+0]
\ 0000010C 082092E5 LDR R2,[R2, #+0x8]
\ 00000110 082092E3 ORRS R2,R2,#+0x8
\ 00000114 082081E5 STR R2,[R1, #+0x8]
58 // 等待 PLL1 锁定
59 if (( RCCU->PLL1CR & 0x0007 ) != 7)
\ 00000118 ........ LDR R1,??DataTable33 ;; RCCU
\ 0000011C 001091E5 LDR R1,[R1, #+0]
\ 00000120 181091E5 LDR R1,[R1, #+0x18]
\ 00000124 071011E2 ANDS R1,R1,#+0x7
\ 00000128 070051E3 CMP R1,#+0x7
\ 0000012C 0400000A BEQ ??RCCU_RCLKSourceConfig_5
60 while(!(RCCU->CFR & RCCU_LOCK_Mask));
\ ??RCCU_RCLKSourceConfig_6:
\ 00000130 ........ LDR R1,??DataTable33 ;; RCCU
\ 00000134 001091E5 LDR R1,[R1, #+0]
\ 00000138 081091E5 LDR R1,[R1, #+0x8]
\ 0000013C 020011E3 TST R1,#+0x2
\ 00000140 FAFFFF0A BEQ ??RCCU_RCLKSourceConfig_6
61 // 反选 CKAF
62 RCCU->CCR &= ~RCCU_CKAF_SEL_Mask;
\ ??RCCU_RCLKSourceConfig_5:
\ 00000144 ........ LDR R1,??DataTable33 ;; RCCU
\ 00000148 001091E5 LDR R1,[R1, #+0]
\ 0000014C ........ LDR R2,??DataTable33 ;; RCCU
\ 00000150 002092E5 LDR R2,[R2, #+0]
\ 00000154 002092E5 LDR R2,[R2, #+0]
\ 00000158 0420D2E3 BICS R2,R2,#+0x4
\ 0000015C 002081E5 STR R2,[R1, #+0]
63 // 选中 CSU_CKSEL
64 RCCU->CFR |= RCCU_CSU_CKSEL_Mask;
\ 00000160 ........ LDR R1,??DataTable33 ;; RCCU
\ 00000164 001091E5 LDR R1,[R1, #+0]
\ 00000168 ........ LDR R2,??DataTable33 ;; RCCU
\ 0000016C 002092E5 LDR R2,[R2, #+0]
\ 00000170 082092E5 LDR R2,[R2, #+0x8]
\ 00000174 012092E3 ORRS R2,R2,#+0x1
\ 00000178 082081E5 STR R2,[R1, #+0x8]
65 break;}
\ 0000017C 060000EA B ??RCCU_RCLKSourceConfig_4
66 case RCCU_RTC_CLOCK : {RCCU->CCR |= 0x04;
\ ??RCCU_RCLKSourceConfig_3:
\ 00000180 ........ LDR R1,??DataTable33 ;; RCCU
\ 00000184 001091E5 LDR R1,[R1, #+0]
\ 00000188 ........ LDR R2,??DataTable33 ;; RCCU
\ 0000018C 002092E5 LDR R2,[R2, #+0]
\ 00000190 002092E5 LDR R2,[R2, #+0]
\ 00000194 042092E3 ORRS R2,R2,#+0x4
\ 00000198 002081E5 STR R2,[R1, #+0]
67 break;}
68 }
69 }
\ ??RCCU_RCLKSourceConfig_4:
\ 0000019C 1EFF2FE1 BX LR ;; return
70
71 /*******************************************************************************
72 * 说明:RCCU_RCLKClockSource函数,返回当前 RCLK 源时钟
73 * 参数:无
74 * 返回值: RCCU_PLL1_Output, RCCU_CLOCK2_16, RCCU_CLOCK2, RCCU_RTC_CLOCK
75 *******************************************************************************/
\ In segment CODE, align 4, keep-with-next
76 RCCU_RCLK_Clocks RCCU_RCLKClockSource ( void ) {
77 if ((RCCU->CCR & 0x04)==0x04)
\ RCCU_RCLKClockSource:
\ 00000000 ........ LDR R0,??DataTable33 ;; RCCU
\ 00000004 000090E5 LDR R0,[R0, #+0]
\ 00000008 000090E5 LDR R0,[R0, #+0]
\ 0000000C 040010E3 TST R0,#+0x4
\ 00000010 0100000A BEQ ??RCCU_RCLKClockSource_0
78 return RCCU_RTC_CLOCK;
\ 00000014 0300A0E3 MOV R0,#+0x3
\ 00000018 0E0000EA B ??RCCU_RCLKClockSource_1
79 else if ((RCCU->CFR & RCCU_CK2_16_Mask)==0)
\ ??RCCU_RCLKClockSource_0:
\ 0000001C ........ LDR R0,??DataTable33 ;; RCCU
\ 00000020 000090E5 LDR R0,[R0, #+0]
\ 00000024 080090E5 LDR R0,[R0, #+0x8]
\ 00000028 080010E3 TST R0,#+0x8
\ 0000002C 0100001A BNE ??RCCU_RCLKClockSource_2
80 return RCCU_CLOCK2_16;
\ 00000030 0100A0E3 MOV R0,#+0x1
\ 00000034 070000EA B ??RCCU_RCLKClockSource_1
81 else if (RCCU->CFR & RCCU_CSU_CKSEL_Mask)
\ ??RCCU_RCLKClockSource_2:
\ 00000038 ........ LDR R0,??DataTable33 ;; RCCU
\ 0000003C 000090E5 LDR R0,[R0, #+0]
\ 00000040 080090E5 LDR R0,[R0, #+0x8]
\ 00000044 010010E3 TST R0,#+0x1
\ 00000048 0100000A BEQ ??RCCU_RCLKClockSource_3
82 return RCCU_PLL1_Output;
\ 0000004C 0000A0E3 MOV R0,#+0
\ 00000050 000000EA B ??RCCU_RCLKClockSource_1
83 else
84 return RCCU_CLOCK2;
\ ??RCCU_RCLKClockSource_3:
\ 00000054 0200A0E3 MOV R0,#+0x2
\ ??RCCU_RCLKClockSource_1:
\ 00000058 1EFF2FE1 BX LR ;; return
85 }
86
87 /*******************************************************************************
88 * 说明: RCCU_USBClockSource函数,获得 RCLK 源时钟
89 * 参数:无
90 * 返回值:RCCU_USB_Clocks ( RCCU_PLL2_Output, RCCU_USBCK )
91 *******************************************************************************/
\ In segment CODE, align 4, keep-with-next
92 RCCU_USB_Clocks RCCU_USBClockSource ( void ) {
93 if ((PCU->PLL2CR & RCCU_USBEN_Mask ) >> RCCU_USBEN_Index == 1 )
\ RCCU_USBClockSource:
\ 00000000 ........ LDR R0,??DataTable36 ;; PCU
\ 00000004 000090E5 LDR R0,[R0, #+0]
\ 00000008 BC00D0E1 LDRH R0,[R0, #+0xC]
\ 0000000C 400F10E2 ANDS R0,R0,#+0x100
\ 00000010 4004B0E1 MOVS R0,R0, ASR #+0x8
\ 00000014 010050E3 CMP R0,#+0x1
\ 00000018 0100001A BNE ??RCCU_USBClockSource_0
94 return RCCU_PLL2_Output;
\ 0000001C 0100A0E3 MOV R0,#+0x1
\ 00000020 000000EA B ??RCCU_USBClockSource_1
95 else return RCCU_USBCK;
\ ??RCCU_USBClockSource_0:
\ 00000024 0000A0E3 MOV R0,#+0
\ ??RCCU_USBClockSource_1:
\ 00000028 1EFF2FE1 BX LR ;; return
96 }
97
98 /*******************************************************************************
99 * 说明:RCCU_FrequencyValue函数,校准并返回由参数传递的任意内部 RCCU 时钟频率
100 * 参数:RCCU_Clocks ( RCCU_CLK2, RCCU_RCLK, RCCU_MCLK, RCCU_PCLK, RCCU_FCLK )
101 * 返回值:u32
102 *******************************************************************************/
\ In segment CODE, align 4, keep-with-next
103 u32 RCCU_FrequencyValue ( RCCU_Clocks Internal_Clk ) {
\ RCCU_FrequencyValue:
\ 00000000 F0412DE9 STMDB SP!,{R4-R8,LR} ;; Push
\ 00000004 0040A0E1 MOV R4,R0
104 u32 Tmp;
105 u8 Div = 0;
\ 00000008 0000A0E3 MOV R0,#+0
\ 0000000C 0050A0E1 MOV R5,R0
106 u8 Mul = 0;
\ 00000010 0000A0E3 MOV R0,#+0
\ 00000014 0060A0E1 MOV R6,R0
107 RCCU_RCLK_Clocks CurrentRCLK;
108 Tmp = ( RCCU_Div2Status() == SET )? RCCU_Main_Osc / 2 : RCCU_Main_Osc;
\ 00000018 ........ _BLF RCCU_Div2Status,RCCU_Div2Status??rA
\ 0000001C 010050E3 CMP R0,#+0x1
\ 00000020 0200001A BNE ??RCCU_FrequencyValue_0
\ 00000024 7A89A0E3 MOV R8,#+0x1E8000
\ 00000028 488E88E3 ORR R8,R8,#+0x480
\ 0000002C 010000EA B ??RCCU_FrequencyValue_1
\ ??RCCU_FrequencyValue_0:
\ 00000030 F489A0E3 MOV R8,#+0x3D0000
\ 00000034 908E88E3 ORR R8,R8,#+0x900
109 if ( Internal_Clk == RCCU_CLK2 ) {
\ ??RCCU_FrequencyValue_1:
\ 00000038 000054E3 CMP R4,#+0
\ 0000003C 0400001A BNE ??RCCU_FrequencyValue_2
110 Div = 1;
\ 00000040 0100A0E3 MOV R0,#+0x1
\ 00000044 0050A0E1 MOV R5,R0
111 Mul = 1;
\ 00000048 0100A0E3 MOV R0,#+0x1
\ 0000004C 0060A0E1 MOV R6,R0
\ 00000050 3E0000EA B ??RCCU_FrequencyValue_3
112 }
113 else {
114 CurrentRCLK = RCCU_RCLKClockSource ();
\ ??RCCU_FrequencyValue_2:
\ 00000054 ........ BL RCCU_RCLKClockSource
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -