Technical Support

C51: REDIRECTING INTERRUPT VECTORS


Information in this article applies to:

  • C51 All Versions

QUESTION

How do I redirect my interrupts for an application that includes EPROM (starting at 0x0000) and FLASH (starting at 0x2000)?

ANSWER

You must have a program in the EPROM and another program in the FLASH memory to accomplish this. The EPROM assumably contains a loader that contains a simple assembly program that has its reset vector at 0 and its interrupts located in memory with the standard offsets; 3H, 0BH .... Here is a code snipet to demonstrate the program:

OFFSET EQU              2000H


    CSEG AT 0003H
    LJMP OFFSET + 0003h

    CSEG AT 000BH
    LJMP OFFSET + 000BH
;       .
;       .
;       .

;For each interrupt that is contained in both the Flash
;program and the loader, such as the serial
;interrupt you must have code to test which interrupt is
;currently being used.  In the following
;snipet we will use the user defined bit in the
;PSW for the flag which must be set by the loader
;and reset by the flash program.  If you have more
;than one interrupt that is shared then you will
;need a different messaging system.

    CSEG AT 0023H             ;The reset vectors are located
                              ;in the loader in ROM
    LJMP    SIO_ISR           ;The serial interrupt is being
                              ;used as an example

    INTR_HNDLR SEGMENT CODE

    RSEG    INTR_HNDLR        ;The following segment is
                              ;relocatable

SIO_ISR:
    PUSH    PSW               ;Save the world
    JNB     PSW.1, PROG_JMP   ;Loader serial interrupt or
                              ;flash program interrupt
    POP     PSW               ;Set the world right for the
                              ;loader interrupt handler
    LJMP    LOADER_SIO_ISR    ;Go handle the interrupt for
                              ;the loader

PROG_JMP:                     ;
    POP    PSW                ;Set the world right from the
                              ;flash program interrupt handler
    LJMP   OFFSET + 0023H     ;Go handle the interrupt for the
                              ;flash program

The flash located program has the same reset and interrupt vectors but the offset has been changed from 0 to 2000H using the IV(2000H) directive in the compiler.

SEE ALSO

FORUM THREADS

The following Discussion Forum threads may provide information related to this topic.

Last Reviewed: Saturday, November 18, 2006


Did this article provide the answer you needed?
 
Yes
No
Not Sure