?? dataflash.lst
字號:
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)));
115 bis 46-32,7
116 rjmp .L2
118 .LM6:
340:io/dataflash.c **** 1<<SPIF)));
341:io/dataflash.c ****
342:io/dataflash.c **** //shiftout 8 clocks, now we receive data:
119 r25,47-32
120 .LBE178:
121 000e 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 ****
123 :
124 subi r24,lo8(-(1))
125 0012 9FB1 cpi r24,lo8(20)
126 brne .L3
127 .LBE176:
128 .LBB179:
129 .LBB180:
130 0014 8F5F .LBB181:
131 0016 8431 .LBB182:
133 .Ltext1:
135 .LM8:
136 ldi r24,lo8(49)
137 /* #APP */
138 ; 83 "c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h" 1
139 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 (
140 2
141 /* #NOAPP */
142 001a 81E3 .LBE182:
143 .LBE181:
144 .LBE180:
145 001c 8A95 .LBE179:
147 .Ltext2:
149 .LM9:
150 sbi 53-32,6
151 .LBB183:
152 .LBB184:
153 .LBB185:
154 .LBB186:
156 .Ltext3:
158 .LM10:
159 ldi r24,lo8(2)
160 /* #APP */
161 ; 83 "c:/winavr-20081205/lib/gcc/../../avr/include/util/delay_basic.h" 1
162 1: dec r24
163 brne 1b
164 ; 0 "" 2
165 /* #NOAPP */
166 0022 82E0 .LBE186:
167 .LBE185:
168 .LBE184:
169 0024 8A95 .LBE183:
171 .Ltext4:
173 .LM11:
174 sbi 53-32,5
175 /* epilogue start */
177 .LM12:
178 ret
186 .Lscope1:
190 .global dataflash_copy_buffer_to_page
192 dataflash_copy_buffer_to_page:
194 .LM13:
195 .LFBB2:
196 /* prologue: function */
197 /* frame size = 0 */
198 movw r18,r24
199 .LBB187:
200 .LBB188:
202 .LM14:
203 cbi 53-32,6
204 .LBB189:
205 002c 9C01 .LBB190:
207 .LM15:
208 ldi r24,lo8(-41)
209 out 47-32,r24
210 002e AE98 .L8:
212 .LM16:
213 sbis 46-32,7
214 rjmp .L8
216 0032 8FB9 .LM17:
217 in r24,47-32
218 .LBE190:
219 .LBE189:
220 0034 779B .LBB191:
221 0036 00C0 .LBB192:
223 .LM18:
224 0038 8FB1 ldi r24,lo8(-41)
225 .L10:
226 out 47-32,r24
227 .L9:
229 .LM19:
230 sbis 46-32,7
231 003a 87ED rjmp .L9
232 .LBE192:
233 003c 8FB9 .LBE191:
235 .LM20:
236 sbis 47-32,7
237 003e 779B rjmp .L10
239 .LM21:
240 sbi 53-32,6
241 .LBE188:
242 .LBE187:
244 0044 00C0 .LM22:
245 cbi 53-32,6
247 0046 AE9A .LM23:
248 tst r22
249 brne .L11
250 .LBB193:
251 .LBB194:
253 .LM24:
254 ldi r24,lo8(-125)
255 004a 6623 out 47-32,r24
256 004c 01F4 .L12:
258 .LM25:
259 sbis 46-32,7
260 rjmp .L12
261 004e 83E8 rjmp .L27
262 0050 8FB9 .L11:
263 .LBE194:
264 .LBE193:
265 .LBB195:
266 0052 779B .LBB196:
268 0056 00C0 .LM26:
269 ldi r24,lo8(-122)
270 out 47-32,r24
271 .L14:
273 .LM27:
274 sbis 46-32,7
275 rjmp .L14
276 0058 86E8 .L27:
278 .LM28:
279 in r24,47-32
280 .LBE196:
281 005c 779B .LBE195:
283 .LM29:
284 movw r24,r18
285 lsl r24
286 0060 8FB1 mov r24,r25
287 rol r24
288 sbc r25,r25
289 neg r25
290 andi r24,lo8(15)
291 0062 C901 .LBB197:
292 0064 880F .LBB198:
294 0068 881F .LM30:
295 006a 990B out 47-32,r24
296 006c 9195 .L15:
298 .LM31:
299 sbis 46-32,7
300 rjmp .L15
302 0070 8FB9 .LM32:
303 in r24,47-32
304 .LBE198:
305 .LBE197:
307 0074 00C0 .LM33:
308 mov r24,r18
309 lsl r24
310 0076 8FB1 .LBB199:
311 .LBB200:
313 .LM34:
314 out 47-32,r24
315 0078 822F .L16:
317 .LM35:
318 sbis 46-32,7
319 rjmp .L16
321 007c 8FB9 .LM36:
322 in r24,47-32
323 .LBE200:
324 .LBE199:
325 007e 779B .LBB201:
326 0080 00C0 .LBB202:
328 .LM37:
329 0082 8FB1 out 47-32,__zero_reg__
330 .L17:
332 .LM38:
333 sbis 46-32,7
334 rjmp .L17
336 0084 1FB8 .LM39:
337 in r24,47-32
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -