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

📄 intrapi.c

📁 深圳市微逻辑电子有限公司 巨果&#8226 Kingmos&reg 系统核心
💻 C
字号:
/******************************************************
Copyright(c) 版权所有,1998-2005微逻辑。保留所有权利。
******************************************************/

/*****************************************************
文件说明:中断服务API,提供系统中断服务
版本号:2.0.0
开发时期:2000
作者:李林
修改记录:
******************************************************/

#include <eframe.h>

#include <sysintr.h>
#include <oemfunc.h>
#include <eobjcall.h>
#include <coresrv.h>
#include <epcore.h>
/**************************************************
声明:void CALLBACK INTR_ISRFun( DWORD dwISRHandle );
参数:
	IN dwISRHandle - 中断回调传递的参数,该参数是ISR_RegisterServer时
                     所传入的参数值
  
返回值:
功能描述:
	执行中断回调功能,这里仅仅简单的设置中断事件
引用: 
************************************************/

static void CALLBACK INTR_ISRFun( DWORD lpEvent )
{
	_SemaphoreRelease( (LPSEMAPHORE)lpEvent, 1, NULL );
}

/**************************************************
声明:BOOL WINAPI KL_IntrInit( 
                  DWORD idInt, 
				  HANDLE hIntrEvent,
				  LPVOID lpvData, 
				  DWORD dwSize )

参数:
	IN idInt - 中断ID
	IN hIntrEvent - 中断事件句柄
	IN lpvData - 传递给OEM_InterruptEnable的参数
	IN dwSize - lpvData缓存大小(以byte为单位)

返回值:
	假如成功,返回TRUE;否则返回FALSE
功能描述:
	将一个中断ID与中断事件句柄关联,注册中断服务例程,打开中断ID对应的中断
引用: 
	系统调用,被中断服务线程调用
************************************************/
BOOL WINAPI KL_IntrInit( DWORD idInt, 
				  HANDLE hIntrEvent,
				  LPVOID lpvData, 
				  DWORD dwSize )
{
	if( idInt < SYSINTR_MAXIMUM )
	{   // 注册中断服务例程
		LPVOID lpvEvent = HandleToPtr( hIntrEvent, OBJ_EVENT );
		if( lpvEvent )
		{
			if( ISR_RegisterServer( idInt, INTR_ISRFun, (DWORD)lpvEvent ) )
			{   // 打开中断ID对应的中断
				if( OEM_InterruptEnable( idInt, lpvData, dwSize ) )
				{				
					return TRUE;
				}
				ISR_Unregister( idInt );
			}
		}
	}
	return FALSE;
}

/**************************************************
声明:void WINAPI KL_IntrDone( DWORD idInt );
参数:
	IN idInt - 中断ID
返回值:
功能描述:
	中断线程已处理完相关的事务,应该调用该函数去重新
    打开中断ID对应的中断
引用: 
	系统调用,被中断服务线程调用
************************************************/

void WINAPI KL_IntrDone( DWORD idInt )
{
	OEM_InterruptDone( idInt );
}

/**************************************************
声明:void WINAPI KL_IntrDisable( DWORD idInt );
参数:
	IN idInt - 中断ID
返回值:
功能描述:
	中断线程调用该函数去关掉中断ID对应的中断
引用: 
	系统调用,被中断服务线程调用
************************************************/

void WINAPI KL_IntrDisable( DWORD idInt )
{
	OEM_InterruptDisable( idInt );
}


/**************************************************
声明:void WINAPI KL_IntrEnable( DWORD idInt, 
                                 LPVOID lpvData,
                                 DWORD dwSize );
参数:
	IN idInt - 中断ID
	IN lpvData - 传递给OEM_InterruptEnable的参数
	IN dwSize - lpvData缓存大小(以byte为单位)
返回值:
功能描述:
	中断线程调用该函数去打开中断ID对应的中断
引用: 
	系统调用,被中断服务线程调用
************************************************/
void WINAPI KL_IntrEnable( DWORD idInt, LPVOID lpvData, DWORD dwSize )

{
	OEM_InterruptEnable( idInt, lpvData, dwSize  );
}

⌨️ 快捷键说明

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