383
CHAPTER 22 INTERRUPT FUNCTIONS
User’s Manual U12697EJ3V0UM
Cautions 1. Macro service requests are acknowledged and serviced even during execution of a non-
maskable interrupt service program. If you do not want macro service processing to be
performed during a non-maskable interrupt service program, you should manipulate the
interrupt mask register in the non-maskable interrupt service program to prevent macro
service generation.
2. The RETI instruction must be used to return from a non-maskable interrupt. Subsequent
interrupt acknowledgment will not be performed normally if a different instruction is used.
Refer to Section 22.12 Restoring Interrupt Function to Initial State when a program is to be
restarted from the initial status after a non-maskable interrupt acknowledgement.
3. Non-maskable interrupts are always acknowledged, except during non-maskable interrupt
service program execution (except when a high non-maskable interrupt request is generated
during execution of a low-priority non-maskable interrupt service program) and for a certain
period after execution of the special instructions shown in 22.9. Therefore, a non-maskable
interrupt will be acknowledged even when the stack pointer (SP) value is undefined, in
particular after reset release, etc. In this case, depending on the value of the SP, it may
happen that the program counter (PC) and program status word (PSW) are written to the
address of a write-inhibited special function register (SFRs) (see Table 3.6 in 3.9 Special
Function Registers (SFRs)), and the CPU becomes deadlocked, or an unexpected signal is
output from a pin, or the PC and PSW are written to an address in which RAM is not mounted,
with the result that the return from the non-maskable interrupt service program is not
performed normally and a software upsets occurs.
Therefore, the program following RESET release must be as shown below.
CSEG AT 0
DW
STRT
CSEG BASE
STRT:
LOCATION
0FH; or LOCATION 0H
MOVG SP, #imm24