⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 interrupt.c

📁 JENNIC无线传感器网络 ZIGBEE 文件资料
💻 C
字号:
/**************************************************************************** * * MODULE:             Interrupt * * COMPONENT:          Interrupt.c,v * * VERSION:            AT-Jenie_Release_v1_RC3 * * REVISION:           1.3 * * DATED:              2007/09/25 09:03:21 * * STATUS:             Exp * * AUTHOR:             MRW * * DESCRIPTION         Manage interrupt enabling / disabling * * CHANGE HISTORY: * * Interrupt.c,v * * * MRW * * LAST MODIFIED BY:   mwild *                     $Modtime: $ * **************************************************************************** * *  (c) Copyright 2007 JENNIC Ltd * ****************************************************************************//****************************************************************************//***        Include files                                                 ***//****************************************************************************/#include <jendefs.h>#include "interrupt.h"/****************************************************************************//***        Macro Definitions                                             ***//****************************************************************************/#define SR_IEE  (4)#define SR_TEE  (2)#define GET_SR(reg)  { asm volatile ("l.mfspr %0,r0,0x0011" :"=r"(reg) : ); }#define CLEAR_SR_BITS(bits) { \    register unsigned int reg; \    asm volatile ("l.mfspr %0,r0,0x0011" :"=r"(reg) : ); \    reg &= ~(bits); \    asm volatile ("l.mtspr r0,%0,0x0011" : : "r"(reg) ); \}#define SET_SR_BITS(bits) { \    register unsigned int reg; \    asm volatile ("l.mfspr %0,r0,0x0011" :"=r"(reg) : ); \    reg |= (bits); \    asm volatile ("l.mtspr r0,%0,0x0011" : : "r"(reg) ); \}/****************************************************************************//***        Type Definitions                                              ***//****************************************************************************//****************************************************************************//***        Local Function Prototypes                                     ***//****************************************************************************//****************************************************************************//***        Exported Variables                                            ***//****************************************************************************//****************************************************************************//***        Local Variables                                               ***//****************************************************************************/volatile uint32 gu32Counter;uint32 gu32_SR;/****************************************************************************//***        Exported Functions                                            ***//****************************************************************************//****************************************************************************//***        Local Functions                                               ***//****************************************************************************//**************************************************************************** * * NAME: vInterrupt_Suspend * * DESCRIPTION: * Disables interrupts if they were not already disabled * * PARAMETERS:      Name            RW  Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PUBLIC void vInterrupt_Suspend(void){    if (0 == gu32Counter++) {        register uint32 u32SR;        GET_SR(u32SR);        gu32_SR = u32SR;        if (gu32_SR & (SR_IEE | SR_TEE)) {            CLEAR_SR_BITS(SR_IEE | SR_TEE);        }    }}/**************************************************************************** * * NAME: vInterrupt_Resume * * DESCRIPTION: * Enables interrupts if they were not already enabled * * PARAMETERS:      Name            RW  Usage * None. * * RETURNS: * None. * * NOTES: * None. ****************************************************************************/PUBLIC void vInterrupt_Resume(void){    if (gu32Counter) {        if (0 == --gu32Counter) {            SET_SR_BITS(gu32_SR & (SR_IEE | SR_TEE));        }    } else {        /* interrupt enable / disable  underflow */        while (1);    }}/****************************************************************************//***        END OF FILE                                                   ***//****************************************************************************/

⌨️ 快捷键说明

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