📄 dataflash.lst
字号:
282:io/dataflash.c **** //read 1 byte directly from flash:
283:io/dataflash.c **** unsigned char dataflash_read_flash(unsigned int page, unsigned int byte){
284:io/dataflash.c **** unsigned char data;
285:io/dataflash.c ****
286:io/dataflash.c **** //wait for device ready
287:io/dataflash.c **** dataflash_busy_wait();
288:io/dataflash.c ****
289:io/dataflash.c **** //select device again:
290:io/dataflash.c **** DATAFLASH_CS_LO();
291:io/dataflash.c ****
292:io/dataflash.c **** //send page read cmd:
293:io/dataflash.c **** dataflash_spi_writeread_byte(DATAFLASH_MEM_PAGE_READ);
294:io/dataflash.c ****
295:io/dataflash.c **** //send 24 address bits
296:io/dataflash.c **** dataflash_spi_writeread_byte((page>>7) & 0x0F); //send 0000 pppp (4 MSB of page adress)
297:io/dataflash.c **** dataflash_spi_writeread_byte(((page<<1)&0xFE) | ((byte>>8)&0x01) ); //send pppp pppb (7 LSB of pag
298:io/dataflash.c **** dataflash_spi_writeread_byte(byte & 0xFF); //send bbbb bbbb (8 LSB of byte address)
299:io/dataflash.c ****
300:io/dataflash.c **** //now send 32 dummy dont care bits:
301:io/dataflash.c **** dataflash_spi_writeread_byte(0x00); //8
302:io/dataflash.c **** dataflash_spi_writeread_byte(0x00); //16
303:io/dataflash.c **** dataflash_spi_writeread_byte(0x00); //24
304:io/dataflash.c **** dataflash_spi_writeread_byte(0x00); //32
305:io/dataflash.c ****
306:io/dataflash.c **** //now read the data
307:io/dataflash.c **** data = dataflash_spi_writeread_byte(0x00);
308:io/dataflash.c ****
309:io/dataflash.c **** //deselect device
310:io/dataflash.c **** DATAFLASH_CS_HI();
311:io/dataflash.c ****
312:io/dataflash.c **** //return data
313:io/dataflash.c **** return (data);
314:io/dataflash.c **** }
315:io/dataflash.c ****
316:io/dataflash.c **** //wait for dataflash ready flag
317:io/dataflash.c **** void dataflash_busy_wait(){
318:io/dataflash.c **** DATAFLASH_CS_LO();
319:io/dataflash.c ****
320:io/dataflash.c **** //send status req cmd:
321:io/dataflash.c **** dataflash_spi_writeread_byte(DATAFLASH_READ_STATUS);
322:io/dataflash.c ****
323:io/dataflash.c **** //wait for bit7 in status reg to be 1:
324:io/dataflash.c **** while ( (dataflash_spi_writeread_byte(DATAFLASH_READ_STATUS)&0x80) != 0x80){
325:io/dataflash.c **** //wait...
326:io/dataflash.c **** //uart_putc('.');
327:io/dataflash.c **** }
328:io/dataflash.c **** DATAFLASH_CS_HI();
329:io/dataflash.c **** }
330:io/dataflash.c ****
331:io/dataflash.c **** //send one byte over SPI and read one byte back
332:io/dataflash.c **** //device must be selected before !!!
333:io/dataflash.c **** unsigned char dataflash_spi_writeread_byte(unsigned char data){
334:io/dataflash.c **** unsigned char res = 0;
335:io/dataflash.c **** //shift data out
336:io/dataflash.c **** SPDR = data;
337:io/dataflash.c ****
338:io/dataflash.c **** //wait for completion
339:io/dataflash.c **** while(!(SPSR & (1<<SPIF)));
119 s 46-32,7
120 rjmp .L2
122 .LM6:
340:io/dataflash.c **** 1<<SPIF)));
341:io/dataflash.c ****
342:io/dataflash.c **** //shiftout 8 clocks, now we receive data:
123 r25,47-32
124 .LBE178:
125 0022 779B .LBE177:
343:io/dataflash.c **** ive data:
344:io/dataflash.c **** ///SPDR = 0x00;
345:io/dataflash.c **** //wait for completion
346:io/dataflash.c **** ///while(!(SPSR & (1<<SPIF)));
347:io/dataflash.c ****
348:io/dataflash.c **** // read data
349:io/dataflash.c **** res = SPDR;
350:io/dataflash.c ****
127 :
128 subi r24,lo8(-(1))
129 0026 9FB1 cpi r24,lo8(20)
130 brne .L3
131 .LBE176:
132 .LBB179:
133 .LBB180:
134 0028 8F5F .LBB181:
135 002a 8431 .LBB182:
137 .Ltext1:
139 .LM8:
140 ldi r24,lo8(41)
141 /* #APP */
142 ; 83 "c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h" 1
143 1: dec r24
1:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** /* Copyright (c) 2002, Marek Michalkiewicz
2:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** Copyright (c) 2007 Joerg Wunsch
3:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** All rights reserved.
4:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****
5:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** Redistribution and use in source and binary forms, with or without
6:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** modification, are permitted provided that the following conditions are met:
7:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****
8:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** * Redistributions of source code must retain the above copyright
9:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** notice, this list of conditions and the following disclaimer.
10:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****
11:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** * Redistributions in binary form must reproduce the above copyright
12:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** notice, this list of conditions and the following disclaimer in
13:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** the documentation and/or other materials provided with the
14:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** distribution.
15:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****
16:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** * Neither the name of the copyright holders nor the names of
17:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** contributors may be used to endorse or promote products derived
18:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** from this software without specific prior written permission.
19:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****
20:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** POSSIBILITY OF SUCH DAMAGE. */
31:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****
32:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** /* $Id: delay_basic.h,v 1.1 2007/05/13 21:23:20 joerg_wunsch Exp $ */
33:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****
34:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** #ifndef _UTIL_DELAY_BASIC_H_
35:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** #define _UTIL_DELAY_BASIC_H_ 1
36:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****
37:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** #include <inttypes.h>
38:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****
39:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** /** \file */
40:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** /** \defgroup util_delay_basic <util/delay_basic.h>: Basic busy-wait delay loops
41:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** \code
42:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** #include <util/delay_basic.h>
43:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** \endcode
44:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****
45:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** The functions in this header file implement simple delay loops
46:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** that perform a busy-waiting. They are typically used to
47:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** facilitate short delays in the program execution. They are
48:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** implemented as count-down loops with a well-known CPU cycle
49:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** count per loop iteration. As such, no other processing can
50:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** occur simultaneously. It should be kept in mind that the
51:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** functions described here do not disable interrupts.
52:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****
53:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** In general, for long delays, the use of hardware timers is
54:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** much preferrable, as they free the CPU, and allow for
55:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** concurrent processing of other events while the timer is
56:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** running. However, in particular for very short delays, the
57:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** overhead of setting up a hardware timer is too much compared
58:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** to the overall delay time.
59:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****
60:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** Two inline functions are provided for the actual delay algorithms.
61:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****
62:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** */
63:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****
64:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** #if !defined(__DOXYGEN__)
65:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** static inline void _delay_loop_1(uint8_t __count) __attribute__((always_inline));
66:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** static inline void _delay_loop_2(uint16_t __count) __attribute__((always_inline));
67:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** #endif
68:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****
69:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** /** \ingroup util_delay_basic
70:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****
71:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** Delay loop using an 8-bit counter \c __count, so up to 256
72:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** iterations are possible. (The value 256 would have to be passed
73:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** as 0.) The loop executes three CPU cycles per iteration, not
74:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** including the overhead the compiler needs to setup the counter
75:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** register.
76:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h ****
77:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** Thus, at a CPU speed of 1 MHz, delays of up to 768 microseconds
78:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** can be achieved.
79:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** */
80:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** void
81:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** _delay_loop_1(uint8_t __count)
82:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** {
83:c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h **** __asm__ volatile (
144 2
145 /* #NOAPP */
146 002e 89E2 .LBE182:
147 .LBE181:
148 .LBE180:
149 0030 8A95 .LBE179:
151 .Ltext2:
153 .LM9:
154 lds r24,98
155 ori r24,lo8(64)
156 sts 98,r24
157 .LBB183:
158 .LBB184:
159 .LBB185:
160 .LBB186:
162 0038 8064 .Ltext3:
164 .LM10:
165 ldi r24,lo8(2)
166 /* #APP */
167 ; 83 "c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h" 1
168 1: dec r24
169 brne 1b
170 ; 0 "" 2
171 /* #NOAPP */
172 003e 82E0 .LBE186:
173 .LBE185:
174 .LBE184:
175 0040 8A95 .LBE183:
177 .Ltext4:
179 .LM11:
180 lds r24,98
181 ori r24,lo8(-128)
182 sts 98,r24
183 /* epilogue start */
185 .LM12:
186 ret
194 .Lscope1:
198 .global dataflash_copy_buffer_to_page
200 dataflash_copy_buffer_to_page:
202 .LM13:
203 .LFBB2:
204 /* prologue: function */
205 /* frame size = 0 */
206 movw r18,r24
207 .LBB187:
208 .LBB188:
210 .LM14:
211 lds r24,98
212 andi r24,lo8(-65)
213 0050 9C01 sts 98,r24
214 .LBB189:
215 .LBB190:
217 .LM15:
218 0052 8091 6200 ldi r24,lo8(-41)
219 0056 8F7B out 47-32,r24
220 0058 8093 6200 .L8:
222 .LM16:
223 sbis 46-32,7
224 rjmp .L8
226 005e 8FB9 .LM17:
227 in r24,47-32
228 .LBE190:
229 .LBE189:
230 0060 779B .LBB191:
231 0062 00C0 .LBB192:
233 .LM18:
234 0064 8FB1 ldi r24,lo8(-41)
235 .L10:
236 out 47-32,r24
237 .L9:
239 .LM19:
240 sbis 46-32,7
241 0066 87ED rjmp .L9
242 .LBE192:
243 0068 8FB9 .LBE191:
245 .LM20:
246 sbis 47-32,7
247 006a 779B rjmp .L10
249 .LM21:
250 lds r24,98
251 ori r24,lo8(64)
252 sts 98,r24
253 006e 7F9B .LBE188:
254 0070 00C0 .LBE187:
256 .LM22:
257 0072 8091 6200 lds r24,98
258 0076 8064 andi r24,lo8(-65)
259 0078 8093 6200 sts 98,r24
261 .LM23:
262 tst r22
263 brne .L11
264 007c 8091 6200 .LBB193:
265 0080 8F7B .LBB194:
267 .LM24:
268 ldi r24,lo8(-125)
269 0086 6623 out 47-32,r24
270 0088 01F4 .L12:
272 .LM25:
273 sbis 46-32,7
274 rjmp .L12
275 008a 83E8 rjmp .L27
276 008c 8FB9 .L11:
277 .LBE194:
278 .LBE193:
279 .LBB195:
280 008e 779B .LBB196:
282 0092 00C0 .LM26:
283 ldi r24,lo8(-122)
284 out 47-32,r24
285 .L14:
287 .LM27:
288 sbis 46-32,7
289 rjmp .L14
290 0094 86E8 .L27:
292 .LM28:
293 in r24,47-32
294 .LBE196:
295 0098 779B .LBE195:
297 .LM29:
298 movw r24,r18
299 lsl r24
300 009c 8FB1 mov r24,r25
301 rol r24
302 sbc r25,r25
303 neg r25
304 andi r24,lo8(15)
305 009e C901 .LBB197:
306 00a0 880F .LBB198:
308 00a4 881F .LM30:
309 00a6 990B out 47-32,r24
310 00a8 9195 .L15:
312 .LM31:
313 sbis 46-32,7
314 rjmp .L15
316 00ac 8FB9 .LM32:
317 in r24,47-32
318 .LBE198:
319 .LBE197:
321 00b0 00C0 .LM33:
322 mov r24,r18
323 lsl r24
324 00b2 8FB1 .LBB199:
325 .LBB200:
327 .LM34:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -