[技术问答] 求一个N76E003的ISP或者IAP例程

[复制链接]
4955|12
 楼主| terryeva06 发表于 2017-9-18 13:46 | 显示全部楼层 |阅读模式
RT,芯片的BSP里面只有如何开启使用和存储LDROM,但是具体该怎么操作呢?比如我收到串口发来的数据,该怎么存?串口改怎么发?
求高手搞一套来,模仿模仿,谢谢拉
 楼主| terryeva06 发表于 2017-9-18 13:54 | 显示全部楼层
最好能分享下源码,行么
xixi2017 发表于 2017-9-18 22:15 | 显示全部楼层
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2017 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. //***********************************************************************************************************
  7. //  Website: http://www.nuvoton.com
  8. //  E-Mail : MicroC-8bit@nuvoton.com
  9. //  Date   : Jan/21/2017
  10. //***********************************************************************************************************

  11. //***********************************************************************************************************
  12. //  File Function: N76E003 APROM program DATAFLASH (APROM) demo code
  13. //***********************************************************************************************************
  14. #include "N76E003.h"
  15. #include "SFR_Macro.h"
  16. #include "Function_define.h"
  17. #include "Common.h"
  18. #include "Delay.h"


  19. //***********************************************************************************************************
  20. #define     CID_READ            0x0B
  21. #define     DID_READ            0x0C

  22. /*
  23.         Since the DATAFLASH is in the APROM. Program command is same as program APROM
  24. */
  25. #define     PAGE_ERASE_AP       0x22
  26. #define     BYTE_READ_AP        0x00
  27. #define     BYTE_PROGRAM_AP     0x21
  28. #define     PAGE_SIZE           128


  29. #define     ERASE_FAIL          0x70
  30. #define     PROGRAM_FAIL        0x71
  31. #define     IAPFF_FAIL          0x72
  32. #define     IAP_PASS            0x00

  33. //---------------------------------------------------------------
  34. // Following define by customer
  35. // Please confirm the start addresss not over your code size
  36. //---------------------------------------------------------------
  37. #define     DATA_SIZE           4096   
  38. #define     DATA_START_ADDR     0x3800                                        

  39. /********************************************************************************************
  40. Following IAP command register is also define in SFR_Macro.h

  41.         #define set_IAPEN   BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;CHPCON |= SET_BIT0 ;EA=BIT_TMP
  42.         #define clr_IAPEN   BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;CHPCON &= ~SET_BIT0;EA=BIT_TMP
  43.         #define set_APUEN   BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;IAPUEN |= SET_BIT0 ;EA=BIT_TMP
  44.         #define clr_APUEN   BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;IAPUEN &= ~SET_BIT0;EA=BIT_TMP
  45.        
  46. **********************************************************************************************/
  47. void IAP_ERROR_LED(void)
  48. {
  49.         while (1)
  50.         {
  51.                 clr_P03;
  52.                 Timer0_Delay1ms(100);
  53.                 set_P03;
  54.                 Timer0_Delay1ms(100);
  55.         }

  56. }

  57. //-----------------------------------------------------------------------------------------------------------/
  58. void Trigger_IAP(void)
  59. {   
  60.     set_IAPGO;                                                                                                                                        //trigger IAP
  61.     if((CHPCON&SET_BIT6)==SET_BIT6)             // if fail flag is set, toggle error LED and IAP stop
  62.                 {
  63.                         clr_IAPFF;
  64.                         IAP_ERROR_LED();
  65.                 }
  66. }
  67. /*
  68.                 WARNING:
  69.         No matter read or writer, when IAPFF is set 1,
  70.         this step process is fail. DATA should be ignore.
  71. */
  72. //-----------------------------------------------------------------------------------------------------------/

  73. /*****************************************************************************************************************
  74. Erase APROM subroutine:
  75.        

  76. ******************************************************************************************************************/               
  77. void Erase_APROM(void)
  78. {   
  79.     UINT16 u16Count;

  80.     set_IAPEN;                                                                                                        // Enable IAP function
  81.                 IAPFD = 0xFF;                                                                                                // IMPORTANT !! To erase function must setting IAPFD = 0xFF
  82.     IAPCN = PAGE_ERASE_AP;
  83.     set_APUEN;                                                                                                        //  APROM modify Enable
  84.        
  85.     for(u16Count=0x0000;u16Count<DATA_SIZE/PAGE_SIZE;u16Count++)                //
  86.     {        
  87.         IAPAL = LOBYTE(u16Count*PAGE_SIZE + DATA_START_ADDR);
  88.         IAPAH = HIBYTE(u16Count*PAGE_SIZE + DATA_START_ADDR);
  89.         Trigger_IAP();
  90.     }
  91.     clr_APUEN;
  92.     clr_IAPEN;
  93. }
  94. //-----------------------------------------------------------------------------------------------------------
  95. void Erase_APROM_Verify(void)
  96. {   
  97.     UINT16 u16Count;
  98.     set_IAPEN;
  99.     IAPAL = LOBYTE(DATA_START_ADDR);
  100.     IAPAH = HIBYTE(DATA_START_ADDR);
  101.     IAPCN = BYTE_READ_AP;

  102.     for(u16Count=0;u16Count<DATA_SIZE;u16Count++)
  103.     {   
  104.         IAPFD = 0x00;   
  105.         Trigger_IAP();
  106.         if(IAPFD != 0xFF)
  107.                                         IAP_ERROR_LED();
  108.         IAPAL++;
  109.         if(IAPAL == 0x00)
  110.           IAPAH++;
  111.     }
  112.                
  113.     clr_IAPEN;
  114.    
  115. }
  116. //-----------------------------------------------------------------------------------------------------------
  117. void Program_APROM(void)
  118. {   
  119.     UINT16 u16Count;

  120.     set_IAPEN;
  121.     set_APUEN;   
  122.     IAPAL = LOBYTE(DATA_START_ADDR);
  123.     IAPAH = HIBYTE(DATA_START_ADDR);
  124.     IAPCN = BYTE_PROGRAM_AP;
  125.    
  126.     for(u16Count=0;u16Count<DATA_SIZE;u16Count++)
  127.     {   
  128.         IAPFD++;     
  129.         Trigger_IAP();
  130.       
  131.         IAPAL++;
  132.         if(IAPAL == 0)
  133.         {
  134.             IAPAH++;
  135.         }
  136.     }
  137.                
  138.     clr_APUEN;
  139.     clr_IAPEN;
  140. }
  141. //-----------------------------------------------------------------------------------------------------------
  142. void Program_APROM_Verify(void)
  143. {   
  144.     UINT16 u16Count;
  145.     UINT8  u8Read_Data;

  146.     set_IAPEN;
  147.     IAPAL = LOBYTE(DATA_START_ADDR);
  148.     IAPAH = HIBYTE(DATA_START_ADDR);
  149.     IAPCN = BYTE_READ_AP;
  150.     u8Read_Data = 0x00;

  151.     for(u16Count=0;u16Count<DATA_SIZE;u16Count++)
  152.     {   
  153.         Trigger_IAP();
  154.         if(IAPFD != u8Read_Data)
  155.                                         IAP_ERROR_LED();
  156.         IAPAL++;
  157.         if(IAPAL == 0)
  158.         {
  159.             IAPAH++;
  160.         }
  161.         u8Read_Data ++;
  162.     }

  163.     clr_IAPEN;
  164. }
  165. //-----------------------------------------------------------------------------------------------------------

  166. //-----------------------------------------------------------------------------------------------------------
  167. void main (void)
  168. {

  169.   Set_All_GPIO_Quasi_Mode;
  170. //---------toggle GPIO1---------       
  171.         clr_GPIO1;
  172.         Timer0_Delay1ms(100);
  173.         set_GPIO1;
  174.         Timer0_Delay1ms(100);
  175.         clr_GPIO1;
  176.         Timer0_Delay1ms(100);
  177.         set_GPIO1;
  178.         Timer0_Delay1ms(100);
  179. //---------end toggle GPIO1---------
  180.        
  181.     Erase_APROM();
  182.                 Erase_APROM_Verify();
  183.     Program_APROM();
  184.     Program_APROM_Verify();

  185. //---------toggle GPIO1---------       
  186.         clr_GPIO1;
  187.         Timer0_Delay1ms(100);
  188.         set_GPIO1;
  189.         Timer0_Delay1ms(100);
  190.         clr_GPIO1;
  191.         Timer0_Delay1ms(100);
  192.         set_GPIO1;
  193.         Timer0_Delay1ms(100);
  194. //---------end toggle GPIO1---------

  195.     while(1);
  196. }
  197. //-----------------------------------------------------------------------------------------------------------
xixi2017 发表于 2017-9-18 22:15 | 显示全部楼层
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2016 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. //***********************************************************************************************************
  7. //  Nuvoton Technoledge Corp.
  8. //  Website: http://www.nuvoton.com
  9. //  E-Mail : MicroC-8bit@nuvoton.com
  10. //  Date   : Apr/21/2016
  11. //***********************************************************************************************************

  12. //***********************************************************************************************************
  13. //  File Function: N76E003 APROM program DATAFLASH (APROM) demo code
  14. //***********************************************************************************************************

  15. #include "N76E003.h"
  16. #include "Common.h"
  17. #include "Delay.h"
  18. #include "SFR_Macro.h"
  19. #include "Function_define.h"

  20. #define     CID_READ            0x0B
  21. #define     DID_READ            0x0C

  22. /*
  23.         Since the DATAFLASH is in the APROM. Program command is same as program APROM
  24. */
  25. #define     PAGE_ERASE_LD       0x62
  26. #define     BYTE_READ_LD        0x40
  27. #define     BYTE_PROGRAM_LD            0x61
  28. #define     PAGE_SIZE           128


  29. #define     ERASE_FAIL          0x70
  30. #define     PROGRAM_FAIL        0x71
  31. #define     IAPFF_FAIL          0x72
  32. #define     IAP_PASS            0x00

  33. //---------------------------------------------------------------
  34. // Following define by customer
  35. // Please confirm the start addresss not over your code size
  36. //---------------------------------------------------------------
  37. #define     DATA_SIZE           1024   
  38. #define     DATA_START_ADDR     0x0000                                        

  39. /********************************************************************************************
  40. Following IAP command register is also define in SFR_Macro.h

  41.         #define set_IAPEN   BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;CHPCON |= SET_BIT0 ;EA=BIT_TMP
  42.         #define clr_IAPEN   BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;CHPCON &= ~SET_BIT0;EA=BIT_TMP
  43.         #define set_APUEN   BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;IAPUEN |= SET_BIT0 ;EA=BIT_TMP
  44.         #define clr_APUEN   BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;IAPUEN &= ~SET_BIT0;EA=BIT_TMP
  45.        
  46. **********************************************************************************************/
  47. void IAP_ERROR_LED(void)
  48. {
  49.         while (1)
  50.         {
  51.                 clr_P03;
  52.                 Timer0_Delay1ms(100);
  53.                 set_P03;
  54.                 Timer0_Delay1ms(100);
  55.         }

  56. }

  57. //-----------------------------------------------------------------------------------------------------------/
  58. void Trigger_IAP(void)
  59. {   
  60.     set_IAPGO;                                                                                                                                        //trigger IAP
  61.     if((CHPCON&SET_BIT6)==SET_BIT6)             // if fail flag is set, toggle error LED and IAP stop
  62.                 {
  63.                         clr_IAPFF;
  64.                         IAP_ERROR_LED();
  65.                 }
  66. }
  67. /*
  68.                 WARNING:
  69.         No matter read or writer, when IAPFF is set 1,
  70.         this step process is fail. DATA should be ignore.
  71. */
  72. //-----------------------------------------------------------------------------------------------------------/

  73. /*****************************************************************************************************************
  74. Erase APROM subroutine:
  75.        

  76. ******************************************************************************************************************/               
  77. void Erase_LDROM(void)
  78. {   
  79.     UINT16 u16Count;

  80.     set_IAPEN;                                                                                                        // Enable IAP function
  81.                 IAPFD = 0xFF;                                                                                                // IMPORTANT !! To erase function must setting IAPFD = 0xFF
  82.     IAPCN = PAGE_ERASE_LD;
  83.     set_LDUEN;                                                                                                        //  APROM modify Enable
  84.        
  85.     for(u16Count=0x0000;u16Count<DATA_SIZE/PAGE_SIZE;u16Count++)                //
  86.     {        
  87.         IAPAL = LOBYTE(u16Count*PAGE_SIZE + DATA_START_ADDR);
  88.         IAPAH = HIBYTE(u16Count*PAGE_SIZE + DATA_START_ADDR);
  89.         Trigger_IAP();
  90.     }
  91. //    clr_LDUEN;
  92. //    clr_IAPEN;
  93. }
  94. //-----------------------------------------------------------------------------------------------------------
  95. void Erase_LDROM_Verify(void)
  96. {   
  97.     UINT16 u16Count;
  98.     set_IAPEN;
  99.     IAPAL = LOBYTE(DATA_START_ADDR);
  100.     IAPAH = HIBYTE(DATA_START_ADDR);
  101.     IAPCN = BYTE_READ_LD;

  102.     for(u16Count=0;u16Count<DATA_SIZE;u16Count++)
  103.     {   
  104.         IAPFD = 0x00;   
  105.         Trigger_IAP();
  106.         if(IAPFD != 0xFF)
  107.                                         IAP_ERROR_LED();
  108.         IAPAL++;
  109.         if(IAPAL == 0x00)
  110.           IAPAH++;
  111.     }
  112.                
  113.     clr_IAPEN;
  114.    
  115. }
  116. //-----------------------------------------------------------------------------------------------------------
  117. void Program_LDROM(void)
  118. {   
  119.     UINT16 u16Count;

  120.     set_IAPEN;
  121.     set_LDUEN;   
  122.     IAPAL = LOBYTE(DATA_START_ADDR);
  123.     IAPAH = HIBYTE(DATA_START_ADDR);
  124.     IAPCN = BYTE_PROGRAM_LD;
  125.    
  126.     for(u16Count=0;u16Count<DATA_SIZE;u16Count++)
  127.     {   
  128.         IAPFD++;     
  129.         Trigger_IAP();
  130.       
  131.         IAPAL++;
  132.         if(IAPAL == 0)
  133.         {
  134.             IAPAH++;
  135.         }
  136.     }
  137.                
  138.     clr_LDUEN;
  139.     clr_IAPEN;
  140. }
  141. //-----------------------------------------------------------------------------------------------------------
  142. void Program_LDROM_Verify(void)
  143. {   
  144.     UINT16 u16Count;
  145.     UINT8  u8Read_Data;

  146.     set_IAPEN;
  147.     IAPAL = LOBYTE(DATA_START_ADDR);
  148.     IAPAH = HIBYTE(DATA_START_ADDR);
  149.     IAPCN = BYTE_READ_LD;
  150.     u8Read_Data = 0x00;

  151.     for(u16Count=0;u16Count<DATA_SIZE;u16Count++)
  152.     {   
  153.         Trigger_IAP();
  154.         if(IAPFD != u8Read_Data)
  155.                                         IAP_ERROR_LED();
  156.         IAPAL++;
  157.         if(IAPAL == 0)
  158.         {
  159.             IAPAH++;
  160.         }
  161.         u8Read_Data ++;
  162.     }

  163.     clr_IAPEN;
  164. }
  165. //-----------------------------------------------------------------------------------------------------------

  166. //-----------------------------------------------------------------------------------------------------------
  167. void main (void)
  168. {

  169.   Set_All_GPIO_Quasi_Mode;
  170. //---------toggle GPIO1---------       
  171.         clr_GPIO1;
  172.         Timer0_Delay1ms(100);
  173.         set_GPIO1;
  174.         Timer0_Delay1ms(100);
  175.         clr_GPIO1;
  176.         Timer0_Delay1ms(100);
  177.         set_GPIO1;
  178.         Timer0_Delay1ms(100);
  179. //---------end toggle GPIO1---------
  180.        
  181.     Erase_LDROM();
  182.                 Erase_LDROM_Verify();
  183.     Program_LDROM();
  184.     Program_LDROM_Verify();

  185. //---------toggle GPIO1---------       
  186.         clr_GPIO1;
  187. //---------end toggle GPIO1---------

  188.     while(1);
  189. }
  190. //-----------------------------------------------------------------------------------------------------------
xixi2017 发表于 2017-9-18 22:17 | 显示全部楼层
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2016 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. //***********************************************************************************************************
  7. //  Nuvoton Technoledge Corp.
  8. //  Website: http://www.nuvoton.com
  9. //  E-Mail : MicroC-8bit@nuvoton.com
  10. //  Date   : Apr/21/2016
  11. //***********************************************************************************************************

  12. //***********************************************************************************************************
  13. //  File Function: N76E003 APROM program DATAFLASH as EEPROM way
  14. //***********************************************************************************************************
  15. #include "N76E003.h"
  16. #include "Common.h"
  17. #include "Delay.h"
  18. #include "SFR_Macro.h"
  19. #include "Function_define.h"


  20. /*****************************************************************************************************************
  21. write_DATAFLASH_BYTE :
  22. user can copy all this subroutine into project, then call this function in main.
  23. ******************************************************************************************************************/               
  24. void write_DATAFLASH_BYTE(UINT16 u16_addr,UINT8 u8_data)
  25. {
  26.         UINT8 looptmp=0,u8_addrl_r;
  27.         unsigned char code *cd_longaddr;
  28.         unsigned char xdata *xd_tmp;
  29.        
  30. //Check page start address
  31.         u8_addrl_r = u16_addr;
  32.         if (u8_addrl_r<0x80)
  33.         {
  34.                 u8_addrl_r = 0;
  35.         }
  36.         else
  37.         {
  38.                 u8_addrl_r = 0x80;
  39.         }
  40. //Save APROM data to XRAM
  41.         xd_tmp = 0x80;
  42.         cd_longaddr = (u16_addr&0xff00)+u8_addrl_r;       
  43.         while (xd_tmp !=0x100)
  44.         {
  45.                 *xd_tmp = *cd_longaddr;
  46.                 looptmp++;
  47.                 xd_tmp++;
  48.                 cd_longaddr++;
  49.         }
  50. // Modify customer data in XRAM
  51.         u8_addrl_r = u16_addr;
  52.         if (u8_addrl_r<0x80)
  53.         {
  54.                 xd_tmp = u8_addrl_r+0x80;
  55.         }
  56.         else
  57.         {
  58.                 xd_tmp = u8_addrl_r+0;
  59.         }
  60.         *xd_tmp = u8_data;
  61. //Erase APROM DATAFLASH page
  62.                 IAPAL = u16_addr;
  63.                 IAPAH = u16_addr>>8;
  64.                 IAPFD = 0xFF;
  65.           set_IAPEN;
  66.                 set_APUEN;
  67.     IAPCN = 0x22;                
  68.                 set_IAPGO;
  69. //Save changed RAM data to APROM DATAFLASH
  70.         u8_addrl_r = u16_addr;
  71.         if (u8_addrl_r<0x80)
  72.         {
  73.                 u8_addrl_r =0;
  74.         }
  75.         else
  76.         {
  77.                 u8_addrl_r = 0x80;
  78.         }
  79.                 xd_tmp = 0x80;
  80.           IAPAL = u8_addrl_r;
  81.     IAPAH = u16_addr>>8;
  82.                 set_IAPEN;
  83.                 set_APUEN;
  84.           IAPCN = 0x21;
  85.                 while (xd_tmp !=0xFF)
  86.                 {
  87.                         IAPFD = *xd_tmp;
  88.                         set_IAPGO;
  89.                         IAPAL++;
  90.                         xd_tmp++;
  91.                 }
  92.                 clr_APUEN;
  93.                 clr_IAPEN;
  94. }       
  95.        
  96. //-------------------------------------------------------------------------
  97. UINT8 read_APROM_BYTE(UINT16 code *u16_addr)
  98. {
  99.         UINT8 rdata;
  100.         rdata = *u16_addr>>8;
  101.         return rdata;
  102. }

  103. /******************************************************************************************************************/       


  104. void main (void)
  105. {
  106.                 UINT8 datatemp;
  107. /* -------------------------------------------------------------------------*/
  108. /*  Dataflash use APROM area, please ALWAYS care the address of you code    */
  109. /*        APROM 0x3800~0x38FF demo as dataflash                                                                                                     */
  110. /*         Please use Memory window key in C:0x3800 to check earse result                                        */             
  111. /* -------------------------------------------------------------------------*/
  112.                 InitialUART0_Timer1(115200);
  113. //call write byte
  114.                 write_DATAFLASH_BYTE (0x3881,0x55);
  115.                 write_DATAFLASH_BYTE (0x3882,0x56);
  116.                 write_DATAFLASH_BYTE (0x3855,0xaa);
  117.                 write_DATAFLASH_BYTE (0x3856,0x66);
  118. //call read byte
  119.                 datatemp = read_APROM_BYTE(0x3882);

  120.     while(1)
  121.                 {
  122. //                                printf ("\n data temp = 0x%bx", datatemp);
  123.                 }
  124. }
  125. //-----------------------------------------------------------------------------------------------------------
xixi2017 发表于 2017-9-18 22:17 | 显示全部楼层
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2015 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. //***********************************************************************************************************
  7. //  Nuvoton Technoledge Corp.
  8. //  Website: http://www.nuvoton.com
  9. //  E-Mail : MicroC-8bit@nuvoton.com
  10. //  Date   : Apr/21/2016
  11. //***********************************************************************************************************

  12. //***********************************************************************************************************
  13. //  File Function: N76E003 LDROM program APROM demo code
  14. //***********************************************************************************************************

  15. //***********************************************************************************************************
  16. //  Before using this demo code, please remind below CONFOGs setting, thanks.
  17. //                 CONFIG0.7 --> CBS=0
  18. //                 CONFIG1 = 0xFC, because this demo code size is 2495 Byte
  19. //***********************************************************************************************************
  20. #include "N76E003.h"
  21. #include "Common.h"
  22. #include "Delay.h"
  23. #include "SFR_Macro.h"
  24. #include "Function_define.h"


  25. #define     CID_READ            0x0B
  26. #define     DID_READ            0x0C
  27. #define     CFG_READ            0xC0
  28. #define     CFG_ERASE           0xE2

  29. #define     PAGE_ERASE_AP       0x22
  30. #define     BYTE_READ_AP        0x00
  31. #define     BYTE_PROGRAM_AP     0x21

  32. #define     BYTE_PROGRAM_CFG    0xE1
  33. #define     BYTE_READ_CFG       0xC0

  34. #define     PAGE_SIZE           128

  35. #define     APROM_SIZE          8192   
  36. #define     APROM_START_ADDR    0x0000

  37. #define     ERASE_FAIL          0x70
  38. #define     PROGRAM_FAIL        0x71
  39. #define     IAPFF_FAIL          0x72
  40. #define     IAP_PASS            0x00

  41. //-----------------------------------------------------------------------------------------------------------
  42. void Trigger_IAP(void)
  43. {   
  44.     set_IAPGO;                                  //trigger IAP
  45.     if((CHPCON&SET_BIT6)==SET_BIT6)             //check IAPFF (CHPCON.6), if flag = 1, the ISP process is fail.
  46.                 {
  47.                                 while(1)
  48.                                 {
  49.                                         clr_GPIO1;
  50.                                         Timer0_Delay1ms(100);
  51.                                         set_GPIO1;
  52.                                         Timer0_Delay1ms(100);
  53.                                 }
  54.                 }
  55. }                                                                       

  56. //-----------------------------------------------------------------------------------------------------------
  57. void Erase_CONFIG(void)
  58. {   
  59.     set_IAPEN;
  60.    
  61.     IAPAL = 0x00;
  62.     IAPAH = 0x00;
  63.     IAPFD = 0xFF;
  64.     IAPCN = CFG_ERASE;
  65.    
  66.     set_CFUEN;
  67.     Trigger_IAP();
  68.     clr_CFUEN;
  69.    
  70.     clr_IAPEN;
  71. }
  72. //-----------------------------------------------------------------------------------------------------------
  73. void Erase_APROM(void)
  74. {   
  75.     UINT16 u16Count;

  76.     set_IAPEN;
  77.           set_APUEN;                                                                                                // To erase or program APROM must enable APUEN
  78.        
  79.     IAPFD = 0xFF;                                                                            // MUST setting IAPFD = 0xFF when do erase process.
  80.     IAPCN = PAGE_ERASE_AP;

  81.     for(u16Count=0x0000;u16Count<APROM_SIZE/PAGE_SIZE;u16Count++)
  82.     {        
  83.         IAPAL = LOBYTE(u16Count*PAGE_SIZE + APROM_START_ADDR);
  84.         IAPAH = HIBYTE(u16Count*PAGE_SIZE + APROM_START_ADDR);
  85.         Trigger_IAP();
  86.     }
  87.                
  88.     clr_APUEN;
  89.     clr_IAPEN;
  90. }
  91. //-----------------------------------------------------------------------------------------------------------
  92. BIT Erase_APROM_Verify(void)
  93. {   
  94.     UINT16 u16Count;
  95.     BIT    Error_Flag = 0;

  96.     set_IAPEN;
  97.    
  98.     IAPAL = LOBYTE(APROM_START_ADDR);
  99.     IAPAH = HIBYTE(APROM_START_ADDR);
  100.     IAPCN = BYTE_READ_AP;

  101.     for(u16Count=0;u16Count<APROM_SIZE/PAGE_SIZE;u16Count++)
  102.     {   
  103.         IAPFD = 0x00;   
  104.         Trigger_IAP();

  105.         if(IAPFD != 0xFF)
  106.         {
  107.             Error_Flag = 1;
  108.             break;
  109.         }

  110.         IAPAL++;
  111.         if(IAPAL == 0x00)
  112.         {
  113.             IAPAH++;
  114.         }
  115.     }
  116.    
  117.     clr_IAPEN;
  118.    
  119.     if(Error_Flag == 1)
  120.         return FAIL;
  121.     else
  122.         return PASS;
  123. }
  124. //-----------------------------------------------------------------------------------------------------------
  125. void Program_APROM(void)
  126. {   
  127.     UINT16 u16Count;

  128.     set_IAPEN;
  129.     set_APUEN;   
  130.        
  131.     IAPAL = LOBYTE(APROM_START_ADDR);
  132.     IAPAH = HIBYTE(APROM_START_ADDR);
  133.     IAPFD = 0xFF;
  134.     IAPCN = BYTE_PROGRAM_AP;

  135.     for(u16Count=0;u16Count<APROM_SIZE;u16Count++)
  136.     {   
  137.         IAPFD++;     
  138.         Trigger_IAP();
  139.       
  140.         IAPAL++;
  141.         if(IAPAL == 0)
  142.         {
  143.             IAPAH++;
  144.         }
  145.     }
  146.                
  147.     clr_APUEN;
  148.     clr_IAPEN;
  149. }
  150. //-----------------------------------------------------------------------------------------------------------
  151. BIT Program_APROM_Verify(void)
  152. {   
  153.     UINT16 u16Count;
  154.     UINT8  u8Read_Data;
  155.     BIT    Error_Flag = 0;

  156.     set_IAPEN;
  157.    
  158.     IAPAL = LOBYTE(APROM_START_ADDR);
  159.     IAPAH = HIBYTE(APROM_START_ADDR);
  160.     IAPCN = BYTE_READ_AP;

  161.     u8Read_Data = 0x00;

  162.     for(u16Count=0;u16Count<APROM_SIZE;u16Count++)
  163.     {   
  164.         Trigger_IAP();
  165.         if(IAPFD != u8Read_Data)
  166.         {
  167.             Error_Flag = 1;
  168.             break;
  169.         }

  170.         IAPAL++;
  171.         if(IAPAL == 0)
  172.         {
  173.             IAPAH++;
  174.         }
  175.         u8Read_Data ++;
  176.     }

  177.     clr_IAPEN;
  178.      
  179.     if(Error_Flag == 1)
  180.         return FAIL;
  181.     else
  182.         return PASS;
  183. }
  184. //-----------------------------------------------------------------------------------------------------------
  185. void Program_CONFIG(UINT8 u8Address,UINT8 u8Data)
  186. {   
  187.     set_IAPEN;
  188.    
  189.     IAPAL = u8Address;
  190.     IAPAH = 0x00;
  191.     IAPFD = u8Data;
  192.     IAPCN = BYTE_PROGRAM_CFG;
  193.    
  194.     set_CFUEN;
  195.     Trigger_IAP();
  196.     clr_CFUEN;
  197.    
  198.     clr_IAPEN;
  199. }

  200. //-----------------------------------------------------------------------------------------------------------
  201. void main (void)
  202. {
  203.     Set_All_GPIO_Quasi_Mode;
  204.        
  205.                 clr_GPIO1;
  206.                 Timer0_Delay1ms(300);
  207.                 set_GPIO1;
  208.                 Timer0_Delay1ms(300);
  209.                 clr_GPIO1;
  210.                 Timer0_Delay1ms(300);
  211.                 set_GPIO1;

  212.   
  213.     Erase_APROM();
  214. //    if(Erase_APROM_Verify() == FAIL)
  215. //    {
  216. //        DISPLAY_LED = ERASE_FAIL;
  217. //        while(1);
  218. //    }

  219.     Program_APROM();
  220. //    if(Program_APROM_Verify() == FAIL)
  221. //    {
  222. //        DISPLAY_LED = PROGRAM_FAIL;
  223. //        while(1);
  224. //    }   
  225.     Program_CONFIG(0x04,0x0F);              //Program CONFIG4 =  0x0F; Enable WDT reset function.
  226.                 //Please always very carefully about the CONFIG program function. espcially about the CBS bit / LDROM size...
  227.     Timer0_Delay1ms(200);
  228.     while(1);
  229. }
  230. //-----------------------------------------------------------------------------------------------------------
xixi2017 发表于 2017-9-18 22:19 | 显示全部楼层
http://www.nuvoton.com/resource-files/N76E003_BSP_Keil_C51_V1.0.2.zip
Eric@Wei 发表于 2017-9-19 08:59 | 显示全部楼层
同求链接
wanduzi 发表于 2017-9-19 09:19 | 显示全部楼层

哈哈,你楼上就是啊。
wanduzi 发表于 2017-9-19 09:19 | 显示全部楼层
多谢分享下载链接。
 楼主| terryeva06 发表于 2017-9-19 17:51 | 显示全部楼层
这个BSP...难用哒,只跟你说了怎么存...
lvyisu123 发表于 2018-7-8 22:44 | 显示全部楼层
同样求isp ldrom源码
xinpian101 发表于 2018-7-9 23:38 | 显示全部楼层
卧牛堂,有这个。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

17

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部