armvic.h

来自「Free Usb Stack for NXP LPC2xxx microcont」· C头文件 代码 · 共 158 行

H
158
字号
/****************************************************************************** * * $RCSfile$ * $Revision: 124 $ * * This module provides the interface definitions for setting up and * controlling the various interrupt modes present on the ARM processor. * Copyright 2004, R O SoftWare * No guarantees, warrantees, or promises, implied or otherwise. * May be used for hobby or commercial purposes provided copyright * notice remains intact. * *****************************************************************************/#ifndef INC_ARM_VIC_H#define INC_ARM_VIC_H/****************************************************************************** * * MACRO Name: ISR_ENTRY() * * Description: *    This MACRO is used upon entry to an ISR.  The current version of *    the gcc compiler for ARM does not produce correct code for *    interrupt routines to operate properly with THUMB code.  The MACRO *    performs the following steps: * *    1 - Adjust address at which execution should resume after servicing *        ISR to compensate for IRQ entry *    2 - Save the non-banked registers r0-r12 and lr onto the IRQ stack. *    3 - Get the status of the interrupted program is in SPSR. *    4 - Push it onto the IRQ stack as well. * *****************************************************************************/#define ISR_ENTRY() asm volatile(" sub   lr, lr,#4\n" \                                 " stmfd sp!,{r0-r12,lr}\n" \                                 " mrs   r1, spsr\n" \                                 " stmfd sp!,{r1}")/****************************************************************************** * * MACRO Name: ISR_EXIT() * * Description: *    This MACRO is used to exit an ISR.  The current version of the gcc *    compiler for ARM does not produce correct code for interrupt *    routines to operate properly with THUMB code.  The MACRO performs *    the following steps: * *    1 - Recover SPSR value from stack        *    2 - and restore  its value                    *    3 - Pop the return address & the saved general registers from *        the IRQ stack & return * *****************************************************************************/#define ISR_EXIT()  asm volatile(" ldmfd sp!,{r1}\n" \                                 " msr   spsr_c,r1\n" \                                 " ldmfd sp!,{r0-r12,pc}^")/****************************************************************************** * * Function Name: disableIRQ() * * Description: *    This function sets the IRQ disable bit in the status register * * Calling Sequence:  *    void * * Returns: *    previous value of CPSR * *****************************************************************************/unsigned disableIRQ(void);/****************************************************************************** * * Function Name: enableIRQ() * * Description: *    This function clears the IRQ disable bit in the status register * * Calling Sequence:  *    void * * Returns: *    previous value of CPSR * *****************************************************************************/unsigned enableIRQ(void);/****************************************************************************** * * Function Name: restoreIRQ() * * Description: *    This function restores the IRQ disable bit in the status register *    to the value contained within passed oldCPSR * * Calling Sequence:  *    void * * Returns: *    previous value of CPSR * *****************************************************************************/unsigned restoreIRQ(unsigned oldCPSR);/****************************************************************************** * * Function Name: disableFIQ() * * Description: *    This function sets the FIQ disable bit in the status register * * Calling Sequence:  *    void * * Returns: *    previous value of CPSR * *****************************************************************************/unsigned disableFIQ(void);/****************************************************************************** * * Function Name: enableFIQ() * * Description: *    This function clears the FIQ disable bit in the status register * * Calling Sequence:  *    void * * Returns: *    previous value of CPSR * *****************************************************************************/unsigned enableFIQ(void);/****************************************************************************** * * Function Name: restoreIRQ() * * Description: *    This function restores the FIQ disable bit in the status register *    to the value contained within passed oldCPSR * * Calling Sequence:  *    void * * Returns: *    previous value of CPSR * *****************************************************************************/unsigned restoreFIQ(unsigned oldCPSR);#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?