チックタイマーを32bit使用できるように修正。

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_firmware@216 b871894f-2f95-9b40-918c-086798483c85
This commit is contained in:
nakasima 2009-01-27 06:34:57 +00:00
parent 70a45b43b5
commit 5d0ced34ea
3 changed files with 12 additions and 11 deletions

View File

@ -75,19 +75,20 @@ static void i_osSetTimer(OSAlarm *alarm)
// osEnterTimerCallback(OSi_ALARM_TIMER, i_osAlarmHandler, NULL); // osEnterTimerCallback(OSi_ALARM_TIMER, i_osAlarmHandler, NULL);
//---- set count and let timer be enable //---- set count and let timer be enable
if (delta <= 0) if (delta <= 1)
{ {
#ifdef SDK_ARM11 #ifdef SDK_ARM11
// ARM11は0設定禁止
timerCount = 1; timerCount = 1;
#else // SDK_ARM9 #else // SDK_ARM9
// ARM9は0xFFFF設定禁止 // ARM9は~0設定禁止
timerCount = (u16)~1; timerCount = (u16)~1;
#endif // SDK_ARM9 #endif // SDK_ARM9
} }
else if (delta < OS_TICK_LO_LIMIT) else if (delta < OS_TICK_LO_LIMIT)
{ {
#ifdef SDK_ARM11 #ifdef SDK_ARM11
timerCount = delta; timerCount = delta - 1;
#else // SDK_ARM9 #else // SDK_ARM9
timerCount = (u16)(~delta); timerCount = (u16)(~delta);
#endif // SDK_ARM9 #endif // SDK_ARM9
@ -95,7 +96,7 @@ static void i_osSetTimer(OSAlarm *alarm)
else else
{ {
#ifdef SDK_ARM11 #ifdef SDK_ARM11
timerCount = OS_TICK_LO_LIMIT; timerCount = OS_TICK_LO_MASK;
#else // SDK_ARM9 #else // SDK_ARM9
timerCount = 0; timerCount = 0;
#endif // SDK_ARM9 #endif // SDK_ARM9

View File

@ -73,7 +73,7 @@ void osInitTick(void)
#ifdef SDK_ARM11 #ifdef SDK_ARM11
osStopTimer(OSi_TICK_TIMER); osStopTimer(OSi_TICK_TIMER);
osEnableTimerReload(OSi_TICK_TIMER); osEnableTimerReload(OSi_TICK_TIMER);
osStartTimer(OSi_TICK_TIMER, OS_TICK_LO_LIMIT, OS_TICK_PRESCALE); osStartTimer(OSi_TICK_TIMER, OS_TICK_LO_MASK, OS_TICK_PRESCALE);
#else // SDK_ARM9 #else // SDK_ARM9
//---- setting timer //---- setting timer
osSetTimerControl(OSi_TICK_TIMER, 0); osSetTimerControl(OSi_TICK_TIMER, 0);
@ -93,7 +93,7 @@ void osInitTick(void)
osEnableInterruptID(OSi_TICK_IE_TIMER_ID); osEnableInterruptID(OSi_TICK_IE_TIMER_ID);
//---- need to reset //---- need to reset
i_osNeedResetTimer = TRUE; i_osNeedResetTimer = FALSE;
} }
} }
@ -130,7 +130,7 @@ static void i_osCountUpTick(void)
{ {
#ifdef SDK_ARM11 #ifdef SDK_ARM11
osStopTimer(OSi_TICK_TIMER); osStopTimer(OSi_TICK_TIMER);
osStartTimer(OSi_TICK_TIMER, OS_TICK_LO_LIMIT, OS_TICK_PRESCALE); osStartTimer(OSi_TICK_TIMER, OS_TICK_LO_MASK, OS_TICK_PRESCALE);
#else // SDK_ARM9 #else // SDK_ARM9
osSetTimerControl(OSi_TICK_TIMER, 0); osSetTimerControl(OSi_TICK_TIMER, 0);
#ifdef OS_TICK_USE_2TIMERS #ifdef OS_TICK_USE_2TIMERS
@ -192,7 +192,7 @@ u64 osGetTick(void)
#ifdef SDK_ARM11 #ifdef SDK_ARM11
// ARM11はダウンカウンタ、ARM9はアップカウンタの違いはここで補正される // ARM11はダウンカウンタ、ARM9はアップカウンタの違いはここで補正される
countL = OS_TICK_LO_LIMIT - countL; countL = OS_TICK_LO_MASK - countL;
#endif // SDK_ARM11 #endif // SDK_ARM11
countH = i_osTickCounter; countH = i_osTickCounter;

View File

@ -65,7 +65,7 @@ extern void i_osSetTick( u64 );
#ifdef SDK_ARM11 #ifdef SDK_ARM11
#define OS_TICK_CLOCK HW_CPU_CLOCK #define OS_TICK_CLOCK HW_CPU_CLOCK
#define OS_TICK_PRESCALE 2 #define OS_TICK_PRESCALE 2
#define OS_TICK_HI_SHIFT 28 // 2の累乗単位でチック管理するのであれば32は指定できない初期値0では割り込みが発生しないため、最大31 #define OS_TICK_HI_SHIFT 28 // <EFBFBD>Åå32
#define OS_TICK_LO_MASK ((u32)(OS_TICK_HI_LSB-1)) #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_MSB ((u32)(OS_TICK_HI_LSB>>1))
#define OS_TICK_HI_LSB (1ULL<<OS_TICK_HI_SHIFT) #define OS_TICK_HI_LSB (1ULL<<OS_TICK_HI_SHIFT)
@ -74,11 +74,11 @@ extern void i_osSetTick( u64 );
#define OS_TICK_CLOCK HW_SYSTEM_CLOCK #define OS_TICK_CLOCK HW_SYSTEM_CLOCK
#define OS_TICK_PRESCALE 64 #define OS_TICK_PRESCALE 64
#ifndef OS_TICK_USE_2TIMERS #ifndef OS_TICK_USE_2TIMERS
#define OS_TICK_HI_SHIFT 16 // 初期値0でも割り込み発生 #define OS_TICK_HI_SHIFT 16 // <EFBFBD>Åå16
#define OS_TICK_LO_MASK ((u16)(OS_TICK_HI_LSB-1)) #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_MSB ((u16)(OS_TICK_HI_LSB>>1))
#else // OS_TICK_USE_2TIMERS #else // OS_TICK_USE_2TIMERS
#define OS_TICK_HI_SHIFT 32 // 初期値0でも割り込み発生 #define OS_TICK_HI_SHIFT 32 // <EFBFBD>Åå32
#define OS_TICK_LO_MASK ((u32)(OS_TICK_HI_LSB-1)) #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_MSB ((u32)(OS_TICK_HI_LSB>>1))
#endif // OS_TICK_USE_2TIMERS #endif // OS_TICK_USE_2TIMERS