📄 ide.lst
字号:
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 + -