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

📄 spi2.lst

📁 实现ATmel公司的支持SPI总线的存储芯片AT45DB011B的存取操作
💻 LST
字号:
C51 COMPILER V7.10   SPI2                                                                  04/07/2008 22:02:47 PAGE 1   


C51 COMPILER V7.10, COMPILATION OF MODULE SPI2
OBJECT MODULE PLACED IN .\output\spi2.obj
COMPILER INVOKED BY: C:\C51\BIN\C51.EXE source\spi2.c BROWSE DEBUG OBJECTEXTEND PRINT(.\list\spi2.lst) OBJECT(.\output\s
                    -pi2.obj)

line level    source

   1          #include <aduc834.h>
   2          #include "..\headers\SPI.h"
   3          sbit    AT45_CS = P3^6 ;          //定义控制口
   4          #define AT45_Off   AT45_CS = 1
   5          #define AT45_On    AT45_CS = 0
   6          
   7          /********************************************
   8                通过SPI写一个字节的操作
   9          /********************************************/
  10          Uchar Host_Writebyte(Uchar Send_Data)
  11               {
  12   1              SPIDAT=Send_Data;
  13   1              while(!(SPICON&0x80));
  14   1              return SPIDAT;    // 通过读SPIDAT对ISPI位清零
  15   1      
  16   1           }
  17          
  18          /********************************************
  19               读取FLASH寄存器的状态值
  20          /*******************************************/
  21          Uchar Status_Read(void)
  22               {
  23   1              AT45_On;//片选AT45DB011B
  24   1              Host_Writebyte(AT45_Staus_RD);
  25   1              Host_Writebyte(0xff);
  26   1              AT45_Off;       //结束
  27   1              return SPIDAT;
  28   1           }
  29          /*******************************************
  30                     初始化函数 initiate function
  31          /******************************************/
  32          void  SPI_Init(void)
  33               {
  34   1              SPICON=0x30;// SPI使能,主模式 ,fos/8
  35   1              AT45_Off;//初始化高电平
  36   1          /*  IT0=1;
  37   1              EX0=1;
  38   1              EA=1;
  39   1              cs=1;    */
  40   1           }
  41           /******************************************
  42                   写缓冲函数 (Buffer Write)
  43           /******************************************/
  44             void Buffer_Write(Uint Buffer_Adderss,Uchar Send_Data)
  45          {
  46   1              Uchar Statu_Bit=0;
  47   1              Uchar Flash_Busy = 1;
  48   1              while(Flash_Busy)
  49   1              {
  50   2                      Statu_Bit = Status_Read();
  51   2                      if((Statu_Bit & 0x80))
  52   2                      {
  53   3                              Flash_Busy = 0;
  54   3                      }
C51 COMPILER V7.10   SPI2                                                                  04/07/2008 22:02:47 PAGE 2   

  55   2              }
  56   1              AT45_On;                       //select AT45
  57   1          Host_Writebyte(AT45_Buf_WR);  //buffer write opcode
  58   1          Host_Writebyte(0x00);
  59   1              Host_Writebyte((unsigned char)(Buffer_Adderss>>8));
  60   1              Host_Writebyte((unsigned char)Buffer_Adderss);
  61   1      
  62   1            /*        for(i=0;i<length;i++)
  63   1              {
  64   1                   Host_Writebyte(Read_pHeader[i]);
  65   1              }
  66   1            */
  67   1      
  68   1              SPIDAT=Send_Data ;
  69   1              while(!(SPICON&0x80)) ;
  70   1              AT45_Off;  //release AT45
  71   1      }
  72          /******************************************
  73                   读缓冲函数 (buffer read)
  74          /******************************************/
  75          Uchar Buffer_Read(Uint Buffer_Adderss)
  76          {
  77   1              Uint i=0;
  78   1              Uchar Statu_Bit=0;
  79   1      
  80   1          AT45_On; //select at45
  81   1      
  82   1          Host_Writebyte(AT45_Buf_RD);  //buffer read opcode
  83   1          Host_Writebyte(0x00);
  84   1              Host_Writebyte((unsigned char)(Buffer_Adderss>>8));
  85   1              Host_Writebyte((unsigned char)Buffer_Adderss);
  86   1              Host_Writebyte(0x00); //don't care bit
  87   1      
  88   1            /*        for(i=0;i<length;i++)
  89   1              {
  90   1                     Read_pHeader[i]= Host_Readbyte();
  91   1              }*/
  92   1              SPIDAT=0XFF;
  93   1              while(!(SPICON&0x80)) ;
  94   1              return SPIDAT  ;
  95   1      
  96   1              AT45_Off;  //release at45
  97   1      }
  98          /********************************************
  99                   缓冲向主存写函数
 100          /*********************************************/
 101          void MainMemory_Buffertransfer(Uint Page_Adderss)
 102          {
 103   1              Uchar Statu_Bit = 0;
 104   1              Uchar Flash_Busy = 0;
 105   1              while(!Flash_Busy)
 106   1              {
 107   2                      Statu_Bit = Status_Read();
 108   2                      if((Statu_Bit & 0x80))
 109   2                      {
 110   3                              Flash_Busy = 1;
 111   3                      }
 112   2              }
 113   1              AT45_On ;
 114   1             Host_Writebyte(0x83);
 115   1             Host_Writebyte((Uchar)(Page_Adderss>>7));
 116   1             Host_Writebyte((Uchar)(Page_Adderss<<1));
C51 COMPILER V7.10   SPI2                                                                  04/07/2008 22:02:47 PAGE 3   

 117   1             Host_Writebyte(0x00);
 118   1             AT45_Off  ;
 119   1      }
 120          /************************************************
 121                通过缓存的写主存子程序
 122          /***********************************************/
 123          void Mainmemory_Write(Uint Page_Address,Uint Block_Address,Uchar Sent_Data)
 124          {
 125   1              while(!(Status_Read()&0x80)) ;
 126   1              AT45_On;
 127   1              Host_Writebyte(AT45_MainMem_ThrougBuf_WR);
 128   1              Host_Writebyte((Uchar)(Page_Address>>7));
 129   1              Host_Writebyte((Uchar)(Page_Address<<1)|(Uchar)(Block_Address>>8));
 130   1              Host_Writebyte((Uchar)(Block_Address));
 131   1          Host_Writebyte(Sent_Data) ;
 132   1              AT45_Off;
 133   1      }
 134          /*************************************
 135                     读主存子程序
 136          /***************************************/
 137          Uchar Mainmemory_Read(Uint Page_Address,Uint Block_Address)
 138          
 139          {
 140   1              while(!(Status_Read()&0x80)) ;
 141   1              AT45_On;
 142   1              Host_Writebyte(AT45_MainMem_RD);
 143   1              Host_Writebyte((Uchar)(Page_Address>>7));
 144   1              Host_Writebyte((Uchar)(Page_Address<<1)|(Uchar)(Block_Address>>8));
 145   1              Host_Writebyte((Uchar)Block_Address);
 146   1              Host_Writebyte(0x00);
 147   1              Host_Writebyte(0x00);
 148   1              Host_Writebyte(0x00);
 149   1              Host_Writebyte(0x00);        //4byte don't 'care bits
 150   1              Host_Writebyte(0xff);        //送一字节的时间正好是传送读出一字节数据的时间
 151   1              AT45_Off;
 152   1              return SPIDAT;
 153   1      
 154   1      }
 155          
 156          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    312    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       9
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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