📄 main.txt
字号:
;;;203 /*******************************************************************************
ENDP
AREA ||i.Speaker_Timer_Config||, CODE, READONLY, ALIGN=2
Speaker_Timer_Config PROC
;;;344 void Speaker_Timer_Config(void)
;;;345 {
000000 b570 PUSH {r4-r6,lr}
000002 b088 SUB sp,sp,#0x20
;;;346 /* Peripherals InitStructure define */
;;;347 TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
;;;348 TIM_OCInitTypeDef TIM_OCInitStructure;
;;;349 GPIO_InitTypeDef GPIO_InitStructure;
;;;350
;;;351
;;;352 /* Configure PB.08 as alternate function (TIM4_OC3) */
;;;353 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
000004 2018 MOVS r0,#0x18
000006 f88d0003 STRB r0,[sp,#3]
;;;354 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
00000a f44f7080 MOV r0,#0x100
00000e f8ad0000 STRH r0,[sp,#0]
;;;355 GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
000012 2003 MOVS r0,#3
000014 f88d0002 STRB r0,[sp,#2]
;;;356 GPIO_Init(GPIOB, &GPIO_InitStructure);
000018 4669 MOV r1,sp
00001a 4828 LDR r0,|L7.188|
00001c f7fffffe BL GPIO_Init
;;;357
;;;358 /* TIM4 configuration */
;;;359 TIM_TimeBaseStructure.TIM_Prescaler = 0x00; /* TIM4CLK = 72 MHz */
000020 2400 MOVS r4,#0
;;;360 TIM_TimeBaseStructure.TIM_Period = 0xFF; /* PWM frequency : 281.250KHz*/
000022 20ff MOVS r0,#0xff
000024 f8ad0018 STRH r0,[sp,#0x18]
;;;361 TIM_TimeBaseStructure.TIM_ClockDivision = 0x0;
;;;362 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;
;;;363 TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure);
000028 4d25 LDR r5,|L7.192|
00002a f8ad4014 STRH r4,[sp,#0x14] ;359
00002e f8ad401a STRH r4,[sp,#0x1a] ;361
000032 f8ad4016 STRH r4,[sp,#0x16] ;362
000036 a905 ADD r1,sp,#0x14
000038 4628 MOV r0,r5
00003a f7fffffe BL TIM_TimeBaseInit
;;;364 /* TIM4's Channel3 in PWM1 mode */
;;;365 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1;
00003e 2060 MOVS r0,#0x60
000040 f8ad0004 STRH r0,[sp,#4]
;;;366 TIM_OCInitStructure.TIM_OutputState = TIM_Channel_3;
000044 2008 MOVS r0,#8
000046 f8ad0006 STRH r0,[sp,#6]
;;;367 TIM_OCInitStructure.TIM_Pulse = 0x7F; /* Duty cycle: 50%*/
00004a 207f MOVS r0,#0x7f
00004c f8ad000a STRH r0,[sp,#0xa]
;;;368 TIM_OC1Init(TIM4, &TIM_OCInitStructure);
000050 a901 ADD r1,sp,#4
000052 4628 MOV r0,r5
000054 f7fffffe BL TIM_OC1Init
;;;369 TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable);
000058 2108 MOVS r1,#8
00005a 4628 MOV r0,r5
00005c f7fffffe BL TIM_OC3PreloadConfig
;;;370
;;;371 /* TIM2 configuration */
;;;372 TIM_TimeBaseStructure.TIM_Period = TIM2ARRValue;
000060 f2423028 MOV r0,#0x2328
000064 f8ad0018 STRH r0,[sp,#0x18]
;;;373 TIM_TimeBaseStructure.TIM_Prescaler = 0x00; /* TIM2CLK = 72 MHz */
;;;374 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
;;;375 TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Down;
000068 2010 MOVS r0,#0x10
00006a f8ad4014 STRH r4,[sp,#0x14] ;373
00006e f8ad0016 STRH r0,[sp,#0x16]
;;;376 TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
000072 0686 LSLS r6,r0,#26
000074 f8ad401a STRH r4,[sp,#0x1a] ;374
000078 a905 ADD r1,sp,#0x14
00007a 4630 MOV r0,r6
00007c f7fffffe BL TIM_TimeBaseInit
;;;377 /* Output Compare Inactive Mode configuration: Channel1 */
;;;378 TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_Inactive;
000080 2020 MOVS r0,#0x20
000082 f8ad0004 STRH r0,[sp,#4]
;;;379 TIM_OCInitStructure.TIM_OutputState = TIM_Channel_1;
000086 f8ad4006 STRH r4,[sp,#6]
;;;380 TIM_OCInitStructure.TIM_Pulse = 0x0;
00008a f8ad400a STRH r4,[sp,#0xa]
;;;381 TIM_OC1Init(TIM2, &TIM_OCInitStructure);
00008e a901 ADD r1,sp,#4
000090 4630 MOV r0,r6
000092 f7fffffe BL TIM_OC1Init
;;;382 TIM_OC1PreloadConfig(TIM2, TIM_OCPreload_Disable);
000096 2100 MOVS r1,#0
000098 4630 MOV r0,r6
00009a f7fffffe BL TIM_OC1PreloadConfig
;;;383
;;;384 /* Start TIM4 */
;;;385 TIM_Cmd(TIM4, ENABLE);
00009e 2101 MOVS r1,#1
0000a0 4628 MOV r0,r5
0000a2 f7fffffe BL TIM_Cmd
;;;386
;;;387 /* Start TIM2 */
;;;388 TIM_Cmd(TIM2, ENABLE);
0000a6 2101 MOVS r1,#1
0000a8 4630 MOV r0,r6
0000aa f7fffffe BL TIM_Cmd
;;;389
;;;390 /* Enable TIM2 update interrupt */
;;;391 TIM_ITConfig(TIM2, TIM_IT_Update, ENABLE);
0000ae 2201 MOVS r2,#1
0000b0 4611 MOV r1,r2
0000b2 4630 MOV r0,r6
0000b4 f7fffffe BL TIM_ITConfig
;;;392 }
0000b8 b008 ADD sp,sp,#0x20
0000ba bd70 POP {r4-r6,pc}
;;;393
ENDP
|L7.188|
0000bc 40010c00 DCD 0x40010c00
|L7.192|
0000c0 40000800 DCD 0x40000800
AREA ||i.main||, CODE, READONLY, ALIGN=2
main PROC
;;;210 int main(void)
;;;211 {
000000 e92d4ff0 PUSH {r4-r11,lr}
000004 f5ad7d21 SUB sp,sp,#0x284
;;;212 u8 ret = 1;
;;;213
;;;214 u32 currSec; // currSec记录当前目录所在的首扇区 ,fileSec记录打开文件首扇区
;;;215 u32 temp ,fileoffset;
;;;216 u8 pass[512]; // 记录路径
;;;217 u8 foldername[128]; // 文件或目录名
;;;218 u8 command[4]; // 记录命令
;;;219 u8 len1,len2;
;;;220 u32 tmp;
;;;221 s16 index;
;;;222 SetupClock ();
000008 f7fffffe BL SetupClock
;;;223 SetupUART1 ();
00000c f7fffffe BL SetupUART1
;;;224 ret = MSD_Init();
000010 f7fffffe BL MSD_Init
;;;225 printf("\r\nMSD_Init result: %d",ret);
000014 4601 MOV r1,r0
000016 a08b ADR r0,|L8.580|
000018 f7fffffe BL __1printf
;;;226 Get_Medium_Characteristics();
00001c f7fffffe BL Get_Medium_Characteristics
;;;227 printf("\r\nMsdBlockCount: %d",Mass_Block_Count);
000020 488e LDR r0,|L8.604|
000022 6801 LDR r1,[r0,#0] ; Mass_Block_Count
000024 a08e ADR r0,|L8.608|
000026 f7fffffe BL __1printf
;;;228 printf("\r\nMsdBlockSize: %d Byte",Mass_Block_Size);
00002a 4892 LDR r0,|L8.628|
00002c 6801 LDR r1,[r0,#0] ; Mass_Block_Size
00002e a092 ADR r0,|L8.632|
000030 f7fffffe BL __1printf
;;;229 printf("\r\nMsdMemorySize: %d MB\r\n",Mass_Memory_Size/1024/1024);
000034 4896 LDR r0,|L8.656|
000036 6800 LDR r0,[r0,#0] ; Mass_Memory_Size
000038 0d01 LSRS r1,r0,#20
00003a a096 ADR r0,|L8.660|
00003c f7fffffe BL __1printf
;;;230
;;;231 FAT_Init();
000040 f7fffffe BL FAT_Init
;;;232 currSec = DirStartSec(); // 找到根目录的开始扇区号
000044 f7fffffe BL DirStartSec
000048 4683 MOV r11,r0
;;;233 pass[0] = '\\';
00004a 205c MOVS r0,#0x5c
;;;234 pass[1] = '\0';
00004c f04f0a00 MOV r10,#0
000050 f88d0084 STRB r0,[sp,#0x84] ;233
;;;235 index = 0;
000054 f8df8258 LDR r8,|L8.688|
000058 f88da085 STRB r10,[sp,#0x85] ;234
00005c 4654 MOV r4,r10
00005e f44f6900 MOV r9,#0x800
|L8.98|
;;;236 while(1)
;;;237 {
;;;238 PrintPass(pass);
000062 a821 ADD r0,sp,#0x84
000064 f7fffffe BL PrintPass
;;;239 len1 = USART_Scanf_Cmd(command);
000068 4668 MOV r0,sp
00006a f7fffffe BL USART_Scanf_Cmd
00006e 4605 MOV r5,r0
;;;240 if(Equal(command, "dir",len1,3)) // 列出目录中所有项
000070 4602 MOV r2,r0
000072 2303 MOVS r3,#3
000074 a18f ADR r1,|L8.692|
000076 4668 MOV r0,sp
000078 f7fffffe BL Equal
00007c b130 CBZ r0,|L8.140|
;;;241 {
;;;242 printf("\r\n\r\n");
00007e a08e ADR r0,|L8.696|
000080 f7fffffe BL __1printf
;;;243 List_AllDir_Long(currSec);
000084 4658 MOV r0,r11
000086 f7fffffe BL List_AllDir_Long
00008a e7ea B |L8.98|
|L8.140|
;;;244 }
;;;245 else if(Equal(command, "cd",len1,2)) // 更改路径
00008c 2302 MOVS r3,#2
00008e 462a MOV r2,r5
000090 a18b ADR r1,|L8.704|
000092 4668 MOV r0,sp
000094 f7fffffe BL Equal
000098 b3b8 CBZ r0,|L8.266|
;;;246 {
;;;247 len2 = USART_Scanf_Name(foldername);
00009a a801 ADD r0,sp,#4
00009c f7fffffe BL USART_Scanf_Name
0000a0 4605 MOV r5,r0
;;;248 temp = SearchFoler(currSec, foldername, len2, 1);
0000a2 4602 MOV r2,r0
0000a4 2301 MOVS r3,#1
0000a6 a901 ADD r1,sp,#4
0000a8 4658 MOV r0,r11
0000aa f7fffffe BL SearchFoler
;;;249 if(temp)
0000ae 2800 CMP r0,#0
0000b0 d0d7 BEQ |L8.98|
;;;250 {
;;;251 currSec = temp;
0000b2 4683 MOV r11,r0
;;;252 if(Equal(foldername, "..",len2,2)) // 上级目录,修改路径
0000b4 2302 MOVS r3,#2
0000b6 462a MOV r2,r5
0000b8 a182 ADR r1,|L8.708|
0000ba a801 ADD r0,sp,#4
0000bc f7fffffe BL Equal
0000c0 b148 CBZ r0,|L8.214|
;;;253 {
;;;254 if(index > 0)
0000c2 2c00 CMP r4,#0
0000c4 ddcd BLE |L8.98|
0000c6 a821 ADD r0,sp,#0x84
|L8.200|
;;;255 {
;;;256 while(pass[--index] != '\\') ;
0000c8 1e64 SUBS r4,r4,#1
0000ca b224 SXTH r4,r4
0000cc 5d01 LDRB r1,[r0,r4]
0000ce 295c CMP r1,#0x5c
0000d0 d1fa BNE |L8.200|
;;;257 pass[index + 1] = '\0';
0000d2 4420 ADD r0,r0,r4
0000d4 e016 B |L8.260|
|L8.214|
;;;258 }
;;;259 }
;;;260 else if(Equal(foldername, ".",len2,1)) ; // 当前目录,路径保持不变
0000d6 2301 MOVS r3,#1
0000d8 462a MOV r2,r5
0000da a17b ADR r1,|L8.712|
0000dc a801 ADD r0,sp,#4
0000de f7fffffe BL Equal
0000e2 2800 CMP r0,#0
0000e4 d1bd BNE |L8.98|
0000e6 a901 ADD r1,sp,#4
0000e8 aa21 ADD r2,sp,#0x84
0000ea e004 B |L8.246|
|L8.236|
;;;261 else // 子目录,修改路径
;;;262 {
;;;263 for(tmp = 0; tmp < len2; tmp++) // 记录路径
;;;264 pass[++index] = foldername[tmp];
0000ec 1c64 ADDS r4,r4,#1
0000ee 5c0b LDRB r3,[r1,r0]
0000f0 b224 SXTH r4,r4
0000f2 5513 STRB r3,[r2,r4]
0000f4 1c40 ADDS r0,r0,#1 ;263
|L8.246|
0000f6 42a8 CMP r0,r5 ;263
0000f8 d3f8 BCC |L8.236|
;;;265 pass[++index] = '\\';
0000fa 1c64 ADDS r4,r4,#1
0000fc 205c MOVS r0,#0x5c
0000fe b224 SXTH r4,r4
000100 5510 STRB r0,[r2,r4]
;;;266 pass[index + 1] = '\0';
000102 1910 ADDS r0,r2,r4
|L8.260|
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -