SPFL対応。

アモルファスの件
 機種識別
 ROM確保に1色お知らせ廃止。
 led.cを分割(その1)

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@333 013db118-44a6-b54f-8bf7-843cb86687b1
This commit is contained in:
n2232 2011-05-25 09:48:50 +00:00
parent 0d13eb6bc2
commit 6396872ddd
12 changed files with 1054 additions and 1055 deletions

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@ -32,19 +32,27 @@ enum model_
MODEL_RESERVED3,
};
enum family_
{
FAMILY_CTR,
FAMILY_SPFL,
FAMILY_SHRIMP
};
// タスクシステムの状態情報など
typedef struct _system_status_
{
enum pwr_state_ pwr_state;
enum poweron_reason_ poweron_reason;
unsigned char reboot:1;
unsigned char info_fullcolor:1;
// unsigned char info_fullcolor:1;
unsigned char force_off:1;
unsigned char captureBox:1; // キャプチャ箱 SDKには実機と返す
unsigned char taikendai:1;
unsigned char taikendai_nbd:1;
unsigned char is_dev:1;
enum model_ model;
enum family_ family;
}system_status_;

View File

@ -1,6 +1,5 @@
/* ========================================================
LED.c
======================================================== */
#pragma sfr
@ -25,59 +24,23 @@
#define BIT_MD0 0
// ========================================================
// スリープ中明滅のテーブル。マジか。
const u8 LED_PTN_SLEEP[] = {
25, 38, 52, 68, 83, 98, 110, 119,
125, 128, 128, 125, 119, 110, 98, 83,
68, 52, 38, 25, 16, 10, 8, 8,
8, 8, 8, 8, 8, 8, 10, 16
};
#define LED_SLEEP_FRAME_LEN 71
#define LED_SLEEP_DIM_LEN 71
#define LED_SLEEP_FRAME_NUM 32
// ========================================================
static void led_pow_normal( );
static void led_pow_sleep( );
static void led_pow_bt_empty();
static u8 led_pow_batt_low();
// ========================================================
// 赤LEDの電池残量LEDの点滅パターン
st_led_red_batt_empty led_red_batt_empty = { 0x55, 0x55, 0x55, 0x55 };
bit initialized;
bit ledInitialized;
// お知らせLEDのパターンデータ
uni_info_LED info_LED;
// フルカラーとの自動判別のため、一時領域としてもっておく
bit LED_pow_red_Mirror;
bit info_led_off;
bit info_led_override;
bit cam_led_update;
// 電源LEDのスリープパターンのステータス類
u8 time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN;
u8 frame_sleep;
st_LED_dim_status LED_dim_status_sleep;
// 充電中か否か
extern bit BT_IN_CHG_delayed_n;
// ========================================================
#define led_fade_to( now, goal ) now = fade_to( now, goal )
@ -146,9 +109,6 @@ void LED_init( )
         
         
*/
INFO_LED_IS_FULLCOLOR_PU = 1; // お知らせLEDを識別 先に上げておく
INFO_LED_IS_FULLCOLOR_PM = 1;
TAU0EN = 1;
TPS0 = BIT_PRS012 | BIT_PRS002; // マスタークロックはCK01,8M/2 /2^4 = 250kHz
@ -170,32 +130,13 @@ void LED_init( )
TDR00 = LED_BRIGHT_MAX - 1; // 周期 10bit
// お知らせLEDを識別 //
// INFO_LED_IS_FULLCOLOR_PU = 1; // もうちょっと前に上げておかないと…
system_status.info_fullcolor = 1;
if( system_status.model == MODEL_TS_BOARD )
{
#ifndef _DBG_FORCE_FULLCOLOR_
system_status.info_fullcolor = 0;
#endif
}
else
{
if( INFO_LED_IS_FULLCOLOR_n )
{
system_status.info_fullcolor = 0;
}
}
INFO_LED_IS_FULLCOLOR_n = 0;
INFO_LED_IS_FULLCOLOR_PM = 0;
// system_status.info_fullcolor = 1;
LED_duty_notify_red = 0;
LED_duty_notify_blu = 0;
LED_duty_notify_grn = 0;
LED_pow_red = 0;
LED_CAM = 0;
LED_old_pow_red = 0;
LED_pow_red_Mirror = 0;
if( system_status.reboot )
{
@ -203,7 +144,7 @@ void LED_init( )
LED_duty_pow_blu = LED_BRIGHT_MAX;
}
info_led_off = false;
initialized = true;
ledInitialized = true;
}
@ -215,266 +156,12 @@ void LED_stop( )
TAU0EN = 0;
LED_pow_red = 0;
LED_CAM = 0;
LED_old_pow_red = 0;
initialized = false;
ledInitialized = false;
}
/* ========================================================
// 電源LED
LED_POW_B,R 6,7
TDR00 (0x03FFTPS0で250kHzでカウントアップ10bitなら250Hz位になる)
TDR0x Duty 0TDR00( =0x03FF)
enum pwr_state_{
OFF_TRIG = 0,
ON_CHECK,
ON_TRIG,
ON,
SLEEP
};
enum LED_ILUM_MODE{
LED_POW_ILM_AUTO,
LED_POW_ILM_ON,
LED_POW_ILM_SLEEP,
LED_POW_ILM_CEOFF
};
======================================================== */
void tsk_led_pow( )
{
if( ! initialized )
{
return;
// おしまい
}
info_led_override = false;
switch ( vreg_ctr[VREG_C_LED_POW] )
{
case ( LED_POW_ILM_AUTO ):
default:
led_pow_normal( );
break;
case ( LED_POW_ILM_SLEEP ):
led_pow_sleep( );
break;
case ( LED_POW_ILM_ON ):
led_fade_to( LED_duty_pow_blu, vreg_ctr[VREG_C_LED_BRIGHT] );
LED_pow_red_Mirror = 0;
break;
case ( LED_POW_ILM_OFF ):
led_fade_to( LED_duty_pow_blu, 0 );
LED_pow_red_Mirror = 0;
break;
case ( LED_POW_ILM_ONLY_RED ):
LED_duty_pow_blu = 0;
LED_pow_red_Mirror = 1;
break;
case ( LED_POW_ILM_ONLY_BLUE ):
LED_duty_pow_blu = LED_BRIGHT_MAX;
LED_pow_red_Mirror = 0;
break;
case ( LED_POW_ILM_FORCE_BT_EMPTY ):
led_pow_bt_empty();
break;
}
if( system_status.pwr_state == OFF || system_status.pwr_state == ON_CHECK )
{
LED_pow_red_Mirror = 0;
info_led_override = false;
}
// 実際にLEDの更新
if( system_status.info_fullcolor )
{
LED_pow_red = LED_pow_red_Mirror;
}
else
{
LED_old_pow_red = LED_pow_red_Mirror;
}
if( info_led_override )
{
if( system_status.info_fullcolor )
{
LED_duty_notify_blu = 0;
LED_duty_notify_grn = 0;
LED_duty_notify_red = LED_pow_red_Mirror ? 255: 0;
}
else
{
LED_duty_old_NOTIFY = LED_pow_red_Mirror ? 255: 0;
}
}
}
/* ========================================================
 
======================================================== */
static void led_pow_normal( )
{
time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN;
frame_sleep = 0;
LED_dim_status_sleep.now = (sx16)LED_duty_pow_blu * 128;
if( led_pow_batt_low() != 0 ) // 赤の点灯も←でやっています
{
return;
// おしまい
}
// 青点灯
led_fade_to( LED_duty_pow_blu, vreg_ctr[VREG_C_LED_BRIGHT] );
}
/* ========================================================
======================================================== */
static void led_pow_sleep( )
{
if( led_pow_batt_low() != 0 ) // 赤の点灯も←でやっています
{
time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN;
frame_sleep = 0;
LED_dim_status_sleep.now = (sx16)LED_duty_pow_blu * 128;
return;
// おしまい
}
LED_dim_status_sleep.to = LED_PTN_SLEEP[frame_sleep] * 128;
// グラデーションのデルタを計算
LED_dim_status_sleep.delta = (( LED_dim_status_sleep.to - LED_dim_status_sleep.now ) ) / LED_SLEEP_DIM_LEN;
led_fade_to2( LED_duty_pow_blu, &LED_dim_status_sleep );
// 次のフレームに進める?
time_to_next_frame_sleep -= 1;
if( time_to_next_frame_sleep == 0 )
{
time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN;
frame_sleep += 1;
if( frame_sleep >= LED_SLEEP_FRAME_NUM -1 )
{
frame_sleep = 0;
}
}
}
/* ========================================================
  0 
     1    
======================================================== */
//#define LED_RED_SLEEP_DIM 3
static u8 led_pow_batt_low()
{
// static u8 led_red_dim_count;
if( vreg_ctr[VREG_C_BT_REMAIN] > BATT_TH_LO )
{
LED_pow_red_Mirror = 0;
return 0;
// おしまい
}
if(( vreg_ctr[VREG_C_BT_REMAIN] > BATT_TH_EMPTY ) || !BT_IN_CHG_delayed_n )
// 電池残量が5%10%) または、それ未満でも充電中
{
// 赤点灯
led_fade_to( LED_duty_pow_blu, 0 );
/*
if( vreg_ctr[VREG_C_LED_POW] == LED_POW_ILM_SLEEP )
{
if( led_red_dim_count == 0 )
{
LED_pow_red_Mirror = 1;
led_red_dim_count = LED_RED_SLEEP_DIM;
}
else
{
LED_pow_red_Mirror = 0;
led_red_dim_count -= 1;
}
}
else
*/
{
LED_pow_red_Mirror = 1;
}
}
else // 電池が5%未満 かつ アダプタなし
{
led_pow_bt_empty();
}
return 1;
}
/* ========================================================
 
  
  
======================================================== */
static void led_pow_bt_empty()
{
static u8 delay;
static u8 red_blink_poi;
info_led_override = true;
// 赤点滅
led_fade_to( LED_duty_pow_blu, 0 );
// 赤の点滅パターンも指定できる
delay += 1;
if( delay < 64 ) // フレームの保持時間稼ぎ
{
return;
}
delay = 0;
if( led_red_batt_empty.dats[ red_blink_poi / 8 ] & ( 1 << ( red_blink_poi % 8 )) )
{
LED_pow_red_Mirror = 1;
}
else
{
LED_pow_red_Mirror = 0;
}
red_blink_poi += 1;
if( red_blink_poi >= 32 )
{
red_blink_poi = 0;
}
}
@ -642,145 +329,7 @@ void tsk_led_notify( )
}
}
if( system_status.info_fullcolor )
{
led_fade_to2( LED_duty_notify_blu, &LED_dim_status_info_B );
led_fade_to2( LED_duty_notify_red, &LED_dim_status_info_R );
led_fade_to2( LED_duty_notify_grn, &LED_dim_status_info_G );
}
else
{
led_fade_to2( LED_duty_old_NOTIFY, &LED_dim_status_info_B );
}
}
/******************************************************//**
LED_Cam TO02
\n BLINK,*_PLUSE 1
\n OFFBLINK OFFが無視されます
*********************************************************/
void tsk_led_cam( )
{
static u8 state_led_cam = 0;
static u16 task_interval;
u8 LED_CAM_mirror;
DI(); // レジスタへの書き込みで強制起動がかかることがあるため
if( !cam_led_update )
{
if( task_interval != 0 )
{
task_interval -= 1;
return;
}
}
cam_led_update = false; // TWL のブリンク設定(一発だけ点灯)のため
EI();
if( system_status.pwr_state == SLEEP ) // sleep中、強制消灯
{
LED_CAM_mirror = 0;
state_led_cam = 0;
}
else
{
// ブリンクのように待たせたいとき以外は毎週起動する
// (レジスタの変更にすぐに反応する)
switch ( vreg_ctr[VREG_C_LED_CAM] )
{
case ( CAM_LED_OFF ):
default:
LED_CAM_mirror = 0;
state_led_cam = 0;
break;
case ( CAM_LED_ON ):
LED_CAM_mirror = 1;
state_led_cam = 0;
break;
case ( CAM_LED_BLINK ):
if( state_led_cam == 0 )
{
LED_CAM_mirror = 1;
state_led_cam = 1;
}
else
{
LED_CAM_mirror = 0;
state_led_cam = 0;
}
task_interval = 250;
break;
case ( CAM_LED_ON_PLUSE ):
if( state_led_cam == 0 )
{
LED_CAM_mirror = 1;
state_led_cam = 1;
task_interval = 250;
}
else
{
vreg_ctr[VREG_C_LED_CAM] = CAM_LED_OFF;
}
break;
case ( CAM_LED_OFF_PLUSE ):
if( state_led_cam == 0 )
{
LED_CAM_mirror = 0;
state_led_cam = 1;
task_interval = 250;
}
else
{
vreg_ctr[VREG_C_LED_CAM] = CAM_LED_ON;
}
break;
case( CAM_LED_BY_TWL ):
// TWL互換 //
switch ( vreg_twl[ REG_TWL_INT_ADRS_CAM ] ){ //. switchのネストとか…
case( TWL_CAMLED_OFF ):
LED_CAM_mirror = 0;
state_led_cam = 0;
break;
case( TWL_CAMLED_BLINK ):
if( state_led_cam == 0 )
{
LED_CAM_mirror = 1;
state_led_cam = 1;
}
else
{
LED_CAM_mirror = 0;
state_led_cam = 0;
}
task_interval = 600 / SYS_INTERVAL_TICK + 250;
break;
case( TWL_CAMLED_ON ):
case( TWL_CAMLED_DEF_ON ):
default:
LED_CAM_mirror = 1;
state_led_cam = 1;
break;
}
}
} // if( system_status.pwr_state == sleep ) ... else ...
// 輝度更新 //
if( system_status.info_fullcolor )
{
LED_CAM = LED_CAM_mirror;
}
else
{
LED_old_CAM = LED_CAM_mirror;
}
led_fade_to2( LED_duty_notify_blu, &LED_dim_status_info_B );
led_fade_to2( LED_duty_notify_red, &LED_dim_status_info_R );
led_fade_to2( LED_duty_notify_grn, &LED_dim_status_info_G );
}

View File

@ -21,19 +21,6 @@
#define LED_CAM P7.5
// 旧仕様 /////////////////////////////
// LED_DUTY
//#define LED_duty_old_pow_blu TDR06 同じ
//#define LED_duty_old_WiFi TDR03 同じ
#define LED_duty_old_NOTIFY TDR05
//#define LED_duty_old_CAM TDR02
//#define LED_duty_old_3d TDR01 同じ
// wifi2はPWMできません。
#define LED_old_pow_red P1.5
#define LED_old_CAM P1.0
#define NOTIFY_LED_TERM 32
@ -150,4 +137,10 @@ void LED_stop( );
extern void tsk_led_cam();
// ====================================
extern bit ledInitialized;
extern bit info_led_override;
#endif

141
trunk/led_cam.c Normal file
View File

@ -0,0 +1,141 @@
/******************************************************//**
LED_Cam TO02
\n BLINK,*_PLUSE 1
\n OFFBLINK OFFが無視されます
*********************************************************/
#pragma sfr
#include "incs.h"
#include "led.h"
// ========================================================
static u8 state_led_cam = 0;
static u16 task_interval;
bit cam_led_update;
// ========================================================
static void cam_led_twl();
// ========================================================
void tsk_led_cam( )
{
DI(); // レジスタへの書き込みで強制起動がかかることがあるため
if( !cam_led_update )
{
if( task_interval != 0 )
{
task_interval -= 1;
return;
}
}
cam_led_update = false; // TWL のブリンク設定(一発だけ点灯)のため
EI();
if( system_status.pwr_state == SLEEP ) // sleep中、強制消灯
{
LED_CAM = 0;
state_led_cam = 0;
}
else
{
// ブリンクのように待たせたいとき以外は毎週起動する
// (レジスタの変更にすぐに反応する)
switch ( vreg_ctr[VREG_C_LED_CAM] )
{
case ( CAM_LED_OFF ):
default:
LED_CAM = 0;
state_led_cam = 0;
break;
case ( CAM_LED_ON ):
LED_CAM = 1;
state_led_cam = 0;
break;
case ( CAM_LED_BLINK ):
if( state_led_cam == 0 )
{
LED_CAM = 1;
state_led_cam = 1;
}
else
{
LED_CAM = 0;
state_led_cam = 0;
}
task_interval = 250;
break;
case ( CAM_LED_ON_PLUSE ):
if( state_led_cam == 0 )
{
LED_CAM = 1;
state_led_cam = 1;
task_interval = 250;
}
else
{
vreg_ctr[VREG_C_LED_CAM] = CAM_LED_OFF;
}
break;
case ( CAM_LED_OFF_PLUSE ):
if( state_led_cam == 0 )
{
LED_CAM = 0;
state_led_cam = 1;
task_interval = 250;
}
else
{
vreg_ctr[VREG_C_LED_CAM] = CAM_LED_ON;
}
break;
case( CAM_LED_BY_TWL ):
cam_led_twl();
}
} // if( system_status.pwr_state == sleep ) ... else ...
}
void cam_led_twl()
{
// TWL互換 //
switch ( vreg_twl[ REG_TWL_INT_ADRS_CAM ] ){
case( TWL_CAMLED_OFF ):
LED_CAM = 0;
state_led_cam = 0;
break;
case( TWL_CAMLED_BLINK ):
if( state_led_cam == 0 )
{
LED_CAM = 1;
state_led_cam = 1;
}
else
{
LED_CAM = 0;
state_led_cam = 0;
}
task_interval = 600 / SYS_INTERVAL_TICK + 250;
break;
case( TWL_CAMLED_ON ):
case( TWL_CAMLED_DEF_ON ):
default:
LED_CAM = 1;
state_led_cam = 1;
break;
}
}

265
trunk/led_pow.c Normal file
View File

@ -0,0 +1,265 @@
/* ========================================================
// 電源LED
LED_POW_B,R 6,7
TDR00 (0x03FFTPS0で250kHzでカウントアップ10bitなら250Hz位になる)
TDR0x Duty 0TDR00( =0x03FF)
enum pwr_state_{
OFF_TRIG = 0,
ON_CHECK,
ON_TRIG,
ON,
SLEEP
};
enum LED_ILUM_MODE{
LED_POW_ILM_AUTO,
LED_POW_ILM_ON,
LED_POW_ILM_SLEEP,
LED_POW_ILM_CEOFF
};
======================================================== */
#pragma sfr
#include "incs.h"
#include "led.h"
// ========================================================
// スリープ中明滅のテーブル。マジか。
const u8 LED_PTN_SLEEP[] = {
25, 38, 52, 68, 83, 98, 110, 119,
125, 128, 128, 125, 119, 110, 98, 83,
68, 52, 38, 25, 16, 10, 8, 8,
8, 8, 8, 8, 8, 8, 10, 16
};
// 赤LEDの電池残量LEDの点滅パターン
st_led_red_batt_empty led_red_batt_empty = { 0x55, 0x55, 0x55, 0x55 };
#define LED_SLEEP_FRAME_LEN 71
#define LED_SLEEP_DIM_LEN 71
#define LED_SLEEP_FRAME_NUM 32
// ========================================================
static void led_pow_normal( );
static void led_pow_sleep( );
static void led_pow_bt_empty();
static u8 led_pow_batt_low();
#define led_fade_to( now, goal ) now = fade_to( now, goal )
extern u8 fade_to( u8 now, u8 goal );
#define led_fade_to2( led, status ) led = fade_to2( status )
extern u8 fade_to2( st_LED_dim_status* status );
// ========================================================
// 電源LEDのスリープパターンのステータス類
u8 time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN;
u8 frame_sleep;
st_LED_dim_status LED_dim_status_sleep;
extern bit ledInitialized;
extern bit BT_IN_CHG_delayed_n;
// ========================================================
void tsk_led_pow( )
{
if( ! ledInitialized )
{
return;
// おしまい
}
info_led_override = false;
switch ( vreg_ctr[VREG_C_LED_POW] )
{
case ( LED_POW_ILM_AUTO ):
default:
led_pow_normal( );
break;
case ( LED_POW_ILM_SLEEP ):
led_pow_sleep( );
break;
case ( LED_POW_ILM_ON ):
led_fade_to( LED_duty_pow_blu, vreg_ctr[VREG_C_LED_BRIGHT] );
LED_pow_red = 0;
break;
case ( LED_POW_ILM_OFF ):
led_fade_to( LED_duty_pow_blu, 0 );
LED_pow_red = 0;
break;
case ( LED_POW_ILM_ONLY_RED ):
LED_duty_pow_blu = 0;
LED_pow_red = 1;
break;
case ( LED_POW_ILM_ONLY_BLUE ):
LED_duty_pow_blu = LED_BRIGHT_MAX;
LED_pow_red = 0;
break;
case ( LED_POW_ILM_FORCE_BT_EMPTY ):
led_pow_bt_empty();
break;
}
if( system_status.pwr_state == OFF || system_status.pwr_state == ON_CHECK )
{
LED_pow_red = 0;
info_led_override = false;
}
if( info_led_override )
{
LED_duty_notify_blu = 0;
LED_duty_notify_grn = 0;
LED_duty_notify_red = LED_pow_red ? 255: 0;
}
}
/* ========================================================
 
======================================================== */
static void led_pow_normal( )
{
time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN;
frame_sleep = 0;
LED_dim_status_sleep.now = (sx16)LED_duty_pow_blu * 128;
if( led_pow_batt_low() != 0 ) // 赤の点灯も←でやっています
{
return;
// おしまい
}
// 青点灯
led_fade_to( LED_duty_pow_blu, vreg_ctr[VREG_C_LED_BRIGHT] );
}
/* ========================================================
======================================================== */
static void led_pow_sleep( )
{
if( led_pow_batt_low() != 0 ) // 赤の点灯も←でやっています
{
time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN;
frame_sleep = 0;
LED_dim_status_sleep.now = (sx16)LED_duty_pow_blu * 128;
return;
// おしまい
}
LED_dim_status_sleep.to = LED_PTN_SLEEP[frame_sleep] * 128;
// グラデーションのデルタを計算
LED_dim_status_sleep.delta = (( LED_dim_status_sleep.to - LED_dim_status_sleep.now ) ) / LED_SLEEP_DIM_LEN;
led_fade_to2( LED_duty_pow_blu, &LED_dim_status_sleep );
// 次のフレームに進める?
time_to_next_frame_sleep -= 1;
if( time_to_next_frame_sleep == 0 )
{
time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN;
frame_sleep += 1;
if( frame_sleep >= LED_SLEEP_FRAME_NUM -1 )
{
frame_sleep = 0;
}
}
}
/* ========================================================
  0 
     1    
======================================================== */
static u8 led_pow_batt_low()
{
if( vreg_ctr[VREG_C_BT_REMAIN] > BATT_TH_LO )
{
LED_pow_red = 0;
return 0;
// おしまい
}
if(( vreg_ctr[VREG_C_BT_REMAIN] > BATT_TH_EMPTY ) || !BT_IN_CHG_delayed_n )
// 電池残量が5%10%) または、それ未満でも充電中
{
// 赤点灯
led_fade_to( LED_duty_pow_blu, 0 );
{
LED_pow_red = 1;
}
}
else // 電池が5%未満 かつ アダプタなし
{
led_pow_bt_empty();
}
return 1;
}
/* ========================================================
 
  
  
======================================================== */
static void led_pow_bt_empty()
{
static u8 delay;
static u8 red_blink_poi;
info_led_override = true;
// 赤点滅
led_fade_to( LED_duty_pow_blu, 0 );
// 赤の点滅パターンも指定できる
delay += 1;
if( delay < 64 ) // フレームの保持時間稼ぎ
{
return;
}
delay = 0;
if( led_red_batt_empty.dats[ red_blink_poi / 8 ] & ( 1 << ( red_blink_poi % 8 )) )
{
LED_pow_red = 1;
}
else
{
LED_pow_red = 0;
}
red_blink_poi += 1;
if( red_blink_poi >= 32 )
{
red_blink_poi = 0;
}
}

View File

@ -61,6 +61,9 @@ void FSL_Open( void );
void FSL_Close( void );
void hdwinit( void );
static void hdwinit2( );
static void chk_platform_type();
static void chk_firm_broke();
extern void main_loop( );
@ -110,70 +113,11 @@ void main( )
hdwinit2( );
// ファームの整合性チェック //
{
u8 i;
u8 comp = 0;
// ローダーと本体は同じバージョンか?
/// 次へのアップデートの途中で終わってないか?
for( i = 0; i < sizeof( __TIME__ ); i++ ) // sizeof( __TIME__ ) = 8 らし
{
comp += ( *( __far u8 * )( MGC_LOAD + i ) == *( u8 * )( MGC_FOOT + i ) ) ? 0 : 1;
comp += ( *( u8 * )( MGC_HEAD + i ) == *( u8 * )( MGC_FOOT + i ) ) ? 0 : 1;
}
if( *( u8 * )( MGC_FOOT +2 ) != ':' ) // 消去済のまま
{
comp += 1;
}
if( comp != 0 )
{
// ファームリストアを試みる
firm_restore( );
// 帰ってこない。リセットをかける。
}
}
chk_firm_broke();
// 試遊台判定
// デバッガつないでると上手に判定できないことがあります。
// P40,41
// HH 実機
// HL NBD試遊台
// LH スタンドアロン試遊台
// LL ISデバッガ
if( !DIPSW_0 && !DIPSW_1 )
{
system_status.is_dev = 1;
}
else
{
#ifndef _FORCE_TAIKENDAI_
if( !DIPSW_0 )
#else
if(1)
#endif
{
system_status.taikendai = 1;
}
else
{
system_status.taikendai = 0;
}
chk_platform_type();
#ifndef _FORCE_TAIKENDAI_NBD_
if( !DIPSW_1 )
#else
if(1)
#endif
{
system_status.taikendai_nbd = 1;
}
else
{
system_status.taikendai_nbd = 0;
}
}
// 通常運転
main_loop( );
}
@ -181,6 +125,80 @@ void main( )
void chk_firm_broke()
{
u8 i;
u8 comp = 0;
// ローダーと本体は同じバージョンか?
/// 次へのアップデートの途中で終わってないか?
for( i = 0; i < sizeof( __TIME__ ); i++ ) // sizeof( __TIME__ ) = 8 らし
{
comp += ( *( __far u8 * )( MGC_LOAD + i ) == *( u8 * )( MGC_FOOT + i ) ) ? 0 : 1;
comp += ( *( u8 * )( MGC_HEAD + i ) == *( u8 * )( MGC_FOOT + i ) ) ? 0 : 1;
}
if( *( u8 * )( MGC_FOOT +2 ) != ':' ) // 消去済のまま
{
comp += 1;
}
if( comp != 0 )
{
// ファームリストアを試みる
firm_restore( );
// 帰ってこない。リセットをかける。
}
}
/* ========================================================
CTRファミリ
DEV_DET(P12.[2:1])
CTR
P40,41 !! P40がLだとMCUが起動しません
HH
HL NBD試遊台
LH
LL ISデバッガ
======================================================== */
void chk_platform_type()
{
// ●CTRファミリ //
system_status.family = (enum _family)( DEV_DET >> 1 ); /// あぁ...
// ●CTRその開発機材 //
// 一応初期化
system_status.is_dev = 0;
system_status.taikendai = 0;
system_status.taikendai_nbd = 0;
switch( DIPSW )
{
case DIPSW_TAIKENDAI:
system_status.taikendai = 1;
break;
case DIPSW_TAIKENDAI_NBD:
system_status.taikendai_nbd = 1;
break;
case DIPSW_ISDEV:
system_status.is_dev = 1;
break;
}
#ifdef _FORCE_TAIKENDAI_
system_status.taikendai = 1;
#endif
#ifdef _FORCE_TAIKENDAI_NBD_
system_status.taikendai_nbd = 1;
#endif
}
// ========================================================

View File

@ -796,6 +796,11 @@ err PM_LCD_on( )
PM_VDDLCD_on( );
if( system_status.family == FAMILY_SPFL )
{
SPFL_LCD_AMOL_HV_CONT = 1;
}
wait_ms( DELAY_PM_TSS_50B_AND_TCOM );
PM_TCOM_on( );
@ -822,7 +827,7 @@ err PM_LCD_on( )
// BSR //
void PM_LCD_off()
{
// BLついてたら消す
// BLついてたら消す。// チェックするのは割り込みの関係
if( ( iic_mcu_read_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_BL ) & 0x03 ) != 0 )
{
u8 tot;
@ -841,9 +846,19 @@ void PM_LCD_off()
vreg_ctr[VREG_C_COMMAND2] &= ~( REG_BIT_CMD_BL_U_OFF | REG_BIT_CMD_BL_L_OFF );
}
// 液晶電源切る //
SPFL_LCD_AMOL_HV_CONT = 0; // 他のファミリでも弊害ないし
// 50msとか待つし、確認しましょうかね…
if( iic_mcu_read_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_VDD_LCD ) != 0 )
{
PM_TCOM_off();
if( system_status.family == FAMILY_SPFL )
{
wait_ms( 10 ); // アモルファス15Vを切ったときのウェイト。数字は暫定
}
PM_TCOM_off();
wait_ms( 1 );
PM_TCOM_VCS_off( );
wait_ms( DELAY_PM_LCD_OFF );
@ -852,7 +867,7 @@ void PM_LCD_off()
vreg_ctr[VREG_C_STATUS] &= ~REG_BIT_LCD_POW;
}
set_irq( VREG_C_IRQ3, REG_BIT_LCD_OFF );
set_irq( VREG_C_IRQ3, REG_BIT_LCD_OFF ); // 無条件に発生。マスク無ければ。
}

View File

@ -288,7 +288,7 @@ u8 extinfo_read()
infos[5] = (u8)( _dbg_rcomp & 0xFF );
infos[6] = raw_adc_temperature;
infos[7] = ( !temp_zone_charge_disable | ( bt_authorized << 1 ) );
infos[8] = system_status.info_fullcolor;
infos[8] = 1; // system_status.info_fullcolor;
iic_burst_state++;
return( infos[ iic_burst_state -1 ] );

View File

@ -75,6 +75,13 @@
#define SLP_REQ P12.0
// CTR,SPFL,まだ見ぬ派生機識別
#define DEV_DET ( P12 & 0x00000110 )
#define DEV_CTR ( 0b00 << 1 )
#define DEV_SPFL ( 0b01 << 1 )
#define DEV_SHRIMP ( 0b10 << 1 )
#define DEV_RSV2 ( 0b11 << 1 )
// FCRAM
#ifdef _MODEL_TEG2_
#define FCRAM_RST P14.0
@ -114,11 +121,15 @@
#define BT_TEMP_P P1.7
// SPFLのアモルファスLCDで必要な±15Vの電源。
#define SPFL_LCD_AMOL_HV_CONT P20.2
// 充電せよ(out)
// 負論理です。注意。
#define BT_CHG_ENABLE() ( P4.3 = 0 )
#define BT_CHG_DISABLE() ( P4.3 = 1 )
#define BT_CHG_Ena_n P4.3
#define BT_CHG_Ena_n ( P4.3 )
// 充電中(in)
#define BT_IN_CHG_n P5.1
@ -194,8 +205,13 @@
//#define 32k_I1 P12.3 // XT1
//#define 32k_I2 P12.4 // XT2
#define DIPSW_0 P4.0 // mini cube ソフトウェアディップスイッチ TOOL0、L禁止
#define DIPSW_1 P4.1 // mini cube ソフトウェアディップスイッチ TOOL1
// 実機、開発機、試遊台判別。
#define DIPSW ( P4 & 0b00000011 ) // mini cube & ソフトウェアディップスイッチ TOOL0,1。 P4.0は L 注意!
#define DIPSW_CTR 0b11 // 未使用
#define DIPSW_ISDEV 0b00 // KuCはBattGaugeで判別
#define DIPSW_TAIKENDAI 0b10
#define DIPSW_TAIKENDAI_NBD 0b01
#ifndef _MODEL_WM0_
#define SHELL_OPEN P7.1 // INTP5 ふた開閉 (閉じるとL)
@ -235,11 +251,6 @@
#define KR_SW_WIFI ( 1 << 4 )
#define INFO_LED_IS_FULLCOLOR_n P20.2
#define INFO_LED_IS_FULLCOLOR_PM PM20.2
#define INFO_LED_IS_FULLCOLOR_PU PU20.2
///////////////////////////////////////////////////////////
#define INT_MSK0_IIC_M_DMA 0b0001000000000000

View File

@ -220,30 +220,6 @@ LT=8
Z=0
CommandFile=0
RA_OPT=
[SrcFile]
Source1=loader.c
Source2=pm.c
Source3=i2c_ctr.c
Source4=main.c
Source5=magic.c
Source6=WDT.c
Source7=i2c_mcu.c
Source8=i2c_twl.c
Source9=led.c
Source10=rtc.c
Source11=vreg_ctr.c
Source12=vreg_twl.c
Source13=adc.c
Source14=renge\renge.c
Source15=accero.c
Source16=self_flash.c
Source17=sw.c
Source18=task_debug.c
Source19=task_misc.c
Source20=task_sys.c
Source21=pedo_alg_thre_det2.c
Source22=ini_VECT.c
Source23=task_status.c
[BuildBefore-AfterCmd]
Before1=c:\cygwin\bin\touch magic.c
After1=ruby nec_s_2_bsrbin2.rb bsr.hex
@ -720,42 +696,6 @@ Tool1=CC78K0R|W2.13
Tool2=RA78K0R|W1.33
Tool3=SK78K0R|V3.10
Tool4=ID78K0R-QB|V3.61
[IncFile]
Include1=incs_loader.h
Include2=jhl_defs.h
Include3=config.h
Include4=user_define.h
Include5=bsr_system.h
Include6=renge\renge.h
Include7=renge\renge_defs.h
Include8=renge\renge_task_immediate.h
Include9=vreg_ctr.h
Include10=vreg_twl.h
Include11=loader.h
Include12=i2c_mcu.h
Include13=WDT.h
Include14=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\fsl.h
Include15=fsl_user.h
Include16=i2c_ctr.h
Include17=pm.h
Include18=rtc.h
Include19=reboot.h
Include20=magic.h
Include21=incs.h
Include22=i2c_twl.h
Include23=accero.h
Include24=pedometer.h
Include25=sw.h
Include26=adc.h
Include27=led.h
Include28=batt_params.h
Include29=pool.h
Include30=i2c_twl_defs.h
Include31=voltable.h
Include32=renge\renge_task_intval.h
Include33=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\math.h
Include34=self_flash.h
Include35=pedo_lpf_coeff.h
[Options.LK78K0R 0]
Version=100
O0=bsr_k0r.lmf
@ -1049,3 +989,65 @@ DefaultMode2=1
DefaultMode3=1
DefaultMode4=1
DefaultMode5=1
[SrcFile]
Source1=loader.c
Source2=pm.c
Source3=i2c_ctr.c
Source4=main.c
Source5=magic.c
Source6=WDT.c
Source7=i2c_mcu.c
Source8=i2c_twl.c
Source9=led.c
Source10=rtc.c
Source11=vreg_ctr.c
Source12=vreg_twl.c
Source13=adc.c
Source14=renge\renge.c
Source15=accero.c
Source16=self_flash.c
Source17=sw.c
Source18=task_debug.c
Source19=task_misc.c
Source20=task_sys.c
Source21=pedo_alg_thre_det2.c
Source22=ini_VECT.c
Source23=task_status.c
Source24=led_cam.c
Source25=led_pow.c
[IncFile]
Include1=incs_loader.h
Include2=jhl_defs.h
Include3=config.h
Include4=user_define.h
Include5=bsr_system.h
Include6=renge\renge.h
Include7=renge\renge_defs.h
Include8=renge\renge_task_immediate.h
Include9=vreg_ctr.h
Include10=vreg_twl.h
Include11=loader.h
Include12=i2c_mcu.h
Include13=WDT.h
Include14=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\fsl.h
Include15=fsl_user.h
Include16=i2c_ctr.h
Include17=pm.h
Include18=rtc.h
Include19=reboot.h
Include20=magic.h
Include21=incs.h
Include22=i2c_twl.h
Include23=accero.h
Include24=pedometer.h
Include25=sw.h
Include26=adc.h
Include27=led.h
Include28=batt_params.h
Include29=pool.h
Include30=i2c_twl_defs.h
Include31=voltable.h
Include32=renge\renge_task_intval.h
Include33=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\math.h
Include34=self_flash.h
Include35=pedo_lpf_coeff.h