Fujitsu Microelectronics Europe Application Note MCU-AN-390075-E-V10 F²MC-16LX FAMILY 16-BIT MICROCONTROLLER MB90XXX RELOCATED INTERRUPT VECTOR TABLE APPLICATION NOTE Interrupt Jump Table Revision History Revision History Date 2002-10-21 Issue st M. Willam; 1 version This document contains 10 pages. MCU-AN-390075-E-V10 -2- © Fujitsu Microelectronics Europe GmbH Interrupt Jump Table Warranty and Disclaimer Warranty and Disclaimer To the maximum extent permitted by applicable law, Fujitsu Microelectronics Europe GmbH restricts its warranties and its liability for all products delivered free of charge (eg. software include or header files, application examples, target boards, evaluation boards, engineering samples of IC’s etc.), its performance and any consequential damages, on the use of the Product in accordance with (i) the terms of the License Agreement and the Sale and Purchase Agreement under which agreements the Product has been delivered, (ii) the technical descriptions and (iii) all accompanying written materials. In addition, to the maximum extent permitted by applicable law, Fujitsu Microelectronics Europe GmbH disclaims all warranties and liabilities for the performance of the Product and any consequential damages in cases of unauthorised decompiling and/or reverse engineering and/or disassembling. Note, all these products are intended and must only be used in an evaluation laboratory environment. 1. Fujitsu Microelectronics Europe GmbH warrants that the Product will perform substantially in accordance with the accompanying written materials for a period of 90 days form the date of receipt by the customer. Concerning the hardware components of the Product, Fujitsu Microelectronics Europe GmbH warrants that the Product will be free from defects in material and workmanship under use and service as specified in the accompanying written materials for a duration of 1 year from the date of receipt by the customer. 2. Should a Product turn out to be defect, Fujitsu Microelectronics Europe GmbH´s entire liability and the customer´s exclusive remedy shall be, at Fujitsu Microelectronics Europe GmbH´s sole discretion, either return of the purchase price and the license fee, or replacement of the Product or parts thereof, if the Product is returned to Fujitsu Microelectronics Europe GmbH in original packing and without further defects resulting from the customer´s use or the transport. However, this warranty is excluded if the defect has resulted from an accident not attributable to Fujitsu Microelectronics Europe GmbH, or abuse or misapplication attributable to the customer or any other third party not relating to Fujitsu Microelectronics Europe GmbH. 3. To the maximum extent permitted by applicable law Fujitsu Microelectronics Europe GmbH disclaims all other warranties, whether expressed or implied, in particular, but not limited to, warranties of merchantability and fitness for a particular purpose for which the Product is not designated. 4. To the maximum extent permitted by applicable law, Fujitsu Microelectronics Europe GmbH´s and its suppliers´ liability is restricted to intention and gross negligence. NO LIABILITY FOR CONSEQUENTIAL DAMAGES To the maximum extent permitted by applicable law, in no event shall Fujitsu Microelectronics Europe GmbH and its suppliers be liable for any damages whatsoever (including but without limitation, consequential and/or indirect damages for personal injury, assets of substantial value, loss of profits, interruption of business operation, loss of information, or any other monetary or pecuniary loss) arising from the use of the Product. Should one of the above stipulations be or become invalid and/or unenforceable, the remaining stipulations shall stay in full effect © Fujitsu Microelectronics Europe GmbH -3- MCU-AN-390075-E-V10 Interrupt Jump Table Contents Contents REVISION HISTORY ............................................................................................................ 2 WARRANTY AND DISCLAIMER ......................................................................................... 3 CONTENTS .......................................................................................................................... 4 0 INTRODUCTION.............................................................................................................. 5 1 THE INTERRUPT TABLE ................................................................................................ 6 1.1 Location .................................................................................................................. 6 1.2 Normal Reference ................................................................................................... 7 2 SECOND TABLE - WORKAROUND ............................................................................... 8 2.1 Relocated Reference............................................................................................... 8 2.2 Interrupt Flow .......................................................................................................... 9 2.3 Code Flow ............................................................................................................. 10 MCU-AN-390075-E-V10 -4- © Fujitsu Microelectronics Europe GmbH Interrupt Jump Table Introduction 0 Introduction This document describes how to use a customized Interrupt Vector Jump Table. © Fujitsu Microelectronics Europe GmbH -5- MCU-AN-390075-E-V10 Interrupt Jump Table Chapter 1 The Interrupt Table 1 The Interrupt Table DESCRIPTION OF THE INTERRUPT VECTOR TABLE 1.1 Location The interrupt vector table is located fix in the Bank FFH. There is no way for the user to move it to another memory location. Below is a list of the interrupt vector address locations: Vector Interrupt Vector Hardware Interrupt Interrupt Control Reg. Address L Address M Address H INT0 None - FFFFFCH FFFFFDH FFFFFEH . . . . . . . . . . . . . . . . . . INT7 None - FFFFE0H FFFFE1H FFFFE2H INT8 Reset - FFFFDCH FFFFDDH FFFFDEH INT9 INT9 Instruction - FFFFD8H FFFFD9H FFFFDAH INT10 Exception - FFFFD4H FFFFD5H FFFFD6H INT11 (device specific) FFFFD0H FFFFD2H FFFFD3H INT12 (device specific) FFFFCCH FFFCDH FFFFCEH … … … … … INT254 (device specific) FFFC04H FFFC05H FFFC06H INT255 (device specific) FFFC00H FFFC01H FFFC02H ICR00 … ICR122 Note, that a device can have theoretical 255 interrupts, but in the most devices the number of interrupts is less than 45. MCU-AN-390075-E-V10 -6- © Fujitsu Microelectronics Europe GmbH Interrupt Jump Table Chapter 1 The Interrupt Table 1.2 Normal Reference An example of he usual interrupt vector reference without relocation is shown below. This has to be done in the file “vectors.c”. . . . /* Prototypes */ __interrupt void IRQ_Handler1(void); __interrupt void IRQ_Handler2(void); __interrupt void IRQ_Handler3(void); . . . /* Vector definition */ #pragma intvect IRQ_Handler1 9 #pragma intvect IRQ_Handler2 10 #pragma intvect IRQ_Handler3 11 . . . usual “vectors.c” The following illustration shows the corresponding Interrupt handler routines. In this example they can be found in the main program “main.c”. . . . /* End of void main(void) */ } __interrupt void IRQ_Handler1(void) { . . . /* Code here */ } __interrupt void IRQ_Handler2(void) { . . . /* Code here */ } __interrupt void IRQ_Handler3(void) { . . . /* Code here */ } “main.c“ © Fujitsu Microelectronics Europe GmbH -7- MCU-AN-390075-E-V10 Interrupt Jump Table Chapter 2 Second Table - Workaround 2 Second Table - Workaround USING A SECOND TABLE 2.1 Relocated Reference It is possible to use a second so-called “Jump-Table”, which is then independent from the hard-wired table. This table then has to be like in the following example in a separate assembly file: .PROGRAM NEWVECT .TITLE "ALTERNATIVE IRQ VECTOR TABLE" .SECTION NEWINTVECT, CONST, LOCATE=H'FF8000 ; depends on MCU type .IMPORT _IRQ_Handler1 .IMPORT _IRQ_Handler2 .IMPORT _IRQ_Handler3 .EXPORT _Vector1 .EXPORT _Vector2 .EXPORT _Vector3 _Vector1: JMPP _IRQ_Handler1 _Vector2: JMPP _IRQ_Handler2 _Vector3: JMPP _IRQ_Handler3 . . . . . . . . . .END ”newvect.asm” “_IRQ_Handlern” is the basic interrupt handler function (ISR), which is normally referenced in “vectors.c” without relocation. Depending on the Code segment in which this table and the interrupt service routine are located, you have to be careful using the “JMP” (16-Bit-Addressing) or the “JMPP” (24-BitAddressing) instruction. Note, that “JMPP” will always work. The next step is to reference to these Jump-Locations in the “vectors.c” file: MCU-AN-390075-E-V10 -8- © Fujitsu Microelectronics Europe GmbH Interrupt Jump Table Chapter 2 Second Table - Workaround . . . /* Prototypes */ __interrupt void Vector1(void); __interrupt void Vector2(void); __interrupt void Vector3(void); . . . /* Vector definition */ #pragma intvect Vector1 9 #pragma intvect Vector2 10 #pragma intvect Vector3 11 . . . “vectors.c” The file in which the Interrupt routines are coded (“Main.c”) remains unaffected. 2.2 Interrupt Flow Now the instruction flow is like in the following illustration. Interrupt occurs Save Registers no IRQ 11 ? Check if RESET, EI2OS, INT9, … yes Fetch address of corresponding vector Workaround Vector Table FFxxxxH st 1 jump PC: Corresponding instruction of Interrupt Vector Jump Table 2 nd New Vector Jump Table jump Interrupt Service Routine Jump to Interrupt Handler Function (ISR) © Fujitsu Microelectronics Europe GmbH -9- MCU-AN-390075-E-V10 Interrupt Jump Table Chapter 2 Second Table - Workaround 2.3 Code Flow The following graphic illustrates the program code flow for the Jump Table Workaround: “Vectors.c” “Main.c” Vectoraddressm-2 Instructionn Instructionn+1 Instructionn+2 Vectoraddressm-1 IRQm CPU Tasks Instructionn+3 get Vectoraddressm Addr. Vectoraddressm+1 Vectoraddressm+2 Instructionn+4 Instructionn+5 Jump to Vectoraddr. Return from Interrupt “Newvect.asm” Vectoraddr m-2 JMP ISRm-2 Vectoraddr m-1 JMP ISRm-1 Vectoraddrm JMP ISRm Vectoraddrm+1 JMP ISRm+1 Vectoraddrm+2 JMP ISRm+2 Interrupt Handler Routine ISRm-Instruction1 Jump to ISR ISRm-Instruction2 ISRm-Instruction3 ... ISRm-Instructioni RETI MCU-AN-390075-E-V10 - 10 - © Fujitsu Microelectronics Europe GmbH