📄 mp3_player_06.lss
字号:
{
temp = buffer[j++];
fc4: fa 01 movw r30, r20
fc6: 84 81 ldd r24, Z+4 ; 0x04
fc8: 08 94 sec
fca: a1 1c adc r10, r1
fcc: b1 1c adc r11, r1
if(temp == 0x0d || temp == 0x0a || temp == ']' || i>(AR_LEN - 2)) /* tag ended */
fce: 8d 30 cpi r24, 0x0D ; 13
fd0: 71 f0 breq .+28 ; 0xfee <LrcProc+0x1f4>
fd2: 8a 30 cpi r24, 0x0A ; 10
fd4: 61 f0 breq .+24 ; 0xfee <LrcProc+0x1f4>
fd6: 8d 35 cpi r24, 0x5D ; 93
fd8: 51 f0 breq .+20 ; 0xfee <LrcProc+0x1f4>
fda: 4f 5f subi r20, 0xFF ; 255
fdc: 5f 4f sbci r21, 0xFF ; 255
fde: af 30 cpi r26, 0x0F ; 15
fe0: b1 05 cpc r27, r1
fe2: 29 f0 breq .+10 ; 0xfee <LrcProc+0x1f4>
break;
LrcStructHead.artist[i++] = temp;
fe4: f9 01 movw r30, r18
fe6: 81 93 st Z+, r24
fe8: 9f 01 movw r18, r30
fea: 11 96 adiw r26, 0x01 ; 1
fec: eb cf rjmp .-42 ; 0xfc4 <LrcProc+0x1ca>
}
LrcStructHead.artist[i] = 0; /* need a 0 to end the string */
fee: af 52 subi r26, 0x2F ; 47
ff0: bc 4f sbci r27, 0xFC ; 252
ff2: fd 01 movw r30, r26
ff4: 12 a2 std Z+34, r1 ; 0x22
ff6: b4 c2 rjmp .+1384 ; 0x1560 <__stack+0x461>
#if DEBUG
printf_P(PSTR(" found artist tag: %s ]"),LrcStructHead.artist);
#else
// printf_P(PSTR("\r\nArtist : %s "),LrcStructHead.artist);
#endif
}
/**********************************************************************************************************/
else if(strcomp_noncase("OFFSET:",&buffer[j+1])) /* string compare to check if this is a offset tag */
ff8: b6 01 movw r22, r12
ffa: 8d e0 ldi r24, 0x0D ; 13
ffc: 91 e0 ldi r25, 0x01 ; 1
ffe: 0e 94 e5 06 call 0xdca ; 0xdca <strcomp_noncase>
1002: 88 23 and r24, r24
1004: 49 f1 breq .+82 ; 0x1058 <LrcProc+0x25e>
{
j+=8; /* count += 8 */
LrcStructHead.offset = 0; /* default value, in case the tag like this [offset:] */
1006: 10 92 04 04 sts 0x0404, r1
100a: 10 92 03 04 sts 0x0403, r1
LrcStructHead.sign = 1;
100e: 81 e0 ldi r24, 0x01 ; 1
1010: 80 93 05 04 sts 0x0405, r24
1014: f3 01 movw r30, r6
1016: 01 c0 rjmp .+2 ; 0x101a <LrcProc+0x220>
1018: 31 96 adiw r30, 0x01 ; 1
#if DEBUG
printf_P(PSTR(" found offset tag: "));
#else
//printf_P(PSTR("\r\n"));
#endif
while(1) /* proceed the offset */
{
temp = buffer[j++];
101a: 40 85 ldd r20, Z+8 ; 0x08
#if DEBUG
USART_putchar(temp);
#endif
if(temp == ']')break; /* tag end */
101c: 4d 35 cpi r20, 0x5D ; 93
101e: 09 f4 brne .+2 ; 0x1022 <LrcProc+0x228>
1020: d4 c1 rjmp .+936 ; 0x13ca <__stack+0x2cb>
if(temp == '-') /* sign */
1022: 4d 32 cpi r20, 0x2D ; 45
1024: 19 f4 brne .+6 ; 0x102c <LrcProc+0x232>
{
LrcStructHead.sign = 0;
1026: 10 92 05 04 sts 0x0405, r1
102a: f6 cf rjmp .-20 ; 0x1018 <LrcProc+0x21e>
continue;
}
LrcStructHead.offset *= 10; /* calculate the value */
102c: 80 91 03 04 lds r24, 0x0403
1030: 90 91 04 04 lds r25, 0x0404
1034: 9c 01 movw r18, r24
1036: b3 e0 ldi r27, 0x03 ; 3
1038: 22 0f add r18, r18
103a: 33 1f adc r19, r19
103c: ba 95 dec r27
103e: e1 f7 brne .-8 ; 0x1038 <LrcProc+0x23e>
1040: 88 0f add r24, r24
1042: 99 1f adc r25, r25
1044: 82 0f add r24, r18
1046: 93 1f adc r25, r19
LrcStructHead.offset += (temp-0x30);
1048: 84 0f add r24, r20
104a: 91 1d adc r25, r1
104c: c0 97 sbiw r24, 0x30 ; 48
104e: 90 93 04 04 sts 0x0404, r25
1052: 80 93 03 04 sts 0x0403, r24
1056: e0 cf rjmp .-64 ; 0x1018 <LrcProc+0x21e>
}
#if DEBUG
printf_P(PSTR("the value in the structure is : %d"),LrcStructHead.offset);
#endif
}
/**********************************************************************************************************/
else if(strcomp_noncase("BY:",&buffer[j+1])) /* string compare to check if this is a By tag */
1058: b6 01 movw r22, r12
105a: 85 e1 ldi r24, 0x15 ; 21
105c: 91 e0 ldi r25, 0x01 ; 1
105e: 0e 94 e5 06 call 0xdca ; 0xdca <strcomp_noncase>
1062: 88 23 and r24, r24
1064: a1 f0 breq .+40 ; 0x108e <LrcProc+0x294>
{ /* but we do not need this tag */
j+=4;
1066: 24 e0 ldi r18, 0x04 ; 4
1068: 30 e0 ldi r19, 0x00 ; 0
106a: a2 0e add r10, r18
106c: b3 1e adc r11, r19
106e: f3 01 movw r30, r6
#if DEBUG
printf_P(PSTR(" found by tag: "));
#endif
while(1)
{
temp = buffer[j++];
1070: 84 81 ldd r24, Z+4 ; 0x04
1072: 08 94 sec
1074: a1 1c adc r10, r1
1076: b1 1c adc r11, r1
#if DEBUG
USART_putchar(temp);
#endif
if(temp == 0x0d || temp == 0x0a || temp == ']' ||i>30)break;
1078: 8d 30 cpi r24, 0x0D ; 13
107a: 09 f4 brne .+2 ; 0x107e <LrcProc+0x284>
107c: 71 c2 rjmp .+1250 ; 0x1560 <__stack+0x461>
107e: 8a 30 cpi r24, 0x0A ; 10
1080: 09 f4 brne .+2 ; 0x1084 <LrcProc+0x28a>
1082: 6e c2 rjmp .+1244 ; 0x1560 <__stack+0x461>
1084: 31 96 adiw r30, 0x01 ; 1
1086: 8d 35 cpi r24, 0x5D ; 93
1088: 09 f4 brne .+2 ; 0x108c <LrcProc+0x292>
108a: 6a c2 rjmp .+1236 ; 0x1560 <__stack+0x461>
108c: f1 cf rjmp .-30 ; 0x1070 <LrcProc+0x276>
}
}
/**********************************************************************************************************/
else if(strcomp_noncase("AL:",&buffer[j+1])) /* string compare to check if this is a album tag */
108e: b6 01 movw r22, r12
1090: 89 e1 ldi r24, 0x19 ; 25
1092: 91 e0 ldi r25, 0x01 ; 1
1094: 0e 94 e5 06 call 0xdca ; 0xdca <strcomp_noncase>
1098: 88 23 and r24, r24
109a: a1 f0 breq .+40 ; 0x10c4 <LrcProc+0x2ca>
{
j+=4;
109c: 64 e0 ldi r22, 0x04 ; 4
109e: 70 e0 ldi r23, 0x00 ; 0
10a0: a6 0e add r10, r22
10a2: b7 1e adc r11, r23
10a4: f3 01 movw r30, r6
#if DEBUG
printf_P(PSTR(" found al tag: "));
#else
// printf_P(PSTR("\r\nAlbum : "));
#endif
while(1)
{
temp = buffer[j++];
10a6: 84 81 ldd r24, Z+4 ; 0x04
10a8: 08 94 sec
10aa: a1 1c adc r10, r1
10ac: b1 1c adc r11, r1
if(temp == 0x0d || temp == 0x0a || temp == ']' ||i>30)break;
10ae: 8d 30 cpi r24, 0x0D ; 13
10b0: 09 f4 brne .+2 ; 0x10b4 <LrcProc+0x2ba>
10b2: 56 c2 rjmp .+1196 ; 0x1560 <__stack+0x461>
10b4: 8a 30 cpi r24, 0x0A ; 10
10b6: 09 f4 brne .+2 ; 0x10ba <LrcProc+0x2c0>
10b8: 53 c2 rjmp .+1190 ; 0x1560 <__stack+0x461>
10ba: 31 96 adiw r30, 0x01 ; 1
10bc: 8d 35 cpi r24, 0x5D ; 93
10be: 09 f4 brne .+2 ; 0x10c2 <LrcProc+0x2c8>
10c0: 4f c2 rjmp .+1182 ; 0x1560 <__stack+0x461>
10c2: f1 cf rjmp .-30 ; 0x10a6 <LrcProc+0x2ac>
// USART_putchar(temp);
}
}
/**********************************************************************************************************/
else /* otherwise this must the time tag or other not recognize tag */
{
j+=1;
10c4: 08 94 sec
10c6: a1 1c adc r10, r1
10c8: b1 1c adc r11, r1
/****************************************************************/
if(sector == totalsect && j == leftbytes + 1) goto end; /* if the file is end */
10ca: 79 85 ldd r23, Y+9 ; 0x09
10cc: 88 85 ldd r24, Y+8 ; 0x08
10ce: 78 17 cp r23, r24
10d0: 39 f4 brne .+14 ; 0x10e0 <LrcProc+0x2e6>
10d2: 8e 81 ldd r24, Y+6 ; 0x06
10d4: 9f 81 ldd r25, Y+7 ; 0x07
10d6: 01 96 adiw r24, 0x01 ; 1
10d8: a8 16 cp r10, r24
10da: b9 06 cpc r11, r25
10dc: 09 f4 brne .+2 ; 0x10e0 <LrcProc+0x2e6>
10de: 7a c2 rjmp .+1268 ; 0x15d4 <__stack+0x4d5>
if(j == 512) /* wether the sector is end, need to read the next sector */
10e0: 90 e0 ldi r25, 0x00 ; 0
10e2: a9 16 cp r10, r25
10e4: 92 e0 ldi r25, 0x02 ; 2
10e6: b9 06 cpc r11, r25
10e8: 09 f0 breq .+2 ; 0x10ec <LrcProc+0x2f2>
10ea: 4b c0 rjmp .+150 ; 0x1182 <__stack+0x83>
{
if(part == (SectorsPerClust - 1)) /* if need to read next cluster */
10ec: aa 85 ldd r26, Y+10 ; 0x0a
10ee: 2a 2f mov r18, r26
10f0: 33 27 eor r19, r19
10f2: 80 91 5a 07 lds r24, 0x075A
10f6: 90 91 5b 07 lds r25, 0x075B
10fa: 01 97 sbiw r24, 0x01 ; 1
10fc: 28 17 cp r18, r24
10fe: 39 07 cpc r19, r25
1100: 69 f5 brne .+90 ; 0x115c <__stack+0x5d>
{
//p=FAT_NextCluster_NEW(p);//读下一簇数据 //read next cluster
p=FAT_NextCluster(p);
1102: c8 01 movw r24, r16
1104: b7 01 movw r22, r14
1106: 0e 94 7e 14 call 0x28fc ; 0x28fc <FAT_NextCluster>
110a: 7b 01 movw r14, r22
110c: 8c 01 movw r16, r24
if(p == 0x0fffffff || p == 0x0ffffff8 || (FAT32_Enable == 0 && p == 0xffff))//如果无后续簇则结束, //no more cluster
110e: 6f 3f cpi r22, 0xFF ; 255
1110: bf ef ldi r27, 0xFF ; 255
1112: 7b 07 cpc r23, r27
1114: bf ef ldi r27, 0xFF ; 255
1116: 8b 07 cpc r24, r27
1118: bf e0 ldi r27, 0x0F ; 15
111a: 9b 07 cpc r25, r27
111c: 09 f4 brne .+2 ; 0x1120 <__stack+0x21>
111e: 5a c2 rjmp .+1204 ; 0x15d4 <__stack+0x4d5>
1120: 68 5f subi r22, 0xF8 ; 248
1122: 7f 4f sbci r23, 0xFF ; 255
1124: 8f 4f sbci r24, 0xFF ; 255
1126: 9f 40 sbci r25, 0x0F ; 15
1128: 09 f4 brne .+2 ; 0x112c <__stack+0x2d>
112a: 54 c2 rjmp .+1192 ; 0x15d4 <__stack+0x4d5>
112c: 80 91 c5 07 lds r24, 0x07C5
1130: 88 23 and r24, r24
1132: 51 f4 brne .+20 ; 0x1148 <__stack+0x49>
1134: ff ef ldi r31, 0xFF ; 255
1136: ef 16 cp r14, r31
1138: ff ef ldi r31, 0xFF ; 255
113a: ff 06 cpc r15, r31
113c: f0 e0 ldi r31, 0x00 ; 0
113e: 0f 07 cpc r16, r31
1140: f0 e0 ldi r31, 0x00 ; 0
1142: 1f 07 cpc r17, r31
1144: 09 f4 brne .+2 ; 0x1148 <__stack+0x49>
1146: 46 c2 rjmp .+1164 ; 0x15d4 <__stack+0x4d5>
{
#if DEBUG
printf_P(PSTR("\r\nNo next cluster or read next cluster error"));
#endif
goto end;
}
part = 0; /* clear the part count */
if(FAT_LoadPartCluster(p,part,buffer))
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -