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

📄 spidrv.lst

📁 大容量Flash存储器W25X16,W25X32,W25X64读写擦除程序
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.50   SPIDRV                                                                01/11/2009 22:30:34 PAGE 1   


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

line level    source

   1          /****************************************************************************/
   2          /*     深圳恒森微电子有限公司  (华邦单片机香港及中国区代理商)                 */
   3          /*     香港恒森科技有限公司    (华邦单片机香港及中国区代理商)                 */
   4          /*     陈文    email:chenwen@hengsen.cn (有 bug 请提交)                   */
   5          /****************************************************************************/
   6          /*  文件名:     spidrv.c                                                                                                                */
   7          /*      版本                                    1.0                                                                                             */
   8          /*  创建日期:                           2007-10-29 10:58                                                                */
   9          /*  概述:       本文件为 w79e823   读写 SPI flash程序                                                   */
  10          /*--------------------------------------------------------------------------*/
  11          /*  历史修改记录:                                                                                                                      */
  12          /*  名字                   日期                   注释                                          */
  13          /*  陈文                   2007.10.28           ver 1.0                                         */
  14          /****************************************************************************/
  15          #include <SST89x5xxRD2.H>
  16          #include <intrins.h>
  17          #define uint8 unsigned char
  18          #define uint16 unsigned int
  19          #define uchar unsigned char
  20          #define uint unsigned int
  21          #define uint32 unsigned long
  22          
  23          sbit    W25X_WP = P1^3;
  24          sbit    W25X_CS = P1^4;
  25          sbit    W25X_DO = P1^5;
  26          sbit    W25X_DI = P1^6;
  27          sbit    W25X_CLK= P1^7;
  28          
  29          
  30          #define W25X_WriteEnable                0x06
  31          #define W25X_WriteDisable               0x04
  32          #define W25X_ReadStatusReg              0x05
  33          #define W25X_WriteStatusReg             0x01
  34          #define W25X_ReadData                   0x03
  35          #define W25X_FastReadData               0x0B
  36          #define W25X_FastReadDual               0x3B
  37          #define W25X_PageProgram                0x02
  38          #define W25X_BlockErase                 0xD8
  39          #define W25X_SectorErase                0x20
  40          #define W25X_ChipErase                  0xC7
  41          #define W25X_PowerDown                  0xB9
  42          #define W25X_ReleasePowerDown   0xAB
  43          #define W25X_DeviceID                   0xAB
  44          #define W25X_ManufactDeviceID   0x90
  45          #define W25X_JedecDeviceID              0x9F
  46          
  47                  
  48          void    init_cpu(void);
  49          void    delay(uchar tt);
  50          void    trace(uchar *str,uchar len);
  51          void    test_page(uchar addr);
  52          void    read_page(uchar addr);
  53          void    Verify(uchar byte, uchar cor_byte);
  54          
  55          void    SPI_init();
C51 COMPILER V7.50   SPIDRV                                                                01/11/2009 22:30:34 PAGE 2   

  56          
  57          void    SPI_Send_Byte(uchar out);
  58          uchar   SPI_Get_Byte();
  59          void    SPI_Wait_Busy();
  60          
  61          uchar   SPI_Read_StatusReg();
  62          void    SPI_Write_StatusReg(byte);
  63          void    SPI_Write_Enable();
  64          void    SPI_PowerDown();
  65          void    SPI_ReleasePowerDown();
  66          
  67          uchar   SPI_Read_Byte(uint32 Dst_Addr);
  68          void    SPI_Read_nBytes(uint32 Dst_Addr, uchar nBytes_128);
  69          uchar   SPI_FastRead_Byte(uint32 Dst_Addr);
  70          void    SPI_FastRead_nBytes(uint32 Dst_Addr, uchar nBytes_128);
  71          
  72          void    SPI_Write_Byte(uint32 Dst_Addr, uchar byte);
  73          void    SPI_Write_nBytes(uint32 Dst_Addr, uchar nBytes_128);
  74          void    SPI_WriteW25X_Disable();
  75          
  76          void    SPI_Erase_Chip();
  77          void    SPI_Erase_Sector(uint32 Dst_Addr);
  78          
  79          uchar   SPI_Read_ID1();
  80          uint    SPI_Read_ID2(uchar ID_Addr);
  81          uint    SPI_Read_ID3();
  82          
  83          
  84          
  85          uint8 Rxtemp;
  86          bit MYTI;
  87          uint8 tx_buff[16];
  88          uint8 upper_128[16];
  89          bit rx_ok;
  90          #define nop() _nop_()
  91          
  92          void delay_nms(uchar i)
  93          {       uchar  j;
  94   1              i=i*2;
  95   1              for(;i>0;i--)   {   j = 246;    while(--j);     }
  96   1      }
  97          
  98          void main(void)
  99          {       uint i;
 100   1              
 101   1              init_cpu();     
 102   1              SPI_init();
 103   1      
 104   1              tx_buff[0]='O';
 105   1              tx_buff[1]='K';
 106   1              trace(tx_buff,2);
 107   1      
 108   1              for(;;)
 109   1              {       if(rx_ok == 1)
 110   2                      {       rx_ok = 0;
 111   3                              switch(Rxtemp)
 112   3                              {       case 0x01:
 113   4                                              Rxtemp = 0;
 114   4                                              tx_buff[0] = SPI_Read_ID1();
 115   4                                              trace(tx_buff,1);
 116   4                                              break;
 117   4                                      case 0x02:
C51 COMPILER V7.50   SPIDRV                                                                01/11/2009 22:30:34 PAGE 3   

 118   4                                              i = SPI_Read_ID2(0x00);
 119   4                                              tx_buff[1] = (uchar)i;
 120   4                                              tx_buff[0] = (uchar)(i>>8);
 121   4                                              trace(tx_buff,2);
 122   4                                              break;
 123   4                                      case 0x03:
 124   4                                              i = SPI_Read_ID3();
 125   4                                              tx_buff[1] = (uchar)i;
 126   4                                              tx_buff[0] = (uchar)(i>>8);
 127   4                                              trace(tx_buff,3);
 128   4                                              break;
 129   4                                      case 0x04:
 130   4                                              tx_buff[0] = SPI_Read_Byte(0x00000000);
 131   4                                              trace(tx_buff,1);
 132   4                                              break;
 133   4                                      case 0x05:
 134   4                                              tx_buff[0] = 0x55;
 135   4                                              SPI_Write_Byte(0x00000000,0xa5);
 136   4                                              trace(tx_buff,1);
 137   4                                              break;
 138   4                                      case 0x06:
 139   4                                              tx_buff[0] = SPI_Read_StatusReg();
 140   4                                              trace(tx_buff,1);
 141   4                                              break;
 142   4                                      case 0x07:
 143   4                                              SPI_Write_Enable();     
 144   4                                              break;
 145   4                                      case 0x08:
 146   4                                              upper_128[0]=0x01;upper_128[1]=0x02;upper_128[2]=0x03;upper_128[3]=0x04;
 147   4                                              SPI_Write_nBytes(0x00000000,4);
 148   4                                              break;
 149   4                                      case 0x09:
 150   4                                              SPI_Erase_Chip();
 151   4                                              break;
 152   4                                      case 0x0a:
 153   4                                              SPI_Erase_Sector(0x000ff000);
 154   4                                              while(1)
 155   4                                              {       tx_buff[0] = SPI_Read_StatusReg();
 156   5                                                      if(tx_buff[0] == 0)
 157   5                                                      {       trace(tx_buff,1);
 158   6                                                              break;
 159   6                                                      }
 160   5                                              }
 161   4                                              break;
 162   4                                      case 0x0b:
 163   4                                              test_page(0x00);
 164   4                                              break;
 165   4                                      case 0x0c:
 166   4                                              read_page(0x00);
 167   4                                              break;
 168   4                                      default:
 169   4                                              break;
 170   4                              }                       
 171   3                      }                       
 172   2              }
 173   1      }
 174          
 175          void init_cpu(void)
 176          {       TMOD = 0x21;                    
 177   1              PCON = PCON | 0x80;             //波特率加倍
 178   1              SCON  = 0x50;                   //异步、10位、波特率可变,无校验位
 179   1              TH1   = 0xfd;            //在11.0592M晶振下,波特率是9600,
C51 COMPILER V7.50   SPIDRV                                                                01/11/2009 22:30:34 PAGE 4   

 180   1          TL1   = 0xfd;                       
 181   1          TR1   = 1;                          //T1 timer run
 182   1          ES    = 1;                          //uart interrupt enable 
 183   1              EA = 1;                                 //all interrupt enable
 184   1      }
 185          //串口中断程序
 186          void UART_isr(void) interrupt 4

⌨️ 快捷键说明

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