mirror of
https://github.com/rvtr/ctr_firmware.git
synced 2025-10-31 07:51:08 -04:00
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@173 b871894f-2f95-9b40-918c-086798483c85
134 lines
5.5 KiB
C
134 lines
5.5 KiB
C
/*---------------------------------------------------------------------------*
|
||
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>
|
||
#include <brom/os/common/timer.h>
|
||
|
||
|
||
//---- unit of tick
|
||
typedef u64 OSTick;
|
||
typedef u32 OSTick32;
|
||
|
||
|
||
//---- tick APIs
|
||
extern void osInitTick( void );
|
||
extern u64 osGetTick( void );
|
||
extern void i_osSetTick( u64 );
|
||
|
||
|
||
//----------------------------------------------------------------------
|
||
//---- ARM9 use 2 timers
|
||
#ifdef SDK_ARM9
|
||
#define OS_TICK_USE_2TIMERS
|
||
#endif // SDK_ARM9
|
||
|
||
//---- timer number tick uses
|
||
#define OSi_TICK_TIMER OS_TIMER_0
|
||
#ifdef OS_TICK_USE_2TIMERS
|
||
#define OSi_TICK_TIMER_H ((OSTimer)(OSi_TICK_TIMER + 1))
|
||
#endif // OS_TICK_USE_2TIMERS
|
||
|
||
//---- timer interrupt ID
|
||
#ifdef SDK_ARM11
|
||
#define OSi_TICK_IE_TIMER_ID ((OSIntrID)(OS_INTR_ID_TIMER + OSi_TICK_TIMER))
|
||
#else // SDK_ARM9
|
||
#ifndef OS_TICK_USE_2TIMERS
|
||
#define OSi_TICK_IE_TIMER_ID ((OSIntrID)(OS_INTR_ID_TIMER0 + OSi_TICK_TIMER))
|
||
#else // OS_TICK_USE_2TIMERS
|
||
#define OSi_TICK_IE_TIMER_ID ((OSIntrID)(OS_INTR_ID_TIMER0 + OSi_TICK_TIMER_H))
|
||
#endif // OS_TICK_USE_2TIMERS
|
||
#endif // SDK_ARM9
|
||
|
||
//---- conversion tick count <-> real time count
|
||
#ifdef SDK_ARM11
|
||
#define OS_TICK_CLOCK HW_CPU_CLOCK
|
||
#define OS_TICK_PRESCALE 1
|
||
#define OS_TICK_HI_SHIFT 28 // 2<>̗ݏ<CC97><DD8F>P<EFBFBD>ʂŃ`<60>b<EFBFBD>N<EFBFBD>Ǘ<EFBFBD><C797><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̂ł<CC82><C582><EFBFBD><EFBFBD><EFBFBD>32<33>͎w<CD8E><77><EFBFBD>ł<EFBFBD><C582>Ȃ<EFBFBD><C882>i<EFBFBD><69><EFBFBD><EFBFBD><EFBFBD>l0<6C>ł͊<C582><CD8A>荞<EFBFBD>݂<EFBFBD><DD82><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȃ<EFBFBD><C882><EFBFBD><EFBFBD>߁A<DF81>ő<EFBFBD>31<33>j
|
||
#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_HI_LSB (1ULL<<OS_TICK_HI_SHIFT)
|
||
#define OS_TICK_LO_LIMIT OS_TICK_HI_LSB
|
||
#else // SDK_ARM9
|
||
#define OS_TICK_CLOCK HW_SYSTEM_CLOCK
|
||
#define OS_TICK_PRESCALE 64
|
||
#ifndef OS_TICK_USE_2TIMERS
|
||
#define OS_TICK_HI_SHIFT 16 // <20><><EFBFBD><EFBFBD><EFBFBD>l0<6C>ł<EFBFBD><C582><EFBFBD><EFBFBD>荞<EFBFBD>ݔ<EFBFBD><DD94><EFBFBD>
|
||
#define OS_TICK_LO_MASK ((u16)(OS_TICK_HI_LSB-1))
|
||
#define OS_TICK_LO_MSB ((u16)(OS_TICK_HI_LSB>>1))
|
||
#else // OS_TICK_USE_2TIMERS
|
||
#define OS_TICK_HI_SHIFT 32 // <20><><EFBFBD><EFBFBD><EFBFBD>l0<6C>ł<EFBFBD><C582><EFBFBD><EFBFBD>荞<EFBFBD>ݔ<EFBFBD><DD94><EFBFBD>
|
||
#define OS_TICK_LO_MASK ((u32)(OS_TICK_HI_LSB-1))
|
||
#define OS_TICK_LO_MSB ((u32)(OS_TICK_HI_LSB>>1))
|
||
#endif // OS_TICK_USE_2TIMERS
|
||
#define OS_TICK_HI_LSB (1ULL<<OS_TICK_HI_SHIFT)
|
||
#define OS_TICK_LO_LIMIT OS_TICK_HI_LSB
|
||
#endif // SDK_ARM9
|
||
|
||
//---- sec to tick
|
||
#define OS_SEC_TO_TICK( sec ) OSi_SEC_TO_TICK( sec, OS_TICK_PRESCALE )
|
||
#define OS_SEC_TO_TICK32( sec ) OSi_SEC_TO_TICK32( sec, OS_TICK_PRESCALE )
|
||
|
||
#define OS_MSEC_TO_TICK( msec ) OSi_MSEC_TO_TICK( msec, OS_TICK_PRESCALE )
|
||
#define OS_MSEC_TO_TICK32( msec ) OSi_MSEC_TO_TICK32( msec, OS_TICK_PRESCALE )
|
||
|
||
#define OS_USEC_TO_TICK( usec ) OSi_USEC_TO_TICK( usec, OS_TICK_PRESCALE )
|
||
#define OS_USEC_TO_TICK32( usec ) OSi_USEC_TO_TICK32( usec, OS_TICK_PRESCALE )
|
||
|
||
#define OSi_SEC_TO_TICK( sec, prescale ) ((OSTick)( (OS_TICK_CLOCK * (u64)(sec)) / (prescale) ))
|
||
#define OSi_SEC_TO_TICK32( sec, prescale ) ((OSTick32)( (OS_TICK_CLOCK * (u32)(sec)) / (prescale) ))
|
||
|
||
#define OSi_MSEC_TO_TICK( msec, prescale ) ((OSTick)( ((OS_TICK_CLOCK/1000) * (u64)(msec)) / (prescale) ))
|
||
#define OSi_MSEC_TO_TICK32( msec, prescale ) ((OSTick32)( ((OS_TICK_CLOCK/1000) * (u32)(msec)) / (prescale) ))
|
||
|
||
#define OSi_USEC_TO_TICK( usec, prescale ) ((OSTick)( ((OS_TICK_CLOCK/1000) * (u64)(usec)) / ((prescale) * 1000) ))
|
||
#define OSi_USEC_TO_TICK32( usec, prescale ) ((OSTick32)( ((OS_TICK_CLOCK/1000) * (u32)(usec)) / ((prescale) * 1000) ))
|
||
|
||
//---- tick to sec
|
||
#define OS_TICK_TO_SEC( tick ) OSi_TICK_TO_SEC( tick, OS_TICK_PRESCALE )
|
||
#define OS_TICK_TO_SEC32( tick ) OSi_TICK_TO_SEC32( tick, OS_TICK_PRESCALE )
|
||
|
||
#define OS_TICK_TO_MSEC( tick ) OSi_TICK_TO_MSEC( tick, OS_TICK_PRESCALE )
|
||
#define OS_TICK_TO_MSEC32( tick ) OSi_TICK_TO_MSEC32( tick, OS_TICK_PRESCALE )
|
||
|
||
#define OS_TICK_TO_USEC( tick ) OSi_TICK_TO_USEC( tick, OS_TICK_PRESCALE )
|
||
#define OS_TICK_TO_USEC32( tick ) OSi_TICK_TO_USEC32( tick, OS_TICK_PRESCALE )
|
||
|
||
#define OSi_TICK_TO_SEC( tick, prescale ) ( ((u64)(tick) * (prescale)) / OS_TICK_CLOCK )
|
||
#define OSi_TICK_TO_SEC32( tick, prescale ) ( ((u32)(tick) * (prescale)) / OS_TICK_CLOCK )
|
||
|
||
#define OSi_TICK_TO_MSEC( tick, prescale ) ( ((u64)(tick) * (prescale)) / (OS_TICK_CLOCK/1000) )
|
||
#define OSi_TICK_TO_MSEC32( tick, prescale ) ( ((u32)(tick) * (prescale)) / (OS_TICK_CLOCK/1000) )
|
||
|
||
#define OSi_TICK_TO_USEC( tick, prescale ) ( ((u64)(tick) * (prescale) * 1000) / (OS_TICK_CLOCK/1000) )
|
||
#define OSi_TICK_TO_USEC32( tick, prescale ) ( ((u32)(tick) * (prescale) * 1000) / (OS_TICK_CLOCK/1000) )
|
||
|
||
|
||
#ifdef __cplusplus
|
||
} /* extern "C" */
|
||
#endif
|
||
|
||
/* BROM_OS_TICK_H_ */
|
||
#endif
|