📄 df.lst
字号:
C51 COMPILER V6.20c DF 07/10/2002 15:17:44 PAGE 1
C51 COMPILER V6.20c, COMPILATION OF MODULE DF
OBJECT MODULE PLACED IN ..\obj\df.obj
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE ..\..\..\lib_mem\df\df.c BROWSE INCDIR(..\src\system;..\..\..\lib) DEFINE(K
-EIL) DEBUG OBJECTEXTEND PRINT(.\df.lst) OBJECT(..\obj\df.obj)
stmt level source
1 /*C**************************************************************************
2 * $RCSfile: df.c,v $
3 *----------------------------------------------------------------------------
4 * Copyright (c) 2002 Atmel.
5 *----------------------------------------------------------------------------
6 * RELEASE: $Name: DEMO_FAT_1_2_5 $
7 * REVISION: $Revision: 1.7 $
8 * FILE_CVSID: $Id: df.c,v 1.7 2002/05/24 09:51:15 njourdan Exp $
9 *----------------------------------------------------------------------------
10 * PURPOSE:
11 * This file contains the low-level dataflash routines
12 *
13 * NOTES:
14 * Global Variables:
15 * - gl_ptr_mem: long in data space
16 *****************************************************************************/
17
18 /*_____ I N C L U D E S ____________________________________________________*/
19
20 #include "config.h" /* system configuration */
21 #include "c51_drv.h" /* c51 driver definition */
22 #include "..\..\lib\usb\usb_drv.h" /* usb driver definition */
23 #include "..\..\lib\spi\spi_drv.h" /* spi driver definition */
24 #include "df.h" /* dataflash definition */
25
26
27 /*_____ M A C R O S ________________________________________________________*/
28
29
30 /*_____ D E F I N I T I O N ________________________________________________*/
31
32 extern data Uint32 gl_ptr_mem; /* memory data pointer */
33
34 static bit df_mem_busy; /* memory in busy state */
35
36
37 /*_____ D E C L A R A T I O N ______________________________________________*/
38
39 static void df_busy (void);
40
41
42
43 /*F**************************************************************************
44 * NAME: df_init
45 *----------------------------------------------------------------------------
46 * PARAMS:
47 *
48 * return:
49 * memory number if failed
50 *----------------------------------------------------------------------------
51 * PURPOSE:
52 * Dataflash controller initialization & memory check
53 *----------------------------------------------------------------------------
54 * EXAMPLE:
C51 COMPILER V6.20c DF 07/10/2002 15:17:44 PAGE 2
55 *----------------------------------------------------------------------------
56 * NOTE:
57 *----------------------------------------------------------------------------
58 * REQUIREMENTS:
59 *****************************************************************************/
60 Byte df_init (void)
61 {
62 1 Spi_set_mode(SPI_MASTER_MODE_3);
63 1 Spi_set_rate(SPI_RATE_0);
64 1 Spi_disable_ss();
65 1 Spi_enable();
66 1 DF_CS0 = 0; /* select first memory */
67 1 Spi_write_data(DF_RD_STATUS); /* read status */
68 1 Spi_ack_cmd();
69 1 Spi_write_dummy(); /* dummy write to get status */
70 1 Spi_ack_read();
71 1 if ((Spi_read_data() & DF_MSK_DENSITY) != DF_DENSITY)
72 1 {
73 2 return (1);
74 2 }
75 1 DF_CS0 = 1;
76 1 DF_CS1 = 0; /* select second memory */
77 1 Spi_write_data(DF_RD_STATUS); /* read status */
78 1 Spi_ack_cmd();
79 1 Spi_write_dummy(); /* dummy write to get status */
80 1 Spi_ack_read();
81 1 if ((Spi_read_data() & DF_MSK_DENSITY) != DF_DENSITY)
82 1 {
83 2 return (2);
84 2 }
85 1 DF_CS1 = 1;
86 1 DF_CS2 = 0; /* select third memory */
87 1 Spi_write_data(DF_RD_STATUS); /* read status */
88 1 Spi_ack_cmd();
89 1 Spi_write_dummy(); /* dummy write to get status */
90 1 Spi_ack_read();
91 1 if ((Spi_read_data() & DF_MSK_DENSITY) != DF_DENSITY)
92 1 {
93 2 return (3);
94 2 }
95 1 DF_CS2 = 1;
96 1 DF_CS3 = 0; /* select fourth memory */
97 1 Spi_write_data(DF_RD_STATUS); /* read status */
98 1 Spi_ack_cmd();
99 1 Spi_write_dummy(); /* dummy write to get status */
100 1 Spi_ack_read();
101 1 if ((Spi_read_data() & DF_MSK_DENSITY) != DF_DENSITY)
102 1 {
103 2 return (4);
104 2 }
105 1 DF_CS3 = 1;
106 1 df_mem_busy = FALSE; /* memory ready */
107 1 return 0;
108 1 }
109
110
111 /*F**************************************************************************
112 * NAME: df_init_mem
113 *----------------------------------------------------------------------------
114 * PARAMS:
115 *
116 * return:
C51 COMPILER V6.20c DF 07/10/2002 15:17:44 PAGE 3
117 *----------------------------------------------------------------------------
118 * PURPOSE:
119 * Dataflash initialization
120 *----------------------------------------------------------------------------
121 * EXAMPLE:
122 *----------------------------------------------------------------------------
123 * NOTE:
124 *----------------------------------------------------------------------------
125 * REQUIREMENTS:
126 *****************************************************************************/
127 void df_init_mem (void)
128 {
129 1 df_mem_busy = FALSE; /* memory ready */
130 1 }
131
132
133 /*F**************************************************************************
134 * NAME: df_busy
135 *----------------------------------------------------------------------------
136 * PARAMS:
137 *
138 * return:
139 *----------------------------------------------------------------------------
140 * PURPOSE:
141 * Wait end of DataFlash busy status
142 *----------------------------------------------------------------------------
143 * EXAMPLE:
144 *----------------------------------------------------------------------------
145 * NOTE:
146 *----------------------------------------------------------------------------
147 * REQUIREMENTS:
148 *****************************************************************************/
149 void df_busy (void)
150 {
151 1 /* select right memory */
152 1 if ((((Byte*)&gl_ptr_mem)[DF_MEM_BYTEH] & DF_MEM_MASKH) == 0)
153 1 {
154 2 if ((((Byte*)&gl_ptr_mem)[DF_MEM_BYTEL] & DF_MEM_MASKL) == 0)
155 2 DF_CS0 = 0;
156 2 else
157 2 DF_CS1 = 0;
158 2 }
159 1 else
160 1 {
161 2 if ((((Byte*)&gl_ptr_mem)[DF_MEM_BYTEL] & DF_MEM_MASKL) == 0)
162 2 DF_CS2 = 0;
163 2 else
164 2 DF_CS3 = 0;
165 2 }
166 1 Spi_write_data(DF_RD_STATUS); /* read status */
167 1 Spi_ack_cmd();
168 1 Spi_write_dummy(); /* dummy write to get status */
169 1 Spi_ack_read();
170 1 while ((Spi_read_data() & DF_MSK_BIT_BUSY) == DF_MEM_BUSY)
171 1 {
172 2 Spi_write_dummy(); /* dummy write to get status */
173 2 Spi_ack_read();
174 2 }
175 1 DF_CS |= DF_DESEL_ALL; /* deselect memory */
176 1 }
177
178
C51 COMPILER V6.20c DF 07/10/2002 15:17:44 PAGE 4
179 /*F**************************************************************************
180 * NAME: df_read_open
181 *----------------------------------------------------------------------------
182 * PARAMS:
183 * pos: next read operation address
184 *
185 * return:
186 * status: TRUE: open done
187 * FALSE: open not done: memory is still busy
188 *----------------------------------------------------------------------------
189 * PURPOSE:
190 * Open memory in read mode
191 *----------------------------------------------------------------------------
192 * EXAMPLE:
193 *----------------------------------------------------------------------------
194 * NOTE:
195 * Address may not be synchronized on the beginning of a page
196 *----------------------------------------------------------------------------
197 * REQUIREMENTS:
198 *****************************************************************************/
199 bit df_read_open (Uint32 pos)
200 {
201 1 gl_ptr_mem = pos << 9; /* gl_ptr_mem = pos * 512 */
202 1 if (df_mem_busy)
203 1 {
204 2 df_mem_busy = FALSE;
205 2 df_busy(); /* wait end of programming */
206 2 }
207 1
208 1 /* select right memory */
209 1 if ((((Byte*)&gl_ptr_mem)[DF_MEM_BYTEH] & DF_MEM_MASKH) == 0)
210 1 {
211 2 if ((((Byte*)&gl_ptr_mem)[DF_MEM_BYTEL] & DF_MEM_MASKL) == 0)
212 2 DF_CS0 = 0;
213 2 else
214 2 DF_CS1 = 0;
215 2 }
216 1 else
217 1 {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -