ctr_firmware/trunk/bootrom/include/brom/os/common/tick.h
nakasima 1dd141a11f チック修正。
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@120 b871894f-2f95-9b40-918c-086798483c85
2008-12-18 01:32:38 +00:00

169 lines
5.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*---------------------------------------------------------------------------*
Project: CtrBrom - OS - include
File: tick.h
Copyright 2008 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date:: $
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef BROM_OS_TICK_H_
#define BROM_OS_TICK_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <brom/misc.h>
#include <brom/types.h>
#include <ctr/ioreg.h>
#ifdef SDK_ARM11
#include <brom/os/ARM11/timer.h>
#else // SDK_ARM9
#include <brom/os/ARM9/timer.h>
#endif // SDK_ARM9
//---- unit of tick
typedef u64 OSTick;
typedef u32 OSTick32;
//---- tick APIs
extern void osInitTick( void );
extern u64 osGetTick( void );
extern void i_osSetTick( u64 );
//---- conversion tick count <-> real time count
#ifdef SDK_ARM11
#define OS_SYSTEM_CLOCK HW_CPU_CLOCK
#define OS_TICK_HI_SHIFT 24 // 2の累乗単位でチック管理するのであれば32は指定できないロード値0では割り込みが発生しないため
#define OS_TICK_HI_LSB (1ULL<<OS_TICK_HI_SHIFT)
#define OS_TICK_LO_MASK ((u32)(OS_TICK_HI_LSB-1))
#define OS_TICK_LO_MSB ((u32)(OS_TICK_HI_LSB>>1))
#define OS_TICK_LO_LIMIT OS_TICK_HI_LSB
#else // SDK_ARM9
#define OS_SYSTEM_CLOCK HW_SYSTEM_CLOCK
#define OS_TICK_HI_SHIFT 16 // ロード値0でも割り込み発生
#define OS_TICK_HI_LSB (1ULL<<OS_TICK_HI_SHIFT)
#define OS_TICK_LO_MASK ((u16)(OS_TICK_HI_LSB-1))
#define OS_TICK_LO_MSB ((u16)(OS_TICK_HI_LSB>>1))
#define OS_TICK_LO_LIMIT OS_TICK_HI_LSB
#endif // SDK_ARM9
//---- sec to tick
#define OSi_SEC_TO_TICK( sec, prescale ) ((OSTick)( (OS_SYSTEM_CLOCK * (u64)(sec)) / (prescale) ))
#define OSi_SEC_TO_TICK32( sec, prescale ) ((OSTick32)( (OS_SYSTEM_CLOCK * (u32)(sec)) / (prescale) ))
#define OSi_MSEC_TO_TICK( msec, prescale ) ((OSTick)( ((OS_SYSTEM_CLOCK/1000) * (u64)(msec)) / (prescale) ))
#define OSi_MSEC_TO_TICK32( msec, prescale ) ((OSTick32)( ((OS_SYSTEM_CLOCK/1000) * (u32)(msec)) / (prescale) ))
#define OSi_USEC_TO_TICK( usec, prescale ) ((OSTick)( ((OS_SYSTEM_CLOCK/1000) * (u64)(usec)) / ((prescale) * 1000) ))
#define OSi_USEC_TO_TICK32( usec, prescale ) ((OSTick32)( ((OS_SYSTEM_CLOCK/1000) * (u32)(usec)) / ((prescale) * 1000) ))
#define OS_SEC_TO_TICK( sec ) OSi_SEC_TO_TICK( sec, 64 )
#define OS_SEC_TO_TICK32( sec ) OSi_SEC_TO_TICK32( sec, 64 )
#define OS_MSEC_TO_TICK( msec ) OSi_MSEC_TO_TICK( msec, 64 )
#define OS_MSEC_TO_TICK32( msec ) OSi_MSEC_TO_TICK32( msec, 64 )
#define OS_USEC_TO_TICK( usec ) OSi_USEC_TO_TICK( usec, 64 )
#define OS_USEC_TO_TICK32( usec ) OSi_USEC_TO_TICK32( usec, 64 )
//---- tick to sec
#define OSi_TICK_TO_SEC( tick, prescale ) ( ((u64)(tick) * (prescale)) / OS_SYSTEM_CLOCK )
#define OSi_TICK_TO_SEC32( tick, prescale ) ( ((u32)(tick) * (prescale)) / OS_SYSTEM_CLOCK )
#define OSi_TICK_TO_MSEC( tick, prescale ) ( ((u64)(tick) * (prescale)) / (OS_SYSTEM_CLOCK/1000) )
#define OSi_TICK_TO_MSEC32( tick, prescale ) ( ((u32)(tick) * (prescale)) / (OS_SYSTEM_CLOCK/1000) )
#define OSi_TICK_TO_USEC( tick, prescale ) ( ((u64)(tick) * (prescale) * 1000) / (OS_SYSTEM_CLOCK/1000) )
#define OSi_TICK_TO_USEC32( tick, prescale ) ( ((u32)(tick) * (prescale) * 1000) / (OS_SYSTEM_CLOCK/1000) )
#define OS_TICK_TO_SEC( tick ) OSi_TICK_TO_SEC( tick, 64 )
#define OS_TICK_TO_SEC32( tick ) OSi_TICK_TO_SEC32( tick, 64 )
#define OS_TICK_TO_MSEC( tick ) OSi_TICK_TO_MSEC( tick, 64 )
#define OS_TICK_TO_MSEC32( tick ) OSi_TICK_TO_MSEC32( tick, 64 )
#define OS_TICK_TO_USEC( tick ) OSi_TICK_TO_USEC( tick, 64 )
#define OS_TICK_TO_USEC32( tick ) OSi_TICK_TO_USEC32( tick, 64 )
static inline OSTick i_osSecToTick( u64 sec )
{
return OS_SEC_TO_TICK( sec );
}
static inline OSTick32 i_osSecToTick32( u32 sec )
{
return OS_SEC_TO_TICK32( sec );
}
static inline OSTick i_osMSecToTick( u64 msec )
{
return OS_MSEC_TO_TICK( msec );
}
static inline OSTick32 i_osMSecToTick32( u32 msec )
{
return OS_MSEC_TO_TICK32( msec );
}
static inline OSTick i_osUSecToTick( u64 usec )
{
return OS_USEC_TO_TICK( usec );
}
static inline OSTick32 i_osUSecToTick32( u32 usec )
{
return OS_USEC_TO_TICK32( usec );
}
static inline u64 i_osTickToSec( OSTick tick )
{
return OS_TICK_TO_SEC( tick );
}
static inline u32 i_osTickToSec32( OSTick32 tick )
{
return OS_TICK_TO_SEC32( tick );
}
static inline u64 i_osTickToMSec( OSTick tick )
{
return OS_TICK_TO_MSEC( tick );
}
static inline u32 i_osTickToMSec32( OSTick32 tick )
{
return OS_TICK_TO_MSEC32( tick );
}
static inline u64 i_osTickToUSec( OSTick tick )
{
return OS_TICK_TO_USEC( tick );
}
static inline u32 i_osTickToUSec32( OSTick32 tick )
{
return OS_TICK_TO_USEC32( tick );
}
#ifdef __cplusplus
} /* extern "C" */
#endif
/* BROM_OS_TICK_H_ */
#endif