?? at45081.lst
字號:
C51 COMPILER V7.00 AT45081 09/19/2002 15:00:49 PAGE 1
C51 COMPILER V7.00, COMPILATION OF MODULE AT45081
OBJECT MODULE PLACED IN AT45081.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE AT45081.c DB OE
stmt level source
1
2 #include "c8051f020.h" // SFR declarations
3 #include <stdio.h>
4 #include "TCPIP.h"
5 #include "serial.h"
6
7 sbit P20 = P2^0;
8 sbit P21 = P2^1;
9 sbit P22 = P2^2;
10 sbit P23 = P2^3;
11 sbit P24 = P2^4;
12 sbit P25 = P2^5;
13 sbit P26 = P2^6;
14 sbit P27 = P2^7;
15 sbit P37 = P3^7;
16
17
18 #define DF_RESET P5 &= ~(0x1); P5 |= 0x1; // P50 DataFlash reset port pin (P20)
19 //#define DF_RDY_BUSY while(!(P4&0x10)); // P44 DataFlash ready/busy status port pin (P21)
20 #define DF_RDY_BUSY P37=1; while(!(P3&0x80)); //P37 DataFlash rea
21 //#define DF_WRITE_PROTECT P51 // DataFlash boot sector write protection (P22)
22 #define DF_CHIP_SELECT P5 &= ~(0x8); // P53 DataFlash chip select port pin (P23)
23 #define DF_CHIP_NOSELECT P5 |= 0x8; // P53 DataFlash chip select port pin (P23)
24
25 #define R8019_CHIP_SELECT ES0=0;P4 = 0xF8;
26 #define RAM_CHIP_SELECT_BANK0 ES0=1;P4 = 0xF4;
27 #define RAM_CHIP_SELECT_BANK1 P4 = 0xF5;
28
29
30 #define BUFFER_1 0x00 // buffer 1
31 #define BUFFER_2 0x01 // buffer 2
32
33 #define BUFFER_1_WRITE 0x84 // buffer 1 write
34 #define BUFFER_2_WRITE 0x87 // buffer 2 write
35
36 #define BUFFER_1_READ 0x54 // buffer 1 read (change to 0xD4 for SPI mode 0,3)
37 #define BUFFER_2_READ 0x56 // buffer 2 read (change to 0xD6 for SPI mode 0,3)
38 #define B1_TO_PAGE_WITH_ERASE 0x83 // buffer 1 to main memory page program with built-in erase
39 #define B2_TO_PAGE_WITH_ERASE 0x86 // buffer 2 to main memory page program with built-in erase
40 #define B1_TO_PAGE_WITHOUT_ERASE 0x88 // buffer 1 to main memory page program without built-in erase
41 #define B2_TO_PAGE_WITHOUT_ERASE 0x89 // buffer 2 to main memory page program without built-in erase
42 #define PAGE_PROG_THROUGH_B1 0x82 // main memory page program through buffer 1
43 #define PAGE_PROG_THROUGH_B2 0x85 // main memory page program through buffer 2
44 #define AUTO_PAGE_REWRITE_THROUGH_B1 0x58 // auto page rewrite through buffer 1
45 #define AUTO_PAGE_REWRITE_THROUGH_B2 0x59 // auto page rewrite through buffer 2
46 #define PAGE_TO_B1_COMP 0x60 // main memory page compare to buffer 1
47 #define PAGE_TO_B2_COMP 0x61 // main memory page compare to buffer 2
48 #define PAGE_TO_B1_XFER 0x53 // main memory page to buffer 1 transfer
49 #define PAGE_TO_B2_XFER 0x55 // main memory page to buffer 2 transfer
50 // DataFlash status register for reading density, compare status,
51 // and ready/busy status (change to 0xD7 for SPI mode 0,3)
52 #define STATUS_REGISTER 0x57
53 #define MAIN_MEMORY_PAGE_READ 0x52 // main memory page read (change to 0xD2 for SPI mode 0,3)
54 #define PAGE_ERASE 0x81 // erase a 528 byte page
55 #define BLOCK_ERASE 0x50 // erase 512 pages
C51 COMPILER V7.00 AT45081 09/19/2002 15:00:49 PAGE 2
56
57 unsigned int AT450XXPageAddr;
58
59
60 void SendSPIByte(unsigned char ch)
61 {
62 1 SPIF = 0;
63 1 SPI0DAT = ch;
64 1 while (SPIF == 0); // wait for data transfer to be completed
65 1 }
66
67 unsigned char GetSPIByte(void)
68 {
69 1 SPIF = 0;
70 1 SPI0DAT = 0;
71 1 while (SPIF == 0);
72 1 return SPI0DAT; // read data from SPI
73 1 }
74
75 /*整片擦除*/ //081 total 256 block 16sector per block
76 void ErasingDataFlash(void) //081 total 512 block 16sector per block
77 {
78 1 unsigned int block_counter = 0;
79 1 DF_RDY_BUSY; // check if flash is busy
80 1 while (block_counter < 512)
81 1 {
82 2 DF_CHIP_SELECT; // select DataFlash
83 2 SendSPIByte(BLOCK_ERASE); //0x50 erase 512 pages
84 2 SendSPIByte((char)(block_counter>>4)); //r r r PA11 PA10 PA9 PA8 PA7
85 2 SendSPIByte((char)(block_counter<<4)); //PA6 PA5 PA4 PA3 X X X 0
86 2 SendSPIByte(0x00);
87 2 DF_CHIP_NOSELECT; // unselect DataFlash
88 2 block_counter++;
89 2 DF_RDY_BUSY; // wait until block is erased
90 2 }
91 1 }
92 //頁擦除
93 void EraseFlashPage(void)
94 {
95 1 DF_RDY_BUSY; // check if flash is busy
96 1 DF_CHIP_SELECT;
97 1 SendSPIByte(PAGE_ERASE);
98 1 SendSPIByte((unsigned char)(AT450XXPageAddr>>7));
99 1 SendSPIByte((unsigned char)(AT450XXPageAddr<<1));
100 1 SendSPIByte(0x00);
101 1 DF_CHIP_NOSELECT;
102 1 }
103 //讀緩存
104 void FlashBuffer1Read(unsigned int star_addr,unsigned int len, unsigned char *buffer) //從緩沖區1的指定位
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -