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

📄 lpc2204intrctl.c

📁 菲利普22系列 vxworks bsp 可以用来可以和其他版本的ARM vxworks bsp(特别是7内核的进行比较)进行比较可以加深对BSP的理解和掌握
💻 C
字号:
/* lpc2210IntrCtl.c - interrupt controller driver */


/* Copyright 1984-2001 Wind River Systems, Inc. */
#include "copyright_wrs.h"

#include "vxWorks.h"
#include "config.h"
#include "intLib.h"

#include "lpc2210.h"	/*  : modified */
#include "mytypes.h"

/* driver constants */
/*
#define LPC2210_INT_ALL_ENABLED     (LPC2210_INTNUMLEVELS)
#define LPC2210_INT_ALL_DISABLED    (LPC2210_INTNUMLEVELS-1)
*/
#define VICVECTBASE    (0x80000000)

/* forward declarations */

STATUS    lpc2210IntLvlVecChk  (int*, int*);
STATUS    lpc2210IntLvlEnable  (int);
STATUS    lpc2210IntLvlDisable (int);

/*  : 中断确认 */
STATUS lpc2210IntLvlAck (int level, int vector)
{
    VICVectAddr = 0;
    return OK;
}

void lpc2210IntDevInit (void)
{
    /* install the driver routines in the architecture hooks */
    sysIntLvlVecChkRtn     = lpc2210IntLvlVecChk;
    sysIntLvlEnableRtn     = lpc2210IntLvlEnable;
    sysIntLvlDisableRtn    = lpc2210IntLvlDisable;
    sysIntLvlVecAckRtn     = lpc2210IntLvlAck;  			/*  : added */

    VICIntEnClr = 0xffffffff;     /* all sources disabled */
    VICIntSelect = 0x00000000;         /* set all to IRQ, no FIQ */
    
    /* set int vector */
    VICDefVectAddr = 0x40000000;

}

STATUS  lpc2210IntLvlVecChk
    (
    int* pLevel,  /* ptr to receive old interrupt level */
    int* pVector  /* ptr to receive current interrupt vector */
    )
{
    DWORD dwState = VICIRQStatus;
    DWORD i;

    for (i = 0; i < LPC2210_INTNUMLEVELS; i++)
    {
        if ((1<<i) & dwState)
        {
            break;
        }
    }

    if (i >= LPC2210_INTNUMLEVELS)
        return ERROR;
    
    *pVector = i;
    return OK;
}

STATUS  lpc2210IntLvlEnable
    (
    int level  /* level to be enabled */
    )
{
    int key;

    if (level < 0 || level >= LPC2210_INTNUMLEVELS)
        return ERROR;

    /* clear bit in mask register */
    key = intLock ();
    VICIntEnable = VICIntEnable | (1<<level);
    intUnlock (key);

    return OK;
}

STATUS  lpc2210IntLvlDisable
    (
    int level  /* level to be disabled */
    )
{
    int key;

    if (level < 0 ||
        level >= LPC2210_INTNUMLEVELS)
        return ERROR;

    /* set bit in mask register */
    key = intLock ();
    VICIntEnClr = 1<<level;
    intUnlock (key);

    return OK;
}

⌨️ 快捷键说明

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