📄 aplif.lst
字号:
C51 COMPILER V7.02b APLIF 01/29/2007 09:36:07 PAGE 1
C51 COMPILER V7.02b, COMPILATION OF MODULE APLIF
OBJECT MODULE PLACED IN .\Output\Aplif.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Aplif.c LARGE OPTIMIZE(SIZE) BROWSE INCDIR(.\Includes) DEBUG OBJECTEXTEND P
-RINT(.\Output\Aplif.lst) OBJECT(.\Output\Aplif.obj)
stmt level source
1 /*
2 *********************************************************************************************************
3 * File: aplif.C
4 * Contents:
5 *
6 * $Date: 04/06/06 Kimi v0.1
7 * 01/05/07 kevin v0.2
8 * 01/08/07 kevin v0.3
9 *
10 * Copyright (c) 2007 Fameg, Inc. All rights reserved
11 *********************************************************************************************************
12 */
13
14 #include "fs7805.h"
15 #include "fs7805regs.h"
16 #include "aplif.h"
17 #include "string.h"
18
19
20 /*
21 *********************************************************************************************************
22 * ReadPIO8
23 *
24 * Description: Read ATA device register value
25 *
26 * Arguments : register address
27 *
28 * Returns : register value
29 *********************************************************************************************************
30 */
31 BYTE ReadPIO8 (BYTE addr)
32 {
33 1 BYTE retval;
34 1
35 1
36 1 while (!AplifIdle()); //wait for aplif idle
37 1
38 1 OUTATAPI = addr | (~ATAPI_ADDR_MASK & ATAPI_IDLE_VALUE); //set register address
39 1
40 1 retval = APLIFS_DATX_L; //start single read
41 1
42 1 while (!AplifIdle()); //wait for read flow done
43 1
44 1 retval = APLIFS_DAT_L; //read the regiser value
45 1
46 1 return (retval);
47 1 }
48
49
50 /*
51 *********************************************************************************************************
52 * ReadUDMA
53 *
54 * Description: Read data from ATA device with ultra dma mode
C51 COMPILER V7.02b APLIF 01/29/2007 09:36:07 PAGE 2
55 *
56 * Arguments : data number need to be read
57 *
58 * Returns : none
59 *********************************************************************************************************
60 */
61
62 void ReadUDMA (WORD count)
63 {
64 1 INT8U temp,i=0;
65 1
66 1 SectorCount = 0x01;
67 1 while (!AplifIdle()); //wait for aplif idle
68 1
69 1 OUTATAPI=CS(3) | DA(0) | (~ATAPI_ADDR_MASK & ATAPI_IDLE_VALUE); //set chip select and Device address v
-alue for the udma mode
70 1
71 1 APLIFTCH = (count >> 1) >> 8; //set transaction count value
72 1 APLIFTCL = (count >> 1) & 0xFF;
73 1
74 1 if (SectorCount == 0x80)
75 1 {
76 2 APLIFTCL = 0x00;
77 2 APLIFTCH = 0x80;
78 2 }
79 1
80 1 FLOWSTATE = 0x82; //enter into flowstate
81 1
82 1 temp = EPCAPLIFTRIG; //start udma read flow
83 1
84 1 while (1)
85 1 {
86 2 if ( SFI_EPINT & 0x04 ) //wait for slave fifo interrupt
87 2 {
88 3 PassIn(); //reverse SW_IN_FIFO_Toggle
89 3 SFI_EPINT = SFI_EPINT & ~0x04; //clear slave fifo interrupt
90 3 EPCCS = EPCCS | bmEP_RXTXEN; // Enable RXTX send data to usb bus
91 3 i++;
92 3 if (i == SectorCount) break;
93 3 }
94 2 }
95 1 while (!(AplifIdle())); //after all the usb data been sent and aplif enter in idle state then stop th
-is IN transaction
96 1 FLOWSTATE = 0x00 ; //leave flowstate
97 1 }
98
99
100
101
102 /*
103 *********************************************************************************************************
104 * WritePIO8
105 *
106 * Description: write ATA device register
107 *
108 * Arguments : register address and value need to be write
109 *
110 * Returns : none
111 *********************************************************************************************************
112 */
113 void WritePIO8 (BYTE addr, BYTE indata)
114 {
C51 COMPILER V7.02b APLIF 01/29/2007 09:36:07 PAGE 3
115 1
116 1 while (!AplifIdle()); //wait for aplif idle
117 1
118 1 OUTATAPI = addr | (~ATAPI_ADDR_MASK & ATAPI_IDLE_VALUE); //set register address
119 1
120 1 APLIFS_DATX_L = indata; //start single write
121 1
122 1 while (!AplifIdle()); //wait for write flow done
123 1
124 1 OUTATAPI = ATAPI_IDLE_VALUE;
125 1 }
126
127
128 /*
129 *********************************************************************************************************
130 * WriteUDMA
131 *
132 * Description: Write data to ATA device with UDMA mode
133 *
134 * Arguments : data number need to be write
135 *
136 * Returns : none
137 *********************************************************************************************************
138 */
139
140
141 void WriteUDMA (WORD count) //manual
142 {
143 1 unsigned char i = 0;
144 1
145 1 PassOut(); //pass the first frame data to slave fifo
146 1 SectorCount = 0x01;
147 1 while (!AplifIdle()); //wait for aplif idle
148 1
149 1 OUTATAPI=CS(3) | DA(0) | (~ATAPI_ADDR_MASK & ATAPI_IDLE_VALUE); //set chip select and Device address v
-alue for the udma mode
150 1
151 1 APLIFTCL = (count >> 1) & 0xFF; //set transaction count value
152 1 APLIFTCH = (count >> 1) >> 8;
153 1
154 1 if (SectorCount == 0x80)
155 1 {
156 2 APLIFTCL = 0x00;
157 2 APLIFTCH = 0x80;
158 2 }
159 1
160 1 FLOWSTATE = 0x83; //enter into flowstate
161 1
162 1 EPAAPLIFTRIG = 0xAA; //start udma write flow
163 1
164 1 while (1)
165 1 {
166 2 if ( SFI_EPINT & 0x01 ) //wait for slave fifo interrupt
167 2 {
168 3 i++;
169 3 SFI_EPINT = SFI_EPINT & ~0x01; //clear slave fifo interrupt
170 3 EP1CS = EP1CS | bmEP_RXTXEN; //enable usb receive next frame data
171 3 if (i < SectorCount)
172 3 {
173 4 while ((!(EPAFIFOCS & bmFIFO0_FULL)) && (!(EPAFIFOCS & bmFIFO1_FULL))); //wait for next fr
-ame data received in fifo then start operation
174 4 PassOut(); //pass usb data to slave fifo
C51 COMPILER V7.02b APLIF 01/29/2007 09:36:07 PAGE 4
175 4 }
176 3 else
177 3 {
178 4 break;
179 4 }
180 3 }
181 2 }
182 1 while (!AplifIdle()); //after all the usb data been sent and aplif enter in idle state then stop this
- IN transaction
183 1 FLOWSTATE = 0x00;
184 1 }
185
186
187
188 /*
189 *********************************************************************************************************
190 * ReadATAPI_STATUS_REG
191 *
192 * Description: Read ATA device status register value
193 *
194 * Arguments : none
195 *
196 * Returns : Status register value
197 *********************************************************************************************************
198 */
199 BYTE ReadATAPI_STATUS_REG (void)
200 {
201 1 return (ReadPIO8(ATA_ALT_STATUS_REG));
202 1 }
203
204 /*
205 *********************************************************************************************************
206 * AbortAplif
207 *
208 * Description: Abort aplif transaction
209 *
210 * Arguments : none
211 *
212 * Returns : none
213 *********************************************************************************************************
214 */
215 void AbortAplif (void)
216 {
217 1 APLIFABORT = 0xAA;
218 1 }
219
220
221 /*
222 *********************************************************************************************************
223 * setFeatures
224 *
225 * Description: Set
226 *
227 * Arguments : none
228 *
229 * Returns : none
230 *********************************************************************************************************
231 */
232 void setFeatures(BYTE command,BYTE subcommand)
233 {
234 1 WritePIO8(ATA_DRIVESEL_REG, 0xE0);
235 1 WaitForBusyBit();
C51 COMPILER V7.02b APLIF 01/29/2007 09:36:07 PAGE 5
236 1 WritePIO8(ATA_SECTOR_COUNT_REG,subcommand);
237 1 WritePIO8(ATAPI_FEATURE_REG,command); // opcode 0x03 used for transfer mode
238 1 WritePIO8(ATAPI_COMMAND_REG,0xef); // execute the command
239 1 WaitForBusyBit();
240 1 }
241
242 void init_udma_read()
243 {
244 1 FSLOGIC = 0x36;//0xf1
245 1 FSEQ0CTL = 0x00;
246 1 FSEQ1CTL = 0x02;
247 1 FSTB = 0x90;
248 1 FSHOLDON = 0x19;
249 1 }
250
251 void init_udma_write()
252 {
253 1 FSLOGIC = 0x70;
254 1 FSEQ0CTL = 0x00;
255 1 FSEQ1CTL = 0x08;
256 1 FSTB = 0x11;
257 1 }
258
259
260
261 void WaitForBusyBit(void)
262 {
263 1 while((ReadATAPI_STATUS_REG()&ATAPI_STATUS_BUSY_BIT));
264 1 ReadATAPI_STATUS_REG();
265 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 494 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 7
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -