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

📄 eeprom.lst

📁 ST公司的upsd dk2000评估板仿真eeprom的源程序。
💻 LST
📖 第 1 页 / 共 5 页
字号:
 662   1              done = FALSE;
 663   1              err = FALSE;
 664   1      
 665   1              switch (sector)
 666   1              {
 667   2              case SECTOR_0:
 668   2                      *(BOOT_FLASH_SECTOR_0_X555) = 0xAA;             // unlock main flash, write 0xAA to addess 0xX555
 669   2                      *(BOOT_FLASH_SECTOR_0_XAAA) = 0x55;             // unlock main flash, write 0x55 to addess 0xXAAA
 670   2                      *(BOOT_FLASH_SECTOR_0_X555) = 0x80;             // write 0x80 command to erase entire chip
 671   2                      *(BOOT_FLASH_SECTOR_0_X555) = 0xAA;     // continue unlock sequence
 672   2                      *(BOOT_FLASH_SECTOR_0_XAAA) = 0x55;             // continue unlock sequence
 673   2                      *((volatile unsigned char xdata *)SECTOR_0_BASE_ADDRESS) = 0x30;// erase sector
 674   2                      do                                      // now use dat polling method to verify successful erase
 675   2              {  
C51 COMPILER V7.00  EEPROM                                                                 02/10/2003 10:48:05 PAGE 12  

 676   3                              poll = *((volatile unsigned char xdata *)SECTOR_0_BASE_ADDRESS);        // read flash status from any address
 677   3                              error = poll & NVM_ERROR;       // save timeout error bit at DQ5
 678   3                              poll = poll & NVM_DATA_POLL;    // look at D7   
 679   3                              if ( poll == NVM_DATA_POLL )    // compare DQ7 
 680   3                                      done = TRUE;            // bulk erase OK,
 681   3                              else if (error == NVM_ERROR)    // check for timeout error   
 682   3                                      err = TRUE;             // indicate timeout error occurred
 683   3              } while( (done == FALSE) && (err == FALSE) ); 
 684   2                      if ( err == TRUE )                      // make sure timeout error and dat poll didn't occur simultaneously
 685   2              {
 686   3                              poll = *((volatile unsigned char xdata *)SECTOR_0_BASE_ADDRESS);        // Read flash status again
 687   3                              poll = poll & NVM_DATA_POLL;    // get DQ7 of poll byte read from flash  
 688   3                              if (poll == NVM_DATA_POLL)              // compare DQ7 
 689   3                                      done = TRUE;                            // the flash erased OK at the same time timout error occured
 690   3                              *(BOOT_FLASH_SECTOR_0_X555) = 0xF0;  // reset the flash array (short reset instruction) 
 691   3              }
 692   2                      break;
 693   2              case SECTOR_1:
 694   2                      *(BOOT_FLASH_SECTOR_1_X555) = 0xAA;             // unlock main flash, write 0xAA to addess 0xX555
 695   2                      *(BOOT_FLASH_SECTOR_1_XAAA) = 0x55;             // unlock main flash, write 0x55 to addess 0xXAAA
 696   2                      *(BOOT_FLASH_SECTOR_1_X555) = 0x80;             // write 0x80 command to erase entire chip
 697   2                      *(BOOT_FLASH_SECTOR_1_X555) = 0xAA;     // continue unlock sequence
 698   2                      *(BOOT_FLASH_SECTOR_1_XAAA) = 0x55;             // continue unlock sequence
 699   2                      *((volatile unsigned char xdata *)SECTOR_1_BASE_ADDRESS) = 0x30;// erase sector
 700   2                      do                                      // now use dat polling method to verify successful erase
 701   2              {  
 702   3                              poll = *((volatile unsigned char xdata *)SECTOR_1_BASE_ADDRESS);        // read flash status from any address
 703   3                              error = poll & NVM_ERROR;       // save timeout error bit at DQ5
 704   3                              poll = poll & NVM_DATA_POLL;    // look at D7   
 705   3                              if ( poll == NVM_DATA_POLL )    // compare DQ7 
 706   3                                      done = TRUE;            // bulk erase OK,
 707   3                              else if (error == NVM_ERROR)    // check for timeout error   
 708   3                                      err = TRUE;             // indicate timeout error occurred
 709   3              } while( (done == FALSE) && (err == FALSE) ); 
 710   2                      if ( err == TRUE )                      // make sure timeout error and dat poll didn't occur simultaneously
 711   2              {
 712   3                              poll = *((volatile unsigned char xdata *)SECTOR_1_BASE_ADDRESS);        // Read flash status again
 713   3                              poll = poll & NVM_DATA_POLL;    // get DQ7 of poll byte read from flash  
 714   3                              if (poll == NVM_DATA_POLL)              // compare DQ7 
 715   3                                      done = TRUE;                            // the flash erased OK at the same time timout error occured
 716   3                              *(BOOT_FLASH_SECTOR_0_X555) = 0xF0;  // reset the flash array (short reset instruction) 
 717   3              }
 718   2                      break;
 719   2              case SECTOR_2:
 720   2                      *(BOOT_FLASH_SECTOR_2_X555) = 0xAA;             // unlock main flash, write 0xAA to addess 0xX555
 721   2                      *(BOOT_FLASH_SECTOR_2_XAAA) = 0x55;             // unlock main flash, write 0x55 to addess 0xXAAA
 722   2                      *(BOOT_FLASH_SECTOR_2_X555) = 0x80;             // write 0x80 command to erase entire chip
 723   2                      *(BOOT_FLASH_SECTOR_2_X555) = 0xAA;     // continue unlock sequence
 724   2                      *(BOOT_FLASH_SECTOR_2_XAAA) = 0x55;             // continue unlock sequence
 725   2                      *((volatile unsigned char xdata *)SECTOR_2_BASE_ADDRESS) = 0x30;// erase sector
 726   2                      do                                      // now use dat polling method to verify successful erase
 727   2              {  
 728   3                              poll = *((volatile unsigned char xdata *)SECTOR_2_BASE_ADDRESS);        // read flash status from any address
 729   3                              error = poll & NVM_ERROR;       // save timeout error bit at DQ5
 730   3                              poll = poll & NVM_DATA_POLL;    // look at D7   
 731   3                              if ( poll == NVM_DATA_POLL )    // compare DQ7 
 732   3                                      done = TRUE;            // bulk erase OK,
 733   3                              else if (error == NVM_ERROR)    // check for timeout error   
 734   3                                      err = TRUE;             // indicate timeout error occurred
 735   3              } while( (done == FALSE) && (err == FALSE) ); 
 736   2                      if ( err == TRUE )                      // make sure timeout error and dat poll didn't occur simultaneously
 737   2              {
C51 COMPILER V7.00  EEPROM                                                                 02/10/2003 10:48:05 PAGE 13  

 738   3                              poll = *((volatile unsigned char xdata *)SECTOR_2_BASE_ADDRESS);        // Read flash status again
 739   3                              poll = poll & NVM_DATA_POLL;    // get DQ7 of poll byte read from flash  
 740   3                              if (poll == NVM_DATA_POLL)              // compare DQ7 
 741   3                                      done = TRUE;                            // the flash erased OK at the same time timout error occured
 742   3                              *(BOOT_FLASH_SECTOR_0_X555) = 0xF0;  // reset the flash array (short reset instruction) 
 743   3              }
 744   2                      break;
 745   2              case SECTOR_3:
 746   2                      *(BOOT_FLASH_SECTOR_3_X555) = 0xAA;             // unlock main flash, write 0xAA to addess 0xX555
 747   2                      *(BOOT_FLASH_SECTOR_3_XAAA) = 0x55;             // unlock main flash, write 0x55 to addess 0xXAAA
 748   2                      *(BOOT_FLASH_SECTOR_3_X555) = 0x80;             // write 0x80 command to erase entire chip
 749   2                      *(BOOT_FLASH_SECTOR_3_X555) = 0xAA;     // continue unlock sequence
 750   2                      *(BOOT_FLASH_SECTOR_3_XAAA) = 0x55;             // continue unlock sequence
 751   2                      *((volatile unsigned char xdata *)SECTOR_3_BASE_ADDRESS) = 0x30;// erase sector
 752   2                      do                                      // now use dat polling method to verify successful erase
 753   2              {  
 754   3                              poll = *((volatile unsigned char xdata *)SECTOR_3_BASE_ADDRESS);        // read flash status from any address
 755   3                              error = poll & NVM_ERROR;       // save timeout error bit at DQ5
 756   3                              poll = poll & NVM_DATA_POLL;    // look at D7   
 757   3                              if ( poll == NVM_DATA_POLL )    // compare DQ7 
 758   3                                      done = TRUE;            // bulk erase OK,
 759   3                              else if (error == NVM_ERROR)    // check for timeout error   
 760   3                                      err = TRUE;             // indicate timeout error occurred
 761   3              } while( (done == FALSE) && (err == FALSE) ); 
 762   2                      if ( err == TRUE )                      // make sure timeout error and dat poll didn't occur simultaneously
 763   2              {
 764   3                              poll = *((volatile unsigned char xdata *)SECTOR_3_BASE_ADDRESS);        // Read flash status again
 765   3                              poll = poll & NVM_DATA_POLL;    // get DQ7 of poll byte read from flash  
 766   3                              if (poll == NVM_DATA_POLL)              // compare DQ7 
 767   3                                      done = TRUE;                            // the flash erased OK at the same time timout error occured
 768   3                              *(BOOT_FLASH_SECTOR_0_X555) = 0xF0;  // reset the flash array (short reset instruction) 
 769   3              }
 770   2                      break;
 771   2              default:
 772   2                      return 1;
 773   2              }
 774   1      
 775   1              return !(done); 
 776   1      }
 777          
 778          /***** Eeprom_Sector_Erase_Start*****/
 779          // Start Erases one boot flash sector.
 780          // Accepts sector number (0-3).
 781          // Returns 0 for successful erasure. If error, returns 1. 
 782          BYTE Eeprom_Sector_Erase_Start(BYTE sector)
 783          {
 784   1              switch (sector)
 785   1              {
 786   2              case SECTOR_0:
 787   2                      *(BOOT_FLASH_SECTOR_0_X555) = 0xAA;             // unlock main flash, write 0xAA to addess 0xX555
 788   2                      *(BOOT_FLASH_SECTOR_0_XAAA) = 0x55;             // unlock main flash, write 0x55 to addess 0xXAAA
 789   2                      *(BOOT_FLASH_SECTOR_0_X555) = 0x80;             // write 0x80 command to erase entire chip
 790   2                      *(BOOT_FLASH_SECTOR_0_X555) = 0xAA;     // continue unlock sequence
 791   2                      *(BOOT_FLASH_SECTOR_0_XAAA) = 0x55;             // continue unlock sequence
 792   2                      *((volatile unsigned char xdata *)SECTOR_0_BASE_ADDRESS) = 0x30;// erase sector
 793   2                      break;
 794   2              case SECTOR_1:
 795   2                      *(BOOT_FLASH_SECTOR_1_X555) = 0xAA;             // unlock main flash, write 0xAA to addess 0xX555
 796   2                      *(BOOT_FLASH_SECTOR_1_XAAA) = 0x55;             // unlock main flash, write 0x55 to addess 0xXAAA
 797   2                      *(BOOT_FLASH_SECTOR_1_X555) = 0x80;             // write 0x80 command to erase entire chip
 798   2                      *(BOOT_FLASH_SECTOR_1_X555) = 0xAA;     // continue unlock sequence
 799   2                      *(BOOT_FLASH_SECTOR_1_XAAA) = 0x55;             // continue unlock sequence
C51 COMPILER V7.00  EEPROM                                                                 02/10/2003 10:48:05 PAGE 14  

 800   2                      *((volatile unsigned char xdata *)SECTOR_1_BASE_ADDRESS) = 0x30;// erase sector
 801   2                      break;
 802   2              case SECTOR_2:
 803   2                      *(BOOT_FLASH_SECTOR_2_X555) = 0xAA;             // unlock main flash, write 0xAA to addess 0xX555
 804   2                      *(BOOT_FLASH_SECTOR_2_XAAA) = 0x55;             // unlock main flash, write 0x55 to addess 0xXAAA
 805   2                      *(BOOT_FLASH_SECTOR_2_X555) = 0x80;             // write 0x80 command to erase entire chip
 806   2                      *(BOOT_FLASH_SECTOR_2_X555) = 0xAA;     // continue unlock sequence
 807   2                      *(BOOT_FLASH_SECTOR_2_XAAA) = 0x55;             // continue unlock sequence
 808   2                      *((volatile unsigned char xdata *)SECTOR_2_BASE_ADDRESS) = 0x30;// erase sector
 809   2                      break;
 810   2              case SECTOR_3:
 811   2                      *(BOOT_FLASH_SECTOR_3_X555) = 0xAA;             // unlock main flash, write 0xAA to addess 0xX555
 812   2                      *(BOOT_FLASH_SECTOR_3_XAAA) = 0x55;             // unlock main flash, write 0x55 to addess 0xXAAA
 813   2                      *(BOOT_FLASH_SECTOR_3_X555) = 0x80;             // write 0x80 command to erase entire chip
 814   2                      *(BOOT_FLASH_SECTOR_3_X555) = 0xAA;     // continue unlock sequence
 815   2                      *(BOOT_FLASH_SECTOR_3_XAAA) = 0x55;             // continue unlock sequence
 816   2                      *((volatile unsigned char xdata *)SECTOR_3_BASE_ADDRESS) = 0x30;// erase sector
 817   2                      break;
 818   2              default:
 819   2                      return 1;
 820   2      
 821   2              }
 822   1              return 0;
 823   1      }
 824          
 825          /***** Eeprom_Sector_Erase_Suspend*****/
 826          // Susupend Erases one boot flash sector.
 827          // Accepts sector number (0-3).
 828          // Returns 0 for successful erasure. If error, returns 1. 
 829          BYTE Eeprom_Sector_Erase_Suspend(BYTE sector)
 830          {
 831   1              switch (sector)
 832   1              {
 833   2              case SECTOR_0:
 834   2                      *((volatile unsigned char xdata *)SECTOR_0_BASE_ADDRESS) = 0xB0;// Suspend erase sector
 835   2                      break;
 836   2              case SECTOR_1:
 837   2                      *((volatile unsigned char xdata *)SECTOR_1_BASE_ADDRESS) = 0xB0;// Suspend erase sector
 838   2                      break;
 839   2              case SECTOR_2:
 840   2                      *((volatile unsigned char xdata *)SECTOR_2_BASE_ADDRESS) = 0xB0;// Suspend erase sector
 841   2                      break;
 842   2              case SECTOR_3:
 843   2                      *((volatile unsigned char xdata *)SECTOR_3_BASE_ADDRESS) = 0xB0;// Suspend erase sector
 844   2                      break;
 845   2              default:
 846   2                      return 1;
 847   2              }
 848   1      
 849   1      
 850   1              return 0;
 851   1      }
 852          
 853          /***** Eeprom_Sector_Erase_Resume*****/
 854          // Resume Erases one boot flash sector.
 855          // Accepts sector number (0-3).
 856          // Returns 0 for successful erasure. If error, returns 1. 
 857          BYTE Eeprom_Sector_Erase_Resume(BYTE sector)
 858          {
 859   1              switch (sector)
 860   1              {
 861   2              case SECTOR_0:
C51 COMPILER V7.00  EEPROM                                                                 02/10/2003 10:48:05 PAGE 15  

 862   2                      *((volatile unsigned char xdata *)SECTOR_0_BASE_ADDRESS) = 0x30;// Resume erase sector
 863   2                      break;
 864   2              case SECTOR_1:
 865   2                      *((volatile unsigned char xdata *)SECTOR_1_BASE_ADDRESS) = 0x30;// Resume erase sector
 866   2                      break;
 867   2              case SECTOR_2:
 868   2                      *((volatile unsigned char xdata *)SECTOR_2_BASE_ADDRESS) = 0x30;// Resume erase sector
 869   2                      break;
 870   2              case SECTOR_3:
 871   2                      *((volatile unsigned char xdata *)SECTOR_3_BASE_ADDRESS) = 0x30;// Resume erase sector
 872   2                      break;
 873   2              default:
 874   2                      return 1;
 875   2              }
 876   1      
 877   1              return 0;
 878   1      }
 879          
 880          /***** Eeprom_Sector_Erase_Status *****/
 881          // Gets status of sector erase.
 882          // Accepts sector number (0-3).
 883          // Returns 0 if erase cycle finished. Returns 1 if erase in progress. 

⌨️ 快捷键说明

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