📄 ideio.lst
字号:
C51 COMPILER V7.50 IDEIO 11/28/2007 08:34:16 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE IDEIO
OBJECT MODULE PLACED IN ideio.obj
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE lib_mcu\ide\ideio.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\ideio.lst) OBJE
-CT(ideio.obj)
line level source
1 /*C**************************************************************************
2 * NAME: ideio.c
3 *----------------------------------------------------------------------------
4 * Copyright (c) 2003 Atmel.
5 *----------------------------------------------------------------------------
6 * RELEASE: snd1c-refd-nf-4_0_3
7 * REVISION: 1.21
8 *----------------------------------------------------------------------------
9 * PURPOSE:
10 *
11 *****************************************************************************/
12
13
14 /*_____ I N C L U D E S ____________________________________________________*/
15 #include "config.h" /* system configuration */
16 #include "ideio.h"
17 #include "..\usb\usb_drv.h" /* usb driver definition */
18 #include "lib_mcu\lcd\lcd_drv.h" /* c51 driver definition */
19 //#include "lib_mcu\serial\serial.h"
20
21 #define Usb_clear_RXOUTB0() {if(UEPSTAX & 0x42) UEPSTAX &= 0xbd;}
22
23 extern bdata bit gl_hdd_buffer_flag;
24 extern xdata Byte gl_hdd_buffer[512];
25 extern xdata Byte fat_buf_sector[512];
26 extern xdata uint gl_hdd_buffer_ptr; //hdd_buffer[]的序列号
27 extern data Uint32 dCBWDataTransferLength;
28 extern data Uint16 hdd_data_length;
29
30 data Uint32 hdd_current_sector;
31
32 extern uchar HDD_MANUFACTURER_ID[8];
33 extern uchar HDD_PRODUCT_ID[16];
34 //extern uchar HDD_REVITION[4];
35
36 extern void usb_mass_storage_csw (void);
37
38
39 /**********************************************************
40 *函数名称:void DriveID(void) *
41 *用途:读硬盘ID *
42 ***********************************************************/
43 void DriveID(void)
44 {
45 1 uint i;
46 1
47 1 do{ACC=FILE7;}while(BSY);
48 1 FILE7=0xec;
49 1
50 1 do{ACC=FILE7;}while(BSY|!DRQ);
51 1
52 1 for (i = 0; i<512;)
53 1 {
54 2 gl_hdd_buffer[i++]=FILE0;
C51 COMPILER V7.50 IDEIO 11/28/2007 08:34:16 PAGE 2
55 2 gl_hdd_buffer[i++]=DAT16H;
56 2 }
57 1
58 1 HDD_MANUFACTURER_ID[1] = gl_hdd_buffer[54];
59 1 HDD_MANUFACTURER_ID[0] = gl_hdd_buffer[55];
60 1 HDD_MANUFACTURER_ID[3] = gl_hdd_buffer[56];
61 1 HDD_MANUFACTURER_ID[2] = gl_hdd_buffer[57];
62 1 HDD_MANUFACTURER_ID[5] = gl_hdd_buffer[58];
63 1 HDD_MANUFACTURER_ID[4] = gl_hdd_buffer[59];
64 1 HDD_MANUFACTURER_ID[7] = gl_hdd_buffer[60];
65 1 HDD_MANUFACTURER_ID[6] = gl_hdd_buffer[61];
66 1
67 1 HDD_PRODUCT_ID[1] = gl_hdd_buffer[62];
68 1 HDD_PRODUCT_ID[0] = gl_hdd_buffer[63];
69 1 HDD_PRODUCT_ID[3] = gl_hdd_buffer[64];
70 1 HDD_PRODUCT_ID[2] = gl_hdd_buffer[65];
71 1 HDD_PRODUCT_ID[5] = gl_hdd_buffer[66];
72 1 HDD_PRODUCT_ID[4] = gl_hdd_buffer[67];
73 1 HDD_PRODUCT_ID[7] = gl_hdd_buffer[68];
74 1 HDD_PRODUCT_ID[6] = gl_hdd_buffer[69];
75 1 HDD_PRODUCT_ID[9] = gl_hdd_buffer[70];
76 1 HDD_PRODUCT_ID[8] = gl_hdd_buffer[71];
77 1 HDD_PRODUCT_ID[11] = gl_hdd_buffer[72];
78 1 HDD_PRODUCT_ID[10] = gl_hdd_buffer[73];
79 1 HDD_PRODUCT_ID[13] = gl_hdd_buffer[74];
80 1 HDD_PRODUCT_ID[12] = gl_hdd_buffer[75];
81 1 HDD_PRODUCT_ID[15] = gl_hdd_buffer[76];
82 1 HDD_PRODUCT_ID[14] = gl_hdd_buffer[77];
83 1
84 1 }
85
86
87
88
89 /*********************************************************
90 *函数名称:WriteCommand(command) *
91 *函数用途:写命令 *
92 **********************************************************/
93 WriteCommand(command)
94 {
95 1 do{ACC = FILE7;}while(BSY);
96 1 FILE7 = command;
97 1 }
98
99 /**********************************************************
100 *函数名称:bit ata_install(void) *
101 *用途:初始化硬盘 *
102 ***********************************************************/
103 bit ata_install(void)
104 {
105 1 INTQ = 1;
106 1 ARST = 0;
107 1
108 1 ARST = 1;
109 1
110 1 AUXR = 0x5c; //设置EXT16=1,使能16-BIT传送模式
111 1
112 1 do{FILE6 = 0xa0; ACC = FILE7;} while(!DRDY | BSY);
113 1 FILE6 = 0x20;
114 1 FILE2 = 64;
115 1 FILE7 = 0x91;
116 1
C51 COMPILER V7.50 IDEIO 11/28/2007 08:34:16 PAGE 3
117 1 do{ACC = FILE7;} while(BSY);
118 1 FILE7 = 0x10;
119 1
120 1 do{ACC = FILE7;} while(BSY);
121 1
122 1 DriveID();
123 1
124 1 return OK;
125 1 }
126
127 /**********************************************************
128 *函数名称:HardDiskSleep(void) *
129 *用途:硬盘休眠 *
130 ***********************************************************/
131 void HardDiskSleep(void)
132 {
133 1 do{ACC = FILE7;} while(BSY); //wait for NO busy
134 1 WriteCommand(0xe0); //write command code
135 1 // do{ACC = FILE7;} while(BSY |! DRQ); //wait for noBUSY and data request
136 1 }
137 /**********************************************************
138 *函数名称:bit hdd_read_open(Uint32 hdd_sector) *
139 *用途:读硬盘OPEN动作 *
140 ***********************************************************/
141 bit hdd_read_open(Uint32 hdd_sector)
142 {
143 1 uint i = 0;
144 1 uchar head,cylinderh,cylinderl,sector;
145 1 hdd_current_sector = hdd_sector;
146 1 head = ((Byte*)&hdd_current_sector)[0];
147 1 cylinderh = ((Byte*)&hdd_current_sector)[1];
148 1 cylinderl = ((Byte*)&hdd_current_sector)[2];
149 1 sector = ((Byte*)&hdd_current_sector)[3];
150 1 do{ACC = FILE7;} while(BSY); //wait for NO busy
151 1 FILE6 = (0xe0 | (head & 0x0f));
152 1 FILE5 = cylinderh; //high 2-bit cylinder
153 1 FILE4 = cylinderl; //low 8-bit cylinder
154 1 FILE3 = sector; //start sector
155 1 FILE2 = 0x01; //sector counter
156 1 WriteCommand(0x20); //write command code
157 1
158 1 do{ACC = FILE7;} while(BSY |! DRQ); //wait for noBUSY and data request
159 1
160 1 ACC = FILE7;
161 1 if (ERR)
162 1 return KO;
163 1
164 1 for (i = 0; i<512;)
165 1 {
166 2 gl_hdd_buffer[i++]=FILE0;
167 2 gl_hdd_buffer[i++]=DAT16H;
168 2 }
169 1
170 1 gl_hdd_buffer_ptr = 0;
171 1 gl_hdd_buffer_flag = 1;
172 1 return OK;
173 1
174 1 }
175
176
177 /**********************************************************
178 *函数名称:Byte hdd_read_byte(void) *
C51 COMPILER V7.50 IDEIO 11/28/2007 08:34:16 PAGE 4
179 *用途:读硬盘缓存中的一个字节 *
180 ***********************************************************/
181 Byte hdd_read_byte(void)
182 {
183 1 gl_hdd_buffer_ptr++;
184 1
185 1 if (gl_hdd_buffer_ptr > 512)
186 1 {
187 2 gl_hdd_buffer_ptr = 0;
188 2 hdd_current_sector +=1;
189 2 hdd_read_open(hdd_current_sector);
190 2 gl_hdd_buffer_ptr++;
191 2 }
192 1
193 1 return (gl_hdd_buffer[gl_hdd_buffer_ptr - 1]);
194 1 }
195
196
197 /**********************************************************
198 *函数名称:bit hdd_read_close(void) *
199 *用途:读硬盘CLOSE动作 *
200 ***********************************************************/
201 bit hdd_read_close(void)
202 {
203 1 gl_hdd_buffer_flag = 0;
204 1 gl_hdd_buffer_ptr = 0;
205 1 return OK;
206 1 }
207
208
209 /**********************************************************
210 *函数名称:bit hdd_read_one_sector(Uint32 hdd_sector) *
211 *用途:将硬盘中一个扇区的数据送入USB接口 *
212 ***********************************************************/
213 bit hdd_read_one_sector(Uint32 hdd_sector)
214 {
215 1 Byte i;
216 1
217 1 if (hdd_read_open(hdd_sector) == OK)
218 1 {
219 2 for (i = 0; i < 8; i++)
220 2 {
221 3 Usb_select_ep(EP_IN);
222 3 /* read 64 bytes from card */
223 3 Usb_write_byte(hdd_read_byte());
224 3 Usb_write_byte(hdd_read_byte());
225 3 Usb_write_byte(hdd_read_byte());
226 3 Usb_write_byte(hdd_read_byte());
227 3 Usb_write_byte(hdd_read_byte());
228 3 Usb_write_byte(hdd_read_byte());
229 3 Usb_write_byte(hdd_read_byte());
230 3 Usb_write_byte(hdd_read_byte());
231 3 Usb_write_byte(hdd_read_byte());
232 3 Usb_write_byte(hdd_read_byte());
233 3 Usb_write_byte(hdd_read_byte());
234 3 Usb_write_byte(hdd_read_byte());
235 3 Usb_write_byte(hdd_read_byte());
236 3 Usb_write_byte(hdd_read_byte());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -