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

📄 spl78k0_kx2_user.c

📁 NEC upd78f0300的自编程序样例
💻 C
字号:
/************************************************************************************/
/*                                                                                  */
/* File:        spl78k0_kx2_user.c                                                  */
/* Project:     Selfprogramming application note, MF2 single voltage flash          */
/* Device:      78k0/Kx2                                                            */
/* Version:     1v06                                                                */
/* Date:        12.09.2006 09:30                                                    */
/*                                                                                  */
/* Copyright:   (c)2004-2006 by NEC Electronics (Europe) GmbH. All rights reserved. */
/*                                                                                  */
/* Description: contains the user defined part of the Self-Programming library      */
/*                                                                                  */
/* Environment: IAR environment for 78K0 and 78K0S (version V3.xx and V4.xx)        */
/*                                                                                  */
/************************************************************************************/

// compiler settings
// ------------------
#pragma language = extended


// include files list
// -------------------
#include "spl78k0_types.h"              // NEC-EE
#include "spl78k0_kx2_user.h"           // NEC EE


// import list
// ------------
// empty

// data definition
// ----------------

// set data-segment context to "RB3REGS"
#ifdef   __RB3_BACKUP                       // if register bank 3 backup required
  #if(__VER__ >= 400)
    #pragma dataseg="RB3REGS"               // IAR 4xx part
    __no_init  static  u16   AX3_u16;       //   create symbolic register-pair variables
    __no_init  static  u16   BC3_u16;       //   inside of the RB3 data segment
    __no_init  static  u16   DE3_u16;       //
    __no_init  static  u16   HL3_u16;       //
    #pragma dataseg=default
  #else
    #pragma memory = dataseg(RB3REGS):saddr // IAR 3xx part
    no_init    static  u16   AX3_u16;       //   create symbolic register-pair variables
    no_init    static  u16   BC3_u16;       //   inside of the RB3 data segment
    no_init    static  u16   DE3_u16;       //
    no_init    static  u16   HL3_u16;       //
    #pragma memory=default
  #endif
#endif


// data buffer for data exchange with the firmware
#if (DATA_BUFFER_SIZE>0)
  #if(__VER__ >= 400)
    #pragma dataseg="DS_DBF"               // IAR 4xx part
    __no_init u08  data_buffer[DATA_BUFFER_SIZE];
    #pragma dataseg=default
  #else
    #pragma memory = dataseg(DS_DBF)       // IAR 3xx part
    no_init    u08  data_buffer[DATA_BUFFER_SIZE];
    #pragma memory=default
  #endif
#endif

//u08  data_buffer[DATA_BUFFER_SIZE];




// switch context to standard data segment
// ----------------------------------------
#if(__VER__ >= 400)
  #pragma dataseg=default
#else
  #pragma memory=default
#endif

#ifdef   __RB3_BACKUP                   // if register bank 3 backup required
  static  u16   AX3_bak_u16;            //   reserve space for backup information
  static  u16   BC3_bak_u16;            //   of all registair pairs
  static  u16   DE3_bak_u16;            //
  static  u16   HL3_bak_u16;            //
#endif

#ifdef   __INT_BACKUP                   // if interrupt required
  static  u08   MK0L_bak_u08;           //  reserve space for backup information
  static  u08   MK0H_bak_u08;           //  reserve space for backup information
  static  u08   MK1L_bak_u08;           //  of interrupt mask flags
  static  u08   MK1H_bak_u08;           //  of interrupt mask flags
#endif


// function prototypes
// -------------------
void  SelfLib_Open(void);
void  SelfLib_Close(void);


// implementation part
// --------------------
#if(__VER__ >= 400)
  #pragma location="BCLUST0"
#else
  #pragma codeseg(BCLUST0)
#endif


// create and enter "user room" for the self-programming
// -----------------------------------------------------
void SelfLib_Open(void)
{
  // push and mask all interrupts
  #ifdef   __INT_BACKUP
    MK0L_bak_u08 = MK0L;         // save interrupt controller configuration
    MK0H_bak_u08 = MK0H;         // save interrupt controller configuration
    MK1L_bak_u08 = MK1L;         // save interrupt controller configuration
    MK1H_bak_u08 = MK1H;         // save interrupt controller configuration
    MK0L = MK0L_SELFPROG_MASK;   // prepare interrupt controller for selfprogramming
    MK0H = MK0H_SELFPROG_MASK;   // prepare interrupt controller for selfprogramming
    MK1L = MK1L_SELFPROG_MASK;   // prepare interrupt controller for selfprogramming
    MK1H = MK1H_SELFPROG_MASK;   // prepare interrupt controller for selfprogramming
 #endif

  // push all registers of bank RB3 complete
  #ifdef   __RB3_BACKUP
    AX3_bak_u16 = AX3_u16;
    BC3_bak_u16 = BC3_u16;
    DE3_bak_u16 = DE3_u16;
    HL3_bak_u16 = HL3_u16;
  #endif

  // switch FLMD0_ctrl_port to HIGH
  FLMD0_CTRL_PORT_HIGH;

}

// implementation part
// --------------------
#if(__VER__ >= 400)
  #pragma location="BCLUST0"
#else
  #pragma codeseg(BCLUST0)
#endif

// leave the "user room" and restore previous conditions
// -------------------------------------------------------
void SelfLib_Close(void)
{
  // switch FLMD0_ctrl_port to HIGH
  FLMD0_CTRL_PORT_LOW;

  // restore interrupt mask flags
  #ifdef   __INT_BACKUP
    MK0L = MK0L_bak_u08;    // restore interrupt controller configuration
    MK0H = MK0H_bak_u08;    // restore interrupt controller configuration
    MK1L = MK1L_bak_u08;    // restore interrupt controller configuration
    MK1H = MK1H_bak_u08;    // restore interrupt controller configuration
  #endif

  // restore the complete RB3
  #ifdef   __RB3_BACKUP
    HL3_u16 = HL3_bak_u16;
    DE3_u16 = DE3_bak_u16;
    BC3_u16 = BC3_bak_u16;
    AX3_u16 = AX3_bak_u16;
  #endif
}

⌨️ 快捷键说明

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