395
CHAPTER 16 INTERRUPT FUNCTIONS
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.
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.
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 16.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 (SFR) (refer to 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 processing program is not performed normally and asoftware upsets occurs.
Therefore, the program following RESET release must be as shown below.
2.
3.
CSEG AT 0
DW
CSEG BASE
STRT
STRT:
LOCATION
MOVG SP, #imm24
0FH; or LOCATION 0