예제 #1
0
void chrono(u32 seconds)
{
    startChrono(0);

    u64 startingTicks = 0;
    for(u32 i = 0; i < 4; i++) startingTicks |= REG_TIMER_VAL(i) << (16 * i);

    u64 res;
    do
    {
        res = 0;
        for(u32 i = 0; i < 4; i++) res |= REG_TIMER_VAL(i) << (16 * i);
    }
    while(res - startingTicks < seconds * TICKS_PER_SEC);

    stopChrono();
}
예제 #2
0
파일: utils.c 프로젝트: FrankenMan/Luma3DS
static u64 chrono(void)
{
    u64 res = 0;
    for(u32 i = 0; i < 4; i++) res |= REG_TIMER_VAL(i) << (16 * i);

    res /= (TICKS_PER_SEC / 1000);

    return res;
}
예제 #3
0
파일: utils.c 프로젝트: FrankenMan/Luma3DS
static void startChrono(void)
{
    static bool isChronoStarted = false;

    if(isChronoStarted) return;

    REG_TIMER_CNT(0) = 0; //67MHz
    for(u32 i = 1; i < 4; i++) REG_TIMER_CNT(i) = 4; //Count-up

    for(u32 i = 0; i < 4; i++) REG_TIMER_VAL(i) = 0;

    REG_TIMER_CNT(0) = 0x80; //67MHz; enabled
    for(u32 i = 1; i < 4; i++) REG_TIMER_CNT(i) = 0x84; //Count-up; enabled

    isChronoStarted = true;
}