📄 pcmrtk.h
字号:
/*--------------------------------------------------------------------------*/
/* Project: PCMCIA Header File, interface for traps */
/* File: PCMRTK.H */
/* Edited by: hyperstone electronics GmbH */
/* Am Seerhein 8 */
/* D-78467 Konstanz, Germany */
/* Date: Aug 29, 2003 */
/*--------------------------------------------------------------------------*/
// 24.04.01 UpdateBCRTrap is TrapNumber 37
// 29.08.03 For Remap: ReadStatus/RegisterError-Trap
/*--------------------------------------------------------------------------*/
#ifndef __HYRTK_H
#define __HYRTK_H 1
/*==========================================================================*/
/* Global Defines */
/*==========================================================================*/
#ifndef NULL_DEFINED
#define NULL_DEFINED
#define NULL (void *) 0
#endif
/*==========================================================================*/
/* Task-Levels */
/*==========================================================================*/
#define StackLevelTask 0
#define InterruptLevelTask 1
/*==========================================================================*/
/* Table of trap entries associated with the kernel commands */
/*==========================================================================*/
#define WaitGuardTrap "trap 47 ;WaitGuard"
#define WaitGuardMaxTrap "trap 46 ;WaitGuardMax"
#define FlashIdle1Trap "trap 45 ;FlashIdle1"
#define DelayByTrap "trap 44 ;DelayBy"
#define UpdateFCRTrap "trap 42 ;UpdateFCR"
#define UpdateMCRTrap "trap 41 ;UpdateMCR"
#define UpdateBCRTrap "trap 40 ;UpdateBCR"
#define FlashIdleTrap "trap 38 ;FlashIdle"
#define ReadStatusTrap "trap 34 ;ReadStatus"
#define RegisterErrorTrap "trap 20 ;RegisterError"
/*==========================================================================*/
/* type definitions */
/*==========================================================================*/
typedef struct
{
unsigned long GuardState;
} GuardType, *GuardPointer;
typedef struct
{
long TagAndPriority;
void (*OnInterrupt)();
void (*OnError)();
void (*OnDeviceReset)();
} InterruptLevelTCBType;
/*==========================================================================*/
/* Macro definitions for realtime kernel commands */
/*==========================================================================*/
#define ClearGuardReturn(GuardPtr) \
({ register long dummy asm("L15"); \
\
dummy = (long)GuardPtr; \
asm volatile (ClearGuardReturnTrap \
: /* no outputs */ \
: "l" (dummy) \
: "L15"); \
})
#define ClearGuard(GuardPtr) \
({ register long dummy asm("L15"); \
\
dummy = (long)GuardPtr; \
asm volatile (ClearGuardTrap \
: /* no outputs */ \
: "l" (dummy) \
: "L15"); \
})
#define DelayBy(TimeUnits) \
({ register long dummy asm("L15"); \
\
dummy = (long)TimeUnits; \
asm volatile (DelayByTrap \
: /* no outputs */ \
: "l" (dummy) \
: "L15"); \
})
#define WaitGuard(GuardPtr) \
({ register long dummy asm("L15"); \
\
dummy = (long)GuardPtr; \
asm volatile (WaitGuardTrap \
: /* no outputs */ \
: "l" (dummy) \
: "L15"); \
})
#define FlashIdle1(ChipNumber) \
({ register long dummy; \
\
dummy = 0x804ffff0; \
asm volatile ("stw.r %0, 0" \
: /* no outputs */ \
: "l" (dummy)); \
})
#define UpdateFCR(SetBits, ClearBits) \
({ register long dummy0 asm("L14"); \
register long dummy1 asm("L15"); \
\
dummy1 = (long)ClearBits; \
dummy0 = (long)SetBits; \
asm volatile (UpdateFCRTrap \
: /* no outputs */ \
: "l" (dummy0), "l" (dummy1) \
: "L14", "L15"); \
})
#define DISABLE_IO1() \
({ register long dummy; \
\
FCRShadow |= 7; \
asm volatile ("mov %0, G11" \
: "=l" (dummy)); \
asm volatile ("ori SR, 1<<5"); \
asm volatile ("mov FCR, %0" \
: /* no outputs */ \
: "l" (dummy)); \
})
#define UpdateMCR(SetBits, ClearBits) \
({ register long dummy0 asm("L14"); \
register long dummy1 asm("L15"); \
\
dummy1 = (long)ClearBits; \
dummy0 = (long)SetBits; \
asm volatile (UpdateMCRTrap \
: /* no outputs */ \
: "l" (dummy0), "l" (dummy1) \
: "L14", "L15"); \
})
#define UpdateBCR(SetBits, ClearBits) \
({ register long dummy0 asm("L14"); \
register long dummy1 asm("L15"); \
\
dummy1 = (long)ClearBits; \
dummy0 = (long)SetBits; \
asm volatile (UpdateBCRTrap \
: /* no outputs */ \
: "l" (dummy0), "l" (dummy1) \
: "L14", "L15"); \
})
#define FlashIdle(PhysSectorNumber) \
({ register long dummy asm("L15"); \
\
dummy = (long)(PhysSectorNumber); \
asm volatile (FlashIdleTrap \
: /* no outputs */ \
: "l" (dummy) \
: "L15"); \
})
#define WaitGuardMax(GuardPtr, TimeOutTime) \
({ register long dummy0 asm("L14"); \
register long dummy1 asm("L15"); \
\
dummy0 = (long)GuardPtr; \
dummy1 = (long)TimeOutTime; \
asm volatile (WaitGuardMaxTrap \
: /* no outputs */ \
: "l" (dummy0), "l" (dummy1) \
: "L14", "L15"); \
})
#define ReadStatus(ChipSelect) \
({ register long dummy asm("L15"); \
\
dummy = (long)ChipSelect; \
asm volatile (ReadStatusTrap \
: "=l" (dummy) \
: "l" (dummy) \
: "L15"); \
dummy; \
})
#define RegisterError(ChipNumber) \
({ register long dummy asm("L15"); \
\
dummy = (long)ChipNumber; \
asm volatile (RegisterErrorTrap \
: /* no outputs */ \
: "l" (dummy) \
: "L15"); \
})
#define SetOwnTaskPointer(TaskPointer)
#define GetOwnTaskPointer(TaskPointer)
#define GetTaskWaitFlag(TaskPointer) (WaitFlag)
/*==========================================================================*/
/* macro definitions for the set/clear m-flag, fetch */
/*==========================================================================*/
#define SetMFlag() asm volatile ("ORI SR, 16" : : )
#define ClearMFlag() asm volatile ("ANDNI SR, 16" : : )
#define Fetch(NoHW) asm volatile ("FETCH %0" : : "i" (NoHW))
/*==========================================================================*/
/* macro definition for the GUARD */
/*==========================================================================*/
#define Guard(Name, InitialGuardState) \
GuardType Name = {InitialGuardState}
extern void SetRedLed(void);
extern void SetGreenLed(void);
extern void ClearRedLed(void);
extern void ClearGreenLed(void);
extern void ToggleRedLed(void);
extern void ToggleGreenLed(void);
extern volatile unsigned int WaitFlag;
#endif /* __HYRTK_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -