mirror of
https://github.com/rvtr/ctr_mcu.git
synced 2025-10-31 13:51:10 -04:00
CTRコーデックに対応? IRQ_0を確実にかける I2C(TWL/CTR)の割り込み優先度修正(レジスタ名が悪いと思う) カメラLED、TWLからの操作を追加 loader、文法ミス修正 自己アップデート後、自己リセットをかける。メーカーの回答待ちのため暫定。(セットは電源が切れ、RTCも初期化される) RTCの初期値を変更(暫定) バッテリ残量ICとのやりとりを修正。メーカーの推奨の手順が更新されたため。また、不正になりがちなのでリセットをかけるようにしてみた。I2C_mの2バイト書き込みがひどかったので修正 互換側I2Cれじすたの整理。エンバグ心配 git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@13 013db118-44a6-b54f-8bf7-843cb86687b1
119 lines
2.8 KiB
C
119 lines
2.8 KiB
C
/* ========================================================
|
|
MCU CTR BSR
|
|
2008,2009 nintendo
|
|
開発技術部 藤田
|
|
======================================================== */
|
|
|
|
/*
|
|
管理担当がついてない
|
|
pm_irq
|
|
slp
|
|
wl_rx
|
|
wl_tx
|
|
dbg
|
|
*/
|
|
// ========================================================
|
|
#include "incs.h"
|
|
|
|
#include "WDT.h"
|
|
#include "rtc.h"
|
|
#include "pm.h"
|
|
#include "accero.h"
|
|
#include "led.h"
|
|
|
|
|
|
// ========================================================
|
|
err to_sleep( );
|
|
|
|
static void read_dipsw( );
|
|
|
|
unsigned char temp_teg;
|
|
extern void power_save( );
|
|
|
|
|
|
// ========================================================
|
|
bit active;
|
|
bit sleep;
|
|
|
|
bit rsv_to_sleep;
|
|
bit rsv_LCD_on;
|
|
bit rsv_BL_on;
|
|
|
|
|
|
system_status_ system_status;
|
|
|
|
|
|
u8 off_delay; // 電源 OFF から PWSW 等で電源オンする際、押してる時間をカウントするのに使う
|
|
|
|
extern u8 boot_ura;
|
|
|
|
/* ========================================================
|
|
本当のエントリ関数は loader.c にあります
|
|
======================================================== */
|
|
void main_loop( void )
|
|
{
|
|
|
|
// 電池投入時の1回のみ
|
|
RTC_init( ); // 内部でリブートか判定しています
|
|
|
|
if( system_status.reboot == 0 )
|
|
{
|
|
system_status.pwr_state = OFF_TRIG;
|
|
}
|
|
else
|
|
{
|
|
vreg_ctr[VREG_C_LED_POW] = LED_POW_ILM_AUTO;
|
|
system_status.pwr_state = ON_TRIG;
|
|
iic_mcu_start( );
|
|
|
|
// リセットだけ、かけてみる
|
|
PM_reset_ast( );
|
|
RESET2_ast;
|
|
FCRAM_RST_ast;
|
|
|
|
wait_ms( 1 );
|
|
|
|
FCRAM_RST_neg;
|
|
RESET2_neg;
|
|
PM_reset_neg( );
|
|
|
|
}
|
|
vreg_ctr_init( );
|
|
vreg_twl_init( );
|
|
|
|
read_dipsw( );
|
|
// 特定スイッチで何かするか?
|
|
|
|
renge_init( );
|
|
renge_task_interval_run_force = 1;
|
|
|
|
EI( );
|
|
|
|
|
|
// メインループ //
|
|
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( );
|
|
}
|
|
renge_task_immed_run( ); // ここのループが廻る度に実行されます
|
|
power_save( );
|
|
}
|
|
}
|
|
|
|
|
|
/* ========================================================
|
|
======================================================== */
|
|
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;
|
|
}
|