⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.txt

📁 MP3_PLAYER.rar
💻 TXT
📖 第 1 页 / 共 3 页
字号:
;;;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 + -