打印
[技术问答]

N79E814A 的数据存储器空间固定为4K 地址为3000H 到3FFFH

[复制链接]
1061|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 | 只看该作者
根据上图,楼主理解的应该是对的。

使用特权

评论回复
5
wahahaheihei| | 2016-12-27 23:32 | 只看该作者
应该有个启动文件吧,里面定义的有这个。

使用特权

评论回复
6
zloyqd|  楼主 | 2016-12-28 10:39 | 只看该作者
huangcunxiake 发表于 2016-12-27 16:47
楼主可以找到这个芯片的例程看看,官方有的

你有没有这个例程

使用特权

评论回复
7
huangcunxiake| | 2016-12-28 20:15 | 只看该作者

使用特权

评论回复
8
wahahaheihei| | 2016-12-29 23:37 | 只看该作者
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2015 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

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

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

#define Uart_Port_Sel   0x00

#include "N79E715.h"
#include "Typedef.h"
#include "Define.h"
#include "Common.h"
#include "Delay.h"
#include "Version.h"

#include <intrins.h>
#include <stdio.h>
#include <string.h>

#define   ERASE_ALL_DATA        0x22
#define   FLASH_READ_DATA       0x00
#define   BYTE_PROGRAM_DATA     0x21

#define   ERASE_ALL_CONFIG      0xE2
#define   FLASH_READ_CONFIG     0xC0
#define   BYTE_PROGRAM_CONFIG   0xE1
bit EA_Save_bit;
//-----------------------------------------------------------------------------------------------------------
void Clear_BOF(void)
{
    EA_Save_bit = EA;
    EA = 0;
    TA = 0xAA;
    TA = 0x55;
    PMCR &= CLR_BIT3;
    EA = EA_Save_bit;
}
//-----------------------------------------------------------------------------------------------------------
void Enable_ISP_Mode(void)
{
    /* Enable ISP  */
    EA_Save_bit = EA;
    EA = 0;
    TA = 0xAA;
    TA = 0x55;
    CHPCON |= 0x01;
    EA = EA_Save_bit;
}
//-----------------------------------------------------------------------------------------------------------
void Disable_ISP_Mode(void)
{
    /* Disable ISP */
    EA_Save_bit = EA;
    EA = 0;
    TA = 0xAA;
    TA = 0x55;
    CHPCON &= 0xFE;
    EA = EA_Save_bit;
}
//-----------------------------------------------------------------------------------------------------------
void Trigger_ISP(void)
{
    EA_Save_bit = EA;
    EA = 0;
    TA = 0xAA;
    TA = 0x55;
    ISPTRG |= 0x01;
    EA = EA_Save_bit;
}
//-----------------------------------------------------------------------------------------------------------
void Erase_DATA(void)
{
    UINT16 u16Count;

    Enable_ISP_Mode();
    P0 = ~0x01;
    ISPCN = ERASE_ALL_DATA;

    for(u16Count=96;u16Count<128;u16Count++)
    {
        ISPAL = LOBYTE(u16Count*128);               // 96*128=12288=0x3000
        ISPAH = HIBYTE(u16Count*128);               // 96*128=12288=0x3000
        Trigger_ISP();
    }
    Disable_ISP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void Erase_DATA_Verify(void)
{
    UINT16 u16Count;

    Enable_ISP_Mode();
    P0 = ~0x02;
    ISPAL = 0x00;
    ISPAH = 0x30;
    ISPCN = FLASH_READ_DATA;

    for(u16Count=12288;u16Count<16384;u16Count++)
    {
        ISPFD = 0;
        Trigger_ISP();

        if(ISPFD != 0xFF)
        {
            printf ("\nEV err.");
            P0 = ~0xA1;
            while(1);
        }

        ISPAL++;
        if(ISPAL == 0)
        {
            ISPAH++;
        }
    }
    Disable_ISP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void Program_DATA(void)
{
    UINT16 u16Count;

    Enable_ISP_Mode();
    P0 = ~0x03;
    ISPAL = 0x00;
    ISPAH = 0x30;
    ISPFD = 0xFF;
    ISPCN = BYTE_PROGRAM_DATA;

    for(u16Count=12288;u16Count<16384;u16Count++)
    {
        ISPFD++;
        Trigger_ISP();

        ISPAL++;
        if(ISPAL == 0)
        {
            ISPAH++;
        }
    }
    Disable_ISP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void Program_DATA_Verify(void)
{
    UINT16 u16Count;
    UINT8  u8Read_Data;

    Enable_ISP_Mode();
    P0 = ~0x04;
    ISPAL = 0x00;
    ISPAH = 0x30;
    u8Read_Data = 0x00;
    ISPCN = FLASH_READ_DATA;

    for(u16Count=12288;u16Count<16384;u16Count++)
    {
        Trigger_ISP();
        if(ISPFD != u8Read_Data)
        {
            printf ("\nPV err.");
            P0 = ~0xA2;
            while(1);
        }

        ISPAL++;
        if(ISPAL == 0)
        {
            ISPAH++;
        }
            u8Read_Data++;
    }
    Disable_ISP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void Erase_CONFIG(void)
{
    BIT    EA_TMP;

    EA_TMP = EA;
    EA = 0;
    Enable_ISP_Mode();
    P0 = ~0x05;
    ISPCN = ERASE_ALL_CONFIG;
    ISPAL = 0x00;
    ISPAH = 0x00;
    Trigger_ISP();
    Disable_ISP_Mode();
    EA = EA_TMP;
}

//-----------------------------------------------------------------------------------------------------------
void Program_CONFIG(UINT8 u8CONFIG_NUMBER,UINT8 u8Value)
{
    BIT    EA_TMP;

    EA_TMP = EA;
    EA = 0;
    Enable_ISP_Mode();
    P0 = ~0x06;
    ISPAL = u8CONFIG_NUMBER;
    ISPAH = 0x00;
    ISPFD = u8Value;
    ISPCN = BYTE_PROGRAM_CONFIG;
    Trigger_ISP();
    Disable_ISP_Mode();
    EA = EA_TMP;
}
//-----------------------------------------------------------------------------------------------------------
UINT8 Read_CONFIG(UINT8 u8CONFIG_NUMBER)
{
    UINT8  u8Read_Data;

    Enable_ISP_Mode();
    P0 = ~0x07;
    ISPAL = u8CONFIG_NUMBER;
    ISPAH = 0x00;
    u8Read_Data = 0x00;
    ISPCN = FLASH_READ_CONFIG;
    Trigger_ISP();
    u8Read_Data = ISPFD;
    Disable_ISP_Mode();
    return u8Read_Data;
}
//-----------------------------------------------------------------------------------------------------------
void main (void)
{


    Clear_BOF();

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

    Erase_DATA();
    Erase_DATA_Verify();
    Program_DATA();
    Program_DATA_Verify();

    printf ("\nN79E715 ISP LDROM Program Data Flash OK!\n");
    P14 = 0;
    P21 = 0;
    while(1);
}
//-----------------------------------------------------------------------------------------------------------


使用特权

评论回复
9
wahahaheihei| | 2016-12-29 23:42 | 只看该作者
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2015 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

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

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

#define Uart_Port_Sel   0x00

#include "N79E715.h"
#include "Typedef.h"
#include "Define.h"
#include "Common.h"
#include "Delay.h"
#include "Version.h"

#include <intrins.h>
#include <stdio.h>
#include <string.h>

#define   ERASE_ALL_DATA        0x22
#define   FLASH_READ_DATA       0x00
#define   BYTE_PROGRAM_DATA     0x21

#define   ERASE_ALL_CONFIG      0xE2
#define   FLASH_READ_CONFIG     0xC0
#define   BYTE_PROGRAM_CONFIG   0xE1
bit EA_Save_bit;
//-----------------------------------------------------------------------------------------------------------
void Clear_BOF(void)
{
    EA_Save_bit = EA;
    EA = 0;
    TA = 0xAA;
    TA = 0x55;
    PMCR &= CLR_BIT3;
    EA = EA_Save_bit;
}
//-----------------------------------------------------------------------------------------------------------
void Enable_ISP_Mode(void)
{
    /* Enable ISP  */
    EA_Save_bit = EA;
    EA = 0;
    TA = 0xAA;
    TA = 0x55;
    CHPCON |= 0x01;
    EA = EA_Save_bit;
}
//-----------------------------------------------------------------------------------------------------------
void Disable_ISP_Mode(void)
{
    /* Disable ISP */
    EA_Save_bit = EA;
    EA = 0;
    TA = 0xAA;
    TA = 0x55;
    CHPCON &= 0xFE;
    EA = EA_Save_bit;
}
//-----------------------------------------------------------------------------------------------------------
void Trigger_ISP(void)
{
    EA_Save_bit = EA;
    EA = 0;
    EA = 0;
    TA = 0xAA;
    TA = 0x55;
    ISPTRG |= 0x01;
    EA = EA_Save_bit;
}
//-----------------------------------------------------------------------------------------------------------
void Erase_DATA(void)
{
    UINT16 u16Count;

    Enable_ISP_Mode();
    P0 = ~0x01;
    ISPCN = ERASE_ALL_DATA;

    for(u16Count=96;u16Count<128;u16Count++)
    {
        ISPAL = LOBYTE(u16Count*128);               // 96*128=12288=0x3000
        ISPAH = HIBYTE(u16Count*128);               // 96*128=12288=0x3000
        Trigger_ISP();
    }
    Disable_ISP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void Erase_DATA_Verify(void)
{
    UINT16 u16Count;

    Enable_ISP_Mode();
    P0 = ~0x02;
    ISPAL = 0x00;
    ISPAH = 0x30;
    ISPCN = FLASH_READ_DATA;

    for(u16Count=12288;u16Count<16384;u16Count++)
    {
        ISPFD = 0;
        Trigger_ISP();

        if(ISPFD != 0xFF)
        {
            printf ("\nEV err.");
            P0 = ~0xA1;
            while(1);
        }

        ISPAL++;
        if(ISPAL == 0)
        {
            ISPAH++;
        }
    }
    Disable_ISP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void Program_DATA(void)
{
    UINT16 u16Count;

    Enable_ISP_Mode();
    P0 = ~0x03;
    ISPAL = 0x00;
    ISPAH = 0x30;
    ISPFD = 0xFF;
    ISPCN = BYTE_PROGRAM_DATA;

    for(u16Count=12288;u16Count<16384;u16Count++)
    {
        ISPFD++;
        Trigger_ISP();

        ISPAL++;
        if(ISPAL == 0)
        {
            ISPAH++;
        }
    }
    Disable_ISP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void Program_DATA_Verify(void)
{
    UINT16 u16Count;
    UINT8  u8Read_Data;

    Enable_ISP_Mode();
    P0 = ~0x04;
    ISPAL = 0x00;
    ISPAH = 0x30;
    u8Read_Data = 0x00;
    ISPCN = FLASH_READ_DATA;

    for(u16Count=12288;u16Count<16384;u16Count++)
    {
        Trigger_ISP();
        if(ISPFD != u8Read_Data)
        {
            printf ("\nPV err.");
            P0 = ~0xA2;
            while(1);
        }

        ISPAL++;
        if(ISPAL == 0)
        {
            ISPAH++;
        }
            u8Read_Data++;
    }
    Disable_ISP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void main (void)
{

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

    Erase_DATA();
    Erase_DATA_Verify();
    Program_DATA();
    Program_DATA_Verify();

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

    P14 = 0;
    P21 = 0;
    while(1);
}
//-----------------------------------------------------------------------------------------------------------


使用特权

评论回复
10
zhuotuzi| | 2016-12-29 23:55 | 只看该作者
我记得例程里有三个相关的例程,可以参考参考怎么写的。

使用特权

评论回复
11
nobleliom| | 2016-12-30 19:43 | 只看该作者
写flash的时候有地址位的,地址必须要从那个开始的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

6

帖子

0

粉丝