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

📄 at45081.lst

📁 web51 的一种实现
💻 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 + -