/* ======================================================== MCU CTR BSR 2008,2009 nintendo 開発技術部 藤田 ======================================================== */ // ======================================================== #include "incs_loader.h" #include "WDT.h" #include "rtc.h" #include "pm.h" #include "accero.h" #include "led.h" #include "adc.h" // ======================================================== static void read_dipsw( ); // ======================================================== system_status_ system_status; bit update; u8 pool[512]; // アップデート時のワークエリア 兼 歩数計データ /* ======================================================== 本当のエントリ関数は loader.c にあります ======================================================== */ void main_loop( void ) { // 電池投入時、ファームアップデート後のみ RTC_init( ); // 内部でリブートか判定しています renge_init( ); iic_mcu_start( ); PM_init(); system_status.pwr_state = OFF_TRIG; if( system_status.reboot == 1 ) { // システムの電源が入りっぱなしだったら、 // マイコンだけが再起動したのだ // todo #ifdef _MCU_BSR_ if( RESET1_n ) #else if( PM_chk_LDSW() != 0 ) #endif { vreg_ctr[VREG_C_LED_POW] = LED_POW_ILM_AUTO; system_status.pwr_state = ON_TRIG; } } #ifdef _PARRADIUM_ system_status.pwr_state = OFF; #endif vreg_ctr_init( ); vreg_twl_init( ); read_dipsw( ); // 特定スイッチで何かするか? hosu_init(); renge_task_interval_run_force = 1; EI( ); RTCIMK = 0; /* 割り込み(アラーム&インターバル)許可 */ // メインループ // while( 1 ) { // システムtick、または割り込みで廻ります。 WDT_Restart( ); renge_task_interval_run( ); // 内部で、システムtickまたは強制起動します while( renge_task_interval_run_force != 0 ) { renge_task_interval_run_force = 0; renge_task_interval_run( ); } WDT_Restart( ); renge_task_immed_run( ); // ここのループが廻る度に実行されます HALT( ); } } /* ======================================================== ======================================================== */ static void read_dipsw( ) { // ソフトディップスイッチ読み込み // PU4 |= 0x03; // dip sw 0,1 system_status.dipsw0 = ( DIPSW_0 == 0 ) ? 0 : 1; system_status.dipsw1 = ( DIPSW_1 == 0 ) ? 0 : 1; // PU4 &= ~0x03; }