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

📄 sd.lst

📁 /*** *** *** *** *** *** *** *** *** *** / /* MP3 Code for M32L */ /* By pasyong
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0237) 		de++;
    0FA0 8988      LDD	R24,Y+16
    0FA1 8999      LDD	R25,Y+17
    0FA2 9680      ADIW	R24,0x20
    0FA3 8B99      STD	Y+17,R25
    0FA4 8B88      STD	Y+16,R24
(0238) 		index++;
    0FA5 898A      LDD	R24,Y+18
    0FA6 899B      LDD	R25,Y+19
    0FA7 9601      ADIW	R24,1
    0FA8 8B9B      STD	Y+19,R25
    0FA9 8B8A      STD	Y+18,R24
(0239) 	}	while (*de->deName || index == 16);	// 0 in de->deName[0] if no more entries
    0FAA 89E8      LDD	R30,Y+16
    0FAB 89F9      LDD	R31,Y+17
    0FAC 8020      LDD	R2,Z+0
    0FAD 2022      TST	R2
    0FAE F009      BEQ	0x0FB0
    0FAF CE97      RJMP	0x0E47
    0FB0 898A      LDD	R24,Y+18
    0FB1 899B      LDD	R25,Y+19
    0FB2 3180      CPI	R24,0x10
    0FB3 E0E0      LDI	R30,0
    0FB4 079E      CPC	R25,R30
    0FB5 F409      BNE	0x0FB7
    0FB6 CE90      RJMP	0x0E47
(0240) 
(0241) 	if (hasBuffer == 0)		// end of entries
    0FB7 880C      LDD	R0,Y+20
    0FB8 881D      LDD	R1,Y+21
    0FB9 2000      TST	R0
    0FBA F439      BNE	0x0FC2
    0FBB 2011      TST	R1
    0FBC F429      BNE	0x0FC2
(0242) 		return 0;
    0FBD E000      LDI	R16,0
    0FBE E010      LDI	R17,0
    0FBF E020      LDI	R18,0
    0FC0 E030      LDI	R19,0
    0FC1 C02D      RJMP	0x0FEF
(0243) 	
(0244) 	FileSize = de->deFileSize;
    0FC2 89E8      LDD	R30,Y+16
    0FC3 89F9      LDD	R31,Y+17
    0FC4 8C24      LDD	R2,Z+28
    0FC5 8C35      LDD	R3,Z+29
    0FC6 8C46      LDD	R4,Z+30
    0FC7 8C57      LDD	R5,Z+31
    0FC8 923002B2  STS	_FileSize+1,R3
    0FCA 922002B1  STS	_FileSize,R2
    0FCC 925002B4  STS	_FileSize+3,R5
    0FCE 924002B3  STS	_FileSize+2,R4
(0245) 	LCD_write_english_string(0,1,LongNameBuffer);
    0FD0 90200065  LDS	R2,0x65
    0FD2 90300066  LDS	R3,0x66
    0FD4 8239      STD	Y+1,R3
    0FD5 8228      STD	Y+0,R2
    0FD6 E021      LDI	R18,1
    0FD7 2700      CLR	R16
    0FD8 940E125D  CALL	_LCD_write_english_string
(0246) 	return (unsigned long) ((unsigned long)de->deHighClust << 16) + de->deStartCluster;
    0FDA 89E8      LDD	R30,Y+16
    0FDB 89F9      LDD	R31,Y+17
    0FDC 8C22      LDD	R2,Z+26
    0FDD 8C33      LDD	R3,Z+27
    0FDE 2444      CLR	R4
    0FDF 2455      CLR	R5
    0FE0 89E8      LDD	R30,Y+16
    0FE1 89F9      LDD	R31,Y+17
    0FE2 8864      LDD	R6,Z+20
    0FE3 8875      LDD	R7,Z+21
    0FE4 2488      CLR	R8
    0FE5 2499      CLR	R9
    0FE6 0143      MOVW	R8,R6
    0FE7 2466      CLR	R6
    0FE8 2477      CLR	R7
    0FE9 0C62      ADD	R6,R2
    0FEA 1C73      ADC	R7,R3
    0FEB 1C84      ADC	R8,R4
    0FEC 1C95      ADC	R9,R5
    0FED 0183      MOVW	R16,R6
    0FEE 0194      MOVW	R18,R8
    0FEF 9668      ADIW	R28,0x18
    0FF0 940E139F  CALL	pop_gset5
    0FF2 9622      ADIW	R28,2
    0FF3 9508      RET
_fatNextCluster:
  offset               --> R10
  sector               --> Y+12
  fatOffset            --> Y+8
  fatMask              --> Y+4
  nextCluster          --> Y+0
  cluster              --> Y+22
    0FF4 940E12C4  CALL	push_arg4
    0FF6 940E13BD  CALL	push_gset3
    0FF8 9760      SBIW	R28,0x10
(0247) }
(0248) 
(0249) /*-----------------------------------------------------------------------
(0250)  在FAT表中查询下一个簇所在扇区号
(0251) -----------------------------------------------------------------------*/
(0252) unsigned long fatNextCluster(unsigned long cluster)
(0253) {
(0254) 	unsigned long nextCluster;
(0255) 	unsigned long fatMask;
(0256) 	unsigned long fatOffset;
(0257) 	unsigned long sector;
(0258) 	unsigned int offset;
(0259) 	
(0260) 	if(Fat32Enabled)
    0FF9 902002C5  LDS	R2,_Fat32Enabled
    0FFB 2022      TST	R2
    0FFC F0D9      BEQ	0x1018
(0261) 	{
(0262) 		// 一个表项为4bytes(32 bits)
(0263) 		fatOffset = cluster << 2;
    0FFD E082      LDI	R24,2
    0FFE E090      LDI	R25,0
    0FFF 01FE      MOVW	R30,R28
    1000 8826      LDD	R2,Z+22
    1001 8837      LDD	R3,Z+23
    1002 8C40      LDD	R4,Z+24
    1003 8C51      LDD	R5,Z+25
    1004 938A      ST	R24,-Y
    1005 0181      MOVW	R16,R2
    1006 0192      MOVW	R18,R4
    1007 940E13EE  CALL	lsl32
    1009 01FE      MOVW	R30,R28
    100A 8700      STD	Z+8,R16
    100B 8711      STD	Z+9,R17
    100C 8722      STD	Z+10,R18
    100D 8733      STD	Z+11,R19
(0264) 		// 设置 FAT32 bit mask
(0265) 		fatMask = FAT32_MASK;
    100E EF4F      LDI	R20,0xFF
    100F EF5F      LDI	R21,0xFF
    1010 EF6F      LDI	R22,0xFF
    1011 E07F      LDI	R23,0xF
    1012 01FE      MOVW	R30,R28
    1013 8344      STD	Z+4,R20
    1014 8355      STD	Z+5,R21
    1015 8366      STD	Z+6,R22
    1016 8377      STD	Z+7,R23
(0266) 	}
    1017 C017      RJMP	0x102F
(0267) 	else
(0268) 	{
(0269) 		// 一个表项为2bytes(16 bits)
(0270) 		fatOffset = cluster << 1;
    1018 01FE      MOVW	R30,R28
    1019 8826      LDD	R2,Z+22
    101A 8837      LDD	R3,Z+23
    101B 8C40      LDD	R4,Z+24
    101C 8C51      LDD	R5,Z+25
    101D 0C22      LSL	R2
    101E 1C33      ROL	R3
    101F 1C44      ROL	R4
    1020 1C55      ROL	R5
    1021 01FE      MOVW	R30,R28
    1022 8620      STD	Z+8,R2
    1023 8631      STD	Z+9,R3
    1024 8642      STD	Z+10,R4
    1025 8653      STD	Z+11,R5
(0271) 		// 设置 FAT16 bit mask
(0272) 		fatMask = FAT16_MASK;
    1026 EF4F      LDI	R20,0xFF
    1027 EF5F      LDI	R21,0xFF
    1028 E060      LDI	R22,0
    1029 E070      LDI	R23,0
    102A 01FE      MOVW	R30,R28
    102B 8344      STD	Z+4,R20
    102C 8355      STD	Z+5,R21
    102D 8366      STD	Z+6,R22
    102E 8377      STD	Z+7,R23
(0273) 	}
(0274) 	
(0275) 	//计算FAT扇区号
(0276) 	sector = FirstFATSector + (fatOffset / BytesPerSector);
    102F 902002BF  LDS	R2,_BytesPerSector
    1031 903002C0  LDS	R3,_BytesPerSector+1
    1033 2444      CLR	R4
    1034 2455      CLR	R5
    1035 01FE      MOVW	R30,R28
    1036 8460      LDD	R6,Z+8
    1037 8471      LDD	R7,Z+9
    1038 8482      LDD	R8,Z+10
    1039 8493      LDD	R9,Z+11
    103A 925A      ST	R5,-Y
    103B 924A      ST	R4,-Y
    103C 923A      ST	R3,-Y
    103D 922A      ST	R2,-Y
    103E 0183      MOVW	R16,R6
    103F 0194      MOVW	R18,R8
    1040 940E12E5  CALL	div32u
    1042 904002BB  LDS	R4,_FirstFATSector+2
    1044 905002BC  LDS	R5,_FirstFATSector+3
    1046 902002B9  LDS	R2,_FirstFATSector
    1048 903002BA  LDS	R3,_FirstFATSector+1
    104A 0E20      ADD	R2,R16
    104B 1E31      ADC	R3,R17
    104C 1E42      ADC	R4,R18
    104D 1E53      ADC	R5,R19
    104E 01FE      MOVW	R30,R28
    104F 8624      STD	Z+12,R2
    1050 8635      STD	Z+13,R3
    1051 8646      STD	Z+14,R4
    1052 8657      STD	Z+15,R5
(0277) 	//计算FAT扇区号中表项的偏移地址
(0278) 	offset = fatOffset % BytesPerSector;
    1053 902002BF  LDS	R2,_BytesPerSector
    1055 903002C0  LDS	R3,_BytesPerSector+1
    1057 2444      CLR	R4
    1058 2455      CLR	R5
    1059 01FE      MOVW	R30,R28
    105A 8460      LDD	R6,Z+8
    105B 8471      LDD	R7,Z+9
    105C 8482      LDD	R8,Z+10
    105D 8493      LDD	R9,Z+11
    105E 925A      ST	R5,-Y
    105F 924A      ST	R4,-Y
    1060 923A      ST	R3,-Y
    1061 922A      ST	R2,-Y
    1062 0183      MOVW	R16,R6
    1063 0194      MOVW	R18,R8
    1064 940E12E7  CALL	mod32u
    1066 0158      MOVW	R10,R16
(0279)     
(0280) 	ReadBlock(sector);
    1067 01FE      MOVW	R30,R28
    1068 8504      LDD	R16,Z+12
    1069 8515      LDD	R17,Z+13
    106A 8526      LDD	R18,Z+14
    106B 8537      LDD	R19,Z+15
    106C DBDA      RCALL	_ReadBlock
(0281) 
(0282) 	// 读取下一个簇号
(0283) 	nextCluster = (*((unsigned long*) &((char*)BUFFER)[offset])) & fatMask;
    106D EB81      LDI	R24,0xB1
    106E E090      LDI	R25,0
    106F 01F5      MOVW	R30,R10
    1070 0FE8      ADD	R30,R24
    1071 1FF9      ADC	R31,R25
    1072 8020      LDD	R2,Z+0
    1073 8031      LDD	R3,Z+1
    1074 8042      LDD	R4,Z+2
    1075 8053      LDD	R5,Z+3
    1076 01FE      MOVW	R30,R28
    1077 8064      LDD	R6,Z+4
    1078 8075      LDD	R7,Z+5
    1079 8086      LDD	R8,Z+6
    107A 8097      LDD	R9,Z+7
    107B 2026      AND	R2,R6
    107C 2037      AND	R3,R7
    107D 2048      AND	R4,R8
    107E 2059      AND	R5,R9
    107F 01FE      MOVW	R30,R28
    1080 8220      STD	Z+0,R2
    1081 8231      STD	Z+1,R3
    1082 8242      STD	Z+2,R4
    1083 8253      STD	Z+3,R5
(0284) 
(0285) 	// 是否文件的结束簇
(0286) 	if (nextCluster == (CLUST_EOFE & fatMask))
    1084 01FE      MOVW	R30,R28
    1085 8024      LDD	R2,Z+4
    1086 8035      LDD	R3,Z+5
    1087 8046      LDD	R4,Z+6
    1088 8057      LDD	R5,Z+7
    1089 01FE      MOVW	R30,R28
    108A 8060      LDD	R6,Z+0
    108B 8071      LDD	R7,Z+1
    108C 8082      LDD	R8,Z+2
    108D 8093      LDD	R9,Z+3
    108E 1462      CP	R6,R2
    108F 0473      CPC	R7,R3
    1090 0484      CPC	R8,R4
    1091 0495      CPC	R9,R5
    1092 F449      BNE	0x109C
(0287) 		nextCluster = 0;
    1093 E040      LDI	R20,0
    1094 E050      LDI	R21,0
    1095 E060      LDI	R22,0
    1096 E070      LDI	R23,0
    1097 01FE      MOVW	R30,R28
    1098 8340      STD	Z+0,R20
    1099 8351      STD	Z+1,R21
    109A 8362      STD	Z+2,R22
    109B 8373      STD	Z+3,R23
(0288) 		
(0289) 	return nextCluster;
    109C 01FE      MOVW	R30,R28
    109D 8100      LDD	R16,Z+0
    109E 8111      LDD	R17,Z+1
    109F 8122      LDD	R18,Z+2
    10A0 8133      LDD	R19,Z+3
    10A1 9660      ADIW	R28,0x10
    10A2 940E1399  CALL	pop_gset3
    10A4 9624      ADIW	R28,4
    10A5 9508      RET
FILE: D:\Temp\AVRTest\SDMP3~1\uarst.c
(0001) /************************************************************/
(0002) /*		         UARST Code for   M32L					    */
(0003) /*				   By   pasyong								*/
(0004) /*				   2006-4									*/
(0005) /*				   Base ICC6.31A					        */
(0006) /************************************************************/
(0007) #include <iom32v.h>
(0008) #include <macros.h>
(0009) #include <stdio.h>
(0010) 
(0011) //UART0 initialize
(0012) // desired baud rate: 9600
(0013) // actual: baud rate:9600 (0.0%)
(0014) // char size: 8 bit
(0015) // parity: Disabled
(0016) void uart0_init(void)
(0017) {
(0018)  UCSRB = 0x00; //disable while setting baud rate
_uart0_init:
    10A6 2422      CLR	R2
    10A7 B82A      OUT	0x0A,R2
(0019)  UCSRA = 0x00;
    10A8 B82B      OUT	0x0B,R2
(0020)  UCSRC = BIT(URSEL) | 0x06;
    10A9 E886      LDI	R24,0x86
    10AA BD80      OUT	0x20,R24
(0021)  UBRRL = 0x2F; //set baud rate lo
    10AB E28F      LDI	R24,0x2F
    10AC B989      OUT	0x09,R24
(0022)  UBRRH = 0x00; //set baud rate hi
    10AD BC20      OUT	0x20,R2
(0023)  UCSRB = 0x18;
    10AE E188      LDI	R24,0x18
    10AF B98A      OUT	0x0A,R24
    10B0 9508      RET
_Puts:
  s                    --> R20
    10B1 940E13A2  CALL	push_gset1
    10B3 01A8      MOVW	R20,R16
(0024) }
(0025) //串口输出字符串
(0026) void Puts( unsigned char *s)
(0027) { 
    10B4 C006      RJMP	0x10BB
(0028) 	 while (*s) 
(0029)       {
(0030) 	 putchar(*s);
    10B5 01FA      MOVW	R30,R20
    10B6 8100      LDD	R16,Z+0
    10B7 940E141E  CALL	_putchar
(0031) 	 s++;
    10B9 5F4F      SUBI	R20,0xFF
    10BA 4F5F      SBCI	R21,0xFF
    10BB 01FA      MOVW	R30,R20
    10BC 8020      LDD	R2,Z+0
    10BD 2022      TST	R2
    10BE F7B1      BNE	0x10B5
    10BF 940E13A5  CALL	pop_gset1
    10C1 9508      RET
FILE: D:\Temp\AVRTest\SDMP3~1\mp3.c
(0001) /************************************************************/
(0002) /*		         MP3 Code for   M32L					    */
(0003) /*				   By   pasyong								*/
(0004) /*				   2006-4									*/
(0005) /*				   Base ICC6.31A					        */
(0006) /************************************************************/
(0007) #include <iom32v.h>
(0008) #include <macros.h>
(0009) #include <stdio.h>
(0010) #include "1011.h"
(0011) #include "mp3.h"
(0012) #include "sd.h"
(0013) #include "fat.h"
(0014) #include "uarst.h"
(0015) #include "3310.h"
(0016) 
(0017) void key_port(void)
(0018) {
(0019)  DDRD=0X00;
_key_port:
    10C2 2422      CLR	R2
    10C3 BA21      OUT	0x11,R2
(0020)  PORTD=0XFF;
    10C4 EF8F      LDI	R24,0xFF
    10C5 BB82      OUT	0x12,R24
    10C6 9508      RET
(0021) }
(0022) void main()
(0023) {
(0024)  key_port();
_main:
    10C7 DFFA      RCALL	_key_port
(0025)  spi_init();
    10C8 940E0BDE  CALL	_spi_init
(0026) 
(0027)  mp3_port_init(

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -