📄 sys.txt
字号:
00019e 4608 MOV r0,r1
0001a0 6840 LDR r0,[r0,#4]
0001a2 f42000fe BIC r0,r0,#0x7f0000
0001a6 6048 STR r0,[r1,#4]
;;;111 RCC->CIR = 0x00000000; //关闭所有中断
0001a8 2000 MOVS r0,#0
0001aa 6088 STR r0,[r1,#8]
;;;112 //配置向量表
;;;113 #ifdef VECT_TAB_RAM
;;;114 MY_NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0);
;;;115 #else
;;;116 MY_NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0);
0001ac 2100 MOVS r1,#0
0001ae f04f6000 MOV r0,#0x8000000
0001b2 f7fffffe BL MY_NVIC_SetVectorTable
;;;117 #endif
;;;118 }
0001b6 bd00 POP {pc}
;;;119 //THUMB指令不支持汇编内联
ENDP
Sys_Standby PROC
;;;129 //091202
;;;130 void Sys_Standby(void)
0001b8 b510 PUSH {r4,lr}
;;;131 {
;;;132 SCB->SCR|=1<<2;//使能SLEEPDEEP位 (SYS->CTRL)
0001ba 484c LDR r0,|L1.748|
0001bc 6800 LDR r0,[r0,#0]
0001be f0400004 ORR r0,r0,#4
0001c2 f04f21e0 MOV r1,#0xe000e000
0001c6 f8c10d10 STR r0,[r1,#0xd10]
;;;133 RCC->APB1ENR|=1<<28; //使能电源时钟
0001ca 4840 LDR r0,|L1.716|
0001cc 69c0 LDR r0,[r0,#0x1c]
0001ce f0405080 ORR r0,r0,#0x10000000
0001d2 493e LDR r1,|L1.716|
0001d4 61c8 STR r0,[r1,#0x1c]
;;;134 PWR->CSR|=1<<8; //设置WKUP用于唤醒
0001d6 4846 LDR r0,|L1.752|
0001d8 6840 LDR r0,[r0,#4]
0001da f4407080 ORR r0,r0,#0x100
0001de 4944 LDR r1,|L1.752|
0001e0 6048 STR r0,[r1,#4]
;;;135 PWR->CR|=1<<2; //清除Wake-up 标志
0001e2 4608 MOV r0,r1
0001e4 6800 LDR r0,[r0,#0]
0001e6 f0400004 ORR r0,r0,#4
0001ea 6008 STR r0,[r1,#0]
;;;136 PWR->CR|=1<<1; //PDDS置位
0001ec 4608 MOV r0,r1
0001ee 6800 LDR r0,[r0,#0]
0001f0 f0400002 ORR r0,r0,#2
0001f4 6008 STR r0,[r1,#0]
;;;137 WFI_SET(); //执行WFI指令
0001f6 f7fffffe BL WFI_SET
;;;138 }
0001fa bd10 POP {r4,pc}
;;;139 //后备寄存器写入操作
ENDP
Sys_Soft_Reset PROC
;;;185 //091209
;;;186 void Sys_Soft_Reset(void)
0001fc 482f LDR r0,|L1.700|
;;;187 {
;;;188 SCB->AIRCR =0X05FA0000|(u32)0x04;
0001fe 1d00 ADDS r0,r0,#4
000200 492d LDR r1,|L1.696|
000202 6008 STR r0,[r1,#0]
;;;189 }
000204 4770 BX lr
;;;190
ENDP
JTAG_Set PROC
;;;194 //100818
;;;195 void JTAG_Set(u8 mode)
000206 4601 MOV r1,r0
;;;196 {
;;;197 u32 temp;
;;;198 temp=mode;
;;;199 temp<<=25;
000208 0649 LSLS r1,r1,#25
;;;200 RCC->APB2ENR|=1<<0; //开启辅助时钟
00020a 4a30 LDR r2,|L1.716|
00020c 6992 LDR r2,[r2,#0x18]
00020e f0420201 ORR r2,r2,#1
000212 4b2e LDR r3,|L1.716|
000214 619a STR r2,[r3,#0x18]
;;;201 AFIO->MAPR&=0XF8FFFFFF; //清除MAPR的[26:24]
000216 4a30 LDR r2,|L1.728|
000218 6852 LDR r2,[r2,#4]
00021a f02262e0 BIC r2,r2,#0x7000000
00021e 4b2e LDR r3,|L1.728|
000220 605a STR r2,[r3,#4]
;;;202 AFIO->MAPR|=temp; //设置jtag模式
000222 461a MOV r2,r3
000224 6852 LDR r2,[r2,#4]
000226 430a ORRS r2,r2,r1
000228 605a STR r2,[r3,#4]
;;;203 }
00022a 4770 BX lr
;;;204 //系统时钟初始化函数
ENDP
Stm32_Clock_Init PROC
;;;207 //091209
;;;208 void Stm32_Clock_Init(u8 PLL)
00022c b530 PUSH {r4,r5,lr}
;;;209 {
00022e 4604 MOV r4,r0
;;;210 unsigned char temp=0;
000230 2500 MOVS r5,#0
;;;211 MYRCC_DeInit(); //复位并配置向量表
000232 f7fffffe BL MYRCC_DeInit
;;;212 RCC->CR|=0x00010000; //外部高速时钟使能HSEON
000236 4825 LDR r0,|L1.716|
000238 6800 LDR r0,[r0,#0]
00023a f4403080 ORR r0,r0,#0x10000
00023e 4923 LDR r1,|L1.716|
000240 6008 STR r0,[r1,#0]
;;;213 while(!(RCC->CR>>17));//等待外部时钟就绪
000242 bf00 NOP
|L1.580|
000244 4821 LDR r0,|L1.716|
000246 6800 LDR r0,[r0,#0]
000248 0c40 LSRS r0,r0,#17
00024a d0fb BEQ |L1.580|
;;;214 RCC->CFGR=0X00000400; //APB1=DIV2;APB2=DIV1;AHB=DIV1;
00024c f44f6080 MOV r0,#0x400
000250 491e LDR r1,|L1.716|
000252 6048 STR r0,[r1,#4]
;;;215 PLL-=2;//抵消2个单位
000254 1ea0 SUBS r0,r4,#2
000256 b2c4 UXTB r4,r0
;;;216 RCC->CFGR|=PLL<<18; //设置PLL值 2~16
000258 4608 MOV r0,r1
00025a 6840 LDR r0,[r0,#4]
00025c ea404084 ORR r0,r0,r4,LSL #18
000260 6048 STR r0,[r1,#4]
;;;217 RCC->CFGR|=1<<16; //PLLSRC ON
000262 4608 MOV r0,r1
000264 6840 LDR r0,[r0,#4]
000266 f4403080 ORR r0,r0,#0x10000
00026a 6048 STR r0,[r1,#4]
;;;218 FLASH->ACR|=0x32; //FLASH 2个延时周期
00026c 4821 LDR r0,|L1.756|
00026e 6800 LDR r0,[r0,#0]
000270 f0400032 ORR r0,r0,#0x32
000274 491f LDR r1,|L1.756|
000276 6008 STR r0,[r1,#0]
;;;219
;;;220 RCC->CR|=0x01000000; //PLLON
000278 4814 LDR r0,|L1.716|
00027a 6800 LDR r0,[r0,#0]
00027c f0407080 ORR r0,r0,#0x1000000
000280 4912 LDR r1,|L1.716|
000282 6008 STR r0,[r1,#0]
;;;221 while(!(RCC->CR>>25));//等待PLL锁定
000284 bf00 NOP
|L1.646|
000286 4811 LDR r0,|L1.716|
000288 6800 LDR r0,[r0,#0]
00028a 0e40 LSRS r0,r0,#25
00028c d0fb BEQ |L1.646|
;;;222 RCC->CFGR|=0x00000002;//PLL作为系统时钟
00028e 480f LDR r0,|L1.716|
000290 6840 LDR r0,[r0,#4]
000292 f0400002 ORR r0,r0,#2
000296 490d LDR r1,|L1.716|
000298 6048 STR r0,[r1,#4]
;;;223 while(temp!=0x02) //等待PLL作为系统时钟设置成功
00029a e005 B |L1.680|
|L1.668|
;;;224 {
;;;225 temp=RCC->CFGR>>2;
00029c 480b LDR r0,|L1.716|
00029e 6840 LDR r0,[r0,#4]
0002a0 f3c00587 UBFX r5,r0,#2,#8
;;;226 temp&=0x03;
0002a4 f0050503 AND r5,r5,#3
|L1.680|
0002a8 2d02 CMP r5,#2 ;223
0002aa d1f7 BNE |L1.668|
;;;227 }
;;;228 }
0002ac bd30 POP {r4,r5,pc}
;;;229
ENDP
0002ae 0000 DCW 0x0000
|L1.688|
DCD 0x1fffff80
|L1.692|
DCD 0xe000ed08
|L1.696|
DCD 0xe000ed0c
|L1.700|
DCD 0x05fa0000
|L1.704|
DCD 0xe000e100
|L1.708|
DCD 0xe000e104
|L1.712|
DCD 0xe000e400
|L1.716|
DCD 0x40021000
|L1.720|
DCD 0x40010008
|L1.724|
DCD 0x40010400
|L1.728|
DCD 0x40010000
|L1.732|
DCD 0x4001040c
|L1.736|
DCD 0x40010408
|L1.740|
DCD 0xf8ff0000
|L1.744|
DCD 0xfef6ffff
|L1.748|
DCD 0xe000ed10
|L1.752|
DCD 0x40007000
|L1.756|
DCD 0x40022000
;*** Start embedded assembler ***
#line 1 "SYSTEM\\sys\\sys.c"
AREA ||.emb_text||, CODE, READONLY
THUMB
EXPORT |WFI_SET|
#line 123
|WFI_SET| PROC
#line 124
WFI
ENDP
;*** End embedded assembler ***
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -