?? ata.lst
字號:
C51 COMPILER V8.05a ATA 05/22/2009 15:28:37 PAGE 1
C51 COMPILER V8.05a, COMPILATION OF MODULE ATA
OBJECT MODULE PLACED IN ATA.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ATA.C BROWSE INCDIR(.\INCLUDE;D:\ch9\include\) DEBUG OBJECTEXTEND
line level source
1 #include <reg51.h>
2 #include <intrins.h>
3 #include <stdio.h >
4 #include "Typedef.h"
5 #include "AT89C51SND.h"
6 #include "config.h"
7 #include "constant.h"
8 #include "global.h"
9 #include "macro.h"
10 #include "external.h"
11 #include "gpio.h"
12
13 /**************************************************************************
14 * C O N S T A N T S
15 *************************************************************************/
16
17 /**************************************************************************
18 * M A C R O S
19 *************************************************************************/
20
21 /**************************************************************************
22 * D A T A T Y P E S
23 *************************************************************************/
24
25 /**************************************************************************
26 * G L O B A L D A T A
27 *************************************************************************/
28
29
30 /**************************************************************************
31 * Function Name:
-
32 *
-
33 * Descriptions:
34 *
35 * Arguments:
36 *
37 * Returns: None
-
38 **************************************************************************/
39 void ATAInit(char u8Reset)
40 {
41 1 gATACapacity = 0;
42 1 ATA_RESET();
43 1 msDelay(5);
44 1 msDelay(5);
45 1 msDelay(5);
46 1 WriteReg(DRV_HEAD,0xa0);
47 1
48 1 ATAWaitCardReady(1500);
49 1 gATACapacity = ATACapacity();
50 1
51 1 }
*** WARNING C280 IN LINE 39 OF ATA.C: 'u8Reset': unreferenced local variable
C51 COMPILER V8.05a ATA 05/22/2009 15:28:37 PAGE 2
52 /**************************************************************************
53 * Function Name:
-
54 *
-
55 * Descriptions:
56 *
57 * Arguments:
58 *
59 * Returns: None
-
60 **************************************************************************/
61 void ATA_RESET(void)
62 {
63 1 P4_5=0;
64 1 msDelay(5);
65 1 msDelay(5);
66 1 msDelay(5);
67 1 P4_5=1;
68 1
69 1 }
70 /**************************************************************************
71 * Function Name:
-
72 *
-
73 * Descriptions:
74 *
75 * Arguments:
76 *
77 * Returns: None
-
78 **************************************************************************/
79 UINT8 ATAWaitDataReady(void)
80 {
81 1 UINT8 temp;
82 1 gTB = 0;
83 1 do { temp=ReadReg(ALT_STATUS);
84 2 if ( (temp & 0x01)||(gTB>=10000) ) return temp;
85 2 } while((temp & 0x89)!=0x08); //[11/08]
86 1 gTB = 0;
87 1 do {
88 2 temp=ReadReg(STATUS);
89 2
90 2 if ( (temp & 0x01)||(gTB>=10000) ) return temp;
91 2 } while((temp & 0x89)!=0x08); //[11/08]
92 1
93 1 return 0;
94 1
95 1 }
96
97 /**************************************************************************
98 * Function Name:
-
99 *
-
100 * Descriptions:
101 *
102 * Arguments:
103 *
104 * Returns: None
-
C51 COMPILER V8.05a ATA 05/22/2009 15:28:37 PAGE 3
105 **************************************************************************/
106 /*wait BSY=0,DRDY=1*/
107 UINT8 ATAWaitCardReady(UINT16 timeout)
108 {
109 1 UINT8 temp;
110 1 gTB = 0;
111 1 do {
112 2 temp=ReadReg(ALT_STATUS);
113 2 //if ( (temp & 0x01)||(gTB>=timeout) ) return 1;//error
114 2 } while((temp & 0xC0)!=0x40);
115 1 gTB = 0;
116 1 do {
117 2 temp=ReadReg(STATUS);
118 2 //if ( (temp & 0x01)||(gTB>=timeout) ) return 1;
119 2 } while((temp & 0xC0)!=0x40);
120 1
121 1 return 0;
122 1 }
*** WARNING C280 IN LINE 107 OF ATA.C: 'timeout': unreferenced local variable
123
124 /**************************************************************************
125 * Function Name:ATAReadID
-
126 *
-
127 * Descriptions:
128 *
129 * Arguments:
130 *
131 * Returns: None
-
132 **************************************************************************/
133
134 void ATAReadID(void)
135 {
136 1 ATAWaitCardReady(6000);
137 1 WriteReg(DRV_HEAD,0XA0);
138 1 WriteReg(COMMAND,0XEC);
139 1 ATAWaitDataReady();
140 1 Read1Sector();
141 1 ATAWaitCardReady(6000);
142 1
143 1 }
144
145 /**************************************************************************
146 * Function Name:ATACapacity
-
147 *
-
148 * Descriptions:
149 *
150 * Arguments:
151 *
152 * Returns: None
-
153 **************************************************************************/
154 UINT32 ATACapacity(void)
155 {
156 1 LongByte lbTotal ;
157 1 ATAReadID() ;
158 1 lbTotal.BYTE.B3=DMA_BUF[123];
159 1 lbTotal.BYTE.B2=DMA_BUF[122];
C51 COMPILER V8.05a ATA 05/22/2009 15:28:37 PAGE 4
160 1 lbTotal.BYTE.B1=DMA_BUF[121];
161 1 lbTotal.BYTE.B0=DMA_BUF[120];
162 1 return(lbTotal.ULONG);
163 1
164 1 }
165
166 /**************************************************************************
167 * Function Name:ATAGetCapacity
-
168 *
-
169 * Descriptions:
170 *
171 * Arguments:
172 *
173 * Returns: None
-
174 **************************************************************************/
175 UINT32 ATAGetCapacity(void)
176 {
177 1 return gATACapacity;
178 1 }
179
180 /**************************************************************************
181 * Function Name:ATAMultipleRead
-
182 *
-
183 * Descriptions:
184 *
185 * Arguments:
186 *
187 * Returns: None
-
188 **************************************************************************/
189 UINT8 ATAMultipleRead(UINT32 u32SectorNo)
190 {
191 1 UINT8 i,j,Fcnt;
192 1 UINT16 bcnt=0;
193 1 bit begin_ping_pong=0;
194 1 union
195 1 {
196 1 UINT32 sn;
197 1 UINT8 secno[4];
198 1 } s;
199 1 s.sn=u32SectorNo;
200 1 if (ATAWaitCardReady(5000)) {
201 2
202 2 return 1;
203 2 }
204 1 //printf("ATAWaitCardReady\n");
205 1 // printf("gSectors:%d",gSectors);
206 1 WriteReg(DRV_HEAD,((s.secno[0] & 0x0f) | 0xE0));
207 1 WriteReg(CYH,(s.secno[1]));
208 1 WriteReg(CYL,(s.secno[2]));
209 1 WriteReg(SN, (s.secno[3]));
210 1 WriteReg(SC,gSectors);
211 1 WriteReg(COMMAND,0X20);
212 1 //printf("writeREG0k\n");
213 1 for(i=0;i<gSectors;i++)//how many sector must to read
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -