diff --git a/include/arm9/timer.h b/include/arm9/timer.h index 01b786b..710538d 100644 --- a/include/arm9/timer.h +++ b/include/arm9/timer.h @@ -5,7 +5,7 @@ -#define TIMER_BASE_FREQ (67029337.5l) +#define TIMER_BASE_FREQ (67027963.9305) #define TIMER_COUNT_UP (1u<<2) // For cascading at least 2 timers #define TIMER_IRQ_ENABLE (1u<<6) @@ -13,9 +13,9 @@ // Convenience macros for calculating the ticks. Based on libnds #define TIMER_FREQ(n) (0xFFFFu - (u16)(TIMER_BASE_FREQ / n)) -#define TIMER_FREQ_64(n) (0xFFFFu - (u16)(TIMER_BASE_FREQ / 64.0l / n)) -#define TIMER_FREQ_256(n) (0xFFFFu - (u16)(TIMER_BASE_FREQ / 256.0l / n)) -#define TIMER_FREQ_1024(n) (0xFFFFu - (u16)(TIMER_BASE_FREQ / 1024.0l / n)) +#define TIMER_FREQ_64(n) (0xFFFFu - (u16)(TIMER_BASE_FREQ / 64.0 / n)) +#define TIMER_FREQ_256(n) (0xFFFFu - (u16)(TIMER_BASE_FREQ / 256.0 / n)) +#define TIMER_FREQ_1024(n) (0xFFFFu - (u16)(TIMER_BASE_FREQ / 1024.0 / n)) typedef enum @@ -40,4 +40,4 @@ void TIMER_stop(Timer timer); void _timerSleep(u32 ticks); // Use the macro instead -#define TIMER_sleep(ms) _timerSleep(0xFFFFFFFFu - (u32)((TIMER_BASE_FREQ / 1024.0l / 1000.0l) * ms)) +#define TIMER_sleep(ms) _timerSleep(0xFFFFFFFFu - (u32)((TIMER_BASE_FREQ / 1024.0 / 1000.0) * ms)) diff --git a/source/arm9/dev.c b/source/arm9/dev.c index 23206e2..7dc6d62 100644 --- a/source/arm9/dev.c +++ b/source/arm9/dev.c @@ -8,6 +8,7 @@ #include "arm9/spiflash.h" #include "arm9/crypto.h" #include "arm9/ndma.h" +#include "arm9/timer.h" #include "arm9/dev.h" @@ -133,9 +134,12 @@ // thanks yellows8 *((vu16*)0x10000020) = (*((vu16*)0x10000020) & ~0x1u) | 0x200u; - u32 timeout = 1526000; - while(!sdmmc_sd_is_active() && timeout) --timeout; - if(!timeout) return false; + if(!sdmmc_sd_is_active()) + { + TIMER_sleep(250.5f); // Wait until the SD bus times out + if(!sdmmc_sd_is_active()) return false; // Check again if a SD card is inserted + } + if(SD_Init()) return false; dev_sd.initialized = true; //printf("sd init: success!\n");