[技术问答] N79E814A 的数据存储器空间固定为4K 地址为3000H 到3FFFH

[复制链接]
1262|10
 楼主| zloyqd 发表于 2016-12-27 15:59 | 显示全部楼层 |阅读模式
N79E814A 的数据存储器空间固定为4K 地址为3000H 到3FFFH    这个是怎么理解。要写存储器的话是怎么弄的。麻烦大师指教一下。
huangcunxiake 发表于 2016-12-27 16:47 | 显示全部楼层
楼主可以找到这个芯片的例程看看,官方有的
huangcunxiake 发表于 2016-12-27 16:48 | 显示全部楼层
yiyigirl2014 发表于 2016-12-27 21:12 | 显示全部楼层
根据上图,楼主理解的应该是对的。
wahahaheihei 发表于 2016-12-27 23:32 | 显示全部楼层
应该有个启动文件吧,里面定义的有这个。
 楼主| zloyqd 发表于 2016-12-28 10:39 | 显示全部楼层
huangcunxiake 发表于 2016-12-27 16:47
楼主可以找到这个芯片的例程看看,官方有的

你有没有这个例程
huangcunxiake 发表于 2016-12-28 20:15 | 显示全部楼层
wahahaheihei 发表于 2016-12-29 23:37 | 显示全部楼层
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2015 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. //***********************************************************************************************************
  7. //  Nuvoton Technology Corp.
  8. //  E-mail: MicroC-8bit@nuvoton.com
  9. //***********************************************************************************************************
  10. //  Application: LDROM program Data Flash Function
  11. //  ISP_LD.bin need to program to LD
  12. //  Config0 bit7(CBS)  need to select LDROM
  13. //
  14. //  Output : Test OK                  =>  P0 = 0
  15. //           Erase Data Verify err    =>  P0 = ~0xA1
  16. //           Program Data Verify err  =>  P0 = ~0xA2
  17. //
  18. //  Because ICE bridge can't update LDROM, Please using ICP/HW writer to update LDROM.
  19. //***********************************************************************************************************

  20. //------------------------- <<< Use Configuration Wizard in Context Menu >>> --------------------------------
  21. // <h> UART pin Select
  22. //     <o0.6> UART pin
  23. //          <0=> Select P1.0, P1.1 as UART pin(default)
  24. //          <1=> Select P2.6, P2.7 as UART pin(28 pin only)
  25. // </h>
  26. //-------------------------------- <<< end of configuration section >>> -------------------------------------

  27. #define Uart_Port_Sel   0x00

  28. #include "N79E715.h"
  29. #include "Typedef.h"
  30. #include "Define.h"
  31. #include "Common.h"
  32. #include "Delay.h"
  33. #include "Version.h"

  34. #include <intrins.h>
  35. #include <stdio.h>
  36. #include <string.h>

  37. #define   ERASE_ALL_DATA        0x22
  38. #define   FLASH_READ_DATA       0x00
  39. #define   BYTE_PROGRAM_DATA     0x21

  40. #define   ERASE_ALL_CONFIG      0xE2
  41. #define   FLASH_READ_CONFIG     0xC0
  42. #define   BYTE_PROGRAM_CONFIG   0xE1
  43. bit EA_Save_bit;
  44. //-----------------------------------------------------------------------------------------------------------
  45. void Clear_BOF(void)
  46. {
  47.     EA_Save_bit = EA;
  48.     EA = 0;
  49.     TA = 0xAA;
  50.     TA = 0x55;
  51.     PMCR &= CLR_BIT3;
  52.     EA = EA_Save_bit;
  53. }
  54. //-----------------------------------------------------------------------------------------------------------
  55. void Enable_ISP_Mode(void)
  56. {
  57.     /* Enable ISP  */
  58.     EA_Save_bit = EA;
  59.     EA = 0;
  60.     TA = 0xAA;
  61.     TA = 0x55;
  62.     CHPCON |= 0x01;
  63.     EA = EA_Save_bit;
  64. }
  65. //-----------------------------------------------------------------------------------------------------------
  66. void Disable_ISP_Mode(void)
  67. {
  68.     /* Disable ISP */
  69.     EA_Save_bit = EA;
  70.     EA = 0;
  71.     TA = 0xAA;
  72.     TA = 0x55;
  73.     CHPCON &= 0xFE;
  74.     EA = EA_Save_bit;
  75. }
  76. //-----------------------------------------------------------------------------------------------------------
  77. void Trigger_ISP(void)
  78. {
  79.     EA_Save_bit = EA;
  80.     EA = 0;
  81.     TA = 0xAA;
  82.     TA = 0x55;
  83.     ISPTRG |= 0x01;
  84.     EA = EA_Save_bit;
  85. }
  86. //-----------------------------------------------------------------------------------------------------------
  87. void Erase_DATA(void)
  88. {
  89.     UINT16 u16Count;

  90.     Enable_ISP_Mode();
  91.     P0 = ~0x01;
  92.     ISPCN = ERASE_ALL_DATA;

  93.     for(u16Count=96;u16Count<128;u16Count++)
  94.     {
  95.         ISPAL = LOBYTE(u16Count*128);               // 96*128=12288=0x3000
  96.         ISPAH = HIBYTE(u16Count*128);               // 96*128=12288=0x3000
  97.         Trigger_ISP();
  98.     }
  99.     Disable_ISP_Mode();
  100. }
  101. //-----------------------------------------------------------------------------------------------------------
  102. void Erase_DATA_Verify(void)
  103. {
  104.     UINT16 u16Count;

  105.     Enable_ISP_Mode();
  106.     P0 = ~0x02;
  107.     ISPAL = 0x00;
  108.     ISPAH = 0x30;
  109.     ISPCN = FLASH_READ_DATA;

  110.     for(u16Count=12288;u16Count<16384;u16Count++)
  111.     {
  112.         ISPFD = 0;
  113.         Trigger_ISP();

  114.         if(ISPFD != 0xFF)
  115.         {
  116.             printf ("\nEV err.");
  117.             P0 = ~0xA1;
  118.             while(1);
  119.         }

  120.         ISPAL++;
  121.         if(ISPAL == 0)
  122.         {
  123.             ISPAH++;
  124.         }
  125.     }
  126.     Disable_ISP_Mode();
  127. }
  128. //-----------------------------------------------------------------------------------------------------------
  129. void Program_DATA(void)
  130. {
  131.     UINT16 u16Count;

  132.     Enable_ISP_Mode();
  133.     P0 = ~0x03;
  134.     ISPAL = 0x00;
  135.     ISPAH = 0x30;
  136.     ISPFD = 0xFF;
  137.     ISPCN = BYTE_PROGRAM_DATA;

  138.     for(u16Count=12288;u16Count<16384;u16Count++)
  139.     {
  140.         ISPFD++;
  141.         Trigger_ISP();

  142.         ISPAL++;
  143.         if(ISPAL == 0)
  144.         {
  145.             ISPAH++;
  146.         }
  147.     }
  148.     Disable_ISP_Mode();
  149. }
  150. //-----------------------------------------------------------------------------------------------------------
  151. void Program_DATA_Verify(void)
  152. {
  153.     UINT16 u16Count;
  154.     UINT8  u8Read_Data;

  155.     Enable_ISP_Mode();
  156.     P0 = ~0x04;
  157.     ISPAL = 0x00;
  158.     ISPAH = 0x30;
  159.     u8Read_Data = 0x00;
  160.     ISPCN = FLASH_READ_DATA;

  161.     for(u16Count=12288;u16Count<16384;u16Count++)
  162.     {
  163.         Trigger_ISP();
  164.         if(ISPFD != u8Read_Data)
  165.         {
  166.             printf ("\nPV err.");
  167.             P0 = ~0xA2;
  168.             while(1);
  169.         }

  170.         ISPAL++;
  171.         if(ISPAL == 0)
  172.         {
  173.             ISPAH++;
  174.         }
  175.             u8Read_Data++;
  176.     }
  177.     Disable_ISP_Mode();
  178. }
  179. //-----------------------------------------------------------------------------------------------------------
  180. void Erase_CONFIG(void)
  181. {
  182.     BIT    EA_TMP;

  183.     EA_TMP = EA;
  184.     EA = 0;
  185.     Enable_ISP_Mode();
  186.     P0 = ~0x05;
  187.     ISPCN = ERASE_ALL_CONFIG;
  188.     ISPAL = 0x00;
  189.     ISPAH = 0x00;
  190.     Trigger_ISP();
  191.     Disable_ISP_Mode();
  192.     EA = EA_TMP;
  193. }

  194. //-----------------------------------------------------------------------------------------------------------
  195. void Program_CONFIG(UINT8 u8CONFIG_NUMBER,UINT8 u8Value)
  196. {
  197.     BIT    EA_TMP;

  198.     EA_TMP = EA;
  199.     EA = 0;
  200.     Enable_ISP_Mode();
  201.     P0 = ~0x06;
  202.     ISPAL = u8CONFIG_NUMBER;
  203.     ISPAH = 0x00;
  204.     ISPFD = u8Value;
  205.     ISPCN = BYTE_PROGRAM_CONFIG;
  206.     Trigger_ISP();
  207.     Disable_ISP_Mode();
  208.     EA = EA_TMP;
  209. }
  210. //-----------------------------------------------------------------------------------------------------------
  211. UINT8 Read_CONFIG(UINT8 u8CONFIG_NUMBER)
  212. {
  213.     UINT8  u8Read_Data;

  214.     Enable_ISP_Mode();
  215.     P0 = ~0x07;
  216.     ISPAL = u8CONFIG_NUMBER;
  217.     ISPAH = 0x00;
  218.     u8Read_Data = 0x00;
  219.     ISPCN = FLASH_READ_CONFIG;
  220.     Trigger_ISP();
  221.     u8Read_Data = ISPFD;
  222.     Disable_ISP_Mode();
  223.     return u8Read_Data;
  224. }
  225. //-----------------------------------------------------------------------------------------------------------
  226. void main (void)
  227. {


  228.     Clear_BOF();

  229.     InitialUART0_Timer1(9600);                      // 9600 Baud Rate [url=home.php?mod=space&uid=72445]@[/url] 11.0592MHz
  230.     printf ("\n N79E715 ISP LDROM Program Data Flash Sample Code.");

  231.     Erase_DATA();
  232.     Erase_DATA_Verify();
  233.     Program_DATA();
  234.     Program_DATA_Verify();

  235.     printf ("\nN79E715 ISP LDROM Program Data Flash OK!\n");
  236.     P14 = 0;
  237.     P21 = 0;
  238.     while(1);
  239. }
  240. //-----------------------------------------------------------------------------------------------------------


wahahaheihei 发表于 2016-12-29 23:42 | 显示全部楼层
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2015 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/

  6. //***********************************************************************************************************
  7. //  Nuvoton Technology Corp.
  8. //  E-mail: MicroC-8bit@nuvoton.com
  9. //***********************************************************************************************************
  10. //  Application: APROM program Data Flash Function
  11. //  ISP_AP.bin need to program to APROM
  12. //  Config0 bit0(DFEN) =0 (enable DFEN)
  13. //  Config1(CHBDA)=0x30
  14. //  Output : Test OK                  =>  P0 = 0
  15. //           Erase Data Verify err    =>  P0 = ~0xA1
  16. //           Program Data Verify err  =>  P0 = ~0xA2
  17. //***********************************************************************************************************

  18. //------------------------- <<< Use Configuration Wizard in Context Menu >>> --------------------------------
  19. // <h> UART pin Select
  20. //     <o0.6> UART pin
  21. //          <0=> Select P1.0, P1.1 as UART pin(default)
  22. //          <1=> Select P2.6, P2.7 as UART pin(28 pin only)
  23. // </h>
  24. //-------------------------------- <<< end of configuration section >>> -------------------------------------

  25. #define Uart_Port_Sel   0x00

  26. #include "N79E715.h"
  27. #include "Typedef.h"
  28. #include "Define.h"
  29. #include "Common.h"
  30. #include "Delay.h"
  31. #include "Version.h"

  32. #include <intrins.h>
  33. #include <stdio.h>
  34. #include <string.h>

  35. #define   ERASE_ALL_DATA        0x22
  36. #define   FLASH_READ_DATA       0x00
  37. #define   BYTE_PROGRAM_DATA     0x21

  38. #define   ERASE_ALL_CONFIG      0xE2
  39. #define   FLASH_READ_CONFIG     0xC0
  40. #define   BYTE_PROGRAM_CONFIG   0xE1
  41. bit EA_Save_bit;
  42. //-----------------------------------------------------------------------------------------------------------
  43. void Clear_BOF(void)
  44. {
  45.     EA_Save_bit = EA;
  46.     EA = 0;
  47.     TA = 0xAA;
  48.     TA = 0x55;
  49.     PMCR &= CLR_BIT3;
  50.     EA = EA_Save_bit;
  51. }
  52. //-----------------------------------------------------------------------------------------------------------
  53. void Enable_ISP_Mode(void)
  54. {
  55.     /* Enable ISP  */
  56.     EA_Save_bit = EA;
  57.     EA = 0;
  58.     TA = 0xAA;
  59.     TA = 0x55;
  60.     CHPCON |= 0x01;
  61.     EA = EA_Save_bit;
  62. }
  63. //-----------------------------------------------------------------------------------------------------------
  64. void Disable_ISP_Mode(void)
  65. {
  66.     /* Disable ISP */
  67.     EA_Save_bit = EA;
  68.     EA = 0;
  69.     TA = 0xAA;
  70.     TA = 0x55;
  71.     CHPCON &= 0xFE;
  72.     EA = EA_Save_bit;
  73. }
  74. //-----------------------------------------------------------------------------------------------------------
  75. void Trigger_ISP(void)
  76. {
  77.     EA_Save_bit = EA;
  78.     EA = 0;
  79.     EA = 0;
  80.     TA = 0xAA;
  81.     TA = 0x55;
  82.     ISPTRG |= 0x01;
  83.     EA = EA_Save_bit;
  84. }
  85. //-----------------------------------------------------------------------------------------------------------
  86. void Erase_DATA(void)
  87. {
  88.     UINT16 u16Count;

  89.     Enable_ISP_Mode();
  90.     P0 = ~0x01;
  91.     ISPCN = ERASE_ALL_DATA;

  92.     for(u16Count=96;u16Count<128;u16Count++)
  93.     {
  94.         ISPAL = LOBYTE(u16Count*128);               // 96*128=12288=0x3000
  95.         ISPAH = HIBYTE(u16Count*128);               // 96*128=12288=0x3000
  96.         Trigger_ISP();
  97.     }
  98.     Disable_ISP_Mode();
  99. }
  100. //-----------------------------------------------------------------------------------------------------------
  101. void Erase_DATA_Verify(void)
  102. {
  103.     UINT16 u16Count;

  104.     Enable_ISP_Mode();
  105.     P0 = ~0x02;
  106.     ISPAL = 0x00;
  107.     ISPAH = 0x30;
  108.     ISPCN = FLASH_READ_DATA;

  109.     for(u16Count=12288;u16Count<16384;u16Count++)
  110.     {
  111.         ISPFD = 0;
  112.         Trigger_ISP();

  113.         if(ISPFD != 0xFF)
  114.         {
  115.             printf ("\nEV err.");
  116.             P0 = ~0xA1;
  117.             while(1);
  118.         }

  119.         ISPAL++;
  120.         if(ISPAL == 0)
  121.         {
  122.             ISPAH++;
  123.         }
  124.     }
  125.     Disable_ISP_Mode();
  126. }
  127. //-----------------------------------------------------------------------------------------------------------
  128. void Program_DATA(void)
  129. {
  130.     UINT16 u16Count;

  131.     Enable_ISP_Mode();
  132.     P0 = ~0x03;
  133.     ISPAL = 0x00;
  134.     ISPAH = 0x30;
  135.     ISPFD = 0xFF;
  136.     ISPCN = BYTE_PROGRAM_DATA;

  137.     for(u16Count=12288;u16Count<16384;u16Count++)
  138.     {
  139.         ISPFD++;
  140.         Trigger_ISP();

  141.         ISPAL++;
  142.         if(ISPAL == 0)
  143.         {
  144.             ISPAH++;
  145.         }
  146.     }
  147.     Disable_ISP_Mode();
  148. }
  149. //-----------------------------------------------------------------------------------------------------------
  150. void Program_DATA_Verify(void)
  151. {
  152.     UINT16 u16Count;
  153.     UINT8  u8Read_Data;

  154.     Enable_ISP_Mode();
  155.     P0 = ~0x04;
  156.     ISPAL = 0x00;
  157.     ISPAH = 0x30;
  158.     u8Read_Data = 0x00;
  159.     ISPCN = FLASH_READ_DATA;

  160.     for(u16Count=12288;u16Count<16384;u16Count++)
  161.     {
  162.         Trigger_ISP();
  163.         if(ISPFD != u8Read_Data)
  164.         {
  165.             printf ("\nPV err.");
  166.             P0 = ~0xA2;
  167.             while(1);
  168.         }

  169.         ISPAL++;
  170.         if(ISPAL == 0)
  171.         {
  172.             ISPAH++;
  173.         }
  174.             u8Read_Data++;
  175.     }
  176.     Disable_ISP_Mode();
  177. }
  178. //-----------------------------------------------------------------------------------------------------------
  179. void main (void)
  180. {

  181.     Clear_BOF();
  182.     AUXR1 |= Uart_Port_Sel;             // Select P10/P11 as UART pin(default)
  183.     InitialUART0_Timer1(9600);          // 9600 Baud Rate @ 11.0592MHz
  184.     Show_Version_Number_To_PC();
  185.     printf ("\n N79E84x ISP APROM Program Data Flash Sample Code.");

  186.     Erase_DATA();
  187.     Erase_DATA_Verify();
  188.     Program_DATA();
  189.     Program_DATA_Verify();

  190.     printf ("\n N79E715 ISP APROM Program Data Flash OK!\n");

  191.     P14 = 0;
  192.     P21 = 0;
  193.     while(1);
  194. }
  195. //-----------------------------------------------------------------------------------------------------------


zhuotuzi 发表于 2016-12-29 23:55 | 显示全部楼层
我记得例程里有三个相关的例程,可以参考参考怎么写的。
nobleliom 发表于 2016-12-30 19:43 | 显示全部楼层
写flash的时候有地址位的,地址必须要从那个开始的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

6

帖子

0

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