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@125 b871894f-2f95-9b40-918c-086798483c85
This commit is contained in:
parent
7d09772c84
commit
b88edae8d8
@ -72,6 +72,16 @@ stupStartHandlerVeneer
|
||||
cmpne r12, #~0
|
||||
LSYM(1) beq BSYM(1)
|
||||
|
||||
//---- enable performance monitor
|
||||
mrc p15, 0, r0, c15, c12, 0
|
||||
ldr r1, =HW_C15_PMN_ENABLE | HW_C15_CYCLE_COUNT_RESET | HW_C15_COUNT01_RESET | \
|
||||
(HW_C15_EVT_INC_EACH_CYCLE << HW_C15_COUNT0_EVT_SFT) | \
|
||||
(HW_C15_EVT_INC_EACH_CYCLE << HW_C15_COUNT1_EVT_SFT) | \
|
||||
HW_C15_CYCLE_COUNT_D64
|
||||
orr r0, r0, r1
|
||||
// bic r0, r0, #HW_C15_CYCLE_COUNT_D64
|
||||
mcr p15, 0, r0, c15, c12, 0
|
||||
|
||||
//---- check CPU-ID
|
||||
mrc p15,0, r0, c0, c0, 5
|
||||
tst r0, #HW_C0_AP_CPU_ID_MASK
|
||||
|
||||
@ -40,14 +40,16 @@ extern void i_osSetTick( u64 );
|
||||
|
||||
//---- conversion tick count <-> real time count
|
||||
#ifdef SDK_ARM11
|
||||
#define OS_SYSTEM_CLOCK HW_CPU_CLOCK
|
||||
#define OS_TICK_CLOCK HW_CPU_CLOCK
|
||||
#define OS_TICK_PRESCALE 1
|
||||
#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_CLOCK HW_SYSTEM_CLOCK
|
||||
#define OS_TICK_PRESCALE 64
|
||||
#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))
|
||||
@ -56,104 +58,42 @@ extern void i_osSetTick( u64 );
|
||||
#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 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 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 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 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_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 OS_SEC_TO_TICK( sec ) OSi_SEC_TO_TICK( sec, 64 )
|
||||
#define OS_SEC_TO_TICK32( sec ) OSi_SEC_TO_TICK32( sec, 64 )
|
||||
#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 OS_MSEC_TO_TICK( msec ) OSi_MSEC_TO_TICK( msec, 64 )
|
||||
#define OS_MSEC_TO_TICK32( msec ) OSi_MSEC_TO_TICK32( msec, 64 )
|
||||
#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 OS_USEC_TO_TICK( usec ) OSi_USEC_TO_TICK( usec, 64 )
|
||||
#define OS_USEC_TO_TICK32( usec ) OSi_USEC_TO_TICK32( usec, 64 )
|
||||
#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 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 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 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 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 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_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 OS_TICK_TO_SEC( tick ) OSi_TICK_TO_SEC( tick, 64 )
|
||||
#define OS_TICK_TO_SEC32( tick ) OSi_TICK_TO_SEC32( tick, 64 )
|
||||
#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 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 );
|
||||
}
|
||||
#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
|
||||
|
||||
@ -395,10 +395,10 @@ extern "C" {
|
||||
#define HW_C15_CYCLE_COUNT_IE 0x00000040 // Cycle Counter interrupt enable
|
||||
#define HW_C15_COUNT1_IE 0x00000020 // Count Register 1 interrupt enable
|
||||
#define HW_C15_COUNT0_IE 0x00000010 // Count Register 0 interrupt enable
|
||||
#define HW_C15_CYCLE_COUNT_DIV64 0x00000008 // Cycle Counter counts every 64th processor clock cycle
|
||||
#define HW_C15_CYCLE_COUNT_D64 0x00000008 // Cycle Counter counts every 64th processor clock cycle
|
||||
#define HW_C15_CYCLE_COUNT_RESET 0x00000004 // Cycle Counter Reset on Write
|
||||
#define HW_C15_COUNT01_RESET 0x00000002 // Counter Register 0/1 Reset on Write
|
||||
#define HW_C15_COUNT_ENABLE 0x00000001 // All three counters enable
|
||||
#define HW_C15_PMN_ENABLE 0x00000001 // All three counters enable
|
||||
|
||||
#define HW_C15_COUNT0_EVT_SFT 20
|
||||
#define HW_C15_COUNT1_EVT_SFT 12
|
||||
|
||||
Loading…
Reference in New Issue
Block a user