⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dataflash.lst

📁 ENC28J60 System HTTP
💻 LST
📖 第 1 页 / 共 5 页
字号:
 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 + -