diff --git a/build/libraries/init/ARM7/crt0_firm.c b/build/libraries/init/ARM7/crt0_firm.c index 622fe8c9..156a1b81 100644 --- a/build/libraries/init/ARM7/crt0_firm.c +++ b/build/libraries/init/ARM7/crt0_firm.c @@ -97,6 +97,14 @@ SDK_WEAK_SYMBOL asm void _start( void ) bmi @1_2 #endif + //---- wait for main memory mode into burst mode + ldr r3, =REG_EXMEMCNT_L_ADDR + mov r1, #REG_MI_EXMEMCNT_L_ECE2_MASK +@1: + ldrh r2, [r3] + tst r2, r1 + beq @1 + //---- load autoload block and initialize bss bl do_autoload diff --git a/build/libraries/mi/ARM9/mi_init_mainMemory.c b/build/libraries/mi/ARM9/mi_init_mainMemory.c index 773aa2b3..18af56ee 100644 --- a/build/libraries/mi/ARM9/mi_init_mainMemory.c +++ b/build/libraries/mi/ARM9/mi_init_mainMemory.c @@ -15,7 +15,38 @@ $Author$ *---------------------------------------------------------------------------*/ #include -#include + + +/*---------------------------------------------------------------------------* + Name: MIi_IsMainMemoryInitialized + + Description: + + Arguments: None + + Returns: None + *---------------------------------------------------------------------------*/ +BOOL MIi_IsMainMemoryInitialized( void ) +{ + return (BOOL)((reg_MI_EXMEMCNT & REG_MI_EXMEMCNT_CE2_MASK) >> REG_MI_EXMEMCNT_CE2_SHIFT); +} + +/*---------------------------------------------------------------------------* + Name: MIi_WaitMainMemoryInitialize + + Description: + + Arguments: None + + Returns: None + *---------------------------------------------------------------------------*/ +void MIi_WaitMainMemoryInitialize( void ) +{ + while( MIi_IsMainMemoryInitialized() == FALSE ) + { + } +} + /*---------------------------------------------------------------------------* Name: MIi_InitMainMemCR @@ -26,6 +57,8 @@ Returns: None *---------------------------------------------------------------------------*/ +#include + asm void MIi_InitMainMemCR( void ) { mov r12, lr diff --git a/include/firm/mi/mainMemory.h b/include/firm/mi/mainMemory.h index 87701bca..9c4886f9 100644 --- a/include/firm/mi/mainMemory.h +++ b/include/firm/mi/mainMemory.h @@ -71,6 +71,27 @@ extern "C" { *---------------------------------------------------------------------------*/ void MIi_InitMainMemCR( void ); +/*---------------------------------------------------------------------------* + Name: MIi_IsMainMemoryInitialized + + Description: + + Arguments: None + + Returns: None + *---------------------------------------------------------------------------*/ +BOOL MIi_IsMainMemoryInitialized( void ); + +/*---------------------------------------------------------------------------* + Name: MIi_WaitMainMemoryInitialize + + Description: + + Arguments: None + + Returns: None + *---------------------------------------------------------------------------*/ +void MIi_WaitMainMemoryInitialize( void ); #ifdef __cplusplus } /* extern "C" */