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

📄 hw_timer.c

📁 JAPAN RTOS TOPPERS/JSP kernel 1.4 PreRelease simulation environment JSP kernel Windows simulation
💻 C
字号:
/*
 *  TOPPERS/JSP Kernel
 *      Toyohashi Open Platform for Embedded Real-Time Systems/
 *      Just Standard Profile Kernel
 * 
 *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
 *                              Toyohashi Univ. of Technology, JAPAN
 * 
 *  忋婰挊嶌尃幰偼丆埲壓偺 (1)乣(4) 偺忦審偐丆Free Software Foundation 
 *  偵傛偭偰岞昞偝傟偰偄傞 GNU General Public License 偺 Version 2 偵婰
 *  弎偝傟偰偄傞忦審傪枮偨偡応崌偵尷傝丆杮僜僼僩僂僃傾乮杮僜僼僩僂僃傾
 *  傪夵曄偟偨傕偺傪娷傓丏埲壓摨偠乯傪巊梡丒暋惢丒夵曄丒嵞攝晍乮埲壓丆
 *  棙梡偲屇傇乯偡傞偙偲傪柍彏偱嫋戻偡傞丏
 *  (1) 杮僜僼僩僂僃傾傪僜乕僗僐乕僪偺宍偱棙梡偡傞応崌偵偼丆忋婰偺挊嶌
 *      尃昞帵丆偙偺棙梡忦審偍傛傃壓婰偺柍曐徹婯掕偑丆偦偺傑傑偺宍偱僜乕
 *      僗僐乕僪拞偵娷傑傟偰偄傞偙偲丏
 *  (2) 杮僜僼僩僂僃傾傪丆儔僀僽儔儕宍幃側偳丆懠偺僜僼僩僂僃傾奐敪偵巊
 *      梡偱偒傞宍偱嵞攝晍偡傞応崌偵偼丆嵞攝晍偵敽偆僪僉儏儊儞僩乮棙梡
 *      幰儅僯儏傾儖側偳乯偵丆忋婰偺挊嶌尃昞帵丆偙偺棙梡忦審偍傛傃壓婰
 *      偺柍曐徹婯掕傪宖嵹偡傞偙偲丏
 *  (3) 杮僜僼僩僂僃傾傪丆婡婍偵慻傒崬傓側偳丆懠偺僜僼僩僂僃傾奐敪偵巊
 *      梡偱偒側偄宍偱嵞攝晍偡傞応崌偵偼丆師偺偄偢傟偐偺忦審傪枮偨偡偙
 *      偲丏
 *    (a) 嵞攝晍偵敽偆僪僉儏儊儞僩乮棙梡幰儅僯儏傾儖側偳乯偵丆忋婰偺挊
 *        嶌尃昞帵丆偙偺棙梡忦審偍傛傃壓婰偺柍曐徹婯掕傪宖嵹偡傞偙偲丏
 *    (b) 嵞攝晍偺宍懺傪丆暿偵掕傔傞曽朄偵傛偭偰丆TOPPERS僾儘僕僃僋僩偵
 *        曬崘偡傞偙偲丏
 *  (4) 杮僜僼僩僂僃傾偺棙梡偵傛傝捈愙揑傑偨偼娫愙揑偵惗偠傞偄偐側傞懝
 *      奞偐傜傕丆忋婰挊嶌尃幰偍傛傃TOPPERS僾儘僕僃僋僩傪柶愑偡傞偙偲丏
 * 
 *  杮僜僼僩僂僃傾偼丆柍曐徹偱採嫙偝傟偰偄傞傕偺偱偁傞丏忋婰挊嶌尃幰偍
 *  傛傃TOPPERS僾儘僕僃僋僩偼丆杮僜僼僩僂僃傾偵娭偟偰丆偦偺揔梡壜擻惈傕
 *  娷傔偰丆偄偐側傞曐徹傕峴傢側偄丏傑偨丆杮僜僼僩僂僃傾偺棙梡偵傛傝捈
 *  愙揑傑偨偼娫愙揑偵惗偠偨偄偐側傞懝奞偵娭偟偰傕丆偦偺愑擟傪晧傢側偄丏
 * 
 *  @(#) $Id: hw_timer.c,v 1.2 2003/06/30 15:44:11 takayuki Exp $
 */

/*
 *	僞乕僎僢僩埶懚僞僀儅儌僕儏乕儖乮Windows梡乯
 */

#ifndef _HW_TIMER_C_
#define _HW_TIMER_C_

#include <t_services.h>
#include "hw_timer.h"
#include "cpu_config.h"
#include "hal_msg.h"

extern HANDLE PrimaryThreadHandle;

/*
 *  Windows偺昗弨僞僀儅
 */
#if defined(TIMER_WINDOWSTIMER)

	/* 僞僀儅偺婲摦張棟 */
void hw_timer_initialize()
{
	SetTimer((HWND)PrimaryThreadHandle,RTC_EVENT,TIMER_CLOCK_WINDOWS,NULL);
}

	/* 僞僀儅偺掆巭張棟 */
void hw_timer_terminate()
{
	KillTimer((HWND)PrimaryThreadHandle,RTC_EVENT);
}


/*
 *  儅儖僠儊僨傿傾僞僀儅
 */
#elif defined(TIMER_MULTIMEDIATIMER)

#include <mmsystem.h>

static DWORD TimerID = 0;

static void CALLBACK MultiMediaTimerCallbackFunction(UINT wTimerID, UINT msg, DWORD dwUser, DWORD dw1, DWORD dw2)
{	HALInterruptRequest(INHNO_TIMER);	}

	/* 僞僀儅偺婲摦張棟 */
void hw_timer_initialize()
{
	MMRESULT result;
	TIMECAPS devcap;

	result = timeGetDevCaps(&devcap, sizeof(TIMECAPS));
	FatalAssertion(result == TIMERR_NOERROR &&  TIMER_CLOCK_WINDOWS >= devcap.wPeriodMin && TIMER_CLOCK_WINDOWS <= devcap.wPeriodMax, "巜掕偝傟偨僋儘僢僋僥傿僢僋偼儅儖僠儊僨傿傾僞僀儅偱愝掕壜擻側斖埻傪挻偊偰偄傑偡丅");

	timeBeginPeriod(TIMER_CLOCK_WINDOWS);	//timeBeginPeriod(devcap.wPeriodMin); 偲幚峴偡傞偲丄晧壸偲堷偒姺偊偵惛搙偑忋偑傞

	TimerID = timeSetEvent(TIMER_CLOCK_WINDOWS, TIMER_CLOCK_WINDOWS,  MultiMediaTimerCallbackFunction, 0, TIME_PERIODIC|TIME_CALLBACK_FUNCTION);
	FatalAssertion(TimerID != 0, "hw_tiemr_initialize failed to perform 'timeSetEvent' function.");
}

	/* 僞僀儅偺掆巭張棟 */
void hw_timer_terminate()
{
	if(TimerID != 0)
	{
		timeKillEvent(TimerID);
		timeEndPeriod(TIMER_CLOCK_WINDOWS);
	}
}

#else

#error "巊梡偡傞僞僀儅偺庬暿偑慖戰偝傟偰偄傑偣傫"

#endif



#endif /* _HW_TIMER_H_ */

⌨️ 快捷键说明

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