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@109 b871894f-2f95-9b40-918c-086798483c85
This commit is contained in:
parent
21a85e50fc
commit
2b2517c718
@ -28,10 +28,11 @@ BROM_CODEGEN_ALL ?= TRUE
|
||||
SRCDIR = . ../common
|
||||
|
||||
SRCS = \
|
||||
os_tick.c \
|
||||
os_alarm.c \
|
||||
os_init.c \
|
||||
os_system.c \
|
||||
os_timer.c \
|
||||
os_tick.c \
|
||||
os_irqHandler.c \
|
||||
os_interrupt.c \
|
||||
os_interrupt_common.c \
|
||||
|
||||
@ -23,7 +23,7 @@ static void i_osTimerInterruptHandler(void);
|
||||
static void i_osWatchdogInterruptHandler( void );
|
||||
#endif
|
||||
static void i_osStartTimer( u32 count, u8 preScale, OSTimerRepeat repeat, OSTimerIntrReq ireq );
|
||||
static void i_osStartWatchDog( u32 count, u8 preScale, OSTimerRepeat repeat, OSTimerIntrReq ireq,
|
||||
static void i_osStartWatchdog( u32 count, u8 preScale, OSTimerRepeat repeat, OSTimerIntrReq ireq,
|
||||
OSWatchdogMode watchdogMode );
|
||||
|
||||
static u32 osTimerClock = OS_TIMER_CLOCK_DEFAULT;
|
||||
@ -50,7 +50,7 @@ void osInitTimer( void )
|
||||
osTimerClock = OS_TIMER_CLOCK_DEFAULT;
|
||||
|
||||
osStopTimer();
|
||||
osStopWatchDog();
|
||||
osStopWatchdog();
|
||||
}
|
||||
}
|
||||
|
||||
@ -137,6 +137,40 @@ void osStartTimer( u32 count, u8 preScale )
|
||||
i_osStartTimer( count, preScale, OS_TM_AUTO_RELOAD, OS_TM_INTR_REQ_ENABLE );
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osStartWatchdogWithUSec
|
||||
|
||||
Description: Start Watchdog
|
||||
|
||||
Arguments: micro second
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
void osStartWatchdogWithUSec( u32 usec, u8 preScale, OSWatchdogMode watchdogMode )
|
||||
{
|
||||
u32 count = ((usec) * (osTimerClock / 1000)) / (preScale+1) / 1000;
|
||||
|
||||
i_osStartWatchdog( count, preScale, OS_TM_SINGLE_SHOT, OS_TM_INTR_REQ_ENABLE, watchdogMode );
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osStartWatchdogWithMSec
|
||||
|
||||
Description: Start Watchdog
|
||||
|
||||
Arguments: milli second
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
void osStartWatchdogWithMSec( u32 msec, u8 preScale, OSWatchdogMode watchdogMode )
|
||||
{
|
||||
u32 count = (((msec) * osTimerClock / 1000)) / (preScale+1);
|
||||
|
||||
i_osStartWatchdog( count, preScale, OS_TM_SINGLE_SHOT, OS_TM_INTR_REQ_ENABLE, watchdogMode );
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osStartWatchdog
|
||||
|
||||
@ -148,9 +182,9 @@ void osStartTimer( u32 count, u8 preScale )
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
void osStartWatchDog( u32 count, u8 preScale, OSWatchdogMode watchdogMode )
|
||||
void osStartWatchdog( u32 count, u8 preScale, OSWatchdogMode watchdogMode )
|
||||
{
|
||||
i_osStartWatchDog( count, preScale, OS_TM_SINGLE_SHOT, OS_TM_INTR_REQ_DISABLE, watchdogMode );
|
||||
i_osStartWatchdog( count, preScale, OS_TM_SINGLE_SHOT, OS_TM_INTR_REQ_DISABLE, watchdogMode );
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
@ -186,7 +220,7 @@ static void i_osStartTimer( u32 count, u8 preScale, OSTimerRepeat repeat, OSTime
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
static void i_osStartWatchDog( u32 count, u8 preScale, OSTimerRepeat repeat, OSTimerIntrReq ireq,
|
||||
static void i_osStartWatchdog( u32 count, u8 preScale, OSTimerRepeat repeat, OSTimerIntrReq ireq,
|
||||
OSWatchdogMode watchdogMode )
|
||||
{
|
||||
reg_OS_WD_CNT = 0;
|
||||
@ -223,7 +257,7 @@ void osStopTimer( void )
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
void osStopWatchDog( void )
|
||||
void osStopWatchdog( void )
|
||||
{
|
||||
reg_OS_WD_CNT = 0;
|
||||
reg_OS_WD_IF = REG_OS_WD_IF_IF_MASK;
|
||||
|
||||
@ -31,6 +31,7 @@ BROM_PROC = ARM9
|
||||
SRCDIR = . ../common
|
||||
|
||||
SRCS = \
|
||||
os_alarm.c \
|
||||
os_init.c \
|
||||
os_system.c \
|
||||
os_timer.c \
|
||||
|
||||
@ -99,7 +99,7 @@ void i_osUnsetTimerReserved( int timer_id )
|
||||
|
||||
//================================================================================
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: i_osStartTimer
|
||||
Name: osStartTimer
|
||||
|
||||
Description: set timer(s) and start
|
||||
|
||||
@ -112,21 +112,21 @@ void i_osUnsetTimerReserved( int timer_id )
|
||||
//
|
||||
// use 1 timer, 16bit counter, timer<id> interrupt occurs by overflow
|
||||
//
|
||||
void i_osStartTimer( OSTimer id, u16 count, OSTimerPrescaler preScale )
|
||||
void osStartTimer( OSTimer id, u16 count, OSTimerPrescaler preScale )
|
||||
{
|
||||
SDK_ASSERT(OS_TIMER_0 <= id && id <= OS_TIMER_3);
|
||||
SDK_ASSERT(OS_TIMER_PRESCALER_1 <= preScale && preScale <= OS_TIMER_PRESCALER_1024);
|
||||
//---- check if system reserved
|
||||
SDK_ASSERT(!i_osIsTimerReserved(id));
|
||||
|
||||
i_osSetTimerCount(id, (u16)~count);
|
||||
i_osSetTimerControl(id, (u16)(REG_OS_TMCNT_H_E_MASK | REG_OS_TMCNT_H_I_MASK | preScale));
|
||||
osSetTimerCount(id, (u16)~count);
|
||||
osSetTimerControl(id, (u16)(REG_OS_TMCNT_H_E_MASK | REG_OS_TMCNT_H_I_MASK | preScale));
|
||||
}
|
||||
|
||||
//
|
||||
// use 2 timers, 32bit counter, timer<id+1> interrupt occurs by overflow
|
||||
//
|
||||
void i_osStartTimer32( OSTimer32 id, u32 count, OSTimerPrescaler preScale )
|
||||
void osStartTimer32( OSTimer32 id, u32 count, OSTimerPrescaler preScale )
|
||||
{
|
||||
SDK_ASSERT(OS_TIMER32_01 <= id && id <= OS_TIMER32_23);
|
||||
SDK_ASSERT(OS_TIMER_PRESCALER_1 <= preScale && preScale <= OS_TIMER_PRESCALER_1024);
|
||||
@ -134,18 +134,18 @@ void i_osStartTimer32( OSTimer32 id, u32 count, OSTimerPrescaler preScale )
|
||||
SDK_ASSERT(!i_osIsTimerReserved(id));
|
||||
SDK_ASSERT(!i_osIsTimerReserved(id + 1));
|
||||
|
||||
i_osSetTimerCount((OSTimer)((int)id + 1), (u16)((~count >> 16) & 0xffff));
|
||||
i_osSetTimerCount((OSTimer)id, (u16)(~count & 0xffff));
|
||||
osSetTimerCount((OSTimer)((int)id + 1), (u16)((~count >> 16) & 0xffff));
|
||||
osSetTimerCount((OSTimer)id, (u16)(~count & 0xffff));
|
||||
|
||||
i_osSetTimerControl((OSTimer)((int)id + 1),
|
||||
osSetTimerControl((OSTimer)((int)id + 1),
|
||||
REG_OS_TMCNT_H_E_MASK | REG_OS_TMCNT_H_I_MASK | REG_OS_TMCNT_H_CH_MASK);
|
||||
i_osSetTimerControl((OSTimer)id, (u16)(REG_OS_TMCNT_H_E_MASK | preScale));
|
||||
osSetTimerControl((OSTimer)id, (u16)(REG_OS_TMCNT_H_E_MASK | preScale));
|
||||
}
|
||||
|
||||
//
|
||||
// use 3 timers, 48bit counter, timer<id+2> interrupt occurs by overflow
|
||||
//
|
||||
void i_osStartTimer48( OSTimer48 id, u64 count, OSTimerPrescaler preScale )
|
||||
void osStartTimer48( OSTimer48 id, u64 count, OSTimerPrescaler preScale )
|
||||
{
|
||||
SDK_ASSERT(OS_TIMER48_012 <= id && id <= OS_TIMER48_123);
|
||||
SDK_ASSERT(OS_TIMER_PRESCALER_1 <= preScale && preScale <= OS_TIMER_PRESCALER_1024);
|
||||
@ -154,20 +154,20 @@ void i_osStartTimer48( OSTimer48 id, u64 count, OSTimerPrescaler preScale )
|
||||
SDK_ASSERT(!i_osIsTimerReserved(id + 1));
|
||||
SDK_ASSERT(!i_osIsTimerReserved(id + 2));
|
||||
|
||||
i_osSetTimerCount((OSTimer)((int)id + 2), (u16)((~count >> 32) & 0xffff));
|
||||
i_osSetTimerCount((OSTimer)((int)id + 1), (u16)((~count >> 16) & 0xffff));
|
||||
i_osSetTimerCount((OSTimer)id, (u16)(~count & 0xffff));
|
||||
osSetTimerCount((OSTimer)((int)id + 2), (u16)((~count >> 32) & 0xffff));
|
||||
osSetTimerCount((OSTimer)((int)id + 1), (u16)((~count >> 16) & 0xffff));
|
||||
osSetTimerCount((OSTimer)id, (u16)(~count & 0xffff));
|
||||
|
||||
i_osSetTimerControl((OSTimer)((int)id + 2),
|
||||
osSetTimerControl((OSTimer)((int)id + 2),
|
||||
REG_OS_TMCNT_H_E_MASK | REG_OS_TMCNT_H_I_MASK | REG_OS_TMCNT_H_CH_MASK);
|
||||
i_osSetTimerControl((OSTimer)((int)id + 1), REG_OS_TMCNT_H_E_MASK | REG_OS_TMCNT_H_CH_MASK);
|
||||
i_osSetTimerControl((OSTimer)id, (u16)(REG_OS_TMCNT_H_E_MASK | preScale));
|
||||
osSetTimerControl((OSTimer)((int)id + 1), REG_OS_TMCNT_H_E_MASK | REG_OS_TMCNT_H_CH_MASK);
|
||||
osSetTimerControl((OSTimer)id, (u16)(REG_OS_TMCNT_H_E_MASK | preScale));
|
||||
}
|
||||
|
||||
//
|
||||
// use all 4 timers, 64bit counter, timer3 interrupt occurs by overflow
|
||||
//
|
||||
void i_osStartTimer64( u64 count, OSTimerPrescaler preScale )
|
||||
void osStartTimer64( u64 count, OSTimerPrescaler preScale )
|
||||
{
|
||||
SDK_ASSERT(OS_TIMER_PRESCALER_1 <= preScale && preScale <= OS_TIMER_PRESCALER_1024);
|
||||
//---- check if system reserved
|
||||
@ -176,16 +176,16 @@ void i_osStartTimer64( u64 count, OSTimerPrescaler preScale )
|
||||
SDK_ASSERT(!i_osIsTimerReserved(OS_TIMER_2));
|
||||
SDK_ASSERT(!i_osIsTimerReserved(OS_TIMER_3));
|
||||
|
||||
i_osSetTimerCount(OS_TIMER_3, (u16)((~count >> 48) & 0xffff));
|
||||
i_osSetTimerCount(OS_TIMER_2, (u16)((~count >> 32) & 0xffff));
|
||||
i_osSetTimerCount(OS_TIMER_1, (u16)((~count >> 16) & 0xffff));
|
||||
i_osSetTimerCount(OS_TIMER_0, (u16)(~count & 0xffff));
|
||||
osSetTimerCount(OS_TIMER_3, (u16)((~count >> 48) & 0xffff));
|
||||
osSetTimerCount(OS_TIMER_2, (u16)((~count >> 32) & 0xffff));
|
||||
osSetTimerCount(OS_TIMER_1, (u16)((~count >> 16) & 0xffff));
|
||||
osSetTimerCount(OS_TIMER_0, (u16)(~count & 0xffff));
|
||||
|
||||
i_osSetTimerControl(OS_TIMER_3,
|
||||
osSetTimerControl(OS_TIMER_3,
|
||||
REG_OS_TMCNT_H_E_MASK | REG_OS_TMCNT_H_I_MASK | REG_OS_TMCNT_H_CH_MASK);
|
||||
i_osSetTimerControl(OS_TIMER_2, REG_OS_TMCNT_H_E_MASK | REG_OS_TMCNT_H_CH_MASK);
|
||||
i_osSetTimerControl(OS_TIMER_1, REG_OS_TMCNT_H_E_MASK | REG_OS_TMCNT_H_CH_MASK);
|
||||
i_osSetTimerControl(OS_TIMER_0, (u16)(REG_OS_TMCNT_H_E_MASK | preScale));
|
||||
osSetTimerControl(OS_TIMER_2, REG_OS_TMCNT_H_E_MASK | REG_OS_TMCNT_H_CH_MASK);
|
||||
osSetTimerControl(OS_TIMER_1, REG_OS_TMCNT_H_E_MASK | REG_OS_TMCNT_H_CH_MASK);
|
||||
osSetTimerControl(OS_TIMER_0, (u16)(REG_OS_TMCNT_H_E_MASK | preScale));
|
||||
}
|
||||
|
||||
|
||||
@ -207,7 +207,7 @@ void i_osStopTimer( OSTimer id )
|
||||
//---- check if system reserved
|
||||
SDK_ASSERT(!i_osIsTimerReserved(id));
|
||||
|
||||
i_osSetTimerControl(id, 0);
|
||||
osSetTimerControl(id, 0);
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
695
trunk/bootrom/build/libraries/os/common/os_alarm.c
Normal file
695
trunk/bootrom/build/libraries/os/common/os_alarm.c
Normal file
@ -0,0 +1,695 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: CtrBrom - libraries - OS
|
||||
File: os_alarm.c
|
||||
|
||||
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$
|
||||
*---------------------------------------------------------------------------*/
|
||||
#include <brom/os.h>
|
||||
|
||||
#define osPanic(...) ((void)0)
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
#ifdef SDK_ARM11
|
||||
//---- timer interrupt ID
|
||||
#define OSi_ALARM_IE_TIMER_ID OS_INTR_ID_WATCHDOG
|
||||
|
||||
#else // SDK_ARM9
|
||||
//---- timer interrupt ID
|
||||
#define OSi_ALARM_IE_TIMER_ID OS_INTR_ID_TIMER1
|
||||
|
||||
//---- timer interrupt mask (must be same number with OSi_ALARM_TIMER)
|
||||
#define OSi_ALARM_IE_TIMER OS_IE_TIMER1
|
||||
|
||||
//---- timer number alarm uses
|
||||
#define OSi_ALARM_TIMER OS_TIMER_1
|
||||
|
||||
//---- timer control setting for alarm
|
||||
#define OSi_ALARM_TIMERCONTROL ( REG_OS_TM0CNT_H_E_MASK | REG_OS_TM0CNT_H_I_MASK | OS_TIMER_PRESCALER_64 )
|
||||
|
||||
#endif // SDK_ARM9
|
||||
|
||||
//---- flag for initialization alarm
|
||||
static u16 i_osUseAlarm = FALSE;
|
||||
|
||||
//---- alarm queue
|
||||
static struct OSiAlarmQueue i_osAlarmQueue;
|
||||
|
||||
|
||||
u16 i_osIsTimerReserved(int timerNum);
|
||||
void i_osSetTimerReserved(int timerNum);
|
||||
void i_osUnsetTimerReserved(int timerNum);
|
||||
|
||||
static void i_osSetTimer(OSAlarm *alarm);
|
||||
static void i_osInsertAlarm(OSAlarm *alarm, OSTick fire);
|
||||
|
||||
static void i_osAlarmHandler(void *arg);
|
||||
void i_osArrangeTimer(void);
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: i_osSetTimer
|
||||
|
||||
Description: set Timer
|
||||
|
||||
Arguments: alarm pointer to alarm to set timer
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
static void i_osSetTimer(OSAlarm *alarm)
|
||||
{
|
||||
OSTick tick = osGetTick();
|
||||
|
||||
//---- let timer be disable
|
||||
#ifdef SDK_ARM11
|
||||
osStopWatchdog();
|
||||
#else // SDK_ARM9
|
||||
s64 delta;
|
||||
u16 timerCount;
|
||||
|
||||
delta = (s64)(alarm->fire - tick);
|
||||
|
||||
osSetTimerControl(OSi_ALARM_TIMER, 0);
|
||||
#endif // SDK_ARM9
|
||||
|
||||
//---- set interrupt callback
|
||||
osSetInterruptHandler( OSi_ALARM_IE_TIMER_ID, i_osArrangeTimer );
|
||||
// osEnterTimerCallback(OSi_ALARM_TIMER, i_osAlarmHandler, NULL);
|
||||
|
||||
//---- set count and let timer be enable
|
||||
#ifdef SDK_ARM11
|
||||
osStartWatchdogWithMSec(1, 0, OS_WD_TIMER_MODE);
|
||||
#else // SDK_ARM9
|
||||
if (delta < 0)
|
||||
{
|
||||
timerCount = (u16)~1;
|
||||
}
|
||||
else if (delta < 0x10000)
|
||||
{
|
||||
timerCount = (u16)(~delta);
|
||||
}
|
||||
else
|
||||
{
|
||||
timerCount = 0;
|
||||
}
|
||||
|
||||
//osPrintf( "**i_osSetTimer alarm=%x, fire=%llx time=%llx delta=%lld timeCount=%x \n", alarm, alarm->fire, time, delta, (int)timerCount );
|
||||
|
||||
osSetTimerCount((OSTimer)OSi_ALARM_TIMER, timerCount);
|
||||
osSetTimerControl(OSi_ALARM_TIMER, (u16)OSi_ALARM_TIMERCONTROL);
|
||||
#endif // SDK_ARM9
|
||||
|
||||
//---- TIMER IRQ Enable
|
||||
(void)osEnableInterruptID(OSi_ALARM_IE_TIMER_ID);
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osInitAlarm
|
||||
|
||||
Description: Initialize alarm system
|
||||
|
||||
Arguments: None.
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
void osInitAlarm(void)
|
||||
{
|
||||
if (!i_osUseAlarm)
|
||||
{
|
||||
i_osUseAlarm = TRUE;
|
||||
|
||||
//---- check if tick system is available
|
||||
SDK_ASSERTMSG(osIsTickAvailable(), "osInitAlarm: alarm system needs of tick system.");
|
||||
|
||||
#ifdef SDK_ARM9
|
||||
//---- OS reserves OSi_ALARM_TIMER
|
||||
SDK_ASSERT(!i_osIsTimerReserved(OSi_ALARM_TIMER));
|
||||
i_osSetTimerReserved(OSi_ALARM_TIMER);
|
||||
#endif // SDK_ARM9
|
||||
|
||||
//---- clear alarm list
|
||||
i_osAlarmQueue.head = NULL;
|
||||
i_osAlarmQueue.tail = NULL;
|
||||
|
||||
//---- TIMER IRQ Disable
|
||||
(void)osDisableInterruptID(OSi_ALARM_IE_TIMER_ID);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osEndAlarm
|
||||
|
||||
Description: end alarm system
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
void osEndAlarm(void)
|
||||
{
|
||||
OSIntrMode enabled;
|
||||
|
||||
SDK_ASSERT(i_osUseAlarm);
|
||||
enabled = osDisableInterrupts();
|
||||
|
||||
//---- check if any alarm exists
|
||||
if (i_osUseAlarm)
|
||||
{
|
||||
SDK_ASSERTMSG(!i_osAlarmQueue.head,
|
||||
"osEndAlarm: Cannot end alarm system while using alarm.");
|
||||
|
||||
#ifdef SDK_ARM9
|
||||
//---- unset timer reservation by OS
|
||||
SDK_ASSERT(i_osIsTimerReserved(OSi_ALARM_TIMER));
|
||||
i_osUnsetTimerReserved(OSi_ALARM_TIMER);
|
||||
#endif // SDK_ARM9
|
||||
|
||||
i_osUseAlarm = FALSE;
|
||||
}
|
||||
|
||||
(void)osRestoreInterrupts(enabled);
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osIsAlarmAvailable
|
||||
|
||||
Description: check alarm system is available
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: if available, TRUE.
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL osIsAlarmAvailable(void)
|
||||
{
|
||||
return i_osUseAlarm;
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osCreateAlarm
|
||||
|
||||
Description: Create alarm
|
||||
|
||||
Arguments: alarm pointer to alarm to be initialized
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
void osCreateAlarm(OSAlarm *alarm)
|
||||
{
|
||||
SDK_ASSERT(i_osUseAlarm);
|
||||
SDK_ASSERT(alarm);
|
||||
|
||||
alarm->handler = 0;
|
||||
alarm->tag = 0;
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: i_osInsertAlarm
|
||||
|
||||
Description: Insert alarm. Needs to be called interrupts disabled.
|
||||
|
||||
Arguments: alarm pointer to alarm to be set
|
||||
fire tick to fire (only for one shot alarm)
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
static void i_osInsertAlarm(OSAlarm *alarm, OSTick fire)
|
||||
{
|
||||
OSAlarm *prev;
|
||||
OSAlarm *next;
|
||||
|
||||
//---- caluculate next fire for periodic alarm
|
||||
if (alarm->period > 0)
|
||||
{
|
||||
OSTick tick = osGetTick();
|
||||
|
||||
fire = alarm->start;
|
||||
if (alarm->start < tick)
|
||||
{
|
||||
fire += alarm->period * ((tick - alarm->start) / alarm->period + 1);
|
||||
}
|
||||
}
|
||||
|
||||
//---- set tick to fire
|
||||
alarm->fire = fire;
|
||||
|
||||
//---- insert to list
|
||||
for (next = i_osAlarmQueue.head; next; next = next->next)
|
||||
{
|
||||
// if ( next->fire <= fire )
|
||||
if ((s64)(fire - next->fire) >= 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//---- insert alarm before 'next'
|
||||
alarm->prev = next->prev;
|
||||
next->prev = alarm;
|
||||
alarm->next = next;
|
||||
prev = alarm->prev;
|
||||
if (prev)
|
||||
{
|
||||
prev->next = alarm;
|
||||
}
|
||||
else
|
||||
{
|
||||
i_osAlarmQueue.head = alarm;
|
||||
i_osSetTimer(alarm);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
//---- insert alarm after tail
|
||||
alarm->next = 0;
|
||||
prev = i_osAlarmQueue.tail;
|
||||
i_osAlarmQueue.tail = alarm;
|
||||
alarm->prev = prev;
|
||||
if (prev)
|
||||
{
|
||||
prev->next = alarm;
|
||||
}
|
||||
else
|
||||
{
|
||||
i_osAlarmQueue.head = i_osAlarmQueue.tail = alarm;
|
||||
i_osSetTimer(alarm);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osSetAlarm
|
||||
|
||||
Description: Set alarm as a relative tick
|
||||
|
||||
Arguments: alarm pointer to alarm to be set
|
||||
tick ticks to count before firing
|
||||
handler alarm handler to be called
|
||||
arg argument of handler
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
void osSetAlarm(OSAlarm *alarm, OSTick tick, OSAlarmHandler handler, void *arg)
|
||||
{
|
||||
OSIntrMode enabled;
|
||||
|
||||
//osPrintf( "**osSetAlarm e=%x alarm=%x tick=%x handler%x\n", enabled, alarm, tick, handler );
|
||||
SDK_ASSERT(i_osUseAlarm);
|
||||
SDK_ASSERTMSG(handler, "osSetAlarm: handler must not be NULL.");
|
||||
if (!alarm || alarm->handler)
|
||||
{
|
||||
#ifndef SDK_FINALROM
|
||||
osPanic("alarm could be already used.");
|
||||
#else
|
||||
osPanic("");
|
||||
#endif
|
||||
}
|
||||
|
||||
enabled = osDisableInterrupts();
|
||||
|
||||
//---- clear periodic info
|
||||
alarm->period = 0;
|
||||
|
||||
//---- set handler
|
||||
alarm->handler = handler;
|
||||
alarm->arg = arg;
|
||||
|
||||
//---- insert alarm
|
||||
i_osInsertAlarm(alarm, osGetTick() + tick);
|
||||
|
||||
(void)osRestoreInterrupts(enabled);
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osSetPeriodicAlarm
|
||||
|
||||
Description: set periodic alarm
|
||||
|
||||
Arguments: alarm pointer to alarm to be set
|
||||
start origin of the period in absolute tick
|
||||
period ticks to count for each period
|
||||
handler alarm handler to be called
|
||||
arg argument of handler
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
void osSetPeriodicAlarm(OSAlarm *alarm, OSTick start, OSTick period, OSAlarmHandler handler,
|
||||
void *arg)
|
||||
{
|
||||
u32 enabled;
|
||||
|
||||
//osPrintf( "**SetPeriodicAlarm s=%llx p=%llx\n", start, period );
|
||||
SDK_ASSERT(i_osUseAlarm);
|
||||
SDK_ASSERTMSG(handler, "osSetPeriodicAlarm: handler must not be NULL\n");
|
||||
SDK_ASSERTMSG(period > 0, "osSetPeriodicAlarm: bad period specified.");
|
||||
if (!alarm || alarm->handler)
|
||||
{
|
||||
#ifndef SDK_FINALROM
|
||||
osPanic("alarm could be already used.");
|
||||
#else
|
||||
osPanic("");
|
||||
#endif
|
||||
}
|
||||
|
||||
enabled = osDisableInterrupts();
|
||||
|
||||
//---- set periodic info
|
||||
alarm->period = period;
|
||||
alarm->start = start;
|
||||
|
||||
//---- set handler
|
||||
alarm->handler = handler;
|
||||
alarm->arg = arg;
|
||||
|
||||
//---- insert periodic alarm
|
||||
i_osInsertAlarm(alarm, 0);
|
||||
|
||||
(void)osRestoreInterrupts(enabled);
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osCancelAlarm
|
||||
|
||||
Description: Cancel alarm
|
||||
|
||||
Arguments: alarm pointer to alarm to be canceled
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
void osCancelAlarm(OSAlarm *alarm)
|
||||
{
|
||||
OSAlarm *next;
|
||||
u32 enabled;
|
||||
|
||||
SDK_ASSERT(i_osUseAlarm);
|
||||
SDK_ASSERT(alarm);
|
||||
|
||||
enabled = osDisableInterrupts();
|
||||
|
||||
if (alarm->handler == NULL)
|
||||
{
|
||||
(void)osRestoreInterrupts(enabled);
|
||||
return;
|
||||
}
|
||||
|
||||
//---- remove alarm
|
||||
next = alarm->next;
|
||||
if (next == NULL)
|
||||
{
|
||||
i_osAlarmQueue.tail = alarm->prev;
|
||||
}
|
||||
else
|
||||
{
|
||||
next->prev = alarm->prev;
|
||||
}
|
||||
|
||||
if (alarm->prev)
|
||||
{
|
||||
alarm->prev->next = next;
|
||||
}
|
||||
else
|
||||
{
|
||||
i_osAlarmQueue.head = next;
|
||||
if (next)
|
||||
{
|
||||
i_osSetTimer(next);
|
||||
}
|
||||
}
|
||||
|
||||
alarm->handler = NULL;
|
||||
alarm->period = 0; // not periodic alarm
|
||||
|
||||
(void)osRestoreInterrupts(enabled);
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: i_osAlarmHandler
|
||||
|
||||
Description: handler timer interrupt
|
||||
|
||||
Arguments: arg dummy
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
#include <brom/code32.h>
|
||||
asm void i_osAlarmHandler( void* arg )
|
||||
{
|
||||
INASM_EXTERN( i_osArrangeTimer )
|
||||
|
||||
stmfd sp!, {r0, lr} /* コールスタックを 8 バイト整合 */
|
||||
bl i_osArrangeTimer
|
||||
ldmfd sp!, {r0, lr} /* コールスタックを 8 バイト整合 */
|
||||
bx lr
|
||||
}
|
||||
#include <brom/codereset.h>
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: i_osArrangeTimer
|
||||
|
||||
Description: handler timer interrupt. called from i_osAlarmHandler
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
void i_osArrangeTimer(void)
|
||||
{
|
||||
OSTick tick;
|
||||
OSAlarm *alarm;
|
||||
OSAlarm *next;
|
||||
OSAlarmHandler handler;
|
||||
|
||||
//---- To be timer-irq Disable
|
||||
(void)osDisableInterruptID(OSi_ALARM_IE_TIMER_ID);
|
||||
|
||||
//---- let timer be disable
|
||||
#ifdef SDK_ARM11
|
||||
osStopWatchdog();
|
||||
|
||||
#else // SDK_ARM9
|
||||
osSetTimerControl(OSi_ALARM_TIMER, 0);
|
||||
|
||||
//---- set check flag timer interrupt
|
||||
// osSetIrqCheckFlag(OSi_ALARM_IE_TIMER);
|
||||
|
||||
#endif // SDK_ARM9
|
||||
|
||||
tick = osGetTick();
|
||||
alarm = i_osAlarmQueue.head;
|
||||
|
||||
//osPrintf( "**Arrange alarm=%x time=%llx file=%llx\n", alarm, time, alarm->fire );
|
||||
|
||||
//---- no alarm
|
||||
if (alarm == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//---- not reach to time of top alarm
|
||||
if (tick < alarm->fire)
|
||||
{
|
||||
i_osSetTimer(alarm);
|
||||
return;
|
||||
}
|
||||
|
||||
//---- move next alarm to top
|
||||
next = alarm->next;
|
||||
i_osAlarmQueue.head = next;
|
||||
|
||||
if (next == NULL)
|
||||
{
|
||||
i_osAlarmQueue.tail = NULL;
|
||||
}
|
||||
else
|
||||
{
|
||||
next->prev = NULL;
|
||||
}
|
||||
|
||||
//---- call user alarm handler
|
||||
handler = alarm->handler;
|
||||
|
||||
if (alarm->period == 0)
|
||||
{
|
||||
alarm->handler = NULL;
|
||||
}
|
||||
|
||||
if (handler)
|
||||
{
|
||||
(handler) (alarm->arg);
|
||||
}
|
||||
|
||||
//---- if alarm is periodic, re-inter to list
|
||||
if (alarm->period > 0)
|
||||
{
|
||||
alarm->handler = handler;
|
||||
i_osInsertAlarm(alarm, 0);
|
||||
}
|
||||
|
||||
//---- set timer
|
||||
if (i_osAlarmQueue.head)
|
||||
{
|
||||
i_osSetTimer(i_osAlarmQueue.head);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osSetAlarmTag
|
||||
|
||||
Description: set tag which is used osCancelAlarms
|
||||
|
||||
Arguments: alarm alarm to be set tag
|
||||
tag tagNo
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
void osSetAlarmTag(OSAlarm *alarm, u32 tag)
|
||||
{
|
||||
SDK_ASSERT(i_osUseAlarm);
|
||||
SDK_ASSERT(alarm);
|
||||
SDK_ASSERTMSG(tag > 0, "osSetAlarmTag: Tag must be >0.");
|
||||
|
||||
alarm->tag = tag;
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osCancelAlarms
|
||||
|
||||
Description: cancel alarms which have specified tag
|
||||
|
||||
Arguments: tag tagNo. to be cancelled. not 0
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
void osCancelAlarms(u32 tag)
|
||||
{
|
||||
u32 enabled;
|
||||
OSAlarm *alarm;
|
||||
OSAlarm *next;
|
||||
|
||||
SDK_ASSERT(i_osUseAlarm);
|
||||
SDK_ASSERTMSG(tag > 0, "OSCancelAlarms: Tag must be >0.");
|
||||
|
||||
if (tag == 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
enabled = osDisableInterrupts();
|
||||
|
||||
for (alarm = i_osAlarmQueue.head, next = alarm ? alarm->next : NULL;
|
||||
alarm; alarm = next, next = alarm ? alarm->next : NULL)
|
||||
{
|
||||
if (alarm->tag == tag)
|
||||
{
|
||||
//---- cancel alarm
|
||||
osCancelAlarm(alarm);
|
||||
}
|
||||
}
|
||||
|
||||
(void)osRestoreInterrupts(enabled);
|
||||
}
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osCancelAllAlarms
|
||||
|
||||
Description: cancel all alarms
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
void osCancelAllAlarms(void)
|
||||
{
|
||||
u32 enabled;
|
||||
OSAlarm *alarm;
|
||||
OSAlarm *next;
|
||||
|
||||
SDK_ASSERT(i_osUseAlarm);
|
||||
enabled = osDisableInterrupts();
|
||||
|
||||
for (alarm = i_osAlarmQueue.head, next = alarm ? alarm->next : NULL;
|
||||
alarm; alarm = next, next = alarm ? alarm->next : NULL)
|
||||
{
|
||||
//---- cancel alarm
|
||||
osCancelAlarm(alarm);
|
||||
}
|
||||
|
||||
(void)osRestoreInterrupts(enabled);
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: i_osGetAlarmQueue
|
||||
|
||||
Description: get alarm queue
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: alarm queue.
|
||||
*---------------------------------------------------------------------------*/
|
||||
struct OSiAlarmQueue *i_osGetAlarmQueue(void)
|
||||
{
|
||||
return &i_osAlarmQueue;
|
||||
}
|
||||
|
||||
//================================================================================
|
||||
// FOR DEBUG
|
||||
//================================================================================
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osGetNumberOfAlarm
|
||||
|
||||
Description: get number of alarm
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: number of alarm
|
||||
*---------------------------------------------------------------------------*/
|
||||
int osGetNumberOfAlarm(void)
|
||||
{
|
||||
OSIntrMode enabled = osDisableInterrupts();
|
||||
OSAlarm* p = i_osAlarmQueue.head;
|
||||
int num = 0;
|
||||
|
||||
while(p)
|
||||
{
|
||||
num ++;
|
||||
p = p->next;
|
||||
}
|
||||
|
||||
(void)osRestoreInterrupts(enabled);
|
||||
return num;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osGetAlarmResource
|
||||
|
||||
Description: store resources of alarm to specified pointer
|
||||
|
||||
Arguments: resource pointer to store alarm resources
|
||||
|
||||
Returns: TRUE ... success (always return this now)
|
||||
FALSE ... fail
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL osGetAlarmResource(OSAlarmResource *resource)
|
||||
{
|
||||
resource->num = osGetNumberOfAlarm();
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -40,7 +40,7 @@ void osInitBROM(void)
|
||||
#ifdef SDK_ARM9
|
||||
|
||||
#ifdef BROM_DEBUG_ITCM
|
||||
MI_CpuFillFast( (void*)HW_ITCM, 0, HW_ITCM_SIZE );
|
||||
MI_CpuFillFast( (void*)HW_ITCM, 0, HW_ITCM_SIZE );
|
||||
#endif // BROM_DEBUG_ITCM
|
||||
|
||||
#endif // SDK_ARM9
|
||||
@ -50,6 +50,9 @@ void osInitBROM(void)
|
||||
|
||||
//---- Init Tick
|
||||
osInitTick();
|
||||
|
||||
//---- Init Alarm
|
||||
// osInitAlarm();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -82,9 +82,9 @@ void osInitTick(void)
|
||||
i_osSetTimerReserved(OSi_TICK_TIMER);
|
||||
|
||||
//---- setting timer
|
||||
i_osSetTimerControl(OSi_TICK_TIMER, 0);
|
||||
i_osSetTimerCount((OSTimer)OSi_TICK_TIMER, (u16)0);
|
||||
i_osSetTimerControl(OSi_TICK_TIMER, (u16)OSi_TICK_TIMERCONTROL);
|
||||
osSetTimerControl(OSi_TICK_TIMER, 0);
|
||||
osSetTimerCount((OSTimer)OSi_TICK_TIMER, (u16)0);
|
||||
osSetTimerControl(OSi_TICK_TIMER, (u16)OSi_TICK_TIMERCONTROL);
|
||||
#endif // SDK_ARM9
|
||||
|
||||
//---- set interrupt callback
|
||||
@ -133,9 +133,9 @@ static void i_osCountUpTick(void)
|
||||
osStopTimer();
|
||||
osStartTimerWithMSec(1, 0);
|
||||
#else // SDK_ARM9
|
||||
i_osSetTimerControl(OSi_TICK_TIMER, 0);
|
||||
i_osSetTimerCount((OSTimer)OSi_TICK_TIMER, (u16)0);
|
||||
i_osSetTimerControl(OSi_TICK_TIMER, (u16)OSi_TICK_TIMERCONTROL);
|
||||
osSetTimerControl(OSi_TICK_TIMER, 0);
|
||||
osSetTimerCount((OSTimer)OSi_TICK_TIMER, (u16)0);
|
||||
osSetTimerControl(OSi_TICK_TIMER, (u16)OSi_TICK_TIMERCONTROL);
|
||||
#endif // SDK_ARM9
|
||||
|
||||
i_osNeedResetTimer = FALSE;
|
||||
@ -228,9 +228,9 @@ void osSetTick(u64 count)
|
||||
|
||||
i_osTickCounter = (u64)(count >> 16);
|
||||
|
||||
i_osSetTimerControl(OSi_TICK_TIMER, 0);
|
||||
i_osSetTimerCount((OSTimer)OSi_TICK_TIMER, (u16)(count & 0xffff));
|
||||
i_osSetTimerControl(OSi_TICK_TIMER, (u16)OSi_TICK_TIMERCONTROL);
|
||||
osSetTimerControl(OSi_TICK_TIMER, 0);
|
||||
osSetTimerCount((OSTimer)OSi_TICK_TIMER, (u16)(count & 0xffff));
|
||||
osSetTimerControl(OSi_TICK_TIMER, (u16)OSi_TICK_TIMERCONTROL);
|
||||
#endif // SDK_ARM9
|
||||
|
||||
(void)osRestoreInterrupts(prev);
|
||||
|
||||
@ -108,10 +108,57 @@ void osStartTimer( u32 count, u8 preScale );
|
||||
|
||||
void osStopTimer( void );
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osStartWatchdogWithUSec
|
||||
|
||||
Description: Start Watchdog
|
||||
|
||||
Arguments: micro second
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
void osStartWatchdogWithUSec( u32 usec, u8 preScale, OSWatchdogMode watchdogMode );
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osStartWatchdogWithMSec
|
||||
|
||||
Description: Start Watchdog
|
||||
|
||||
Arguments: milli second
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
void osStartWatchdogWithMSec( u32 msec, u8 preScale, OSWatchdogMode watchdogMode );
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osStartWatchdog
|
||||
|
||||
Description: Start Watchdog
|
||||
|
||||
Arguments: interval
|
||||
watchdogMode
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
void osStartWatchDog( u32 count, u8 preScale, OSWatchdogMode watchdogMode );
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: osStopWatchdog
|
||||
|
||||
Description: Stop Watchdog
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
void osStopWatchdog( void );
|
||||
|
||||
BOOL osEnableTimerAndWatchdog( void );
|
||||
BOOL osDisableTimerAndWatchdog( void );
|
||||
void osStartWatchDog( u32 count, u8 preScale, OSWatchdogMode watchdogMode );
|
||||
void osStopWatchDog( void );
|
||||
void osResetWatchdog( void );
|
||||
void osDisableWatchdog( void );
|
||||
|
||||
|
||||
@ -84,7 +84,7 @@ OSTimer48;
|
||||
void osInitTimer( void );
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: i_osSetTimerCount
|
||||
Name: osSetTimerCount
|
||||
|
||||
Description: set timer count
|
||||
|
||||
@ -93,14 +93,14 @@ void osInitTimer( void );
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
static inline void i_osSetTimerCount( OSTimer id, u16 count )
|
||||
static inline void osSetTimerCount( OSTimer id, u16 count )
|
||||
{
|
||||
SDK_ASSERT(OS_TIMER_0 <= id && id <= OS_TIMER_3);
|
||||
*((REGType16 *)((u32)REG_TM0CNT_L_ADDR + id * 4)) = count;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: i_osSetTimerControl
|
||||
Name: osSetTimerControl
|
||||
|
||||
Description: set timer control
|
||||
|
||||
@ -109,14 +109,14 @@ static inline void i_osSetTimerCount( OSTimer id, u16 count )
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
static inline void i_osSetTimerControl( OSTimer id, u16 control )
|
||||
static inline void osSetTimerControl( OSTimer id, u16 control )
|
||||
{
|
||||
SDK_ASSERT(OS_TIMER_0 <= id && id <= OS_TIMER_3);
|
||||
*((REGType16 *)((u32)REG_TM0CNT_H_ADDR + id * 4)) = control;
|
||||
}
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: i_osStartTimer
|
||||
Name: osStartTimer
|
||||
|
||||
Description: set timer(s) and start
|
||||
|
||||
@ -129,19 +129,19 @@ static inline void i_osSetTimerControl( OSTimer id, u16 control )
|
||||
//
|
||||
// use 1 timer, 16bit counter, timer<id> interrupt occurs by overflow
|
||||
//
|
||||
void i_osStartTimer( OSTimer id, u16 count, OSTimerPrescaler preScale );
|
||||
void osStartTimer( OSTimer id, u16 count, OSTimerPrescaler preScale );
|
||||
//
|
||||
// use 2 timers, 32bit counter, timer<id+1> interrupt occurs by overflow
|
||||
//
|
||||
void i_osStartTimer32( OSTimer32 id, u32 count, OSTimerPrescaler preScale );
|
||||
void osStartTimer32( OSTimer32 id, u32 count, OSTimerPrescaler preScale );
|
||||
//
|
||||
// use 3 timers, 48bit counter, timer<id+2> interrupt occurs by overflow
|
||||
//
|
||||
void i_osStartTimer48( OSTimer48 id, u64 count, OSTimerPrescaler preScale );
|
||||
void osStartTimer48( OSTimer48 id, u64 count, OSTimerPrescaler preScale );
|
||||
//
|
||||
// use all 4 timers, 64bit counter, timer3 interrupt occurs by overflow
|
||||
//
|
||||
void i_osStartTimer64( u64 count, OSTimerPrescaler preScale );
|
||||
void osStartTimer64( u64 count, OSTimerPrescaler preScale );
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
|
||||
@ -220,7 +220,7 @@ struct OSiAlarmQueue
|
||||
OSAlarm *head;
|
||||
OSAlarm *tail;
|
||||
};
|
||||
struct OSiAlarmQueue *OSi_GetAlarmQueue(void);
|
||||
struct OSiAlarmQueue *i_osGetAlarmQueue(void);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@ -24,7 +24,11 @@ extern "C" {
|
||||
#include <brom/misc.h>
|
||||
#include <brom/types.h>
|
||||
#include <ctr/ioreg.h>
|
||||
//#include <brom/os/ARM9/timer.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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user