📄 ktimer.c
字号:
//
// Copyright(C) Renesas Technology Corp. 2002-2004. All rights reserved.
//
// NK Kernel for ITS-DS7 Ver.1.0.0
//
// FILE : ktimer.c
// CREATED : 2002.04.25
// MODIFIED : 2004.10.12
// AUTHOR : Renesas Technology Corp.
// HARDWARE : RENESAS ITS-DS7
// HISTORY :
// 2003.06.12
// - Created release code.
// (based on RENESAS ITS-DS4 Source Kit Ver.1.2.0 for WCE4.2)
// 2004.01.15
// - Added Timer2 setting
// 2004.02.09
// - Revised CPUSetSysTimerCount.
// 2004.09.01
// - Created release code for WCE5.0.
// 2004.10.12
// - Modified ISR of Timer2
// (Changed from SHxTimer2ISR to SHxTimer2ISRWrapped)
//------------------------------------------------------------------------------
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
// Copyright (c) 1995-2000 Microsoft Corporation. All rights reserved.
//
//------------------------------------------------------------------------------
//
// Module Name:
//
// ktimer.c
//
// Abstract:
//
// SH3 kernel timer functions.
//
//------------------------------------------------------------------------------
#include <windows.h>
#include <nkintr.h>
#include "timer.h"
#include <bldver.h>
#include "shx.h"
#include "sh7770.h"
#include "platform.h"
#include "drv_glob.h"
const DWORD OEMTimerFreq = OEM_CLOCK_FREQ; // timer frequency
const int OEMMinTickDistance = (OEM_CLOCK_FREQ / 20000); // minimum counter value - 50us
const DWORD OEMTimerBaseAddr = SH7770_TMU012_REGBASE; // base of the TMU register
extern void (* pOEMUpdateTimerLED) (DWORD dwMSec);
extern void (* pOEMUpdateProfLED) (DWORD dwSPC);
extern DWORD InterruptTable[];
BOOL SHxInitClock(void);
DWORD SHxTimerISR (void);
DWORD SHxTimer2ISRWrapped (DWORD dwSPC);
void InitClock(void) {
extern BYTE IntrPrio[];
// initialized clock
SHxInitClock ();
// PrintLED("TIMER0");
DEBUGMSG(1, (TEXT("TMU_TSTR0 0x%02X \r\n"), READ_REGISTER_UCHAR(TMU_TSTR0) ));
DEBUGMSG(1, (TEXT("TMU_TCOR0 0x%08X \r\n"), READ_REGISTER_ULONG(TMU_TCOR0) ));
DEBUGMSG(1, (TEXT("TMU_TCNT0 0x%08X \r\n"), READ_REGISTER_ULONG(TMU_TCNT0) ));
DEBUGMSG(1, (TEXT("TMU_TCR0 0x%04X \r\n"), READ_REGISTER_USHORT(TMU_TCR0) ));
WRITE_REGISTER_ULONG(INTC2PRI0, (INTC2PRI0_GPIO | INTC2PRI0_TMU00 | INTC2PRI0_WDT | INTC2PRI0_HAC)); // Priority 1
IntrPrio[16]=1; // 0x400-0x200/0x20=16
InterruptTable[16] = (DWORD)SHxTimerISR; // HookInterrupt((0x400-0x200)/0x20,Timer0ISR)
DEBUGMSG(1, (TEXT("TMU_TSTR0 0x%02X \r\n"), READ_REGISTER_UCHAR(TMU_TSTR0) ));
DEBUGMSG(1, (TEXT("TMU_TCOR0 0x%08X \r\n"), READ_REGISTER_ULONG(TMU_TCOR0) ));
DEBUGMSG(1, (TEXT("TMU_TCNT0 0x%08X \r\n"), READ_REGISTER_ULONG(TMU_TCNT0) ));
DEBUGMSG(1, (TEXT("TMU_TCR0 0x%04X \r\n"), READ_REGISTER_USHORT(TMU_TCR0) ));
WRITE_REGISTER_ULONG(INTC2PRI11,(INTC2PRI11_TMU01 | INTC2PRI11_TMU02 | INTC2PRI11_TMU02IC | INTC2PRI11_TMU10));//Priority1
IntrPrio[18] = 1; // (0x440-0x200)/0x20=18
InterruptTable[18] = (DWORD)SHxTimer2ISRWrapped; // HookInterrupt((0x440-0x200)/0x20,SHxTimer2ISRWrapped)
DEBUGMSG(1, (TEXT("TMU_TSTR0 0x%02X \r\n"), READ_REGISTER_UCHAR(TMU_TSTR0) ));
DEBUGMSG(1, (TEXT("TMU_TCOR0 0x%08X \r\n"), READ_REGISTER_ULONG(TMU_TCOR0) ));
DEBUGMSG(1, (TEXT("TMU_TCNT0 0x%08X \r\n"), READ_REGISTER_ULONG(TMU_TCNT0) ));
DEBUGMSG(1, (TEXT("TMU_TCR0 0x%04X \r\n"), READ_REGISTER_USHORT(TMU_TCR0) ));
WRITE_REGISTER_ULONG(INTC2MSKCR, 0x00000002); // INTC2 Interrupts mask TMU0,1,2 Clear
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -