亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? intarchlib.c

?? vxworks的源代碼
?? C
字號:
/* intArchLib.c - PowerPC interrupt subroutine library *//* Copyright 1984-1996 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------01j,15aug01,pch  Change test for CPU==PPC4xx to ifdef _PPC_MSR_CE01i,25oct00,s_m  renamed PPC405 cpu types01h,07sep00,sm   modified intRegsLock and intRegsUnlock for PPC405 & PPC405F01h,14dec00,pai  the intEnable() and intDisable() routines now return a value                 (SPR #28548).01g,20mar97,tam  added masking of the PPC403 MSR[CE] bit (SPR 8192). 01f,09dec96,tpr  changed intEnable() and intDisable return value from void		 to int to match Mips prototype.01e,04mar96,tpr  added interrupt function hooks.01d,21feb96,ms   fixed intRegsLock.01c,29nov95,tpr  added intRegsLock() and intRegsUnlock().01b,21nov94,yao  changed to call sysIntConnect() for intConnect().  		 removed intHandlerCreate ().01a,09sep94,yao  written.*//*This library provides various routines to manipulate and connect tohardware interrupts and exceptions.  Any C language routine can beconnected to any exception, interrupt, or trap by calling intConnect().Interrupt vectors can be accessed directly by the routines intVecSet() and intVecGet().  See also the routines provided in intALib and intLib.INTERRUPT VECTORS AND NUMBERSSome of the routines in this library take an interrupt vector as aparameter, which is the byte offset into the vector table.Macros are provided to convert between interrupt vectors and interruptnumbers:.iP IVEC_TO_INUM(intVector)converts a vector to a number..iP INUM_TO_IVEC(intNumber)converts a number to a vector.EXAMPLETo switch between one of several routines for a particular interrupt,the following code fragment is one alternative..CS    vector  = INUM_TO_IVEC(some_int_vec_num);    oldfunc = intVecGet (vector);    newfunc = intHandlerCreate (routine, parameter);    intVecSet (vector, newfunc);    ...    intVecSet (vector, oldfunc);    /@ use original routine @/    ...    intVecSet (vector, newfunc);    /@ reconnect new routine @/.CEINCLUDE FILE: iv.hSEE ALSO: intALib, intLib*//* LINTLIBRARY */#include "vxWorks.h"#include "errnoLib.h"#include "cacheLib.h"#include "intLib.h"#include "memLib.h"#include "sysLib.h"#include "private/taskLibP.h"/* globals */STATUS	  (* _func_intConnectRtn) (VOIDFUNCPTR *, VOIDFUNCPTR, int) = NULL;void	  (* _func_intVecSetRtn) (FUNCPTR *, FUNCPTR ) = NULL;FUNCPTR   (* _func_intVecGetRtn) (FUNCPTR *) = NULL;void	  (* _func_intVecBaseSetRtn) (FUNCPTR *) = NULL;FUNCPTR * (* _func_intVecBaseGetRtn) (void) = NULL;int	  (* _func_intLevelSetRtn) (int) = NULL;int	  (* _func_intEnableRtn) (int) = NULL;int	  (* _func_intDisableRtn) (int) = NULL;/********************************************************************************* intConnect - connect a C routine to a hardware interrupt** This routine connects a specified C routine to a specified* interrupt vector.  The address of <routine> is stored at <vector>* so that the routine will be called with <parameter> when the interrupt* occurs.  The routine will be invoked in supervisor mode at interrupt* level.  A proper C environment will have been established,* the necessary registers saved, and the stack set up.** The routine can be any normal C code, except that it must not* invoke certain operating system functions that may block or perform* I/O operations.** This routine simply calls intHandlerCreate() and intVecSet().* The address of the handler returned by intHandlerCreate()* is what actually gets put in the interrupt vector.** RETURNS:* OK, or ERROR if the interrupt handler cannot be built.** SEE ALSO: intHandlerCreate(), intVecSet()*/STATUS intConnect     (    VOIDFUNCPTR * vector,	/* interrupt vector to attach to     */    VOIDFUNCPTR   routine,	/* routine to be called              */    int           parameter	/* parameter to be passed to routine */    )    {    if (_func_intConnectRtn == NULL)	return (ERROR);    return (_func_intConnectRtn (vector, routine, parameter));    }/******************************************************************************** intVecSet - set a CPU vector** This routine sets an exception/interrupt vector to a specified address.* The vector is specified as an offset into the CPU's vector table.  On the* MIPS R3000 CPU the vector table is set up statically in software.** SEE ALSO: intVecGet()*/void intVecSet     (    FUNCPTR * vector,		/* vector offset              */    FUNCPTR   function		/* address to place in vector */    )    {    if (_func_intVecSetRtn != NULL)        _func_intVecSetRtn (vector, function);    }/********************************************************************************* intVecGet - get a CPU vector** This routine returns the current value of a specified exception/interrupt* vector.  The vector is specified as an offset into the CPU's vector table.* For the PowerPC CPU the vector table is set up at the board level.** RETURNS: The current value of the specified vector.** SEE ALSO: intVecSet()*/FUNCPTR intVecGet     (    FUNCPTR * vector 	/* vector offset */    )    {    if (_func_intVecGetRtn == NULL)	return (NULL);    return (_func_intVecGetRtn (vector));    }/********************************************************************************* intVecBaseSet - set the interrupt vector base address** This routine sets the vector base address.  The CPU's vector base* register is set to the specified value, and subsequent calls to * intVecGet() and intVecSet() will use this base address.* The vector base address is initially 0, until changed by calls to this* routine.** NOTE:* The PowerPC does not have an interrupt vector base register;* thus this routine is a no-op for these architectures.** RETURNS: N/A** SEE ALSO: intVecBaseGet(), intVecGet(), intVecSet()*/void intVecBaseSet     (    FUNCPTR * baseAddr	    /* new vector base address */    )    {    if (_func_intVecBaseSetRtn != NULL)    	_func_intVecBaseSetRtn (baseAddr);    }/********************************************************************************* intVecBaseGet - get the vector base address** This routine returns the current vector base address that has been set* with intVecBaseSet().** RETURNS: The current vector base address, always 0.** SEE ALSO: intVecBaseSet()*/FUNCPTR * intVecBaseGet (void)    {    if (_func_intVecBaseGetRtn == NULL)	return (NULL);    return (_func_intVecBaseGetRtn ());    }/********************************************************************************* intLevelSet - set the current interrupt lock-out level** The PowerPC does not define external interrupt interface.  It is at board * level that decides the interrupt handler.*/int intLevelSet    (    int newLevel 		/* new interrupt level */    )    {    if (_func_intLevelSetRtn == NULL)	return (ERROR);    return (_func_intLevelSetRtn (newLevel));    }/********************************************************************************* intEnable - enable the corresponding interrupt level* */int intEnable    (    int intLevel		/* interrupt level to enable */    )    {    if (_func_intEnableRtn != NULL)	return (_func_intEnableRtn (intLevel));    return (ERROR);    }/********************************************************************************* intDisable - disable the  corresponding interrupt level**/int intDisable    (    int intLevel		/* interrupt level to disable */    )    {    if (_func_intDisableRtn != NULL)	return (_func_intDisableRtn (intLevel));    return (ERROR);    }/********************************************************************************* intLockLevelSet - set the current interrupt lock-out level**/void intLockLevelSet    (    int newLevel                /* new interrupt level */    )    {    }/********************************************************************************* intLockLevelGet - get the current interrupt lock-out level**/int intLockLevelGet (void)    {    return (ERROR);    }/******************************************************************************** intRegsLock - modify a REG_SET to have interrupts locked.*/int intRegsLock    (    REG_SET *	pRegs		/* register set to modify */    )    {    int oldMsr = pRegs->msr;#ifdef	_PPC_MSR_CE    pRegs->msr &= (~(_PPC_MSR_EE | _PPC_MSR_CE));#else	/* _PPC_MSR_CE */    pRegs->msr &= (~_PPC_MSR_EE);#endif	/* _PPC_MSR_CE */    return (oldMsr);    }/******************************************************************************** intRegsUnlock - restore an REG_SET's interrupt lockout level.*/void intRegsUnlock    (    REG_SET *	pRegs,			/* register set to modify */    int		oldMsr			/* msr with int lock to restore */    )    {#ifdef	_PPC_MSR_CE    pRegs->msr &= (~(_PPC_MSR_EE | _PPC_MSR_CE));    pRegs->msr |= (oldMsr & (_PPC_MSR_EE | _PPC_MSR_CE));#else	/* _PPC_MSR_CE */    pRegs->msr &= (~_PPC_MSR_EE);    pRegs->msr |= (oldMsr & _PPC_MSR_EE);#endif	/* _PPC_MSR_CE */    }

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
另类成人小视频在线| 一色屋精品亚洲香蕉网站| 喷水一区二区三区| 91麻豆精品国产91久久久久久| 午夜在线成人av| 在线成人小视频| 久久精品国产**网站演员| 日韩欧美视频在线| 国产一区二区网址| 国产精品久久久久久久久免费相片| jiyouzz国产精品久久| 亚洲综合久久久| 欧美精品第1页| 国产精品一区二区三区乱码| 国产精品成人一区二区艾草| 欧美日韩一本到| 精品无码三级在线观看视频| 亚洲国产精华液网站w| 色综合久久中文字幕综合网| 日本sm残虐另类| 久久蜜桃香蕉精品一区二区三区| youjizz久久| 亚洲成人三级小说| 国产亚洲一区二区三区四区 | 国产精品久久影院| 色网综合在线观看| 精品中文av资源站在线观看| 国产精品无人区| 欧美亚洲国产怡红院影院| 蜜桃视频免费观看一区| 国产精品美日韩| 欧美一区二区三区白人| av亚洲精华国产精华精| 天堂久久一区二区三区| 国产精品视频你懂的| 91精品国产综合久久久久| 成人爽a毛片一区二区免费| 亚洲国产精品麻豆| 国产精品久久久爽爽爽麻豆色哟哟| 欧美日韩国产经典色站一区二区三区| 国产成人精品aa毛片| 亚洲1区2区3区视频| 国产精品―色哟哟| 精品剧情v国产在线观看在线| 欧美亚洲免费在线一区| 国产精品系列在线观看| 日本vs亚洲vs韩国一区三区二区 | 亚洲色图欧美偷拍| 精品国免费一区二区三区| 欧美性生交片4| 99精品视频在线免费观看| 激情六月婷婷综合| 日韩精品乱码免费| 亚洲一区二区三区视频在线播放| 国产日韩影视精品| 精品国产乱码久久久久久图片| 欧洲在线/亚洲| 91小视频在线观看| 成人午夜电影网站| 国模冰冰炮一区二区| 美女网站在线免费欧美精品| 亚洲一区二区三区美女| 亚洲精品欧美激情| 自拍偷拍欧美精品| 国产精品久久久久久久久动漫| 久久久久久久久免费| 日韩精品在线网站| 日韩写真欧美这视频| 91精品国产综合久久精品| 91国产成人在线| 色999日韩国产欧美一区二区| 成人午夜在线播放| 岛国精品在线观看| 国产精品456| 国产91在线观看| 成人一区二区在线观看| 国产成人av影院| 国产成人av电影在线观看| 国产伦精一区二区三区| 国产专区综合网| 成人综合婷婷国产精品久久| 风间由美一区二区av101| 国产精品亚洲一区二区三区妖精| 国产毛片一区二区| 丁香五精品蜜臀久久久久99网站 | 亚洲成av人片观看| 五月激情六月综合| 日韩综合在线视频| 麻豆精品蜜桃视频网站| 国内欧美视频一区二区 | 99视频一区二区三区| 99久久久久免费精品国产| 91麻豆swag| 欧美日韩精品专区| 日韩一级大片在线观看| 精品久久久久久综合日本欧美| 久久久久久久综合狠狠综合| 国产精品欧美久久久久无广告| 国产精品久久久久毛片软件| 一区二区三区视频在线观看| 天天综合色天天综合色h| 精品一区二区精品| 国产成人精品1024| 91行情网站电视在线观看高清版| 欧美精品久久99久久在免费线| 日韩三级在线观看| 亚洲国产岛国毛片在线| 亚洲精品日韩综合观看成人91| 肉肉av福利一精品导航| 国产自产视频一区二区三区| 成人av网站在线观看| 欧美日韩激情一区二区三区| 26uuu精品一区二区| 成人免费一区二区三区在线观看 | 亚洲欧美一区二区三区久本道91 | 性感美女久久精品| 国产乱码精品一品二品| 91久久精品网| 久久久久国产精品人| 亚洲精品视频观看| 国产一区二区三区久久久| 色系网站成人免费| 久久综合国产精品| 一区二区三区免费观看| 韩国av一区二区三区| 欧洲视频一区二区| 日本一区二区三区久久久久久久久不 | 国产女主播视频一区二区| 亚洲高清不卡在线观看| 国产成人在线视频播放| 欧美日韩国产中文| 国产精品久久久久久久久免费桃花 | 天天操天天色综合| 国产成人一区在线| 欧美乱妇一区二区三区不卡视频| 国产视频一区不卡| 日韩激情一区二区| 色8久久人人97超碰香蕉987| 久久婷婷一区二区三区| 视频一区视频二区中文| 91一区二区三区在线播放| 2023国产一二三区日本精品2022| 亚洲成人免费av| 91在线国内视频| 国产欧美一区二区精品秋霞影院 | 国产精品网站在线| 免费观看在线综合色| 欧美亚洲综合另类| 成人免费一区二区三区在线观看| 国产一区二区福利视频| 欧美一区二区三区视频免费播放| 一区二区三区在线免费| 91视频91自| 国产精品福利一区二区三区| 国产iv一区二区三区| 精品国产网站在线观看| 三级精品在线观看| 欧美精品日日鲁夜夜添| 亚洲国产精品麻豆| 欧美日韩在线直播| 亚洲国产乱码最新视频| 在线亚洲一区观看| 一区二区三区在线免费播放| 91猫先生在线| 亚洲在线视频一区| 欧美性欧美巨大黑白大战| 亚洲一线二线三线久久久| 欧美中文字幕不卡| 视频在线观看91| 日韩午夜激情视频| 精品在线播放免费| 国产网红主播福利一区二区| 国产成人在线视频播放| 中文字幕一区免费在线观看| www.久久久久久久久| 亚洲精品水蜜桃| 欧美日韩三级一区| 免费在线观看一区二区三区| 欧美成人精品1314www| 国产一区二区免费看| 国产精品水嫩水嫩| 在线观看日韩精品| 日本中文字幕不卡| 精品处破学生在线二十三| 国产成人在线视频网站| 亚洲欧美一区二区三区国产精品| 一本色道亚洲精品aⅴ| 2020国产成人综合网| 老司机精品视频导航| 国产欧美日韩精品一区| 成人国产在线观看| 亚洲一区二区3| 欧美欧美欧美欧美首页| 午夜在线成人av| 国产欧美一区二区精品忘忧草| 不卡视频在线观看| 亚洲激情在线播放| 精品国产91九色蝌蚪| 国产91在线|亚洲| 一区二区在线看|