打印
[技术问答]

关于ISP、IAP中LDROM问题咨询

[复制链接]
2744|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
21icszx|  楼主 | 2017-2-17 17:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 21icszx 于 2017-2-17 17:18 编辑

使用ISP方式给芯片编程时,芯片内的ISP固件位于LDROM区; 使用IAP方式用户程序自编程时,自编程的代码也位于LDROM区。
问题1:芯片出厂时是不是在LDROM区已经烧写了ISP固件代码?
问题2:IAP编程时,将IAP自编程代码下载到LDROM,是不是已经将出厂时厂家烧写的ISP固件代码覆盖了?也就是说此时芯片已经无法支持ISP编程了?
问题3:如果想再次使用ISP编程方式,是不是需要采用ICP方式将ISP固件代码重新烧写到LDROM区?


沙发
wahahaheihei| | 2017-2-17 20:00 | 只看该作者
官方说有那三种编程的功能,肯定是在出厂时候已经固化了支持这三种编程方式的固件代码了。

使用特权

评论回复
板凳
yiyigirl2014| | 2017-2-17 20:51 | 只看该作者
应该不用重新烧录吧,可以看看手册上怎么描述这个问题的。

使用特权

评论回复
地板
yiyigirl2014| | 2017-2-17 20:54 | 只看该作者
给你点例程序看看。这些一般是51内核的新唐都支持的。
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2015 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Nuvoton Technoledge Corp.
//  Website: http://www.nuvoton.com
//  E-Mail : MicroC-8bit@nuvoton.com
//  Date   : Apr/21/2015
//***********************************************************************************************************

//***********************************************************************************************************
//  File Function: N76E885 APROM program APROM demo code
//***********************************************************************************************************

#include <stdio.h>
#include "N76E885.h"
#include "Version.h"
#include "Typedef.h"
#include "Define.h"
#include "SFR_Macro.h"
#include "Common.h"
#include "Delay.h"

/*
//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
//
////<e0> System Clock Source Configuration
// <o1> System Clock Source Selection
//      <0=> 2~25MHz    XTAL
//      <1=> 32.768KHz  XTAL
//      <2=> 22.1184MHz Internal
//      <3=> 10KHz      Internal
//      <4=> OSC-In     External
//</e>
//
//<e2> Clock Divider Configuration
//     <o3.0..7>  System Clock Source Devider <1-255>
//                     <i> Fsys = (System Clock Source) / (2 * Devider)
//</e>
//
//-------- <<< end of configuration section >>> ------------------------------
*/

#define     SYS_CLK_EN          0
#define     SYS_SEL             2
#define     SYS_DIV_EN          0                   //0: Fsys=Fosc, 1: Fsys = Fosc/(2*CKDIV)
#define     SYS_DIV             1

#define     CID_READ            0x0B
#define     DID_READ            0x0C
#define     CFG_READ            0xC0
#define     CFG_ERASE           0xE2

#define     PAGE_ERASE_AP       0x22
#define     BYTE_READ_AP        0x00
#define     BYTE_PROGRAM_AP     0x21

#define     BYTE_PROGRAM_CFG    0xE1
#define     BYTE_READ_CFG       0xC0

#define     PAGE_SIZE           128

#define     DATA_SIZE           4096   
#define     DATA_START_ADDR     0x3800 //(0x4800-0x1000)

#define     ERASE_FAIL          0x70
#define     PROGRAM_FAIL        0x71
#define     IAPFF_FAIL          0x72
#define     IAP_PASS            0x00

#define     DISPLAY_LED         P3
bit BIT_TMP;

//-----------------------------------------------------------------------------------------------------------
void Enable_IAP_Mode(void)
{   
    set_IAPEN;
}
//-----------------------------------------------------------------------------------------------------------
void Disable_IAP_Mode(void)
{   
    clr_IAPEN;
}
//-----------------------------------------------------------------------------------------------------------
void Trigger_IAP(void)
{   
    set_IAPGO;                                  //trigger IAP
    if((CHPCON&SET_BIT6)==SET_BIT6)             //check IAPFF (CHPCON.6)
    {
        DISPLAY_LED = IAPFF_FAIL;
        printf ("\n*  IAPFF = 1.");
        while(1);
    }
}
//-----------------------------------------------------------------------------------------------------------
void ID_Read(UINT8 *pu8CID,UINT8 *pu8DID0,UINT8 *pu8DID1)
{   
    Enable_IAP_Mode();

    //Read CID
    IAPAL = 0x00;
    IAPAH = 0x00;
    IAPCN = CID_READ;
    Trigger_IAP();
   
    *pu8CID = IAPFD;

    //Read DID0
    IAPCN = DID_READ;
    Trigger_IAP();
    *pu8DID0 = IAPFD;

    //Read DID1
    IAPAL ++;
    IAPCN = DID_READ;
    Trigger_IAP();
    *pu8DID1 = IAPFD;

    Disable_IAP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void CONFIG_Read(UINT8 *pu8CFG0,UINT8 *pu8CFG1,UINT8 *pu8CFG2,UINT8 *pu8CFG3,UINT8 *pu8CFG4)
{   
    Enable_IAP_Mode();

    //Read CONFIG0
    IAPAL = 0x00;
    IAPAH = 0x00;
    IAPCN = CFG_READ;
    Trigger_IAP();
    *pu8CFG0 = IAPFD;

    //Read CONFIG1
    IAPAL ++;
    IAPCN = CFG_READ;
    Trigger_IAP();
    *pu8CFG1 = IAPFD;

    //Read CONFIG2
    IAPAL ++;
    IAPCN = CFG_READ;
    Trigger_IAP();
    *pu8CFG2 = IAPFD;

    //Read CONFIG3
    IAPAL ++;
    IAPCN = CFG_READ;
    Trigger_IAP();
    *pu8CFG3 = IAPFD;

    //Read CONFIG4
    IAPAL ++;
    IAPCN = CFG_READ;
    Trigger_IAP();
    *pu8CFG4 = IAPFD;
   
    Disable_IAP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void Erase_APROM(void)
{   
    UINT16 u16Count;

    Enable_IAP_Mode();
   
    IAPFD = 0xFF;   
    IAPCN = PAGE_ERASE_AP;
   
    set_APUEN;
    for(u16Count=0x0000;u16Count<DATA_SIZE/PAGE_SIZE;u16Count++)
    {        
        IAPAL = LOBYTE(u16Count*PAGE_SIZE + DATA_START_ADDR);
        IAPAH = HIBYTE(u16Count*PAGE_SIZE + DATA_START_ADDR);
        Trigger_IAP();
    }
    clr_APUEN;
   
    Disable_IAP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
BIT Erase_APROM_Verify(void)
{   
    UINT16 u16Count;
    BIT    Error_Flag = 0;

    Enable_IAP_Mode();
   
    IAPAL = LOBYTE(DATA_START_ADDR);
    IAPAH = HIBYTE(DATA_START_ADDR);
    IAPCN = BYTE_READ_AP;

    for(u16Count=0;u16Count<DATA_SIZE/PAGE_SIZE;u16Count++)
    {   
        IAPFD = 0x00;   
        Trigger_IAP();

        if(IAPFD != 0xFF)
        {
            Error_Flag = 1;
            break;
        }

        IAPAL++;
        if(IAPAL == 0x00)
        {
            IAPAH++;
        }
    }
   
    Disable_IAP_Mode();
   
    if(Error_Flag == 1)
        return FAIL;
    else
        return PASS;
}
//-----------------------------------------------------------------------------------------------------------
void Program_APROM(void)
{   
    UINT16 u16Count;

    Enable_IAP_Mode();
   
    IAPAL = LOBYTE(DATA_START_ADDR);
    IAPAH = HIBYTE(DATA_START_ADDR);
    IAPFD = 0xFF;
    IAPCN = BYTE_PROGRAM_AP;
   
    set_APUEN;
    for(u16Count=0;u16Count<DATA_SIZE;u16Count++)
    {   
        IAPFD++;     
        Trigger_IAP();
      
        IAPAL++;
        if(IAPAL == 0)
        {
            IAPAH++;
        }
    }
    clr_APUEN;
   
    Disable_IAP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
BIT Program_APROM_Verify(void)
{   
    UINT16 u16Count;
    UINT8  u8Read_Data;
    BIT    Error_Flag = 0;

    Enable_IAP_Mode();
   
    IAPAL = LOBYTE(DATA_START_ADDR);
    IAPAH = HIBYTE(DATA_START_ADDR);
    IAPCN = BYTE_READ_AP;

    u8Read_Data = 0x00;

    for(u16Count=0;u16Count<DATA_SIZE;u16Count++)
    {   
        Trigger_IAP();
        if(IAPFD != u8Read_Data)
        {
            Error_Flag = 1;
            break;
        }

        IAPAL++;
        if(IAPAL == 0)
        {
            IAPAH++;
        }
        u8Read_Data ++;
    }

    Disable_IAP_Mode();
     
    if(Error_Flag == 1)
        return FAIL;
    else
        return PASS;
}
//-----------------------------------------------------------------------------------------------------------
void Program_CONFIG(UINT8 u8Address,UINT8 u8Data)
{   
    Enable_IAP_Mode();
   
    IAPAL = u8Address;
    IAPAH = 0x00;
    IAPFD = u8Data;
    IAPCN = BYTE_PROGRAM_CFG;
   
    set_CFUEN;
    Trigger_IAP();
    clr_CFUEN;
   
    Disable_IAP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void Erase_CONFIG(void)
{   
    Enable_IAP_Mode();
   
    IAPAL = 0x00;
    IAPAH = 0x00;
    IAPFD = 0xFF;
    IAPCN = CFG_ERASE;
   
    set_CFUEN;
    Trigger_IAP();
    clr_CFUEN;
   
    Disable_IAP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void ID_CONFIG_Read(void)
{
    UINT8 u8CID,u8DID0,u8DID1;
    UINT8 u8CFG0,u8CFG1,u8CFG2,u8CFG3,u8CFG4;
   
    ID_Read(&u8CID,&u8DID0,&u8DID1);
    printf("\nCID  = 0x%X",(UINT16)u8CID);
    printf("\nDID0 = 0x%X",(UINT16)u8DID0);
    printf("\nDID1 = 0x%X",(UINT16)u8DID1);

    CONFIG_Read(&u8CFG0,&u8CFG1,&u8CFG2,&u8CFG3,&u8CFG4);
    printf("\nCFG0 = 0x%X",(UINT16)u8CFG0);
    printf("\nCFG1 = 0x%X",(UINT16)u8CFG1);
    printf("\nCFG2 = 0x%X",(UINT16)u8CFG2);
    printf("\nCFG3 = 0x%X",(UINT16)u8CFG3);
    printf("\nCFG4 = 0x%X",(UINT16)u8CFG4);
}
//-----------------------------------------------------------------------------------------------------------
void main (void)
{
    /* Note
       MCU power on system clock is HIRC (22.1184MHz), so Fsys = 22.1184MHz
    */
   
    Set_All_GPIO_Quasi_Mode();
    InitialUART0_Timer1_Type1(9600);             /* 9600 Baud Rate*/

    Show_FW_Version_Number_To_PC();
   
    printf ("\n*===================================================================");
    printf ("\n*  Name: N76E885 IAP APROM Program APROM Demo Code.");
    printf ("\n*===================================================================\n");
   
    /* Change system closk source */
    #if SYS_CLK_EN == 1
        #if   SYS_SEL == 0
            System_Clock_Select(E_HXTEN);   //Fosc = 2~25MHz XTAL
        #elif SYS_SEL == 1
            System_Clock_Select(E_LXTEN);   //Fosc = 32.768KHz XTAL
        #elif SYS_SEL == 2
            System_Clock_Select(E_HIRCEN);  //Fosc = 22.1184MHz Internal RC
        #elif SYS_SEL == 3
            System_Clock_Select(E_LIRCEN);  //Fosc = 10KHz Internal RC
        #elif SYS_SEL == 4
            System_Clock_Select(E_OSCEN);   //Fosc = OSC-In External OSC
        #endif
    #endif
   
    #if SYS_DIV_EN == 1
        CKDIV = SYS_DIV;                        //Fsys = Fosc / (2* CLKDIV) = Fcpu
    #endif
   
    Set_All_GPIO_Quasi_Mode();

    DISPLAY_LED = 0x0F;
    Timer0_Delay1ms(200);

    Erase_CONFIG();
    ID_CONFIG_Read();

    printf ("\nErase APROM");
    Erase_APROM();
    printf ("\nAPROM Erase Verify");
    if(Erase_APROM_Verify() == FAIL)
    {
        DISPLAY_LED = ERASE_FAIL;
        printf ("\nAPROM Erase Fail.");
        while(1);
    }
    printf ("\nAPROM Erase Verify Pass");   

    printf ("\nAPROM Program");        
    Program_APROM();
    printf ("\nAPROM Program Verify");        
    if(Program_APROM_Verify() == FAIL)
    {
        DISPLAY_LED = PROGRAM_FAIL;
        printf ("\nAPROM Program Fail.");
        while(1);
    }
    printf ("\nAPROM Program Verify pass");        
  
    Program_CONFIG(0x00,0xCF);      //Program CONFIG0 =  0xCF;
    Program_CONFIG(0x01,0x0F);      //Program CONFIG1 =  0x0F;
    Program_CONFIG(0x02,0xF8);      //Program CONFIG2 =  0xF8;
    Program_CONFIG(0x03,0x3F);      //Program CONFIG3 =  0x3F;
    Program_CONFIG(0x04,0xFF);      //Program CONFIG4 =  0x00;
  
    ID_CONFIG_Read();
   
    //Timer0_Delay1ms(200);
   
    printf ("\nAPROM program APROM Stop!!!");
    DISPLAY_LED = IAP_PASS;

    while(1);
}
//-----------------------------------------------------------------------------------------------------------

使用特权

评论回复
5
yiyigirl2014| | 2017-2-17 20:55 | 只看该作者
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2015 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Nuvoton Technoledge Corp.
//  Website: http://www.nuvoton.com
//  E-Mail : MicroC-8bit@nuvoton.com
//  Date   : Apr/21/2015
//***********************************************************************************************************

//***********************************************************************************************************
//  File Function: N76E885 LDROM program APROM demo code
//***********************************************************************************************************

//***********************************************************************************************************
//  Before using this demo code, please remind below CONFOGs setting, thanks.
//                 CONFIG0.7 --> CBS=0
//                 CONFIG1 = 0xFC, because this demo code size is 2495 Byte
//***********************************************************************************************************

#include <stdio.h>
#include "N76E885.h"
#include "Version.h"
#include "Typedef.h"
#include "Define.h"
#include "SFR_Macro.h"
#include "Common.h"
#include "Delay.h"

/*
//-------- <<< Use Configuration Wizard in Context Menu >>> ------------------
//
////<e0> System Clock Source Configuration
// <o1> System Clock Source Selection
//      <0=> 2~25MHz    XTAL
//      <1=> 32.768KHz  XTAL
//      <2=> 22.1184MHz Internal
//      <3=> 10KHz      Internal
//      <4=> OSC-In     External
//</e>
//
//<e2> Clock Divider Configuration
//     <o3.0..7>  System Clock Source Devider <1-255>
//                     <i> Fsys = (System Clock Source) / (2 * Devider)
//</e>
//
//-------- <<< end of configuration section >>> ------------------------------
*/

#define     SYS_CLK_EN          0
#define     SYS_SEL             2
#define     SYS_DIV_EN          0                   //0: Fsys=Fosc, 1: Fsys = Fosc/(2*CKDIV)
#define     SYS_DIV             1

#define     CID_READ            0x0B
#define     DID_READ            0x0C
#define     CFG_READ            0xC0
#define     CFG_ERASE           0xE2

#define     PAGE_ERASE_AP       0x22
#define     BYTE_READ_AP        0x00
#define     BYTE_PROGRAM_AP     0x21

#define     BYTE_PROGRAM_CFG    0xE1
#define     BYTE_READ_CFG       0xC0

#define     PAGE_SIZE           128

#define     APROM_SIZE          8192   
#define     APROM_START_ADDR    0x0000

#define     ERASE_FAIL          0x70
#define     PROGRAM_FAIL        0x71
#define     IAPFF_FAIL          0x72
#define     IAP_PASS            0x00

#define     DISPLAY_LED         P3
bit BIT_TMP;
//-----------------------------------------------------------------------------------------------------------
void Enable_IAP_Mode(void)
{   
    set_IAPEN;
}
//-----------------------------------------------------------------------------------------------------------
void Disable_IAP_Mode(void)
{   
    clr_IAPEN;
}
//-----------------------------------------------------------------------------------------------------------
void Trigger_IAP(void)
{   
    set_IAPGO;                                  //trigger IAP
    if((CHPCON&SET_BIT6)==SET_BIT6)             //check IAPFF (CHPCON.6)
    {
        DISPLAY_LED = IAPFF_FAIL;
        while(1);
    }
}
//-----------------------------------------------------------------------------------------------------------
void ID_Read(UINT8 *pu8CID,UINT8 *pu8DID0,UINT8 *pu8DID1)
{   
    Enable_IAP_Mode();

    //Read CID
    IAPAL = 0x00;
    IAPAH = 0x00;
    IAPCN = CID_READ;
    Trigger_IAP();
   
    *pu8CID = IAPFD;

    //Read DID0
    IAPCN = DID_READ;
    Trigger_IAP();
    *pu8DID0 = IAPFD;

    //Read DID1
    IAPAL ++;
    IAPCN = DID_READ;
    Trigger_IAP();
    *pu8DID1 = IAPFD;

    Disable_IAP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void CONFIG_Read(UINT8 *pu8CFG0,UINT8 *pu8CFG1,UINT8 *pu8CFG2,UINT8 *pu8CFG3,UINT8 *pu8CFG4)
{   
    Enable_IAP_Mode();

    //Read CONFIG0
    IAPAL = 0x00;
    IAPAH = 0x00;
    IAPCN = CFG_READ;
    Trigger_IAP();
    *pu8CFG0 = IAPFD;

    //Read CONFIG1
    IAPAL ++;
    IAPCN = CFG_READ;
    Trigger_IAP();
    *pu8CFG1 = IAPFD;

    //Read CONFIG2
    IAPAL ++;
    IAPCN = CFG_READ;
    Trigger_IAP();
    *pu8CFG2 = IAPFD;

    //Read CONFIG3
    IAPAL ++;
    IAPCN = CFG_READ;
    Trigger_IAP();
    *pu8CFG3 = IAPFD;

    //Read CONFIG4
    IAPAL ++;
    IAPCN = CFG_READ;
    Trigger_IAP();
    *pu8CFG4 = IAPFD;
   
    Disable_IAP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void Erase_CONFIG(void)
{   
    Enable_IAP_Mode();
   
    IAPAL = 0x00;
    IAPAH = 0x00;
    IAPFD = 0xFF;
    IAPCN = CFG_ERASE;
   
    set_CFUEN;
    Trigger_IAP();
    clr_CFUEN;
   
    Disable_IAP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void Erase_APROM(void)
{   
    UINT16 u16Count;

    Enable_IAP_Mode();
   
    IAPFD = 0xFF;   
    IAPCN = PAGE_ERASE_AP;
   
    set_APUEN;
    for(u16Count=0x0000;u16Count<APROM_SIZE/PAGE_SIZE;u16Count++)
    {        
        IAPAL = LOBYTE(u16Count*PAGE_SIZE + APROM_START_ADDR);
        IAPAH = HIBYTE(u16Count*PAGE_SIZE + APROM_START_ADDR);
        Trigger_IAP();
    }
    clr_APUEN;
   
    Disable_IAP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
BIT Erase_APROM_Verify(void)
{   
    UINT16 u16Count;
    BIT    Error_Flag = 0;

    Enable_IAP_Mode();
   
    IAPAL = LOBYTE(APROM_START_ADDR);
    IAPAH = HIBYTE(APROM_START_ADDR);
    IAPCN = BYTE_READ_AP;

    for(u16Count=0;u16Count<APROM_SIZE/PAGE_SIZE;u16Count++)
    {   
        IAPFD = 0x00;   
        Trigger_IAP();

        if(IAPFD != 0xFF)
        {
            Error_Flag = 1;
            break;
        }

        IAPAL++;
        if(IAPAL == 0x00)
        {
            IAPAH++;
        }
    }
   
    Disable_IAP_Mode();
   
    if(Error_Flag == 1)
        return FAIL;
    else
        return PASS;
}
//-----------------------------------------------------------------------------------------------------------
void Program_APROM(void)
{   
    UINT16 u16Count;

    Enable_IAP_Mode();
   
    IAPAL = LOBYTE(APROM_START_ADDR);
    IAPAH = HIBYTE(APROM_START_ADDR);
    IAPFD = 0xFF;
    IAPCN = BYTE_PROGRAM_AP;
   
    set_APUEN;
    for(u16Count=0;u16Count<APROM_SIZE;u16Count++)
    {   
        IAPFD++;     
        Trigger_IAP();
      
        IAPAL++;
        if(IAPAL == 0)
        {
            IAPAH++;
        }
    }
    clr_APUEN;
   
    Disable_IAP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
BIT Program_APROM_Verify(void)
{   
    UINT16 u16Count;
    UINT8  u8Read_Data;
    BIT    Error_Flag = 0;

    Enable_IAP_Mode();
   
    IAPAL = LOBYTE(APROM_START_ADDR);
    IAPAH = HIBYTE(APROM_START_ADDR);
    IAPCN = BYTE_READ_AP;

    u8Read_Data = 0x00;

    for(u16Count=0;u16Count<APROM_SIZE;u16Count++)
    {   
        Trigger_IAP();
        if(IAPFD != u8Read_Data)
        {
            Error_Flag = 1;
            break;
        }

        IAPAL++;
        if(IAPAL == 0)
        {
            IAPAH++;
        }
        u8Read_Data ++;
    }

    Disable_IAP_Mode();
     
    if(Error_Flag == 1)
        return FAIL;
    else
        return PASS;
}
//-----------------------------------------------------------------------------------------------------------
void Program_CONFIG(UINT8 u8Address,UINT8 u8Data)
{   
    Enable_IAP_Mode();
   
    IAPAL = u8Address;
    IAPAH = 0x00;
    IAPFD = u8Data;
    IAPCN = BYTE_PROGRAM_CFG;
   
    set_CFUEN;
    Trigger_IAP();
    clr_CFUEN;
   
    Disable_IAP_Mode();
}
//-----------------------------------------------------------------------------------------------------------
void ID_CONFIG_Read(void)
{
    UINT8 u8CID,u8DID0,u8DID1;
    UINT8 u8CFG0,u8CFG1,u8CFG2,u8CFG3,u8CFG4;
   
    ID_Read(&u8CID,&u8DID0,&u8DID1);
    Send_Data_To_UART0(u8CID);
    Send_Data_To_UART0(u8DID0);
    Send_Data_To_UART0(u8DID1);

    CONFIG_Read(&u8CFG0,&u8CFG1,&u8CFG2,&u8CFG3,&u8CFG4);
    Send_Data_To_UART0(u8CFG0);
    Send_Data_To_UART0(u8CFG1);
    Send_Data_To_UART0(u8CFG2);
    Send_Data_To_UART0(u8CFG3);
    Send_Data_To_UART0(u8CFG4);
}
//-----------------------------------------------------------------------------------------------------------
void main (void)
{
    UINT8 i;

    /* Note
       MCU power on system clock is HIRC (22.1184MHz), so Fsys = 22.1184MHz
    */
        
    /* Change system closk source */
    #if SYS_CLK_EN == 1
        #if   SYS_SEL == 0
            System_Clock_Select(E_HXTEN);   //Fosc = 2~25MHz XTAL
        #elif SYS_SEL == 1
            System_Clock_Select(E_LXTEN);   //Fosc = 32.768KHz XTAL
        #elif SYS_SEL == 2
            System_Clock_Select(E_HIRCEN);  //Fosc = 22.1184MHz Internal RC
        #elif SYS_SEL == 3
            System_Clock_Select(E_LIRCEN);  //Fosc = 10KHz Internal RC
        #elif SYS_SEL == 4
            System_Clock_Select(E_OSCEN);   //Fosc = OSC-In External OSC
        #endif
    #endif
   
    #if SYS_DIV_EN == 1
        CKDIV = SYS_DIV;                    //Fsys = Fosc / (2* CLKDIV) = Fcpu
    #endif
   
    Set_All_GPIO_Quasi_Mode();

    for(i=0;i<3;i++)
    {
        DISPLAY_LED = 0x55;
        Timer0_Delay1ms(200);
        DISPLAY_LED = 0xFF;
        Timer0_Delay1ms(200);
    }   
   
    InitialUART0_Timer1_Type1(9600);
    DISPLAY_LED = 0x0F;
    Timer0_Delay1ms(200);
    ID_CONFIG_Read();

    Erase_APROM();
    if(Erase_APROM_Verify() == FAIL)
    {
        DISPLAY_LED = ERASE_FAIL;
        while(1);
    }

    Program_APROM();
    if(Program_APROM_Verify() == FAIL)
    {
        DISPLAY_LED = PROGRAM_FAIL;
        while(1);
    }
   
    Program_CONFIG(0x00,0x7F);              //Program CONFIG0 =  0x7F;
    Program_CONFIG(0x01,0xFC);              //Program CONFIG1 =  0xFC;
    Program_CONFIG(0x02,0xF8);              //Program CONFIG2 =  0xF8;
    Program_CONFIG(0x03,0x3F);              //Program CONFIG3 =  0x3F;
    Program_CONFIG(0x04,0xFF);              //Program CONFIG4 =  0xFF;
    Program_CONFIG(0x05,0x0F);              //Program CONFIG5 =  0x0F;
   
    ID_CONFIG_Read();
    Timer0_Delay1ms(200);
    DISPLAY_LED = IAP_PASS;
    while(1);
}
//-----------------------------------------------------------------------------------------------------------

使用特权

评论回复
6
玛尼玛尼哄| | 2017-2-17 21:27 | 只看该作者
Flash存储器可以通过在电路编程(ICP)进行编程。硬件编程是在产品进入批量生产阶段,采用编程器可以节省费用和时间。然而,如果产品在研发阶段或产品需要更新软固件时,硬件编程就显得不太方便。ICP可以在不用将控制器从系统中卸下对控制器再编程。

使用特权

评论回复
7
玛尼玛尼哄| | 2017-2-17 21:28 | 只看该作者
在应用编程 (IAP)
修改FLASH数据通常需要很长时间,不像RAM那样可以实时操作。而且擦除、编程或是读取FLASH数据需要遵循相当复杂的时序步骤。N76E616提供方便FALSH编程方式可以帮助用户通过IAP方式重编程FLASH内容。IAP就是通过软件实现在电路进行电擦除和编程的在应用编程方法。

使用特权

评论回复
8
玛尼玛尼哄| | 2017-2-17 21:31 | 只看该作者
IAP 命令
N76E616通过IAP可编写 APROM, LDROM, 或 CONFIG。IAP运作模式和编程区域目标地址是IAPCN决定的。

使用特权

评论回复
9
天灵灵地灵灵| | 2017-2-17 22:09 | 只看该作者
根据需求,自己选择嘛,三种使用环境很明白,一般只需要一种就行了。

使用特权

评论回复
10
21icszx|  楼主 | 2017-2-18 14:39 | 只看该作者

看了下,这两个代码都是IAP编程的。
第一个是通过APROM编程APROM;
第二个是通过LDROM编程APROM

使用特权

评论回复
11
734774645| | 2017-2-19 18:27 | 只看该作者
都是用新唐的编程器做的,没考虑过这个问题,不过看到过别人做的通过网络自动升级固件的。

使用特权

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

本版积分规则

16

主题

156

帖子

1

粉丝