📄 ixosalosddkirq.c
字号:
/**
* @file IxOsalOsServices.c (vxWorks)
*
* @brief Implementation for Irq, Mem, sleep.
*
*
* @par
* <COPYRIGHT_TAG>
*/
#include <vxWorks.h>
#include <iv.h>
#include <intLib.h>
#include <sysLib.h>
#include <logLib.h>
#include <taskLib.h>
#include <string.h>
#include "IxOsal.h"
/* dummy ISR to register during unBind */
PRIVATE void ixOsalDummyIsr (void *parameter);
PRIVATE void
ixOsalDummyIsr (void *parameter)
{
}
/**************************************
* Irq services
*************************************/
PUBLIC IX_STATUS
ixOsalIrqBind (UINT32 irqLevel, IxOsalVoidFnVoidPtr routine, void *parameter)
{
#if((CPU==SIMSPARCSOLARIS) || (CPU==SIMLINUX))
/*
* No Irq support in simulation env
*/
return IX_FAIL;
#else
if (intConnect
(INUM_TO_IVEC(irqLevel),
(IxOsalVoidFnVoidPtr) routine,
(int) parameter) != OK)
{
return IX_FAIL;
}
intEnable (irqLevel);
return IX_SUCCESS;
#endif
}
PUBLIC IX_STATUS
ixOsalIrqUnbind (UINT32 irqLevel)
{
/*
* disable interrupts for this vector
*/
if (intDisable (IVEC_TO_INUM (irqLevel)) != OK)
{
return IX_FAIL;
}
/*
* register a dummy ISR
*/
if (intConnect (INUM_TO_IVEC(irqLevel),
(IxOsalVoidFnVoidPtr) ixOsalDummyIsr, 0) != OK)
{
return IX_FAIL;
}
return IX_SUCCESS;
}
PUBLIC UINT32
ixOsalIrqLock ()
{
#if((CPU==SIMSPARCSOLARIS) || (CPU==SIMLINUX))
ixOsalLog (IX_OSAL_LOG_LVL_ERROR,
IX_OSAL_LOG_DEV_STDOUT,
"ixOsalIrqLock: not supported in simulation \n", 0, 0, 0, 0, 0, 0);
return 0;
#else
return intLock ();
#endif
}
/* Enable interrupts and task scheduling,
* input parameter: irqEnable status returned
* by ixOsalIrqLock().
*/
PUBLIC void
ixOsalIrqUnlock (UINT32 irqEnable)
{
#if((CPU==SIMSPARCSOLARIS) || (CPU==SIMLINUX))
ixOsalLog (IX_OSAL_LOG_LVL_ERROR,
IX_OSAL_LOG_DEV_STDOUT,
"ixOsalIrqUnlock: not supported in simulation \n", 0, 0, 0, 0, 0, 0);
#else
intUnlock (irqEnable);
#endif
}
PUBLIC void
ixOsalIrqEnable (UINT32 irqLevel)
{
intEnable (irqLevel);
}
PUBLIC void
ixOsalIrqDisable (UINT32 irqLevel)
{
intDisable (irqLevel);
}
/**
* Return previous int level, return IX_FAIL if fail.
* Interrupt are locked out at or below that level.
*/
PUBLIC UINT32
ixOsalIrqLevelSet (UINT32 irqLevel)
{
#if((CPU==SIMSPARCSOLARIS) || (CPU==SIMLINUX))
/*
* No irq support in simulation, log error and return any
* * number, in this case we return zero.
*/
ixOsalLog (IX_OSAL_LOG_LVL_ERROR,
IX_OSAL_LOG_DEV_STDOUT,
"ixOsalIrqLevelSet: not supported in simulation \n",
0, 0, 0, 0, 0, 0);
return 0;
#else
return intLevelSet (irqLevel);
#endif
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -