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

📄 at45.lst

📁 F020集成以太网接口核心模块DataFlash例程源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
 204   1      
 205   1      }
 206          //----------------------------------------------------------------------
 207          // 功能:从缓冲区2的指定位置start_addr中读入len长度的数据到pBuffer
 208          // 参数:
 209          //       str_addr,WORD:缓冲区起始位置
 210          //       len:     WORD:数据长度
 211          //       pBuffer,  BYTE *:数据缓存指针
 212          // 返回值:BYTE,1:读取成功;0:读取失败
 213          //----------------------------------------------------------------------
 214          BYTE FlashBuffer2Read(WORD start_addr,WORD len, BYTE *pBuffer)
 215          {                                       
 216   1              WORD i;
 217   1      
 218   1              if((start_addr+len)>FLASH_PAGE_BYTE[g_cFlashType])
 219   1              {// 地址长度错误
 220   2                      return 0;
 221   2              }
 222   1      
 223   1              while((GetFlashStatus()&0x80)==0);  // 检查器件是否准备就绪
 224   1      
 225   1              DF_CHIP_SELECT;                                 // 使能片选
 226   1              SendSPIByte(BUFFER_2_READ);                 //缓冲区1为54H  缓冲区2为56H
 227   1              SendSPIByte(0);
 228   1              SendSPIByte((BYTE)(start_addr>>8));
 229   1              SendSPIByte((BYTE)start_addr);
 230   1              SendSPIByte(0);
 231   1              for (i=0;i<len;i++)
 232   1              {
 233   2                      *pBuffer++ = GetSPIByte();         
 234   2              }
 235   1              DF_CHIP_NOSELECT;                   // 取消片选
 236   1      
 237   1              return 1;
 238   1      }
 239          
 240          //--------------------------------------------------------------
 241          // 功能:将pBuffer中的长度为len的数据写入到Flash缓冲区1中
C51 COMPILER V8.02   AT45                                                                  08/18/2007 20:06:55 PAGE 5   

 242          // 参数:
 243          //       str_addr,WORD:缓冲区起始位置
 244          //       len:     WORD:数据长度
 245          //       pBuffer,  BYTE *:数据缓存指针
 246          // 返回值:BYTE,1:写入成功;0:写入失败
 247          //
 248          //--------------------------------------------------------------
 249          BYTE FlashBuffer1Write(WORD start_addr, WORD len,BYTE *pBuffer) 
 250          {
 251   1              WORD  i;
 252   1      
 253   1              if(start_addr+len>FLASH_PAGE_BYTE[g_cFlashType])
 254   1              {// 地址长度错误
 255   2                      return 0;
 256   2              }
 257   1      
 258   1              while((GetFlashStatus()&0x80)==0);  // 检查器件是否准备就绪
 259   1      
 260   1              DF_CHIP_SELECT;                                     
 261   1              SendSPIByte(BUFFER_1_WRITE);
 262   1              SendSPIByte(0x00);
 263   1              SendSPIByte((BYTE)(start_addr>>8));
 264   1              SendSPIByte((BYTE)start_addr);
 265   1              for (i=0;i<len;i++)
 266   1              {
 267   2                      SendSPIByte(*pBuffer++);
 268   2              }
 269   1      
 270   1              DF_CHIP_NOSELECT;
 271   1      
 272   1              return 1;
 273   1      }
 274          //---------------------------------------------------------------
 275          // 功能:将pBuffer中的长度为len的数据写入到Flash缓冲区2中
 276          // 参数:
 277          //       str_addr,WORD:缓冲区起始位置
 278          //       len:     WORD:数据长度
 279          //       pBuffer,  BYTE *:数据缓存指针
 280          // 返回值:BYTE,1:写入成功;0:写入失败
 281          //
 282          //--------------------------------------------------------------
 283          BYTE FlashBuffer2Write(WORD start_addr, WORD len,BYTE *pBuffer)
 284          {
 285   1              WORD  i;
 286   1      
 287   1              if(start_addr+len>FLASH_PAGE_BYTE[g_cFlashType])
 288   1              {// 地址长度错误
 289   2                      return 0;
 290   2              }
 291   1      
 292   1              while((GetFlashStatus()&0x80)==0);  // 检查器件是否准备就绪
 293   1      
 294   1              DF_CHIP_SELECT;                                     
 295   1              SendSPIByte(BUFFER_2_WRITE);
 296   1              SendSPIByte(0x00);
 297   1              SendSPIByte((BYTE)(start_addr>>8));
 298   1              SendSPIByte((BYTE)start_addr);
 299   1              for (i=0;i<len;i++)
 300   1              {
 301   2                      SendSPIByte(*pBuffer++);
 302   2              }
 303   1      
C51 COMPILER V8.02   AT45                                                                  08/18/2007 20:06:55 PAGE 6   

 304   1              DF_CHIP_NOSELECT;
 305   1      
 306   1              return 1;
 307   1      }
 308          
 309          //----------------------------------------------------------
 310          //功能:将Flash第pageAddr页面的数据读出到Flash缓冲区1中
 311          //参数:pageAddr,WORD:要读出的页面地址
 312          //返回值:1,成功;0:失败
 313          //----------------------------------------------------------
 314          BYTE PageToBuffer1(WORD pageAddr)
 315          {
 316   1      
 317   1              if(pageAddr>=FLASH_PAGE[g_cFlashType]) return 0;  // 页面地址无效
 318   1      
 319   1              while((GetFlashStatus()&0x80)==0);                // 检查器件是否准备就绪
 320   1      
 321   1              DF_CHIP_SELECT;                 
 322   1      
 323   1              SendSPIByte(PAGE_TO_B1_XFER);       
 324   1              SendSPIByte((BYTE)(pageAddr >> (8-PAGE_SHIFT[g_cFlashType])));
 325   1              SendSPIByte((BYTE)(pageAddr << PAGE_SHIFT[g_cFlashType]));
 326   1              SendSPIByte(0);                         
 327   1      
 328   1              DF_CHIP_NOSELECT;
 329   1      
 330   1              return 1;
 331   1      }
 332          //--------------------------------------------------------
 333          //功能:将Flash第pageAddr页面的数据读出到Flash缓冲区2中
 334          //参数:pageAddr,WORD:要读出的页面地址
 335          //返回值:1,成功;0:失败
 336          //--------------------------------------------------------
 337          BYTE PageToBuffer2(WORD pageAddr)    
 338          {
 339   1              if(pageAddr>=FLASH_PAGE[g_cFlashType]) return 0;  // 页面地址无效
 340   1      
 341   1              while((GetFlashStatus()&0x80)==0);                // 检查器件是否准备就绪
 342   1      
 343   1              DF_CHIP_SELECT;                            
 344   1      
 345   1              SendSPIByte(PAGE_TO_B2_XFER);       
 346   1              SendSPIByte((BYTE)(pageAddr >> (8-PAGE_SHIFT[g_cFlashType])));
 347   1              SendSPIByte((BYTE)(pageAddr << PAGE_SHIFT[g_cFlashType]));
 348   1              SendSPIByte(0);                         
 349   1      
 350   1              DF_CHIP_NOSELECT;
 351   1              
 352   1              return 1;
 353   1      
 354   1      }
 355          
 356          //--------------------------------------------------------
 357          // 功能:擦除pageAddr页面
 358          // 参数:要擦除的页面
 359          // 返回:1,成功;0:失败
 360          //--------------------------------------------------------
 361          BYTE FlashPageErase(WORD pageAddr)
 362          {
 363   1              if(pageAddr>=FLASH_PAGE[g_cFlashType]) return 0;  // 页面地址无效
 364   1      
 365   1              while((GetFlashStatus()&0x80)==0);  // 检查器件是否准备就绪
C51 COMPILER V8.02   AT45                                                                  08/18/2007 20:06:55 PAGE 7   

 366   1      
 367   1              DF_CHIP_SELECT;
 368   1              SendSPIByte(PAGE_ERASE);
 369   1              SendSPIByte((BYTE)(pageAddr >> (8-PAGE_SHIFT[g_cFlashType])));
 370   1              SendSPIByte((BYTE)(pageAddr << PAGE_SHIFT[g_cFlashType]));
 371   1              SendSPIByte(0x00);
 372   1              DF_CHIP_NOSELECT;
 373   1      
 374   1              return 1;
 375   1      }
 376          
 377          //-------------------------------------------------------
 378          // 功能:擦除blockAddr
 379          // 参数:要擦除的block
 380          // 返回:1:成功;0:失败
 381          //------------------------------------------------------
 382          BYTE FlashBlockErase(WORD blockAddr)
 383          {
 384   1              if(blockAddr>=FLASH_BLOCK[g_cFlashType]) return 0;
 385   1      
 386   1              while((GetFlashStatus()&0x80)==0);
 387   1      
 388   1              DF_CHIP_SELECT;
 389   1              
 390   1              SendSPIByte(BLOCK_ERASE);
 391   1              SendSPIByte(blockAddr>>(8-BLOCK_SHIFT[g_cFlashType]));
 392   1              SendSPIByte(blockAddr<<BLOCK_SHIFT[g_cFlashType]);
 393   1              SendSPIByte(0);
 394   1      
 395   1              DF_CHIP_NOSELECT;
 396   1      
 397   1              return 1;
 398   1      }
 399          //--------------------------------------------------------
 400          //功能:直接将Flash Buffer1中的数据写入到pageAddr页,不擦除
 401          //参数:pageAddr,WORD:要写入的页面地址
 402          //返回值:1,成功;0,失败
 403          //--------------------------------------------------------
 404          BYTE FlashBuffer1ProgNoErase(WORD pageAddr)
 405          {
 406   1              
 407   1              if(pageAddr>=FLASH_PAGE[g_cFlashType]) return 0;  // 页面地址无效
 408   1      
 409   1              while((GetFlashStatus()&0x80)==0);  // 检查器件是否准备就绪
 410   1      
 411   1              DF_CHIP_SELECT;
 412   1              SendSPIByte(B1_TO_PAGE_WITHOUT_ERASE);
 413   1              SendSPIByte((BYTE)(pageAddr >> (8-PAGE_SHIFT[g_cFlashType])));
 414   1              SendSPIByte((BYTE)(pageAddr << PAGE_SHIFT[g_cFlashType]));
 415   1              SendSPIByte(0x00);

⌨️ 快捷键说明

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