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

📄 ide.lst

📁 AT89C51 MP3源程序AT89C51 MP3源程序 SD AT89C51 MP3源程序AT89C51 MP3源程序 SD
💻 LST
📖 第 1 页 / 共 2 页
字号:
   1               		.file	"IDE.c"
   2               		.arch atmega128
   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:
  80               		.data
  81               	.LC0:
  82 0000 40        		.byte	64
  83 0001 00        		.byte	0
  84 0002 00        		.byte	0
  85 0003 00        		.byte	0
  86 0004 00        		.byte	0
  87 0005 95        		.byte	-107
  88               		.text
  90               	.global	_Z8Init_IDEv
  92               	_Z8Init_IDEv:
   1:IDE.c         **** /*
   2:IDE.c         **** ;**************************************************************************************************
   3:IDE.c         **** ;*									Copyright (c) 2006 by JiaoJinXing. 
   4:IDE.c         **** ;*											All rights reserved.
   5:IDE.c         **** ;*
   6:IDE.c         **** ;*---- 文件信息 -----------------------------------------------------------------------------------
   7:IDE.c         **** ;* 文   件   名 : IDE.c
   8:IDE.c         **** ;* 创   建   人 : 焦进星
   9:IDE.c         **** ;* 描        述 : 磁盘驱动文件
  10:IDE.c         **** ;*
  11:IDE.c         **** ;*---- 历史版本信息 -------------------------------------------------------------------------------
  12:IDE.c         **** ;* 日   期  : 2008年 12 月 15 日
  13:IDE.c         **** ;* 创 建 人  : 焦进星
  14:IDE.c         **** ;* 描   述  : 建立版本 V1.0.0
  15:IDE.c         **** ;*
  16:IDE.c         **** ;*---- 联系方式 -----------------------------------------------------------------------------------
  17:IDE.c         **** ;* Email    : wyoujtg@163.com
  18:IDE.c         **** ;* Web      : http://wyoujtg.blog.163.com  
  19:IDE.c         **** ;**************************************************************************************************
  20:IDE.c         **** ;*/
  21:IDE.c         **** 
  22:IDE.c         **** #include "minifs.h"
  23:IDE.c         **** 
  24:IDE.c         **** /*
  25:IDE.c         **** ;**************************************************************************************************
  26:IDE.c         **** ;* 描    述 : 移植时只需完成以下三个函数
  27:IDE.c         **** ;**************************************************************************************************
  28:IDE.c         **** ;*/
  29:IDE.c         **** 
  30:IDE.c         **** /*
  31:IDE.c         **** ;**************************************************************************************************
  32:IDE.c         **** ;* 函数名称 : Init_IDE
  33:IDE.c         **** ;* 描    述 : 初始化IDE
  34:IDE.c         **** ;* 输 	 入 : 无
  35:IDE.c         **** ;*        
  36:IDE.c         **** ;* 输 	 出 : TRUE OR FALSE
  37:IDE.c         **** ;**************************************************************************************************
  38:IDE.c         **** ;*/
  39:IDE.c         **** uint8 Init_IDE(void)
  40:IDE.c         **** {
  94               	.LM1:
  95               	/* prologue: frame size=6 */
  96 0000 EF92      		push r14
  97 0002 FF92      		push r15
  98 0004 1F93      		push r17
  99 0006 CF93      		push r28
 100 0008 DF93      		push r29
 101 000a CDB7      		in r28,__SP_L__
 102 000c DEB7      		in r29,__SP_H__
 103 000e 2697      		sbiw r28,6
 104 0010 0FB6      		in __tmp_reg__,__SREG__
 105 0012 F894      		cli
 106 0014 DEBF      		out __SP_H__,r29
 107 0016 0FBE      		out __SREG__,__tmp_reg__
 108 0018 CDBF      		out __SP_L__,r28
 109               	/* prologue end (size=13) */
 110               	.LBB2:
 111               	.LBB3:
  41:IDE.c         **** #ifdef  WINDOWS
  42:IDE.c         **** 	return TRUE;
  43:IDE.c         **** #endif
  44:IDE.c         **** 
  45:IDE.c         **** #ifdef  AVR_MMC
  46:IDE.c         **** 
  47:IDE.c         **** void PutStr(char *Str);
  48:IDE.c         **** 
  49:IDE.c         **** 
  50:IDE.c         ****     uint16 timeout = 0;
 113               	.LM2:
 114 001a EE24      		clr r14
 115 001c FF24      		clr r15
  51:IDE.c         **** 	uint8 i = 0;
  52:IDE.c         ****     uint8 cmd[] = {0x40, 0x00, 0x00, 0x00, 0x00, 0x95};  
 117               	.LM3:
 118 001e 86E0      		ldi r24,lo8(6)
 119 0020 DE01      		movw r26,r28
 120 0022 1196      		adiw r26,1
 121 0024 E0E0      		ldi r30,lo8(.LC0)
 122 0026 F0E0      		ldi r31,hi8(.LC0)
 123 0028 0190      		ld __tmp_reg__,Z+
 124 002a 0D92      		st X+,__tmp_reg__
 125 002c 8A95      		dec r24
 126 002e E1F7      		brne .-8
  53:IDE.c         **** 
  54:IDE.c         **** 	SPI_Init();
 128               	.LM4:
 129 0030 0E94 0000 		call _Z8SPI_Initv
  55:IDE.c         **** 
  56:IDE.c         **** 	DelayMs(500);
 131               	.LM5:
 132 0034 64EF      		ldi r22,lo8(500)
 133 0036 71E0      		ldi r23,hi8(500)
 134 0038 80E0      		ldi r24,hlo8(500)
 135 003a 90E0      		ldi r25,hhi8(500)
 136 003c 0E94 0000 		call _Z7DelayMsm
 137 0040 1FE0      		ldi r17,lo8(15)
 138               	.L5:
  57:IDE.c         **** 
  58:IDE.c         **** 	/* 发送一定数量的时钟脉冲 */
  59:IDE.c         **** 	for (i = 0; i < 0x10; i++) 
  60:IDE.c         ****     {
  61:IDE.c         ****         SPI_SendData(0XFF);
 140               	.LM6:
 141 0042 8FEF      		ldi r24,lo8(-1)
 142 0044 0E94 0000 		call _Z12SPI_SendDatah
 144               	.LM7:
 145 0048 1150      		subi r17,lo8(-(-1))
 146 004a 17FF      		sbrs r17,7
 147 004c FACF      		rjmp .L5
 148 004e 1FEF      		ldi r17,lo8(-1)
  62:IDE.c         ****     }
  63:IDE.c         **** 
  64:IDE.c         **** 	/* 发送CMD0 */
  65:IDE.c         **** 	if (MMC_SendCMD(cmd) != 0X01)
 150               	.LM8:
 151 0050 CE01      		movw r24,r28
 152 0052 0196      		adiw r24,1
 153 0054 0E94 0000 		call _Z11MMC_SendCMDPh
 154 0058 8130      		cpi r24,lo8(1)
 155 005a 29F0      		breq .L6
  66:IDE.c         **** 	{
  67:IDE.c         **** 	   return FALSE;
 157               	.LM9:
 158 005c 80E0      		ldi r24,lo8(0)
 159 005e 90E0      		ldi r25,hi8(0)
 160 0060 16C0      		rjmp .L1
 161               	.L13:
  68:IDE.c         **** 	}
  69:IDE.c         **** 
  70:IDE.c         **** 	/* 发送CMD1 */
  71:IDE.c         **** 	cmd[0] = 0X41;
  72:IDE.c         **** 	cmd[5] = 0XFF;
  73:IDE.c         **** 
  74:IDE.c         **** 	while (MMC_SendCMD(cmd) != 0X00)
  75:IDE.c         **** 	{		
  76:IDE.c         **** 	    if (timeout++ > 0XFFFE)     /* 等待初始化完成 */
  77:IDE.c         **** 		{
  78:IDE.c         **** 		    return FALSE;			/* 容量大的MMC卡需要比较长时间 */
 163               	.LM10:
 164 0062 C701      		movw r24,r14
 165 0064 14C0      		rjmp .L1
 166               	.L6:
 168               	.LM11:
 169 0066 81E4      		ldi r24,lo8(65)
 170 0068 8983      		std Y+1,r24
 172               	.LM12:
 173 006a 1E83      		std Y+6,r17
 175               	.LM13:
 176 006c 06C0      		rjmp .L7
 177               	.L10:
 179               	.LM14:
 180 006e 0894      		sec
 181 0070 E11C      		adc r14,__zero_reg__
 182 0072 F11C      		adc r15,__zero_reg__
 183 0074 E114      		cp r14,__zero_reg__
 184 0076 F104      		cpc r15,__zero_reg__
 185 0078 A1F3      		breq .L13
 186               	.L7:
 188               	.LM15:
 189 007a CE01      		movw r24,r28
 190 007c 0196      		adiw r24,1
 191 007e 0E94 0000 		call _Z11MMC_SendCMDPh
 192 0082 8823      		tst r24
 193 0084 A1F7      		brne .L10
  79:IDE.c         **** 		}
  80:IDE.c         **** 	}
  81:IDE.c         **** 
  82:IDE.c         **** 	SPI_HiSPD();	   				/*  提高MCU SPI速度 */
 195               	.LM16:
 196 0086 0E94 0000 		call _Z9SPI_HiSPDv
  83:IDE.c         **** 
  84:IDE.c         ****     return TRUE;
 198               	.LM17:
 199 008a 81E0      		ldi r24,lo8(1)
 200 008c 90E0      		ldi r25,hi8(1)
 201               	.L1:
 202               	.LBE3:
 203               	.LBE2:
 204               	/* epilogue: frame size=6 */
 205 008e 2696      		adiw r28,6
 206 0090 0FB6      		in __tmp_reg__,__SREG__
 207 0092 F894      		cli
 208 0094 DEBF      		out __SP_H__,r29
 209 0096 0FBE      		out __SREG__,__tmp_reg__
 210 0098 CDBF      		out __SP_L__,r28
 211 009a DF91      		pop r29
 212 009c CF91      		pop r28
 213 009e 1F91      		pop r17
 214 00a0 FF90      		pop r15
 215 00a2 EF90      		pop r14
 216 00a4 0895      		ret
 217               	/* epilogue end (size=12) */
 218               	/* function uint8 Init_IDE() size 83 (58) */
 225               		.data
 226               	.LC1:
 227 0006 40        		.byte	64
 228 0007 00        		.byte	0
 229 0008 00        		.byte	0
 230 0009 00        		.byte	0
 231 000a 00        		.byte	0
 232 000b FF        		.byte	-1
 233               		.text
 237               	.global	_Z13ReadIDESectormPh
 239               	_Z13ReadIDESectormPh:
  85:IDE.c         **** #endif
  86:IDE.c         **** 
  87:IDE.c         **** 	return FALSE;
  88:IDE.c         **** }
  89:IDE.c         **** 
  90:IDE.c         **** /*
  91:IDE.c         **** ;**************************************************************************************************
  92:IDE.c         **** ;* 函数名称 : ReadIDESector
  93:IDE.c         **** ;* 描    述 : 读IDE指定扇区
  94:IDE.c         **** ;* 输 	 入 : SecIndex: 扇区号; Buf: 扇区内容存入的地址
  95:IDE.c         **** ;*        
  96:IDE.c         **** ;* 输 	 出 : TRUE OR FALSE
  97:IDE.c         **** ;**************************************************************************************************
  98:IDE.c         **** ;*/
  99:IDE.c         **** uint8 ReadIDESector(uint32 SecIndex, uint8 *Buf)
 100:IDE.c         **** {
 241               	.LM18:
 242               	/* prologue: frame size=6 */
 243 00a6 EF92      		push r14
 244 00a8 FF92      		push r15
 245 00aa 0F93      		push r16
 246 00ac 1F93      		push r17
 247 00ae CF93      		push r28
 248 00b0 DF93      		push r29
 249 00b2 CDB7      		in r28,__SP_L__
 250 00b4 DEB7      		in r29,__SP_H__
 251 00b6 2697      		sbiw r28,6
 252 00b8 0FB6      		in __tmp_reg__,__SREG__
 253 00ba F894      		cli
 254 00bc DEBF      		out __SP_H__,r29
 255 00be 0FBE      		out __SREG__,__tmp_reg__
 256 00c0 CDBF      		out __SP_L__,r28
 257               	/* prologue end (size=14) */
 258 00c2 8B01      		movw r16,r22
 259 00c4 9C01      		movw r18,r24
 260 00c6 7A01      		movw r14,r20
 261               	.LBB4:
 262               	.LBB5:
 101:IDE.c         **** #ifdef  WINDOWS
 102:IDE.c         **** 	FILE *fp = fopen(DISK_MOUNT_FILE, "rb");
 103:IDE.c         **** 
 104:IDE.c         **** 	if (fp != NULL)
 105:IDE.c         **** 	{
 106:IDE.c         **** 		fseek(fp, (SecIndex*512), SEEK_SET);
 107:IDE.c         **** 		fread(Buf, 1, 512, fp);
 108:IDE.c         **** 		fclose(fp);
 109:IDE.c         **** 		return TRUE;
 110:IDE.c         **** 	}
 111:IDE.c         **** #endif
 112:IDE.c         **** 
 113:IDE.c         **** #ifdef  AVR_MMC
 114:IDE.c         **** 	uint16 i;
 115:IDE.c         **** 	uint8 cmd[] = {0x40, 0x00, 0x00, 0x00, 0x00, 0xff};  
 264               	.LM19:
 265 00c8 86E0      		ldi r24,lo8(6)
 266 00ca DE01      		movw r26,r28
 267 00cc 1196      		adiw r26,1
 268 00ce E0E0      		ldi r30,lo8(.LC1)
 269 00d0 F0E0      		ldi r31,hi8(.LC1)
 270 00d2 0190      		ld __tmp_reg__,Z+
 271 00d4 0D92      		st X+,__tmp_reg__
 272 00d6 8A95      		dec r24
 273 00d8 E1F7      		brne .-8
 116:IDE.c         **** 
 117:IDE.c         **** 	cmd[0] = 0X40 + 17;			/* READ SINGLE BLOCK */
 275               	.LM20:
 276 00da 81E5      		ldi r24,lo8(81)
 277 00dc 8983      		std Y+1,r24
 118:IDE.c         **** 
 119:IDE.c         **** 	SecIndex = SecIndex << 9;		/* address*512,取512的整数倍 */
 279               	.LM21:
 280 00de 59E0      		ldi r21,9
 281 00e0 000F      	1:	lsl r16
 282 00e2 111F      		rol r17
 283 00e4 221F      		rol r18
 284 00e6 331F      		rol r19
 285 00e8 5A95      		dec r21
 286 00ea D1F7      		brne 1b
 120:IDE.c         **** 
 121:IDE.c         **** 	cmd[1] = (SecIndex>>24);
 288               	.LM22:
 289 00ec 832F      		mov r24,r19
 290 00ee 9927      		clr r25
 291 00f0 AA27      		clr r26
 292 00f2 BB27      		clr r27
 293 00f4 8A83      		std Y+2,r24
 122:IDE.c         **** 	cmd[2] = (SecIndex>>16);
 295               	.LM23:
 296 00f6 C901      		movw r24,r18
 297 00f8 AA27      		clr r26
 298 00fa BB27      		clr r27
 299 00fc 8B83      		std Y+3,r24
 123:IDE.c         **** 	cmd[3] = (SecIndex>>8);
 301               	.LM24:
 302 00fe BB27      		clr r27
 303 0100 A32F      		mov r26,r19
 304 0102 922F      		mov r25,r18
 305 0104 812F      		mov r24,r17
 306 0106 8C83      		std Y+4,r24

⌨️ 快捷键说明

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