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

📄 spidrv.lst

📁 华邦串行flash W25X40 读写源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.50   SPIDRV                                                                09/25/2008 17:18:42 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE SPIDRV
OBJECT MODULE PLACED IN spidrv.OBJ
COMPILER INVOKED BY: C:\Keil\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 <w79e825.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 _cs= P1^2;
  24          sbit _do= P1^3;
  25          sbit _wp= P1^4;
  26          //sbit _hold= P1^5;
  27          sbit _clk= P1^6;
  28          sbit _di= P1^7;
  29          
  30          #define W25P_WriteEnable        0x06
  31          #define W25P_WriteDisable       0x04
  32          #define W25P_ReadStatusReg      0x05
  33          #define W25P_WriteStatusReg     0x01
  34          #define W25P_ReadData           0x03
  35          #define W25P_FastReadData       0x0B
  36          #define W25P_PageProgram        0x02
  37          #define W25P_SectorErase        0xD8    // 64KB
  38          #define W25P_ChipErase          0xC7
  39          #define W25P_PowerDown          0xB9
  40          #define W25P_ReleasePowerDown   0xAB
  41          #define W25P_DeviceID           0xAB
  42          #define W25P_ManufactDeviceID   0x90
  43                  
  44          void init_cpu(void);
  45          void IO_Send_Byte(uchar out);
  46          uchar IO_Get_Byte();
  47          void delay(uchar tt);
  48          void IO_Wait_Busy();
  49          void IO_init();
  50          uchar IO_Read_StatusReg();
  51          void IO_Write_StatusReg(byte);
  52          void IO_Write_Enable();
  53          void IO_PowerDown();
  54          void IO_ReleasePowerDown();
  55          uchar IO_Read_ID1();
C51 COMPILER V7.50   SPIDRV                                                                09/25/2008 17:18:42 PAGE 2   

  56          uint IO_Read_ID2(uchar ID_Addr);
  57          uchar IO_Read_Byte(uint32 Dst_Addr);
  58          void IO_Read_nBytes(uint32 Dst_Addr, uchar nBytes_128);
  59          uchar IO_FastRead_Byte(uint32 Dst_Addr);
  60          void IO_FastRead_nBytes(uint32 Dst_Addr, uchar nBytes_128);
  61          void IO_Write_Byte(uint32 Dst_Addr, uchar byte);
  62          void IO_Write_nBytes(uint32 Dst_Addr, uchar nBytes_128);
  63          void IO_Erase_Chip();
  64          void IO_Erase_Sector(uint32 Dst_Addr);
  65          void Verify(uchar byte, uchar cor_byte);
  66          void IO_Write_Disable();
  67          void trace(uchar *str,uchar len);
  68          uint IO_Read_ID3();
  69          void test_page(uchar addr);
  70          void read_page(uchar addr);
  71          
  72          uint8 Rxtemp;
  73          bit MYTI;
  74          uint8 tx_buff[16];
  75          uint8 upper_128[16];
  76          bit rx_ok;
  77          #define nop() _nop_()
  78          
  79          void delay_nms(uchar i)
  80          {
  81   1              uchar  j;
  82   1              i=i*2;
  83   1              for(;i>0;i--)
  84   1              {
  85   2                 j = 246;
  86   2                      while(--j);
  87   2              }
  88   1      }
  89          
  90          void main(void)
  91          {       
  92   1              uint i;
  93   1              
  94   1              init_cpu();     
  95   1              IO_init();
  96   1              for(;;)
  97   1              {                       
  98   2                      if(rx_ok == 1)
  99   2                      {
 100   3                              rx_ok = 0;
 101   3                              switch(Rxtemp)
 102   3                              {
 103   4                                      case 0x01:
 104   4                                              Rxtemp = 0;
 105   4                                              tx_buff[0] = IO_Read_ID1();
 106   4                                              trace(tx_buff,1);
 107   4                                              break;
 108   4                                      case 0x02:
 109   4                                      i = IO_Read_ID2(0x00);
 110   4                                      tx_buff[1] = (uchar)i;
 111   4                                      tx_buff[0] = (uchar)(i>>8);
 112   4                                      trace(tx_buff,2);
 113   4                                      
 114   4                                      break;
 115   4                                      case 0x03:
 116   4                                      i = IO_Read_ID3();
 117   4                                      tx_buff[1] = (uchar)i;
C51 COMPILER V7.50   SPIDRV                                                                09/25/2008 17:18:42 PAGE 3   

 118   4                                      tx_buff[0] = (uchar)(i>>8);
 119   4                                      trace(tx_buff,3);
 120   4                                      break;
 121   4                                      case 0x04:
 122   4                                      tx_buff[0] = IO_Read_Byte(0x00000000);
 123   4                                      trace(tx_buff,1);
 124   4                                      break;
 125   4                                      case 0x05:
 126   4                                      tx_buff[0] = 0x55;
 127   4                                      IO_Write_Byte(0x00000000,0xa5);
 128   4                                      trace(tx_buff,1);
 129   4                                      break;
 130   4                                      case 0x06:
 131   4                                      tx_buff[0] = IO_Read_StatusReg();
 132   4                                      trace(tx_buff,1);
 133   4                                      break;
 134   4                                      case 0x07:
 135   4                                      IO_Write_Enable();      
 136   4                                      break;
 137   4                                      case 0x08:
 138   4                                      upper_128[0]=0x01;upper_128[1]=0x02;upper_128[2]=0x03;upper_128[3]=0x04;
 139   4                                      IO_Write_nBytes(0x00000000,4);
 140   4                                      
 141   4                                      break;
 142   4                                      case 0x09:
 143   4                                      IO_Erase_Chip();
 144   4                                      break;
 145   4                                      case 0x0a:
 146   4                                      IO_Erase_Sector(0x000ff000);
 147   4                                      while(1)
 148   4                                      {
 149   5                                              tx_buff[0] = IO_Read_StatusReg();
 150   5                                              
 151   5                                              if(tx_buff[0] == 0)
 152   5                                              {
 153   6                                                      trace(tx_buff,1);
 154   6                                                      break;
 155   6                                              }
 156   5                                              
 157   5                                      }
 158   4                                      break;
 159   4                                      case 0x0b:
 160   4                                      test_page(0x00);
 161   4                                      break;
 162   4                                      case 0x0c:
 163   4                                      read_page(0x00);
 164   4                                      break;
 165   4                                      default:
 166   4                                      break;
 167   4                              }
 168   3                              
 169   3                      }               
 170   2                              
 171   2              }
 172   1      }
 173          
 174          void init_cpu(void)
 175          {               
 176   1              TMOD = 0x21;                    
 177   1              PCON = PCON | 0x80;             //波特率加倍
 178   1              //CKCON = 0x10;           //定时器1采用4分频
 179   1              SCON  = 0x50;                   //异步、10位、波特率可变,无校验位
C51 COMPILER V7.50   SPIDRV                                                                09/25/2008 17:18:42 PAGE 4   

 180   1      //      TH1   = 0xf8;            //在15M晶振下,波特率是9600,
 181   1      //    TL1   = 0xf8;                     
 182   1              TH1   = 0xfd;            //在11M晶振下,波特率是9600,
 183   1          TL1   = 0xfd;                       
 184   1          TR1   = 1;                          //T1 timer run
 185   1          ES    = 1;                          //uart interrupt enable 
 186   1              EA = 1;                                 //all interrupt enable
 187   1              
 188   1      }
 189          
 190          
 191          //串口中断程序
 192          void UART_isr(void) interrupt 4
 193          { 
 194   1              if(RI)
 195   1          {
 196   2              RI = 0;

⌨️ 快捷键说明

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