Keil Logo

C166: Interrupt Vector Redirection


Information in this article applies to:

  • C166

QUESTION

I am developing an embedded system that consists of two parts: an Operating System that is located at 000000H, and my application that is located at 280000H. The Operating System is effectively a bootloader and loads in the application.

How can I move my interrupt vector table to 280000H? I tried using the VECTAB directive to move the table to 280000H, however, my processor still vectors to the table at 000000H.

ANSWER

The interrupt vectors are performed in hardware and cannot be changed. However, you may redirect the interrupt vectors to your interrupt vector table at 280000H. Note that you still need to use the VECTAB directive to ensure that your Interrupt Service Routines have vectors in the table at 280000H.

The following example assembler file achieves this and should be included as part of your bootloader project:

$segmented

; this example shows how to redirect interrupt vectors to
; address 28000H.  Interrupt Vector redirection is typically required
; when you divide a user program into two parts:  BOOT part and
; application part.  This assembly module needs to be added to the BOOT
; part that is located in segment 0 of the 166 program space.
;
; The application part needs to be linked with the L166 VECTAB directive.
; In this example, you need to specify VECTAB(0x28000) to generate the interrupt
; vector table at address 0x28000.

VEC_SEG  EQU 2
VEC_OFF  EQU 8000H

; The RESET vector is used by the boot application
VECT_TAB SECTION CODE AT 4
VEC_PROC PROC
  JMPS VEC_SEG,VEC_OFF+004H
  JMPS VEC_SEG,VEC_OFF+008H
  JMPS VEC_SEG,VEC_OFF+00CH
  JMPS VEC_SEG,VEC_OFF+010H
  JMPS VEC_SEG,VEC_OFF+014H
  JMPS VEC_SEG,VEC_OFF+018H
  JMPS VEC_SEG,VEC_OFF+01CH
  JMPS VEC_SEG,VEC_OFF+020H
  JMPS VEC_SEG,VEC_OFF+024H
  JMPS VEC_SEG,VEC_OFF+028H
  JMPS VEC_SEG,VEC_OFF+02CH
  JMPS VEC_SEG,VEC_OFF+030H
  JMPS VEC_SEG,VEC_OFF+034H
  JMPS VEC_SEG,VEC_OFF+038H
  JMPS VEC_SEG,VEC_OFF+03CH
  JMPS VEC_SEG,VEC_OFF+040H
  JMPS VEC_SEG,VEC_OFF+044H
  JMPS VEC_SEG,VEC_OFF+048H
  JMPS VEC_SEG,VEC_OFF+04CH
  JMPS VEC_SEG,VEC_OFF+050H
  JMPS VEC_SEG,VEC_OFF+054H
  JMPS VEC_SEG,VEC_OFF+058H
  JMPS VEC_SEG,VEC_OFF+05CH
  JMPS VEC_SEG,VEC_OFF+060H
  JMPS VEC_SEG,VEC_OFF+064H
  JMPS VEC_SEG,VEC_OFF+068H
  JMPS VEC_SEG,VEC_OFF+06CH
  JMPS VEC_SEG,VEC_OFF+070H
  JMPS VEC_SEG,VEC_OFF+074H
  JMPS VEC_SEG,VEC_OFF+078H
  JMPS VEC_SEG,VEC_OFF+07CH
  JMPS VEC_SEG,VEC_OFF+080H
  JMPS VEC_SEG,VEC_OFF+084H
  JMPS VEC_SEG,VEC_OFF+088H
  JMPS VEC_SEG,VEC_OFF+08CH
  JMPS VEC_SEG,VEC_OFF+090H
  JMPS VEC_SEG,VEC_OFF+094H
  JMPS VEC_SEG,VEC_OFF+098H
  JMPS VEC_SEG,VEC_OFF+09CH
  JMPS VEC_SEG,VEC_OFF+0A0H
  JMPS VEC_SEG,VEC_OFF+0A4H
  JMPS VEC_SEG,VEC_OFF+0A8H
  JMPS VEC_SEG,VEC_OFF+0ACH
  JMPS VEC_SEG,VEC_OFF+0B0H
  JMPS VEC_SEG,VEC_OFF+0B4H
  JMPS VEC_SEG,VEC_OFF+0B8H
  JMPS VEC_SEG,VEC_OFF+0BCH
  JMPS VEC_SEG,VEC_OFF+0C0H
  JMPS VEC_SEG,VEC_OFF+0C4H
  JMPS VEC_SEG,VEC_OFF+0C8H
  JMPS VEC_SEG,VEC_OFF+0CCH
  JMPS VEC_SEG,VEC_OFF+0D0H
  JMPS VEC_SEG,VEC_OFF+0D4H
  JMPS VEC_SEG,VEC_OFF+0D8H
  JMPS VEC_SEG,VEC_OFF+0DCH
  JMPS VEC_SEG,VEC_OFF+0E0H
  JMPS VEC_SEG,VEC_OFF+0E4H
  JMPS VEC_SEG,VEC_OFF+0E8H
  JMPS VEC_SEG,VEC_OFF+0ECH
  JMPS VEC_SEG,VEC_OFF+0F0H
  JMPS VEC_SEG,VEC_OFF+0F4H
  JMPS VEC_SEG,VEC_OFF+0F8H
  JMPS VEC_SEG,VEC_OFF+0FCH
  JMPS VEC_SEG,VEC_OFF+100H
  JMPS VEC_SEG,VEC_OFF+104H
  JMPS VEC_SEG,VEC_OFF+108H
  JMPS VEC_SEG,VEC_OFF+10CH
  JMPS VEC_SEG,VEC_OFF+110H
  JMPS VEC_SEG,VEC_OFF+114H
  JMPS VEC_SEG,VEC_OFF+118H
  JMPS VEC_SEG,VEC_OFF+11CH
  JMPS VEC_SEG,VEC_OFF+120H
  JMPS VEC_SEG,VEC_OFF+124H
  JMPS VEC_SEG,VEC_OFF+128H
  JMPS VEC_SEG,VEC_OFF+12CH
  JMPS VEC_SEG,VEC_OFF+130H
  JMPS VEC_SEG,VEC_OFF+134H
  JMPS VEC_SEG,VEC_OFF+138H
  JMPS VEC_SEG,VEC_OFF+13CH
  JMPS VEC_SEG,VEC_OFF+140H
  JMPS VEC_SEG,VEC_OFF+144H
  JMPS VEC_SEG,VEC_OFF+148H
  JMPS VEC_SEG,VEC_OFF+14CH
  JMPS VEC_SEG,VEC_OFF+150H
  JMPS VEC_SEG,VEC_OFF+154H
  JMPS VEC_SEG,VEC_OFF+158H
  JMPS VEC_SEG,VEC_OFF+15CH
  JMPS VEC_SEG,VEC_OFF+160H
  JMPS VEC_SEG,VEC_OFF+164H
  JMPS VEC_SEG,VEC_OFF+168H
  JMPS VEC_SEG,VEC_OFF+16CH
  JMPS VEC_SEG,VEC_OFF+170H
  JMPS VEC_SEG,VEC_OFF+174H
  JMPS VEC_SEG,VEC_OFF+178H
  JMPS VEC_SEG,VEC_OFF+17CH
  JMPS VEC_SEG,VEC_OFF+180H
  JMPS VEC_SEG,VEC_OFF+184H
  JMPS VEC_SEG,VEC_OFF+188H
  JMPS VEC_SEG,VEC_OFF+18CH
  JMPS VEC_SEG,VEC_OFF+190H
  JMPS VEC_SEG,VEC_OFF+194H
  JMPS VEC_SEG,VEC_OFF+198H
  JMPS VEC_SEG,VEC_OFF+19CH
  JMPS VEC_SEG,VEC_OFF+1A0H
  JMPS VEC_SEG,VEC_OFF+1A4H
  JMPS VEC_SEG,VEC_OFF+1A8H
  JMPS VEC_SEG,VEC_OFF+1ACH
  JMPS VEC_SEG,VEC_OFF+1B0H
  JMPS VEC_SEG,VEC_OFF+1B4H
  JMPS VEC_SEG,VEC_OFF+1B8H
  JMPS VEC_SEG,VEC_OFF+1BCH
  JMPS VEC_SEG,VEC_OFF+1C0H
  JMPS VEC_SEG,VEC_OFF+1C4H
  JMPS VEC_SEG,VEC_OFF+1C8H
  JMPS VEC_SEG,VEC_OFF+1CCH
  JMPS VEC_SEG,VEC_OFF+1D0H
  JMPS VEC_SEG,VEC_OFF+1D4H
  JMPS VEC_SEG,VEC_OFF+1D8H
  JMPS VEC_SEG,VEC_OFF+1DCH
  JMPS VEC_SEG,VEC_OFF+1E0H
  JMPS VEC_SEG,VEC_OFF+1E4H
  JMPS VEC_SEG,VEC_OFF+1E8H
  JMPS VEC_SEG,VEC_OFF+1ECH
  JMPS VEC_SEG,VEC_OFF+1F0H
  JMPS VEC_SEG,VEC_OFF+1F4H
  JMPS VEC_SEG,VEC_OFF+1F8H
  JMPS VEC_SEG,VEC_OFF+1FCH
VEC_PROC ENDP
VECT_TAB ENDS

  end

MORE INFORMATION

  • Refer to VECTAB in the L166 User's Guide.

SEE ALSO


Last Reviewed: Thursday, February 25, 2021


Did this article provide the answer you needed?
 
Yes
No
Not Sure
 
  Arm logo
Important information

This site uses cookies to store information on your computer. By continuing to use our site, you consent to our cookies.

Change Settings

Privacy Policy Update

Arm’s Privacy Policy has been updated. By continuing to use our site, you consent to Arm’s Privacy Policy. Please review our Privacy Policy to learn more about our collection, use and transfers
of your data.