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

📄 test_spi_w25x.lst

📁 大容量Flash存储器W25X16,W25X32,W25X64读写擦除程序
💻 LST
字号:
C51 COMPILER V7.50   TEST_SPI_W25X                                                         01/12/2009 23:18:14 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE TEST_SPI_W25X
OBJECT MODULE PLACED IN Test_SPI_W25X.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil750\C51\BIN\C51.EXE Test_SPI_W25X.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          
   2          #define uint8   unsigned char
   3          #define uint16  unsigned int
   4          #define uchar   unsigned char
   5          #define uint    unsigned int
   6          #define uint32  unsigned long
   7          
   8          #include <SST89x5xxRD2.H>
   9          #include <intrins.h>
  10          #include <W25X_M.H>
  11                  
  12          void    init_cpu(void);
  13          void    delay(uchar tt);
  14          void    trace(uchar *str,uchar len);
  15          void    test_page(uchar addr);
  16          void    read_page(uchar addr);
  17          void    Verify(uchar byte, uchar cor_byte);
  18          
  19          uint8   Rxtemp;
  20          bit             MYTI;
  21          uint8   tx_buff[16];
  22          uint8   upper_128[16];
  23          bit             rx_ok;
  24          
  25          void main(void)
  26          {       uint i;
  27   1              
  28   1              init_cpu();     
  29   1              SPI_init();
  30   1      
  31   1              tx_buff[0]='O';
  32   1              tx_buff[1]='K';
  33   1              trace(tx_buff,2);
  34   1      
  35   1              for(;;)
  36   1              {       if(rx_ok == 1)
  37   2                      {       rx_ok = 0;
  38   3                              switch(Rxtemp)
  39   3                              {       case 0x01:
  40   4                                              Rxtemp = 0;
  41   4                                              tx_buff[0] = SPI_Read_ID1();
  42   4                                              trace(tx_buff,1);
  43   4                                              break;
  44   4                                      case 0x02:
  45   4                                              i = SPI_Read_ID2(0x00);
  46   4                                              tx_buff[1] = (uchar)i;
  47   4                                              tx_buff[0] = (uchar)(i>>8);
  48   4                                              trace(tx_buff,2);
  49   4                                              break;
  50   4                                      case 0x03:
  51   4                                              i = SPI_Read_ID3();
  52   4                                              tx_buff[1] = (uchar)i;
  53   4                                              tx_buff[0] = (uchar)(i>>8);
  54   4                                              trace(tx_buff,3);
  55   4                                              break;
C51 COMPILER V7.50   TEST_SPI_W25X                                                         01/12/2009 23:18:14 PAGE 2   

  56   4                                      case 0x04:
  57   4                                              tx_buff[0] = SPI_Read_Byte(0x00000000);
  58   4                                              trace(tx_buff,1);
  59   4                                              break;
  60   4                                      case 0x05:
  61   4                                              tx_buff[0] = 0x55;
  62   4                                              SPI_Write_Byte(0x00000000,0xa5);
  63   4                                              trace(tx_buff,1);
  64   4                                              break;
  65   4                                      case 0x06:
  66   4                                              tx_buff[0] = SPI_Read_StatusReg();
  67   4                                              trace(tx_buff,1);
  68   4                                              break;
  69   4                                      case 0x07:
  70   4                                              SPI_Write_Enable();     
  71   4                                              break;
  72   4                                      case 0x08:
  73   4                                              upper_128[0]=0x01;upper_128[1]=0x02;upper_128[2]=0x03;upper_128[3]=0x04;
  74   4                                              SPI_Write_nBytes(0x00000000,4);
  75   4                                              break;
  76   4                                      case 0x09:
  77   4                                              SPI_Erase_Chip();
  78   4                                              break;
  79   4                                      case 0x0a:
  80   4                                              SPI_Erase_Sector(0x000ff000);
  81   4                                              while(1)
  82   4                                              {       tx_buff[0] = SPI_Read_StatusReg();
  83   5                                                      if(tx_buff[0] == 0)
  84   5                                                      {       trace(tx_buff,1);
  85   6                                                              break;
  86   6                                                      }
  87   5                                              }
  88   4                                              break;
  89   4                                      case 0x0b:
  90   4                                              test_page(0x00);
  91   4                                              break;
  92   4                                      case 0x0c:
  93   4                                              read_page(0x00);
  94   4                                              break;
  95   4                                      default:
  96   4                                              break;
  97   4                              }                       
  98   3                      }                       
  99   2              }
 100   1      }
 101          
 102          void init_cpu(void)
 103          {       TMOD = 0x21;                    
 104   1              PCON = PCON | 0x80;             //波特率加倍
 105   1              SCON  = 0x50;                   //异步、10位、波特率可变,无校验位
 106   1              TH1   = 0xfd;            //在11.0592M晶振下,波特率是9600,
 107   1          TL1   = 0xfd;                       
 108   1          TR1   = 1;                          //T1 timer run
 109   1          ES    = 1;                          //uart interrupt enable 
 110   1              EA = 1;                                 //all interrupt enable
 111   1      }
 112          
 113          //串口中断程序
 114          void UART_isr(void) interrupt 4
 115          { 
 116   1              if(RI)
 117   1          {
C51 COMPILER V7.50   TEST_SPI_W25X                                                         01/12/2009 23:18:14 PAGE 3   

 118   2              RI = 0;
 119   2              Rxtemp = SBUF;   //接收
 120   2              //SBUF = Rxtemp;         //发送
 121   2              rx_ok = 1;
 122   2                      return;
 123   2              }
 124   1              if(TI)
 125   1              {
 126   2                      TI = 0;
 127   2                      MYTI = 1;               
 128   2              }
 129   1      }
 130          void test_page(uchar addr)
 131          {       uint i; uchar byte;
 132   1              uint32 Dst_Addr;        
 133   1              W25X_CS = 0;                                                                                    //      enable device
 134   1              SPI_Write_Enable();                                                                             //      set WEL
 135   1              W25X_CS = 0;
 136   1              Dst_Addr = (uint32)addr*256;
 137   1              Dst_Addr = 0x0ff000;//(uint32)addr*256;
 138   1              SPI_Send_Byte(W25X_PageProgram);                                                //      send Byte Program command
 139   1              SPI_Send_Byte((uchar)((Dst_Addr & 0xFFFFFF) >> 16));    //      send 3 address bytes
 140   1              SPI_Send_Byte((uchar)((Dst_Addr & 0xFFFF) >> 8));
 141   1              SPI_Send_Byte((uchar)(Dst_Addr & 0xFF));
 142   1              
 143   1              for (i = 0; i < 256; i++)                                                               //      send byte to be programmed
 144   1                      SPI_Send_Byte(i);
 145   1              W25X_CS = 1;    
 146   1              
 147   1              delay_nms(5);
 148   1              
 149   1              W25X_CS = 0;
 150   1              while(1)
 151   1              {       tx_buff[0] = SPI_Read_StatusReg();
 152   2                      trace(tx_buff,1);
 153   2                      if(tx_buff[0] == 0)     break;
 154   2              }
 155   1              Dst_Addr = 0x0ff000;
 156   1              for (i = 0; i < 256; i++)
 157   1              {       byte = SPI_Read_Byte(Dst_Addr+i);
 158   2                      ES = 0;
 159   2                      SBUF = byte;
 160   2                      while (TI == 0);
 161   2                      TI = 0;
 162   2                      ES = 1;
 163   2              }
 164   1              W25X_CS = 1;
 165   1      }
 166          //=================================================================================================
 167          void read_page(uchar addr)
 168          {       uint i;
 169   1              uchar byte;
 170   1              uint32 Dst_Addr;
 171   1              Dst_Addr = addr*256;
 172   1              Dst_Addr = 0x0ff000;
 173   1              W25X_CS = 0;
 174   1              for (i = 0; i < 256; i++)
 175   1              {       byte = SPI_Read_Byte(Dst_Addr+i);
 176   2                      ES = 0;
 177   2                      SBUF = byte;
 178   2                      while (TI == 0);
 179   2                      TI = 0;
C51 COMPILER V7.50   TEST_SPI_W25X                                                         01/12/2009 23:18:14 PAGE 4   

 180   2                      ES = 1;
 181   2              }
 182   1              W25X_CS = 1;
 183   1      }
 184          //=================================================================================================
 185          void Verify(uchar byte, uchar cor_byte)
 186          {       if (byte != cor_byte)
 187   1              {       while(1);
 188   2                              //LED_Error = 0; /* display to view error on LED. */                    
 189   2              }
 190   1      }
 191          //=================================================================================================
 192          void myputchar(uchar c)
 193          {       
 194   1              ES = 0;
 195   1              SBUF = c;
 196   1              while (TI == 0);
 197   1              TI = 0;
 198   1              ES = 1;
 199   1      }
 200          //=================================================================================================
 201          void trace(uchar *str,uchar len)
 202          {       uint i;
 203   1              for(i=0;i<len;i++)      {       myputchar(*str);        str++;  }
 204   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    677    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     33      16
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      2    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -