ctr_mcu/branches/sim/main.c
n2232 6ec42747e1 ●halの初期化を先頭の方に入れた。ファームアップデート時に電源が切れてしまうことがある。
●スタックがあふれる可能性があったので修正
・スタックをあまり使わないように(accero.c, iic_twl.c, pm.c, vreg_ctr_write からのhosu_increment_if_nesessary(), )
・iic_ctrの割り込み順位を下げた(iic_ctr_init)。iic_twl以外は一律最低に。
 mmen,DS互換で暫く波形を見たが問題なさそう。もう暫くエージング継続
・renge task_interval_runの中からtask_immed_runを呼ぶのをやめた。よーく動作確認をすること!(これは戻すかも)

●ext_infoの実装を修正(task_misc.c)
 romは減ったが、スタティックなRAMが増えた。それでもスタックを使うより安全と思う
●MGICの無い機材(白箱など)でも電池周りのHALが動くよう修正(adc.c)

●voltableを.hではなく.cへ移動

●iic_mcu_startのiic_puウェイトを1msに。別に動でもいいのだが。

○電源offからの電源投入チェック、アダプタ有無で異なるパスを通っていたが、出来るだけ共通に。テスト中



git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@363 013db118-44a6-b54f-8bf7-843cb86687b1
2011-08-09 02:41:16 +00:00

94 lines
2.3 KiB
C

/* ========================================================
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"
#include "pool.h"
// ========================================================
system_status_ system_status;
uni_pool pool;
bit force_off;
#ifdef i2c_timeout_test
bit i2c_mcu_time_out_error; // I2Cが何らかで詰まった。結露など含む。
extern void i2c_mcu_error_monitor();
#endif
/* ========================================================
本当のエントリ関数は loader.c にあります
======================================================== */
void main_loop( void )
{
#ifdef i2c_timeout_test
i2c_mcu_time_out_error = false;
#endif
// HALデバッグリセット
vreg_ctr[ VREG_C_HAL_OVW_CONT0 ] = 0;
vreg_ctr[ VREG_C_HAL_OVW_CONT1 ] = 0;
vreg_ctr[ VREG_C_HAL_OVW_TEMPERATURE ] = 0xFF;
vreg_ctr[ VREG_C_HAL_OVW_BT_FUEL ] = 0xFF;
vreg_ctr[ VREG_C_HAL_OVW_BT_VOLTAGE ] = 0xFF;
hal_update();
// 電池投入時、ファームアップデート後のみ
RTC_init( ); // 内部でリブートか判定しています
renge_init( );
iic_mcu_start( );
EI( );
BT_chk();
system_status.pwr_state = OFF_TRIG;
if( system_status.reboot )
{
// リブート時は電源onに上書き
if( PM_chk_LDSW() != 0 )
{
system_status.pwr_state = ON_TRIG;
}
vreg_ctr[VREG_C_BT_REMAIN] = 100;
}
vreg_ctr_init( );
clear_hosu_hist(); // 履歴クリア
renge_task_interval_run_force = true;
RTCIMK = 0; /* 割り込み(アラーム&インターバル)許可 */
// メインループ //
while( 1 )
{ // システムtick、または割り込みで廻ります。
renge_task_interval_run( ); // 内部で、システムtickまたは強制起動します
renge_task_immed_run();
#ifdef i2c_timeout_test
if( i2c_mcu_time_out_error )
{
i2c_mcu_error_monitor();
}
#endif
HALT( );
}
}