|
|||||||||||
|
Technical Support Support Resources
Product Information |
C51: Relocating Autovector Interrupts on the Infineon/Cypress EZ-USBInformation in this article applies to:
QUESTIONI'm using the Autovector Interrupt feature of the Infineon/Cypress EZ-USB which requires a fixed interrupt vector table at address 0x200. In µVision, I specified that interrupt vectors start at address 0x0200 under Project - Options - C51 - Interrupt vectors. Since I did this I'm getting compiler errors like the following:
Is there something special I must do to use the Autovector Interrupts? ANSWERThe Autovector interrupt is a special feature that is only available on the Infineon/Cypress parts. No other 8051 devices has this feature. The Autovector interrupt uses special hardware to modify the interrupt vector address. The single Autovector interrupt location at address 43H serves all USB related interrupts like Setup Data Available (ISR_Sudav), Start of Frame (ISR_Sof), and all endpoint interrupts. To write interrupt functions for the Autovector interrupt Infineon/Cypress uses the #pragma NOINTVECTOR directive. This suppresses the C compiler generated interrupt vectors. Therefore, all interrupts that are served by the Autovector interrupt have the same interrupt number. For example:
The interrupt vectors are not generated by the C51 Compiler (because NOINTVECTOR is used). And, since this directive is used, it is not possible to use the INTVECTOR directive to locate the interrupt vectors at a specific location. That is the reason for the C51 FATAL ERROR message that you receive. There are several ways to approach this problem. One way is to refer to Application Note 126: Using the Infineon/Cypress EZ-USB AutoVector Interrupts. This application note discusses a way to handle the AutoVector interrupts using mostly C code with a small assembler routine. Another way is to create an interrupt vector file in assembly. The Infineon/Cypress software contains a file named USBJmpTb.A51 which generates all the interrupt vectors for the USB related interrupt service routines. The file contains interrupt vector definitions that appear as follows:
To locate the USB_Jump_Table at a specific address you may simply change the segment definition for the ?PR?USB_JUMP_TABLE?USBJT. For example:
MORE INFORMATION
SEE ALSO
Last Reviewed: Thursday, February 25, 2021 | ||||||||||
|
|||||||||||
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.