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

📄 ktimer.c

📁 WinCE5.0BSP for Renesas SH7770
💻 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 + -