Files
m241Neelima/vxworks-6.9/target/h/arch/arm/arm-m/intArmLib.h
T
2026-07-30 11:19:44 +05:30

117 lines
2.7 KiB
C

/* intArmLib.h - ARM-specific interrupt library header file */
/*
* Copyright (c) 2012 Wind River Systems, Inc.
*
* The right to copy, distribute or otherwise make use of this software
* may be licensed only pursuant to the terms of an applicable Wind River
* license agreement.
*/
/*
modification history
--------------------
01a,12apr12,jdw created.
*/
#ifndef __INCintArmLibh
#define __INCintArmLibh
#ifdef __cplusplus
extern "C" {
#endif
#ifdef _WRS_ENABLE_IRQ_TRACING
/*
* For tracing we can define some "no-op" instructions which can be
* inserted and identified in the ICE trace buffer.
*/
#define WRS_ICE_TRACE_IRQ_LOCK orr r5,r5,r5
#define WRS_ICE_TRACE_IRQ_UNLOCK orr r6,r6,r6
#else /* _WRS_ENABLE_IRQ_TRACING */
#define WRS_ICE_TRACE_IRQ_LOCK
#define WRS_ICE_TRACE_IRQ_UNLOCK
#endif /* _WRS_ENABLE_IRQ_TRACING */
#ifndef _ASMLANGUAGE
/* inline intCpuLock()/intCpuUnlock() and intCpuMicroLock/Unlock() */
#if defined (__DCC__)
__asm volatile int _inline_intCpuLock ()
{
! "r0"
mrs r0, BASEPRI /* get current status */
mov r1, #0x10
mrs BASEPRI, r1
WRS_ICE_TRACE_IRQ_LOCK
}
__asm volatile void _inline_intCpuUnlock (int key)
{
% reg key; lab label ! "r0" /* input: key in r0 */
mrs BASEPRI, r0
WRS_ICE_TRACE_IRQ_UNLOCK
}
#elif defined (__GNUC__)
static __inline__ int _inline_intCpuLock (void)
{
int key;
__asm__ volatile
(
"mrs r0, BASEPRI; " /* get current status */
"mov r1, #0x10 " /* set new status */
"mrs BASEPRI, r1 "
: "=&r" (key) /* output: key is %0 */
: /* no input */
: "r0", "r1"
);
return key;
}
static __inline__ void _inline_intCpuUnlock (int key)
{
__asm__ volatile
(
"mrs BASEPRI, r0 " /* set new status */
: "r" (key) /* input: key is %0 */
: "r0" /* r0, r1 clobbered; memory */
/* clobber for code barrier */
);
}
#endif /* __DCC__ */
/*
* For ARM-M these functions are identical
*/
#define _inline_intCpuMicroLock() _inline_intCpuLock()
#define _inline_intCpuMicroUnlock(key) _inline_intCpuUnlock(key)
/* functions in intArchLib.c and intALib.s */
extern STATUS intArchConnect (VOIDFUNCPTR * vector,
VOIDFUNCPTR routine, int argument);
extern STATUS intArchDisconnect (VOIDFUNCPTR * vector,
VOIDFUNCPTR routine, int argument);
extern int intLevelSet (int level);
extern STATUS intEnable (int level);
extern STATUS intDisable (int level);
extern unsigned int getBasePri( void );
extern unsigned int setBasePri( unsigned int level );
#endif /* _ASMLANGUAGE */
#ifdef __cplusplus
}
#endif
#endif /* __INCintArmLibh */