📄 spl78k0_kx2_user.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 + -