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

📄 fat16.lst

📁 实现了avr下对sd卡的读写,支持文件存取,删除的功能
💻 LST
📖 第 1 页 / 共 2 页
字号:
   1               		.file	"FAT16.c"
   2               		.arch atmega32
   3               	__SREG__ = 0x3f
   4               	__SP_H__ = 0x3e
   5               	__SP_L__ = 0x3d
   6               	__tmp_reg__ = 0
   7               	__zero_reg__ = 1
   8               		.global __do_copy_data
   9               		.global __do_clear_bss
  11               		.text
  12               	.Ltext0:
  87               	.global	ReadBlock
  89               	ReadBlock:
   1:FAT16.c       **** //-------------------------------------------------------------------------
   2:FAT16.c       **** #include	<avr/io.h>
   3:FAT16.c       **** #include 	<stdint.h>
   4:FAT16.c       **** 
   5:FAT16.c       **** #include	"FAT16.h"
   6:FAT16.c       **** #include	"mmc.h"
   7:FAT16.c       **** //------------------------------------------------------------------------
   8:FAT16.c       **** #define	SEC_Size				512//every sector's content is 512Byte
   9:FAT16.c       **** #define	MBR_Sector				0				//绝对地址
  10:FAT16.c       **** #define	FAT_Sector				0				//逻辑地址
  11:FAT16.c       **** //-------------------------------------------------------------------------
  12:FAT16.c       **** uint8_t		BUFFER[SEC_Size];
  13:FAT16.c       **** uint8_t		PB_RelativeSector;//绝对地址和逻辑地址的映射,即add+it=lba,mbr里唯一我们关注的东西
  14:FAT16.c       **** uint16_t	BPB_BytesPerSec;
  15:FAT16.c       **** uint8_t		BPB_SecPerClus;
  16:FAT16.c       **** uint16_t	BPB_RsvdSecCnt;
  17:FAT16.c       **** uint8_t		BPB_NumFATs;
  18:FAT16.c       **** uint16_t	BPB_RootEntCnt;
  19:FAT16.c       **** uint16_t	BPB_TotSec16;
  20:FAT16.c       **** uint16_t	BPB_FATSz16;							//FAT占用的sectors
  21:FAT16.c       **** uint32_t	BPB_HiddSec;
  22:FAT16.c       **** 
  23:FAT16.c       **** //-------------------------------------------------------------------------
  24:FAT16.c       **** uint8_t ReadBlock(uint32_t LBA){					//绝对地址读一个扇区
  91               	.LM1:
  92               	/* prologue: frame size=0 */
  93 0000 EF92      		push r14
  94 0002 FF92      		push r15
  95 0004 0F93      		push r16
  96 0006 1F93      		push r17
  97               	/* prologue end (size=4) */
  98 0008 7B01      		movw r14,r22
  99 000a 8C01      		movw r16,r24
  25:FAT16.c       **** 	mmcReset();
 101               	.LM2:
 102 000c 0E94 0000 		call mmcReset
  26:FAT16.c       **** 	if(mmcRead(LBA,BUFFER)!=0)return SD_FAIL;
 104               	.LM3:
 105 0010 40E0      		ldi r20,lo8(BUFFER)
 106 0012 50E0      		ldi r21,hi8(BUFFER)
 107 0014 C801      		movw r24,r16
 108 0016 B701      		movw r22,r14
 109 0018 0E94 0000 		call mmcRead
 110 001c 8823      		tst r24
 111 001e 19F0      		breq .L2
 113               	.LM4:
 114 0020 81E0      		ldi r24,lo8(1)
 115 0022 90E0      		ldi r25,hi8(1)
 116 0024 02C0      		rjmp .L1
 117               	.L2:
  27:FAT16.c       **** 	return SD_SUCC;
 119               	.LM5:
 120 0026 80E0      		ldi r24,lo8(0)
 121 0028 90E0      		ldi r25,hi8(0)
 122               	.L1:
 123               	/* epilogue: frame size=0 */
 124 002a 1F91      		pop r17
 125 002c 0F91      		pop r16
 126 002e FF90      		pop r15
 127 0030 EF90      		pop r14
 128 0032 0895      		ret
 129               	/* epilogue end (size=5) */
 130               	/* function ReadBlock size 26 (17) */
 132               	.Lscope0:
 135               	.global	WriteBlock
 137               	WriteBlock:
  28:FAT16.c       **** }
  29:FAT16.c       **** //-------------------------------------------------------------------------
  30:FAT16.c       **** uint8_t WriteBlock(uint32_t LBA){					//绝对地址写一个扇区
 139               	.LM6:
 140               	/* prologue: frame size=0 */
 141 0034 EF92      		push r14
 142 0036 FF92      		push r15
 143 0038 0F93      		push r16
 144 003a 1F93      		push r17
 145               	/* prologue end (size=4) */
 146 003c 7B01      		movw r14,r22
 147 003e 8C01      		movw r16,r24
  31:FAT16.c       **** 	mmcReset();
 149               	.LM7:
 150 0040 0E94 0000 		call mmcReset
  32:FAT16.c       **** 	if(mmcWrite(LBA,BUFFER)!=0)return SD_FAIL;
 152               	.LM8:
 153 0044 40E0      		ldi r20,lo8(BUFFER)
 154 0046 50E0      		ldi r21,hi8(BUFFER)
 155 0048 C801      		movw r24,r16
 156 004a B701      		movw r22,r14
 157 004c 0E94 0000 		call mmcWrite
 158 0050 8823      		tst r24
 159 0052 19F0      		breq .L4
 161               	.LM9:
 162 0054 81E0      		ldi r24,lo8(1)
 163 0056 90E0      		ldi r25,hi8(1)
 164 0058 02C0      		rjmp .L3
 165               	.L4:
  33:FAT16.c       **** 	return SD_SUCC;
 167               	.LM10:
 168 005a 80E0      		ldi r24,lo8(0)
 169 005c 90E0      		ldi r25,hi8(0)
 170               	.L3:
 171               	/* epilogue: frame size=0 */
 172 005e 1F91      		pop r17
 173 0060 0F91      		pop r16
 174 0062 FF90      		pop r15
 175 0064 EF90      		pop r14
 176 0066 0895      		ret
 177               	/* epilogue end (size=5) */
 178               	/* function WriteBlock size 26 (17) */
 180               	.Lscope1:
 183               	.global	ReadFatBlock
 185               	ReadFatBlock:
  34:FAT16.c       **** }
  35:FAT16.c       **** //-------------------------------------------------------------------------
  36:FAT16.c       **** uint8_t ReadFatBlock(uint32_t Add){					//逻辑地址读一个扇区
 187               	.LM11:
 188               	/* prologue: frame size=0 */
 189               	/* prologue end (size=0) */
 190 0068 DC01      		movw r26,r24
 191 006a CB01      		movw r24,r22
  37:FAT16.c       **** 	return ReadBlock(Add+PB_RelativeSector);
 193               	.LM12:
 194 006c 2091 0000 		lds r18,PB_RelativeSector
 195 0070 820F      		add r24,r18
 196 0072 911D      		adc r25,__zero_reg__
 197 0074 A11D      		adc r26,__zero_reg__
 198 0076 B11D      		adc r27,__zero_reg__
 199 0078 BC01      		movw r22,r24
 200 007a CD01      		movw r24,r26
 201 007c 0E94 0000 		call ReadBlock
  38:FAT16.c       **** }
 203               	.LM13:
 204 0080 9927      		clr r25
 205               	/* epilogue: frame size=0 */
 206 0082 0895      		ret
 207               	/* epilogue end (size=1) */
 208               	/* function ReadFatBlock size 14 (13) */
 210               	.Lscope2:
 213               	.global	WriteFatBlock
 215               	WriteFatBlock:
  39:FAT16.c       **** //-------------------------------------------------------------------------
  40:FAT16.c       **** uint8_t WriteFatBlock(uint32_t Add){				//逻辑地址写一个扇区
 217               	.LM14:
 218               	/* prologue: frame size=0 */
 219               	/* prologue end (size=0) */
 220 0084 DC01      		movw r26,r24
 221 0086 CB01      		movw r24,r22
  41:FAT16.c       **** 	return WriteBlock(Add+PB_RelativeSector);
 223               	.LM15:
 224 0088 2091 0000 		lds r18,PB_RelativeSector
 225 008c 820F      		add r24,r18
 226 008e 911D      		adc r25,__zero_reg__
 227 0090 A11D      		adc r26,__zero_reg__
 228 0092 B11D      		adc r27,__zero_reg__
 229 0094 BC01      		movw r22,r24
 230 0096 CD01      		movw r24,r26
 231 0098 0E94 0000 		call WriteBlock
  42:FAT16.c       **** }
 233               	.LM16:
 234 009c 9927      		clr r25
 235               	/* epilogue: frame size=0 */
 236 009e 0895      		ret
 237               	/* epilogue end (size=1) */
 238               	/* function WriteFatBlock size 14 (13) */
 240               	.Lscope3:
 245               	.global	CopyBytes
 247               	CopyBytes:
  43:FAT16.c       **** //-------------------------------------------------------------------------
  44:FAT16.c       **** void CopyBytes(uint8_t *ps,uint8_t *pd,uint16_t size){	//内存拷贝
 249               	.LM17:
 250               	/* prologue: frame size=0 */
 251               	/* prologue end (size=0) */
 252 00a0 DC01      		movw r26,r24
 253 00a2 FB01      		movw r30,r22
 254               	.L14:
  45:FAT16.c       **** 	for(;size;size--)*pd++=*ps++;
 256               	.LM18:
 257 00a4 4115      		cp r20,__zero_reg__
 258 00a6 5105      		cpc r21,__zero_reg__
 259 00a8 29F0      		breq .L13
 260 00aa 8D91      		ld r24,X+
 261 00ac 8193      		st Z+,r24
 262 00ae 4150      		subi r20,lo8(-(-1))
 263 00b0 5040      		sbci r21,hi8(-(-1))
 264 00b2 F8CF      		rjmp .L14
 265               	.L13:
 266 00b4 0895      		ret
 267               	/* epilogue: frame size=0 */
 268               	/* epilogue: noreturn */
 269               	/* epilogue end (size=0) */
 270               	/* function CopyBytes size 11 (11) */
 272               	.Lscope4:
 277               	.global	IsEqual
 279               	IsEqual:
  46:FAT16.c       **** }

⌨️ 快捷键说明

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