mirror of
https://github.com/rvtr/ctr_mcu.git
synced 2025-10-31 13:51:10 -04:00
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@161 013db118-44a6-b54f-8bf7-843cb86687b1
This commit is contained in:
parent
d37b32e654
commit
53eb31b448
5
branches/0.15(sdk0.9_E3_fix_vol)/WDT.c
Normal file
5
branches/0.15(sdk0.9_E3_fix_vol)/WDT.c
Normal file
@ -0,0 +1,5 @@
|
||||
#pragma sfr
|
||||
|
||||
|
||||
#include "incs_loader.h"
|
||||
|
||||
20
branches/0.15(sdk0.9_E3_fix_vol)/WDT.h
Normal file
20
branches/0.15(sdk0.9_E3_fix_vol)/WDT.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef _WDT_
|
||||
#define _WDT_
|
||||
|
||||
|
||||
|
||||
//=========================================================
|
||||
#define WDT_RESTART_MAGIC 0xAC
|
||||
|
||||
|
||||
|
||||
//=========================================================
|
||||
// ウォッチドッグタイマのリスタート
|
||||
// void WDT_Restart( void );
|
||||
#define WDT_Restart() WDTE = WDT_RESTART_MAGIC
|
||||
|
||||
// 規定値以外を書くと例外でリセットがかかる
|
||||
#define mcu_reset WDTE = 0xFF
|
||||
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,14 @@
|
||||
#pragma sfr
|
||||
|
||||
|
||||
#include "incs_loader.h"
|
||||
|
||||
|
||||
|
||||
//=========================================================
|
||||
// ウォッチドッグタイマのリスタート
|
||||
// 0xACはマジック
|
||||
void WDT_Restart( void )
|
||||
{
|
||||
WDTE = WDT_RESTART_MAGIC;
|
||||
}
|
||||
@ -0,0 +1,18 @@
|
||||
#ifndef _WDT_
|
||||
#define _WDT_
|
||||
|
||||
|
||||
|
||||
//=========================================================
|
||||
#define WDT_RESTART_MAGIC 0xAC
|
||||
|
||||
|
||||
|
||||
//=========================================================
|
||||
void WDT_Restart( void );
|
||||
|
||||
// 規定値以外を書くと例外でリセットがかかる
|
||||
#define mcu_reset WDTE = 0x5A
|
||||
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,246 @@
|
||||
/* ========================================================
|
||||
加速度センサ関係
|
||||
・データ更新完了でデータを吸い上げ手レジスタを更新、CPUに割り込み
|
||||
・フラグが立っていれば歩数カウント
|
||||
・加速度センサ割り込みからタスクを登録して下さい。(I2Cの競合回避などがあるので)
|
||||
|
||||
======================================================== */
|
||||
#pragma SFR
|
||||
#pragma NOP
|
||||
#pragma HALT
|
||||
#pragma STOP
|
||||
#pragma ROT
|
||||
// rorb, rolb, rorw, rolw
|
||||
#pragma MUL
|
||||
#pragma BCD
|
||||
|
||||
#include "incs.h"
|
||||
#include <math.h>
|
||||
|
||||
// ========================================================
|
||||
// レジスタ名
|
||||
#define ACC_REG_WHOAMI 0x0F
|
||||
#define ACC_REG_CTRL1 0x20
|
||||
#define ACC_REG_CTRL5 0x24
|
||||
#define ACC_REG_X 0x28
|
||||
|
||||
// ビット位置
|
||||
#define ACC_bP_PM0 5
|
||||
#define ACC_bP_DR0 3
|
||||
|
||||
// ビット設定値
|
||||
#define ACC_BITS_PM_PDN 0
|
||||
#define ACC_BITS_PM_NORM 1
|
||||
#define ACC_BITS_PM_LP0R5 2
|
||||
#define ACC_BITS_PM_LP1 3
|
||||
#define ACC_BITS_PM_LP2 4
|
||||
#define ACC_BITS_PM_LP5 5
|
||||
#define ACC_BITS_PM_LP10 6
|
||||
|
||||
#define ACC_BITS_DR_50Hz 0
|
||||
#define ACC_BITS_DR_100Hz 1
|
||||
#define ACC_BITS_DR_400Hz 2
|
||||
#define ACC_BITS_DR_1000Hz 3
|
||||
|
||||
#define ACC_BITS_ALL_AXIS_ON 7
|
||||
|
||||
|
||||
#define VREG_BITMASK_ACC_CONF_ACQ ( 1 << 0 )
|
||||
#define VREG_BITMASK_ACC_CONF_HOSU ( 1 << 1 )
|
||||
|
||||
|
||||
|
||||
|
||||
// ========================================================
|
||||
task_status tsk_soft_int( );
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
・割り込みを確認してデータを吸い上げ、レジスタに書き出します
|
||||
・本当であればコールバック関数を登録しておけばいいじゃんとなるのですが、
|
||||
I2Cが使用中だったら?とか考えると私ではそこまでできないのです。
|
||||
・自動歩数計とかでも結局
|
||||
======================================================== */
|
||||
task_status_immed tsk_cbk_accero( )
|
||||
{ // (疑似)isrから登録されます
|
||||
|
||||
/*
|
||||
if(( system_status.pwr_state == OFF ) || ( system_status.pwr_state == BT_CHARGE ) )
|
||||
{
|
||||
return ( ERR_SUCCESS );
|
||||
}
|
||||
else
|
||||
{
|
||||
*/
|
||||
// 加速度センサデータレジスタへの反映
|
||||
if( iic_mcu_read( IIC_SLA_ACCEL, ( ACC_REG_X | 0x80 ), 6, &vreg_ctr[VREG_C_ACC_XL] )
|
||||
!= ERR_SUCCESS )
|
||||
{
|
||||
// 加速度センサが異常になったので止める
|
||||
vreg_ctr[VREG_C_ACC_CONFIG] &= ~( VREG_BITMASK_ACC_CONF_HOSU | VREG_BITMASK_ACC_CONF_ACQ );
|
||||
// vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_ACCERO_ERR;
|
||||
acc_hosu_set();
|
||||
return ( ERR_SUCCESS ); // タスクの削除は必要
|
||||
}
|
||||
else
|
||||
{
|
||||
// 正常時パス //
|
||||
// 加速度更新&割り込み
|
||||
if( (( vreg_ctr[VREG_C_ACC_CONFIG] & VREG_BITMASK_ACC_CONF_ACQ ) != 0 ) &&
|
||||
( system_status.pwr_state == ON )
|
||||
)
|
||||
{
|
||||
set_irq( VREG_C_IRQ1, REG_BIT_ACC_DAT_RDY );
|
||||
// ゴミデータのカラ読み
|
||||
if( ACC_VALID == 1 )
|
||||
{
|
||||
u8 temp[6];
|
||||
iic_mcu_read( IIC_SLA_ACCEL, ( ACC_REG_X | 0x80 ), 6, temp );
|
||||
}
|
||||
}
|
||||
if(( system_status.pwr_state != OFF ) &&
|
||||
( system_status.pwr_state != BT_CHARGE ) &&
|
||||
( ( vreg_ctr[VREG_C_ACC_CONFIG] & VREG_BITMASK_ACC_CONF_HOSU ) != 0 )
|
||||
)
|
||||
{
|
||||
DBG_LED_WIFI_2_on;
|
||||
pedometer(); // 歩数計
|
||||
DBG_LED_WIFI_2_off;
|
||||
}
|
||||
}
|
||||
return ( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*=======================================================
|
||||
加速度センサ透過アクセス リード
|
||||
========================================================*/
|
||||
task_status_immed acc_read( )
|
||||
{
|
||||
vreg_ctr[VREG_C_ACC_W_BUF] = iic_mcu_read_a_byte( IIC_SLA_ACCEL, vreg_ctr[VREG_C_ACC_R_ADRS] );
|
||||
// vreg_ctr[ VREG_C_ACC_R_BUF ] = iic_mcu_read_a_byte( IIC_SLA_ACCEL, vreg_ctr[VREG_C_ACC_R_ADRS] );
|
||||
vreg_ctr[VREG_C_IRQ1] |= REG_BIT_ACC_ACK;
|
||||
if( ( vreg_ctr[VREG_C_IRQ_MASK1] & REG_BIT_ACC_ACK ) == 0 )
|
||||
{
|
||||
IRQ0_ast;
|
||||
}
|
||||
return ( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*=========================================================
|
||||
加速度センサ透過アクセス ライト
|
||||
========================================================*/
|
||||
task_status_immed acc_write( )
|
||||
{
|
||||
iic_mcu_write_a_byte( IIC_SLA_ACCEL, vreg_ctr[VREG_C_ACC_W_ADRS], vreg_ctr[VREG_C_ACC_W_BUF] );
|
||||
vreg_ctr[VREG_C_IRQ1] |= REG_BIT_ACC_ACK;
|
||||
if( ( vreg_ctr[VREG_C_IRQ_MASK1] & REG_BIT_ACC_ACK ) == 0 )
|
||||
{
|
||||
IRQ0_ast;
|
||||
}
|
||||
return ( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*=========================================================
|
||||
自動歩数カウントモードにセット
|
||||
todo 他のモードだったら止めたり、復帰させたり
|
||||
割り込みルーチンなどでカウント判定が必要
|
||||
========================================================*/
|
||||
task_status_immed acc_hosu_set( )
|
||||
{
|
||||
u8 str_send_buf[4];
|
||||
|
||||
iic_mcu_read_a_byte( IIC_SLA_ACCEL, ACC_REG_WHOAMI );
|
||||
if( iic_mcu_bus_status == ERR_NOSLAVE )
|
||||
{
|
||||
vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_ACCERO_ERR;
|
||||
#ifdef _MCU_BSR_
|
||||
// PMK23 = 1;
|
||||
#endif
|
||||
return ( ERR_SUCCESS ); // とりあえず、タスクは削除しなくてはならない
|
||||
}else{
|
||||
vreg_ctr[ VREG_C_STATUS_1 ] &= ~REG_BIT_ACCERO_ERR;
|
||||
}
|
||||
|
||||
|
||||
str_send_buf[1] = 0x00; // ctrl2 HPF:normal, filterd, HPF for IRQ : dis/dis, HPF coeff:norm
|
||||
#ifdef _MODEL_WM0_
|
||||
str_send_buf[2] = 0x10; // 3 IRQ pol :Active HI, Drive:Pushpull,
|
||||
/// IRQ2flg latch: auto clear after read, IRQ2 conf: IRQ( fall,shock,...)
|
||||
/// 1 : auto clear after read, conf: data ready
|
||||
#else
|
||||
# ifdef _MODEL_CTR_JIKKI_
|
||||
str_send_buf[2] = 0x10;
|
||||
# else
|
||||
str_send_buf[2] = 0x02; // 3 IRQ pol :Active HI, Drive:Pushpull,
|
||||
/// IRQ2flg latch: auto clear after read, IRQ2 conf: IRQ( fall,shock,...)
|
||||
/// 1 : auto clear after read, conf: data ready
|
||||
# endif
|
||||
#endif
|
||||
|
||||
str_send_buf[3] = 0x80; // ctrl3 block update:enable, MSB first, scale: +-2G(default), selftest: dis
|
||||
|
||||
if( ( vreg_ctr[VREG_C_ACC_CONFIG] &
|
||||
( VREG_BITMASK_ACC_CONF_HOSU | VREG_BITMASK_ACC_CONF_ACQ ) ) == 0 )
|
||||
{
|
||||
#ifdef _MCU_BSR_
|
||||
PMK23 = 1;
|
||||
#endif
|
||||
// 完全停止
|
||||
str_send_buf[0] =
|
||||
( ACC_BITS_PM_PDN << ACC_bP_PM0 | 0 << ACC_bP_DR0 | ACC_BITS_ALL_AXIS_ON );
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef _MCU_BSR_
|
||||
PMK23 = 0;
|
||||
#endif
|
||||
// 100Hz 自動取り込み
|
||||
str_send_buf[0] =
|
||||
( ACC_BITS_PM_NORM << ACC_bP_PM0
|
||||
| ACC_BITS_DR_100Hz << ACC_bP_DR0
|
||||
| ACC_BITS_ALL_AXIS_ON );
|
||||
}
|
||||
iic_mcu_write( IIC_SLA_ACCEL, ( ACC_REG_CTRL1 | 0x80 ), 4, str_send_buf );
|
||||
|
||||
// カラ読み
|
||||
if( ACC_VALID == 1 )
|
||||
{
|
||||
if( system_status.pwr_state == ON )
|
||||
{
|
||||
u8 temp[6];
|
||||
iic_mcu_read( IIC_SLA_ACCEL, ( ACC_REG_X | 0x80 ), 6, temp );
|
||||
}
|
||||
}
|
||||
return ( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
加速度センサ割り込み
|
||||
I2Cが使用中かもしれないので、読み出しタスクの登録を行うのみ
|
||||
======================================================== */
|
||||
__interrupt void intp23_ACC_ready( )
|
||||
{
|
||||
EI();
|
||||
if( ( vreg_ctr[VREG_C_ACC_CONFIG] & 0x03 ) != 0x00 )
|
||||
{
|
||||
if( ( system_status.pwr_state == ON ) || ( system_status.pwr_state == SLEEP ) )
|
||||
{
|
||||
if( ACC_VALID )
|
||||
{
|
||||
renge_task_immed_add( tsk_cbk_accero );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,14 @@
|
||||
#ifndef _accero_
|
||||
#define _accero_
|
||||
|
||||
|
||||
#include "jhl_defs.h"
|
||||
#include "pedometer.h"
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
task_status_immed tsk_cbk_accero( );
|
||||
task_status_immed acc_hosu_set( );
|
||||
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,356 @@
|
||||
/* ========================================================
|
||||
藤田@開技
|
||||
nintendo
|
||||
'09 Apr
|
||||
======================================================== */
|
||||
#include "incs.h"
|
||||
#include "adc.h"
|
||||
#include "pm.h"
|
||||
|
||||
#include "led.h"
|
||||
|
||||
bit adc_updated;
|
||||
|
||||
u8 adc_raw_vol;
|
||||
u8 adc_raw_dep;
|
||||
|
||||
#define INTERVAL_TSK_ADC 3
|
||||
/* ========================================================
|
||||
ADC設定と、開始
|
||||
|
||||
以下のピンは主にここで操作・監視されます。
|
||||
・BT_TEMP,_P
|
||||
・ADIN1
|
||||
・VOL
|
||||
|
||||
関係ありそうですが別のところで管理しています
|
||||
・PM_BT_DET,_P PM_init
|
||||
|
||||
・8tics毎に呼ばれ、3チャンネル分取り込むとADCを停止します。
|
||||
タスク起動時、レジスタには前回の取り込み値が入っています。
|
||||
======================================================== */
|
||||
/*
|
||||
// max -4db
|
||||
static const u8 slider_to_codec[64] =
|
||||
{
|
||||
127, 125, 124, 123, 121, 120, 119, 117,
|
||||
116, 115, 113, 112, 111, 109, 108, 107,
|
||||
105, 104, 103, 101, 100, 99, 98, 96,
|
||||
95, 94, 92, 91, 90, 88, 87, 86,
|
||||
84, 83, 82, 80, 79, 78, 76, 75,
|
||||
74, 72, 71, 70, 69, 67, 66, 65,
|
||||
63, 62, 61, 59, 58, 57, 55, 54,
|
||||
53, 51, 50, 49, 47, 46, 45, 44
|
||||
};
|
||||
*/
|
||||
|
||||
// max -10db
|
||||
static const u8 slider_to_codec[64] =
|
||||
{
|
||||
127, 126, 125, 124, 123, 122, 121, 120,
|
||||
119, 118, 117, 116, 115, 114, 113, 112,
|
||||
111, 110, 109, 109, 108, 107, 106, 105,
|
||||
104, 103, 102, 101, 100, 99, 98, 97,
|
||||
96, 95, 94, 93, 92, 91, 90, 89,
|
||||
88, 87, 86, 85, 84, 83, 82, 81,
|
||||
81, 80, 79, 78, 77, 76, 75, 74,
|
||||
73, 72, 71, 70, 69, 68, 67, 66
|
||||
};
|
||||
|
||||
void tsk_adc( )
|
||||
{
|
||||
static u8 task_interval = 0;
|
||||
static u8 old_tune;
|
||||
static u8 sndvol_codec;
|
||||
static u8 bt_temp_old;
|
||||
|
||||
if( task_interval-- != 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
task_interval = (u8)( INTERVAL_TSK_ADC / SYS_INTERVAL_TICK );
|
||||
}
|
||||
|
||||
|
||||
if( adc_updated )
|
||||
{
|
||||
if( system_status.pwr_state == ON )
|
||||
{
|
||||
// Tune ///////////////////////////////////////
|
||||
{
|
||||
// 似非ヒステリシス V2
|
||||
// ガリオームには適さない
|
||||
#define KIKAN 32
|
||||
static u8 old_value;
|
||||
static s8 diffs;
|
||||
u8 temp;
|
||||
|
||||
if( abs( adc_raw_dep - old_value ) >= 2 )
|
||||
{
|
||||
// 大きく離れた
|
||||
vreg_ctr[ VREG_C_TUNE ] = adc_raw_dep;
|
||||
old_value = adc_raw_dep;
|
||||
#if 0
|
||||
割り込み入れない;
|
||||
割り込みを入れるようであれば、ちゃんと変化チェックする;
|
||||
|
||||
set_irq( VREG_C_IRQ0, REG_BIT_VR_TUNE_CHANGE );
|
||||
#endif
|
||||
diffs = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 近所の値でも、ある期間でいっぱい偏っていたらそっちに寄せる
|
||||
static u8 kikan_count = KIKAN;
|
||||
if( old_value < adc_raw_dep )
|
||||
{
|
||||
diffs += 1;
|
||||
}
|
||||
else if( old_value > adc_raw_dep )
|
||||
{
|
||||
diffs -= 1;
|
||||
}
|
||||
|
||||
if( --kikan_count == 0 )
|
||||
{
|
||||
if( diffs >= KIKAN && ( diffs < 64 ))
|
||||
{
|
||||
old_value += 1;
|
||||
}
|
||||
else if( ( diffs <= ( 256 - KIKAN )) && ( diffs > ( 128 + 64 ) )) // あらー?
|
||||
{
|
||||
old_value -= 1;
|
||||
}
|
||||
vreg_ctr[ VREG_C_TUNE ] = old_value;
|
||||
kikan_count = KIKAN;
|
||||
diffs = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
vreg_ctr[ VREG_C_DBG1 ] = vreg_ctr[ VREG_C_TUNE ];
|
||||
vreg_ctr[ VREG_C_DBG2 ] = adc_raw_dep; // dbg
|
||||
|
||||
// Volume /////////////////////////////////////
|
||||
{
|
||||
// 似非ヒステリシスを付けて64段
|
||||
u8 temp;
|
||||
static u8 vol_old;
|
||||
static u8 force_update_vol;
|
||||
|
||||
if( abs( adc_raw_vol - vol_old ) >= 2 ) // 生値でこれくらいずれたら更新
|
||||
{
|
||||
// if( vreg_ctr[ VREG_C_SND_VOL ] != ( adc_raw_vol / 4 ) )
|
||||
{
|
||||
vol_old = adc_raw_vol;
|
||||
// レジスタ更新
|
||||
vreg_ctr[ VREG_C_SND_VOL ] = ( adc_raw_vol / 4 );
|
||||
vreg_twl[ REG_TWL_INT_ADRS_VOL ] = adc_raw_vol / ( 256 / 32 ); // ←adc値でよい
|
||||
|
||||
// codecに伝える
|
||||
iic_mcu_write_a_byte( IIC_SLA_CODEC, CODEC_REG_VOL, slider_to_codec[ adc_raw_vol / 4 ] );
|
||||
#ifndef _MODEL_CTR_
|
||||
iic_mcu_write_a_byte( IIC_SLA_DCP, 0, slider_to_codec[ ( 255 - adc_raw_vol ) / 4 ] ); // todo
|
||||
#endif
|
||||
// set_irq( VREG_C_IRQ0, REG_BIT_VR_SNDVOL_CHANGE ); // 割り込み廃止
|
||||
force_update_vol = 100;
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
// ポーリング
|
||||
if( --force_update_vol == 0 )
|
||||
{
|
||||
vol_old = adc_raw_vol;
|
||||
// レジスタ更新
|
||||
// vreg_ctr[ VREG_C_SND_VOL ] = temp;
|
||||
// vreg_twl[ REG_TWL_INT_ADRS_VOL ] = adc_raw_vol / ( 256 / 32 ); // ←adc値でよい
|
||||
// codecに伝える
|
||||
iic_mcu_write_a_byte( IIC_SLA_CODEC, CODEC_REG_VOL, slider_to_codec[ adc_raw_vol / 4 ] );
|
||||
force_update_vol = 100;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// TUNE_LED ///////////////////////////////////
|
||||
// ここで?仕様?
|
||||
{
|
||||
switch ( vreg_ctr[VREG_C_LED_TUNE] )
|
||||
{
|
||||
case LED_TUNE_ILM_ON:
|
||||
LED_duty_TUNE = vreg_ctr[VREG_C_LED_BRIGHT];
|
||||
break;
|
||||
|
||||
case LED_TUNE_ILM_SVR:
|
||||
LED_duty_TUNE = vreg_ctr[VREG_C_TUNE] / 16;
|
||||
break;
|
||||
|
||||
case LED_TUNE_ILM_OFF:
|
||||
default:
|
||||
LED_duty_TUNE = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
adc_updated = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ADCEN = 1;
|
||||
ADM = 0b00011011; // セレクトモード、章圧、fCLK/6 ///ここから ↓
|
||||
|
||||
ADPC = 0x06; // ADCポートのセレクト
|
||||
ADS = ADC_SEL_TUNE;
|
||||
NOP();
|
||||
NOP();
|
||||
NOP();
|
||||
NOP();
|
||||
NOP();
|
||||
NOP();
|
||||
NOP();
|
||||
NOP();
|
||||
ADCS = 1; // AD開始。 /// ここまで ↑ までに1us=8clk以上開ける
|
||||
|
||||
ADIF = 0;
|
||||
ADMK = 0;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* ========================================================
|
||||
過去3つのminでもMAXでもない値を返す
|
||||
突発的なノイズを除く。
|
||||
根本対策ではないが、これはこれで使い道がある。
|
||||
======================================================== */
|
||||
static u8 getmean3( u8 * hist )
|
||||
{
|
||||
if( *hist > *( hist + 1 ) )
|
||||
{
|
||||
if( *hist > *( hist + 2 ) )
|
||||
{
|
||||
return( ( *( hist + 1 ) > *( hist + 2 ) ) ? *( hist + 1 ) : *( hist + 2 ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
return( *hist );
|
||||
}
|
||||
}else{
|
||||
if( *hist > *( hist + 2 ) )
|
||||
{
|
||||
return( *hist );
|
||||
}
|
||||
else
|
||||
{
|
||||
return( ( *( hist + 1 ) < *( hist + 2 ) ) ? *( hist + 1 ) : *( hist + 2 ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
自前で次のチャンネル
|
||||
一通り終わったら止める
|
||||
======================================================== */
|
||||
__interrupt void int_adc( )
|
||||
{
|
||||
static u8 hist_tune[3];
|
||||
static u8 hist_snd_vol[3];
|
||||
static u8 hist_bt_temp[3];
|
||||
static u8 index;
|
||||
|
||||
EI( );
|
||||
switch ( ADS )
|
||||
{
|
||||
/*
|
||||
case ( ADC_SEL_AMB_BRIT ):
|
||||
vreg_ctr[ VREG_C_AMBIENT_BRIGHTNESS ] = ADCRH;
|
||||
break;
|
||||
*/
|
||||
|
||||
case ( ADC_SEL_TUNE ):
|
||||
hist_tune[index] = ADCRH;
|
||||
#ifdef _MODEL_WM0_
|
||||
adc_raw_dep = 255 - getmean3( hist_tune );
|
||||
#else
|
||||
adc_raw_dep = getmean3( hist_tune );
|
||||
#endif
|
||||
break;
|
||||
|
||||
case ( ADC_SEL_VOL ):
|
||||
hist_snd_vol[index] = ADCRH;
|
||||
#ifdef _MODEL_CTR_JIKKI_
|
||||
adc_raw_vol = ( 255 - getmean3( hist_snd_vol ));
|
||||
#else
|
||||
adc_raw_vol = getmean3( hist_snd_vol );
|
||||
#endif
|
||||
// TWL用レジスタ(32段)の更新。アトミックな処理として扱わないと不都合が。
|
||||
/// 割り込みはHorizonを通してコマンドを発行されるのを待てばよい
|
||||
break;
|
||||
|
||||
case ( ADC_SEL_BATT_TEMP ):
|
||||
hist_bt_temp[index] = ADCRH;
|
||||
raw_adc_temperature = getmean3( hist_bt_temp );
|
||||
renge_task_immed_add( PM_bt_temp_update );
|
||||
break;
|
||||
|
||||
case ( ADC_SEL_BATT_DET ):
|
||||
// vreg_ctr[ VREG_C_DBG_BATT_DET ] = ADCRH;
|
||||
// todo
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
// もっとまともな書き方がありそうだ
|
||||
// if( ADS == ADC_SEL_BATT_DET ){
|
||||
if( ADS != ADC_SEL_BATT_TEMP )
|
||||
{ // 電池判別は電源投入の一回のみ
|
||||
ADS += 1; // 次のチャンネル
|
||||
BT_TEMP_P = 1; // 電池温度監視スタート
|
||||
}
|
||||
else
|
||||
{
|
||||
ADCEN = 0; // 止めてしまう
|
||||
BT_TEMP_P = 0; // 電池温度監視スタート
|
||||
adc_updated = 1;
|
||||
index = ( index == 2 ) ? 0 : ( index + 1 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
tsk_adcと競合することを考慮していません。
|
||||
======================================================== */
|
||||
u8 get_adc( u8 ch )
|
||||
{
|
||||
u8 temp;
|
||||
|
||||
ADMK = 1;
|
||||
ADIF = 0;
|
||||
|
||||
ADCEN = 1;
|
||||
ADCS = 0;
|
||||
ADM = 0b00100011; // セレクトモード、昇圧、fCLK/6 ///ここから↓
|
||||
|
||||
ADPC = 0x06; // ADCポートのセレクト
|
||||
ADS = ch;
|
||||
NOP();
|
||||
NOP();
|
||||
NOP();
|
||||
NOP();
|
||||
NOP();
|
||||
NOP();
|
||||
NOP();
|
||||
NOP();
|
||||
ADCS = 1; // AD開始。 /// ここまで↑ に、1us以上開ける
|
||||
|
||||
ADMK = 0;
|
||||
while( ADIF == 0 ){;}
|
||||
temp = ADCRH;
|
||||
ADCEN = 0;
|
||||
|
||||
return ( temp );
|
||||
}
|
||||
@ -0,0 +1,43 @@
|
||||
#ifndef __adc__
|
||||
#define __adc__
|
||||
|
||||
#include "jhl_defs.h"
|
||||
|
||||
///////////////////////////////////////
|
||||
// ANI2 P22
|
||||
#define ADC_SEL_AMB_BRIT 0x02
|
||||
|
||||
/*
|
||||
// ANI3 P23
|
||||
#define ADC_SEL_GYRO_YAW 0x03
|
||||
// ANI4 P24
|
||||
#define ADC_SEL_GYRO_PITCH 0x04
|
||||
// ANI5 P25
|
||||
#define ADC_SEL_GYRO_ROLL 0x05
|
||||
*/
|
||||
|
||||
// ANI6 P26
|
||||
#define ADC_SEL_TUNE 0x06
|
||||
// ANI7 P27
|
||||
#define ADC_SEL_VOL 0x07
|
||||
|
||||
// ANI8 P150
|
||||
#define ADC_SEL_BATT_TEMP 0x08
|
||||
// ANI9 P151
|
||||
#define ADC_SEL_BATT_DET 0x09
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////
|
||||
#define CODEC_REG_VOL 0x13
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////
|
||||
|
||||
|
||||
///////////////////////////////////////
|
||||
u8 get_adc( u8 ch );
|
||||
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,80 @@
|
||||
/* ========================================================
|
||||
各社バッテリーパラメータ
|
||||
======================================================== */
|
||||
enum BATT_VENDER {
|
||||
BT_PANASONIC, // open
|
||||
BT_UNKNOWN1,
|
||||
BT_UNKNOWN2,
|
||||
BT_UNKNOWN3,
|
||||
BT_UNKNOWN4,
|
||||
BT_UNKNOWN5,
|
||||
BT_UNKNOWN6, // gnd
|
||||
BT_MAXELL
|
||||
};
|
||||
|
||||
|
||||
static const u8 BT_PARAM[][64] = {
|
||||
// ID = 0 GND 白箱
|
||||
/// パラメータ無し
|
||||
{ // ID = 1 120 ohm
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
},
|
||||
{ // ID = 2 360 hom
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
},
|
||||
{ // ID = 3 750 ohm
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
},
|
||||
{ // ID = 4 1.3kohm
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
},
|
||||
{ // ID = 5 2.7kohm パナ
|
||||
0xAD, 0x30, 0xAE, 0x70, 0xB0, 0x00, 0xB3, 0x00,
|
||||
0xB4, 0x70, 0xB5, 0xA0, 0xB7, 0x80, 0xBA, 0x00,
|
||||
|
||||
0xBB, 0x90, 0xBD, 0x00, 0xBE, 0x00, 0xBF, 0xF0,
|
||||
0xC3, 0x00, 0xC5, 0xC0, 0xC8, 0x00, 0xCA, 0xC0,
|
||||
|
||||
0x04, 0x00, 0x12, 0x00, 0x0C, 0x10, 0x24, 0x00,
|
||||
0x10, 0xD0, 0x1B, 0xF0, 0x0A, 0xF0, 0x08, 0xE0,
|
||||
|
||||
0x0C, 0xF0, 0x08, 0xC0, 0x08, 0xB0, 0x07, 0xF0,
|
||||
0x0B, 0x00, 0x05, 0xD0, 0x02, 0x00, 0x09, 0x00
|
||||
},
|
||||
{ // ID = 6 8.2kohm
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
},
|
||||
{ // ID = 7 マクセル
|
||||
0xAD, 0x30, 0xAE, 0x70, 0xB0, 0x00, 0xB3, 0x00,
|
||||
0xB4, 0x70, 0xB5, 0xA0, 0xB7, 0x80, 0xBA, 0x00,
|
||||
|
||||
0xBB, 0x90, 0xBD, 0x00, 0xBE, 0x00, 0xBF, 0xF0,
|
||||
0xC3, 0x00, 0xC5, 0xC0, 0xC8, 0x00, 0xCA, 0xC0,
|
||||
|
||||
0x04, 0x00, 0x12, 0x00, 0x0C, 0x10, 0x24, 0x00,
|
||||
0x10, 0xD0, 0x1B, 0xF0, 0x0A, 0xF0, 0x08, 0xE0,
|
||||
|
||||
0x0C, 0xF0, 0x08, 0xC0, 0x08, 0xB0, 0x07, 0xF0,
|
||||
0x0B, 0x00, 0x05, 0xD0, 0x02, 0x00, 0x09, 0x00
|
||||
}
|
||||
};
|
||||
|
||||
static const unsigned char BT_PANA_RCOMP = 135;
|
||||
static const float BT_PANA_TEMPCOUP = 0.3;
|
||||
static const float BT_PANA_TEMPCODN = 0.5;
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,52 @@
|
||||
;;; 領域の定義
|
||||
;32kB = 0x7FFF
|
||||
MEMORY BCL0: (00000H, 01000H )
|
||||
;MEMORY BCL1: (01000H, 01000H ) ; バックアップ領域
|
||||
MEMORY ROM : (02000H, 03000H )
|
||||
;MEMORY ROM_BKUP:(05000H, 03000H ) ; バックアップ領域
|
||||
;MEMORY OCD :(0FC00H, 00400H ) ; OCDが使っているらしい
|
||||
|
||||
|
||||
;;; セグメントの割当先設定
|
||||
; ブートブロック0に割り当てる
|
||||
MERGE LDR_CODE: =BCL0
|
||||
MERGE LDR_CODL: =BCL0
|
||||
;MERGE @@LCODE : AT( 0E00H ) =BCL0 ; スタートアップルーチン
|
||||
MERGE @@LCODE : =BCL0 ; スタートアップルーチン
|
||||
|
||||
;MERGE LDR_RINT:=BCL0
|
||||
;MERGE LDR_CNST:=BCL0
|
||||
MERGE LDR_CNSL:=BCL0
|
||||
|
||||
|
||||
; 通常領域にあてる物達
|
||||
MERGE ROM_CODE:=ROM
|
||||
;MERGE ROM_CNST:=ROM
|
||||
|
||||
|
||||
; ちょっと、困るんですが、こうしないと初期値がセットされない
|
||||
MERGE @@CNST: =ROM
|
||||
MERGE @@R_INIT: =ROM
|
||||
|
||||
|
||||
|
||||
; 謹製フラッシュライブラリ
|
||||
; MERGE FSL_CODE:=FSL
|
||||
MERGE FSL_CODE:=BCL0
|
||||
|
||||
|
||||
; マジックナンバー
|
||||
;; magic.cの中で指定
|
||||
|
||||
|
||||
;--- RAM領域 -------------------------------------------------------
|
||||
;
|
||||
; RAM1,RAM2領域はユーザープログラムで使用しても良いですが、セルフプログラム時は
|
||||
; セルフプログラムのライブラリが使用するため、値は破壊されます。
|
||||
;
|
||||
memory RAM2 : (0FFE20H, 00C0H) ; セルフプログラム時、使用禁止領域
|
||||
;memory SLF_RAM : (0FFE00H, 0020H) ; Slef Program予約領域[使用禁止]
|
||||
memory RAM : (0FF900H, 0500H) ; ユーザーRAM領域
|
||||
;memory SLF_RAM : (0FF900H, 0020H) ; Slef Program予約領域[使用禁止]
|
||||
|
||||
|
||||
@ -0,0 +1,56 @@
|
||||
#ifndef __bsr_system__
|
||||
#define __bsr_system__
|
||||
|
||||
// イベントループのステート
|
||||
enum pwr_state_
|
||||
{
|
||||
OFF_TRIG = 0,
|
||||
OFF,
|
||||
ON_TRIG,
|
||||
ON,
|
||||
SLEEP_TRIG,
|
||||
SLEEP,
|
||||
// WAKE,
|
||||
BT_CHARGE,
|
||||
};
|
||||
|
||||
enum poweron_reason_
|
||||
{
|
||||
NONE = 0,
|
||||
PWSW,
|
||||
RTC_ALARM,
|
||||
};
|
||||
|
||||
|
||||
enum model_
|
||||
{
|
||||
MODEL_JIKKI = 0,
|
||||
MODEL_TS_BOARD,
|
||||
MODEL_SHIROBAKO,
|
||||
MODEL_RESERVED1,
|
||||
MODEL_RESERVED2,
|
||||
MODEL_RESERVED3,
|
||||
};
|
||||
|
||||
|
||||
|
||||
// タスクシステムの状態情報など
|
||||
typedef struct
|
||||
{
|
||||
enum pwr_state_ pwr_state;
|
||||
enum poweron_reason_ poweron_reason;
|
||||
unsigned char dipsw0:1;
|
||||
unsigned char dipsw1:1;
|
||||
unsigned char dipsw2:1;
|
||||
unsigned char reboot:1;
|
||||
enum model_ model;
|
||||
}
|
||||
system_status_;
|
||||
|
||||
|
||||
|
||||
extern system_status_ system_status;
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,73 @@
|
||||
#ifndef __config__
|
||||
#define __config__
|
||||
|
||||
#define _debug_
|
||||
//#define _debug_led_
|
||||
|
||||
|
||||
#define MCU_VER_MAJOR 0x00
|
||||
#define MCU_VER_MINOR 0x13
|
||||
|
||||
#define _OVERCLOCK_
|
||||
|
||||
//#define PM_CCIC_TIM
|
||||
|
||||
// 古い(C)電源ボード
|
||||
//#define _PM_BUG_
|
||||
|
||||
//#define _PARRADIUM_
|
||||
//#define _MODEL_TEG2_
|
||||
// ↑TEG2 CPU + Type-T
|
||||
//#define _MODEL_WM0_
|
||||
//#define _MODEL_WM0_TEG2_CTRC_
|
||||
//#define _MODEL_TS0_
|
||||
// ↑TEG2 CPU + Type-C
|
||||
//#define _MODEL_CTR_TS_
|
||||
// ↑FINAL SoC + Type-C
|
||||
#define _MODEL_CTR_JIKKI_
|
||||
|
||||
|
||||
//#define _SW_HOME_ENABLE_
|
||||
|
||||
// ---------------------------------- //
|
||||
#ifdef _MODEL_CTR_TS_
|
||||
#ifdef _MODEL_CTR_JIKKI_
|
||||
どちらか一方だけセットして下さい。
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef _MODEL_CTR_TS_
|
||||
#define _MODEL_CTR_
|
||||
#endif
|
||||
|
||||
#ifdef _MODEL_CTR_JIKKI_
|
||||
#define _MODEL_CTR_
|
||||
#endif
|
||||
|
||||
|
||||
// ---------------------------------- //
|
||||
#ifdef _MODEL_TEG2_
|
||||
#define _PMIC_TWL_
|
||||
#define _MCU_KE3_
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef _MODEL_WM0_
|
||||
#define _PMIC_TWL_
|
||||
#define _MCU_BSR_
|
||||
#define _SW_HOME_ENABLE_
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef _MODEL_TS0_
|
||||
#define _PMIC_CTR_
|
||||
#define _MCU_BSR_
|
||||
#endif
|
||||
|
||||
#ifdef _MODEL_CTR_
|
||||
#define _PMIC_CTR_
|
||||
#define _MCU_BSR_
|
||||
#define _SW_HOME_ENABLE_
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,362 @@
|
||||
/*==============================================================================================*/
|
||||
/* Project = Selfprogramming library for 78K0R/Ix3/Kx3-L Single Voltage SST (MF2) Flash */
|
||||
/* Module = fsl.h */
|
||||
/* Version = V1.01 */
|
||||
/* Date = 28.03.2008 11:45:42 */
|
||||
/*==============================================================================================*/
|
||||
/* COPYRIGHT */
|
||||
/*==============================================================================================*/
|
||||
/* Copyright (c) 2007 by NEC Electronics (Europe) GmbH, */
|
||||
/* a company of the NEC Electronics Corporation */
|
||||
/*==============================================================================================*/
|
||||
/* Purpose: */
|
||||
/* constant, type and function prototype definitions used by the FSL */
|
||||
/* */
|
||||
/*==============================================================================================*/
|
||||
/* */
|
||||
/* Warranty Disclaimer */
|
||||
/* */
|
||||
/* Because the Product(s) is licensed free of charge, there is no warranty of any kind */
|
||||
/* whatsoever and expressly disclaimed and excluded by NEC, either expressed or implied, */
|
||||
/* including but not limited to those for non-infringement of intellectual property, */
|
||||
/* merchantability and/or fitness for the particular purpose. NEC shall not have any obligation */
|
||||
/* to maintain, service or provide bug fixes for the supplied Product(s) and/or the Application.*/
|
||||
/* */
|
||||
/* Each User is solely responsible for determining the appropriateness of using the Product(s) */
|
||||
/* and assumes all risks associated with its exercise of rights under this Agreement, */
|
||||
/* including, but not limited to the risks and costs of program errors, compliance with */
|
||||
/* applicable laws, damage to or loss of data, programs or equipment, and unavailability or */
|
||||
/* interruption of operations. */
|
||||
/* */
|
||||
/* Limitation of Liability */
|
||||
/* */
|
||||
/* In no event shall NEC be liable to the User for any incidental, consequential, indirect, */
|
||||
/* or punitive damage (including but not limited to lost profits) regardless of whether */
|
||||
/* such liability is based on breach of contract, tort, strict liability, breach of warranties, */
|
||||
/* failure of essential purpose or otherwise and even if advised of the possibility of */
|
||||
/* such damages. NEC shall not be liable for any services or products provided by third party */
|
||||
/* vendors, developers or consultants identified or referred to the User by NEC in connection */
|
||||
/* with the Product(s) and/or the Application. */
|
||||
/* */
|
||||
/*==============================================================================================*/
|
||||
/* Environment: PM plus (V6.30) */
|
||||
/* RA78K0(V1.20) */
|
||||
/* CC78K0(V2.00) */
|
||||
/*==============================================================================================*/
|
||||
|
||||
#ifndef __FSL_H_INCLUDED
|
||||
#define __FSL_H_INCLUDED
|
||||
|
||||
|
||||
/*==============================================================================================*/
|
||||
/* FSL type definitions */
|
||||
/*==============================================================================================*/
|
||||
typedef unsigned char fsl_u08;
|
||||
typedef unsigned int fsl_u16;
|
||||
typedef unsigned long int fsl_u32;
|
||||
|
||||
|
||||
/*==============================================================================================*/
|
||||
/* constant definitions */
|
||||
/*==============================================================================================*/
|
||||
|
||||
/*status code definitions returned by the FSL functions */
|
||||
#define FSL_OK 0x00
|
||||
#define FSL_ERR_FLMD0 0x01
|
||||
#define FSL_ERR_PARAMETER 0x05
|
||||
#define FSL_ERR_PROTECTION 0x10
|
||||
#define FSL_ERR_ERASE 0x1A
|
||||
#define FSL_ERR_BLANKCHECK 0x1B
|
||||
#define FSL_ERR_IVERIFY 0x1B
|
||||
#define FSL_ERR_WRITE 0x1C
|
||||
#define FSL_ERR_EEP_IVERIFY 0x1D
|
||||
#define FSL_ERR_EEP_BLANKCHECK 0x1E
|
||||
#define FSL_ERR_INTERRUPTION 0x1F
|
||||
|
||||
|
||||
/*==============================================================================================*/
|
||||
/* global function prototypes */
|
||||
/*==============================================================================================*/
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: initialization of selfprogramming environment */
|
||||
/* After initialization: */
|
||||
/* - the pointer to the data-buffer is stored */
|
||||
/* - all timing data are re-calculated according to the used system clock */
|
||||
/* */
|
||||
/* CAUTION: */
|
||||
/* The FSL_Init(&data_buffer) function is interruptible. Please use the */
|
||||
/* FSL_Init_cont(&data_buffer) to recall it as long return status is 0x1F. */
|
||||
/* */
|
||||
/* Input: data_buffer_pu08 - pointer to a data buffer of N...256 bytes */
|
||||
/* (used for data exchange between firmware and application) */
|
||||
/* Output: - */
|
||||
/* Returned: u08, status_code */
|
||||
/* = 0x00(FSL_OK), normal and means initialization OK */
|
||||
/* = 0x1F(FSL_ERR_INTERRUPTION), initialization interrupted by user interrupt*/
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_Init( fsl_u08 * data_buffer_pu08 );
|
||||
extern fsl_u08 FSL_Init_cont( fsl_u08 * data_buffer_pu08 );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: checks the voltage level (high or low) at FLMD0 pin */
|
||||
/* Input: - */
|
||||
/* Output: - */
|
||||
/* Returned: fsl_u08, status_code */
|
||||
/* = 0x00(FSL_OK), normal and means FLMD0=HIGH */
|
||||
/* = 0x01(FSL_ERR_FLMD0), error, FLMD0=LOW */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_ModeCheck( void );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: checks if specified block is blank */
|
||||
/* Input: block_u16 - block number has to be checked */
|
||||
/* Output: - */
|
||||
/* Returned: fsl_u08, status_code */
|
||||
/* = 0x00(FSL_OK), normal and means "block is blank" */
|
||||
/* = 0x05(FSL_ERR_PARAMETER), parameter error */
|
||||
/* = 0x1B(FSL_ERR_BLANKCHECK), blank-check error, means "block not blank" */
|
||||
/* = 0x1F(FSL_ERR_INTERRUPTION), blank-check interrupted by user interrupt */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_BlankCheck( fsl_u16 block_u16 );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: erase specified block */
|
||||
/* Input: block_u16 - block number has to be erase */
|
||||
/* Output: - */
|
||||
/* Returned: fsl_u08, status_code */
|
||||
/* = 0x00(FSL_OK), normal and means "block erased successfully" */
|
||||
/* = 0x05(FSL_ERR_PARAMETER), parameter error */
|
||||
/* = 0x10(FSL_ERR_PROTECTION), tried to erase protected area */
|
||||
/* = 0x1A(FSL_ERR_ERASE), erase error, retry up to max. 255 times */
|
||||
/* = 0x1F(FSL_ERR_INTERRUPTION), erasing interrupted by user interrupt */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_Erase( fsl_u16 block_u16 );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: performs internal verify on specified block */
|
||||
/* Input: block_u16 - block number has to be verified */
|
||||
/* Output: - */
|
||||
/* Returned: fsl_u08, status_code */
|
||||
/* = 0x00(FSL_OK), normal and means "block is verified" */
|
||||
/* = 0x05(FSL_ERR_PARAMETER), parameter error */
|
||||
/* = 0x1B(FSL_ERR_IVERIFY), internal verify error */
|
||||
/* = 0x1F(FSL_ERR_INTERRUPTION), verify interrupted by user interrupt */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_IVerify( fsl_u16 block_u16 );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: writes N words from the data buffer into flash */
|
||||
/* Input: s_address_u32 - starting flash address the data has to be written */
|
||||
/* See Condition 2) please. */
|
||||
/* my_wordcount_u08 - number of words (4 bytes) has to be written */
|
||||
/* Output: - */
|
||||
/* Condition: 1) (s_address_u32 MOD 4 == 0) */
|
||||
/* 2) most significant byte (MSB) of s_address_u32 has to be 0x00. */
|
||||
/* Means: 0x00abcdef 24 bit flash address allowed */
|
||||
/* 3) (word_count_u08 <= sizeof(data buffer)) NOT CHECKED BY LIBRARY !!!!! */
|
||||
/* Changed: - */
|
||||
/* Returned: fsl_u08, status code */
|
||||
/* = 0x00(FSL_OK), normal */
|
||||
/* = 0x05(FSL_ERR_PARAMETER), parameter error */
|
||||
/* = 0x10(FSL_ERR_PROTECTION), protection error */
|
||||
/* = 0x1C(FSL_ERR_WRITE), write error */
|
||||
/* = 0x1F(FSL_ERR_INTERRUPTION), write interrupted by user interrupt */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_Write( fsl_u32 s_address_u32, fsl_u08 word_count_u08 );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: writes N words from the data buffer into flash */
|
||||
/* Before "writing" a N-word blankcheck is performed. */
|
||||
/* After "writing" a N-Word internal verify is performed. */
|
||||
/* Input: s_address_u32 - starting destination address has to be written */
|
||||
/* my_wordcount_u08 - number of words (4 bytes) has to be written */
|
||||
/* Output: - */
|
||||
/* Condition: 1) (s_address_u32 MOD 4 == 0) */
|
||||
/* 2) (word_count_u08 <= sizeof(data buffer)) NOT CHECKED BY FIRMWARE !!!!! */
|
||||
/* Changed: - */
|
||||
/* Returned: fsl_u08, status code */
|
||||
/* = 0x00(FSL_OK), normal */
|
||||
/* = 0x05(FSL_ERR_PARAMETER), parameter error */
|
||||
/* = 0x10(FSL_ERR_PROTECTION), protection error */
|
||||
/* = 0x1C(FSL_ERR_WRITE), write error */
|
||||
/* = 0x1D(FSL_ERR_EEP_IVERIFY), verify error */
|
||||
/* = 0x1E(FSL_ERR_EEP_BLANKCHECK), blankcheck error */
|
||||
/* = 0x1F(FSL_ERR_INTERRUPTION), write interrupted by user interrupt */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_EEPROMWrite( fsl_u32 s_address_u32,
|
||||
fsl_u08 word_count_u08 );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: reads the security information */
|
||||
/* Input: destination_pu16 - destination address of the security info */
|
||||
/* The format of the security info is: "unsigned short int" */
|
||||
/* */
|
||||
/* Format of the security info: */
|
||||
/* bit_0 = 0 -> chip erase command disabled, otherwise enabled */
|
||||
/* bit_1 = 0 -> block erase command disabled, otherwise enabled */
|
||||
/* bit_2 = 0 -> write command disabled, otherwise enabled */
|
||||
/* bit_4 = 0 -> boot-area re-programming disabled, otherwise enabled */
|
||||
/* bit_8...bit_15 = 03H -> last block of the boot-area */
|
||||
/* other bits = 1 */
|
||||
/* Output: - */
|
||||
/* Changed: content of the data_buffer */
|
||||
/* Returned: fsl_u08, status code */
|
||||
/* = 0x00(FSL_OK), normal */
|
||||
/* = 0x05(FSL_ERR_PARAMETER), parameter error */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_GetSecurityFlags( fsl_u16 * destination_pu16 );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: read the boot flag i */
|
||||
/* Input: destination_pu08 - destination address of the bootflag info */
|
||||
/* The format of the boot-flag info is: "unsigned char" */
|
||||
/* The value of the boot info is 0x00 for cluster 0 and 0x01 for cluster 1. */
|
||||
/* Output: - */
|
||||
/* Changed: content of the data_buffer */
|
||||
/* Returned: fsl_u08, status code */
|
||||
/* = 0x00(FSL_OK), normal */
|
||||
/* = 0x05(FSL_ERR_PARAMETER), parameter error */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_GetActiveBootCluster( fsl_u08 * destination_pu08 );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: puts the last address of the specified block into *destination_pu32 */
|
||||
/* Input: *destination_pu32 - destination where the last-block-address */
|
||||
/* should be stored */
|
||||
/* block_u16 - block number of the last address is needed */
|
||||
/* Changed: - */
|
||||
/* Returned: fsl_u08, status code */
|
||||
/* = 0x00(FSL_OK), normal */
|
||||
/* = 0x05(FSL_ERR_PARAMETER), parameter error */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_GetBlockEndAddr( fsl_u32 * destination_pu32,
|
||||
fsl_u16 block_u16 );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: puts the information about the protected flash area into the function parameter */
|
||||
/* Input: *start_block_pu16 - destination where the FSW start block should be stored */
|
||||
/* *end_block_pu16 - destination where the FSW end block should be stored */
|
||||
/* Changed: - */
|
||||
/* Returned: fsl_u08, status code */
|
||||
/* = 0x00(FSL_OK), normal */
|
||||
/* = 0x05(FSL_ERR_PARAMETER), parameter error */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_GetFlashShieldWindow( fsl_u16 * start_block_pu16,
|
||||
fsl_u16 * end_block_pu16 );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: defines a new Flash-Shield-Window area inside the flash memory */
|
||||
/* Input: start_block_u16 - starting block of the Flash-Shield-Window (FSW) */
|
||||
/* end_block_u16 - ending block of the flash-Shield-Window (FSW) */
|
||||
/* Changed: - */
|
||||
/* Returned: fsl_u08, status code */
|
||||
/* = 0x00(FSL_OK), normal */
|
||||
/* = 0x05(FSL_ERR_PARAMETER), parameter error */
|
||||
/* = 0x10(FSL_ERR_PROTECTION), protection error */
|
||||
/* = 0x1A(FSL_ERR_ERASE), erase error */
|
||||
/* = 0x1B(FSL_ERR_IVERIFY), internal verify error */
|
||||
/* = 0x1F(FSL_ERR_INTERRUPTION), write interrupted by user interrupt */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_SetFlashShieldWindow( fsl_u16 start_block_u16,
|
||||
fsl_u16 end_block_u16 );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: Swapping of bootcluster 0 and 1 */
|
||||
/* */
|
||||
/* CAUTION !!!! */
|
||||
/* After this function the boot cluster are immediately swapped */
|
||||
/* Input: - */
|
||||
/* Output: - */
|
||||
/* Returned: fsl_u08, status code */
|
||||
/* = 0x00(FSL_OK), normal */
|
||||
/* = 0x05(FSL_ERR_PARAMETER), parameter error */
|
||||
/* = 0x10(FSL_ERR_PROTECTION), protection error */
|
||||
/* = 0x1A(FSL_ERR_ERASE), erase error */
|
||||
/* = 0x1B(FSL_ERR_IVERIFY), internal verify error */
|
||||
/* = 0x1F(FSL_ERR_INTERRUPTION), write interrupted by user interrupt */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_SwapBootCluster( void );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: sets specified security flag by dedicated command-function. */
|
||||
/* */
|
||||
/* There are following security levels: */
|
||||
/* a) chip-erase protection (cannot be reset by programmer !!!) */
|
||||
/* b) block-erase protection (can be reset by chip-erase on programmer) */
|
||||
/* c) write protection (can be reset by chip-erase on programmer) */
|
||||
/* d) boot-cluster protection (cannot be reset by programmer !!!) */
|
||||
/* */
|
||||
/* CAUTION !!!! */
|
||||
/* Each security flag can be written by the application only once */
|
||||
/* */
|
||||
/* Input: - */
|
||||
/* Output: - */
|
||||
/* Returned: fsl_u08, status code */
|
||||
/* = 0x00(FSL_OK), normal */
|
||||
/* = 0x05(FSL_ERR_PARAMETER), parameter error */
|
||||
/* = 0x10(FSL_ERR_PROTECTION), protection error */
|
||||
/* = 0x1A(FSL_ERR_ERASE), erase error */
|
||||
/* = 0x1B(FSL_ERR_IVERIFY), internal verify error */
|
||||
/* = 0x1F(FSL_ERR_INTERRUPTION), write interrupted by user interrupt */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_SetChipEraseProtectFlag( void );
|
||||
extern fsl_u08 FSL_SetBlockEraseProtectFlag( void );
|
||||
extern fsl_u08 FSL_SetWriteProtectFlag( void );
|
||||
extern fsl_u08 FSL_SetBootClusterProtectFlag( void );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: defines the firmware operation method after interrupt service (ISR) execution. */
|
||||
/* Input: mode_u08 = 0x00, after RETI the firmware is continuing the interrupted command.*/
|
||||
/* = other, after RETI the firmware is interrupted with status 0x1F. */
|
||||
/* Changed: - */
|
||||
/* Returned: - */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern void FSL_SetInterruptMode( fsl_u08 mode_u08 );
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,108 @@
|
||||
/*==============================================================================================*/
|
||||
/* Project = Selfprogramming library for 78K0R/Ix3/Kx3-L Single Voltage SST (MF2) Flash */
|
||||
/* Module = fsl_user.h */
|
||||
/* Version = V1.01 */
|
||||
/* Date = 28.03.2008 11:45:55 */
|
||||
/*==============================================================================================*/
|
||||
/* COPYRIGHT */
|
||||
/*==============================================================================================*/
|
||||
/* Copyright (c) 2007 by NEC Electronics (Europe) GmbH, */
|
||||
/* a company of the NEC Electronics Corporation */
|
||||
/*==============================================================================================*/
|
||||
/* Purpose: */
|
||||
/* user configurable constant/macros of the selfprogramming library */
|
||||
/* */
|
||||
/*==============================================================================================*/
|
||||
/* */
|
||||
/* Warranty Disclaimer */
|
||||
/* */
|
||||
/* Because the Product(s) is licensed free of charge, there is no warranty of any kind */
|
||||
/* whatsoever and expressly disclaimed and excluded by NEC, either expressed or implied, */
|
||||
/* including but not limited to those for non-infringement of intellectual property, */
|
||||
/* merchantability and/or fitness for the particular purpose. NEC shall not have any obligation */
|
||||
/* to maintain, service or provide bug fixes for the supplied Product(s) and/or the Application.*/
|
||||
/* */
|
||||
/* Each User is solely responsible for determining the appropriateness of using the Product(s) */
|
||||
/* and assumes all risks associated with its exercise of rights under this Agreement, */
|
||||
/* including, but not limited to the risks and costs of program errors, compliance with */
|
||||
/* applicable laws, damage to or loss of data, programs or equipment, and unavailability or */
|
||||
/* interruption of operations. */
|
||||
/* */
|
||||
/* Limitation of Liability */
|
||||
/* */
|
||||
/* In no event shall NEC be liable to the User for any incidental, consequential, indirect, */
|
||||
/* or punitive damage (including but not limited to lost profits) regardless of whether */
|
||||
/* such liability is based on breach of contract, tort, strict liability, breach of warranties, */
|
||||
/* failure of essential purpose or otherwise and even if advised of the possibility of */
|
||||
/* such damages. NEC shall not be liable for any services or products provided by third party */
|
||||
/* vendors, developers or consultants identified or referred to the User by NEC in connection */
|
||||
/* with the Product(s) and/or the Application. */
|
||||
/* */
|
||||
/*==============================================================================================*/
|
||||
/* Environment: PM plus (V6.30) */
|
||||
/* RA78K0(V1.20) */
|
||||
/* CC78K0(V2.00) */
|
||||
/*==============================================================================================*/
|
||||
|
||||
|
||||
#ifndef __FSL_USER_H_INCLUDED
|
||||
#define __FSL_USER_H_INCLUDED
|
||||
|
||||
|
||||
/*==============================================================================================*/
|
||||
/* constant definitions */
|
||||
/*==============================================================================================*/
|
||||
|
||||
|
||||
/* specify the CPU frequency in [Hz], only 2MHz....20MHz allowed */
|
||||
#define FSL_SYSTEM_FREQUENCY 4000000
|
||||
|
||||
/* define whether low-voltage mode is used or not */
|
||||
/* #define FSL_LOW_VOLTAGE_MODE */
|
||||
|
||||
/* size of the common data buffer expressed in [bytes] */
|
||||
/* the data buffer is used for data-exchange between the firmware and the selflib. */
|
||||
//#define FSL_DATA_BUFFER_SIZE 256
|
||||
#define FSL_DATA_BUFFER_SIZE 0
|
||||
|
||||
|
||||
/* customizable interrupt controller configuration during selfprogramming period */
|
||||
/* Bit --7-------6-------5-------4-------3-------2-------1-------0---------------------- */
|
||||
/* MK0L: PMK5 PMK4 PMK3 PMK2 PMK1 PMK0 LVIMK WDTIMK */
|
||||
/* MK0H: SREMK0 SRMK0* STMK0* DMAMK1 DMAMK0 SREMK3 SRMK3 STMK3 */
|
||||
/* MK1L: TMMK03 TMMK02 TMMK01 TMMK00 IICMK0 SREMK1 SRMK1 STMK1* */
|
||||
/* MK1H: TMMK04 SREMK2 SRMK2 STMK2* KRMK RTCIMK RTCMK ADMK */
|
||||
/* MK2L: PMK10 PMK9 PMK8 PMK7 PMK6 TMMK07 TMMK06 TMMK05 */
|
||||
/* MK2H: 1 1 1 1 1 1 1 PMK11 */
|
||||
/*------------------------------------------------------------------------------------------ */
|
||||
/* */
|
||||
/* Examples: */
|
||||
/* ========= */
|
||||
/*#define FSL_MK0L_MASK 0xF7 -> allow INTP1 interrupt during selfprogramming */
|
||||
/*#define FSL_MK0H_MASK 0xEF -> allow DMA1 interrupt during selfprogramming */
|
||||
/*#define FSL_MK1L_MASK 0xBF -> allow TM02 interrupt during selfprogramming */
|
||||
/*#define FSL_MK1H_MASK 0xFF -> all interrupts disabled during selfprogramming */
|
||||
/*#define FSL_MK2L_MASK 0xF7 -> allow INTP6 interrupt during selfprogramming */
|
||||
/*#define FSL_MK2H_MASK 0xFF -> all interrupts disabled during selfprogramming */
|
||||
/*------------------------------------------------------------------------------------------ */
|
||||
#define FSL_MK0L_MASK 0xFF /* all interrupts disabled during selfprogramming */
|
||||
#define FSL_MK0H_MASK 0xFF /* all interrupts disabled during selfprogramming */
|
||||
#define FSL_MK1L_MASK 0xFF /* all interrupts disabled during selfprogramming */
|
||||
#define FSL_MK1H_MASK 0xFF /* all interrupts disabled during selfprogramming */
|
||||
#define FSL_MK2L_MASK 0xFF /* all interrupts disabled during selfprogramming */
|
||||
#define FSL_MK2H_MASK 0xFF /* all interrupts disabled during selfprogramming */
|
||||
|
||||
|
||||
/* FLMD0 control bit */
|
||||
#define FSL_FLMD0_HIGH {BECTL.7 = 1;}
|
||||
#define FSL_FLMD0_LOW {BECTL.7 = 0;}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* switch interrupt backu functionality ON/OFF using #define/#undef */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* #define FSL_INT_BACKUP */
|
||||
#undef FSL_INT_BACKUP
|
||||
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,568 @@
|
||||
:02000000000EF0
|
||||
:02000200FFFFFE
|
||||
:02000800E334DF
|
||||
:04001000D932DB32D4
|
||||
:02001C00EB33C4
|
||||
:02002400FB33AC
|
||||
:02002A000F3392
|
||||
:08003400E534AC34A734CF32EF
|
||||
:04004A00DD32A234CD
|
||||
:0400C0006EFBFF854F
|
||||
:0A00C400FFFFFFFFFFFFFFFFFFFF3C
|
||||
:0A00CE00FFFFFFFFFFFFFFFFFFFF32
|
||||
:1000D800C7F616A7F647DFFBFDF307FD5921EFF832
|
||||
:1000E800C6D73142210261EDD7717BFACEA016CE78
|
||||
:1000F800A180CEA409F5AAFFF5A9FFF400F401F444
|
||||
:1001080002CD0306F404F405F406CD0740F40CF41C
|
||||
:100118000EF408F40FF53000F53100F53300F5342E
|
||||
:1001280000CF350003CF370019F53C00F53E00F548
|
||||
:1001380020FFF521FFCE22E9E523FFCE240BCE25B3
|
||||
:1001480003F526FFCE271FCE2C1FE52EFFCE2F0747
|
||||
:10015800CE28FFF54300F54700CF530006F55700BA
|
||||
:10016800F5E0FFF5E1FFF5E2FFF5E3FFF5D0FFCE9F
|
||||
:10017800E4FFCEE5FFCEE6FFCEE7FFCED4FFCEE824
|
||||
:10018800FFCEECFFCEE9FFCEEDFFCEEAFFCEEEFECE
|
||||
:10019800CEEBFFCEEFFFCED8FFCEDCFFF538FFF574
|
||||
:1001A80039FFF537FF7108F200F690BFB4017138D6
|
||||
:1001B800F100F54002F54102F54302F5A5FFF5A669
|
||||
:1001C800FF7158F000F530FF7128F0005087BF1814
|
||||
:1001D80001BF1A01BF1C01BF1E017148F000F530B4
|
||||
:1001E80002F5BCFFF5BDFFD7F7D7C7C1FBF8FF3154
|
||||
:1001F800642002EFFA715220340020C5304000C15B
|
||||
:10020800C1506CFDF622100617C1E6A1C1500EC1FF
|
||||
:10021800506CFD3A22100617C1E6A1C1500EC1501C
|
||||
:100228006CFD3A22100617C1E6A1C1A1A1C1506C0C
|
||||
:10023800FD3A22100617C1E6A1C1500EC1506CFD4F
|
||||
:10024800F6221006CC0100CC000017C1E6A1C1506F
|
||||
:100258003EC1506CFDF6221006CF03F99EAFC0F9DF
|
||||
:10026800BF04F9AFC2F9BF06F9C0C6D7FD2224F60C
|
||||
:10027800C15003C15084FDB6221004F3D7C720062D
|
||||
:10028800FBF8FFC71704030016F74940209BA3A7F4
|
||||
:100298005102614ADFF4C6C717A116F74942209BED
|
||||
:1002A800A3A75102614ADFF4C68C01318EC1E6A1D1
|
||||
:1002B800C15006C1506CFDF622100617040300C198
|
||||
:1002C800E6A1C1503EC1506CFDF6221006716201D4
|
||||
:1002D800300900FD9C2D62316A9C05716301FDF2B5
|
||||
:1002E80001717201300800FD9C2D629F02F9300BEC
|
||||
:1002F80003FD232EF6C15084FDC521C0629C051064
|
||||
:1003080006C6D7C751E0D902F9D651A36128319E54
|
||||
:100318009F46F92FC4F9318EFD84201344040071DF
|
||||
:10032800FEDE05D5C5F9DF508F46F97C804C95DC9B
|
||||
:1003380015D946F9F1241400BDD8AF04F9FD6D0EA6
|
||||
:1003480012F62316EF13D946F9F1241400BDD8AFDD
|
||||
:1003580006F9FD6D0E12F62316D903F9F107C1E669
|
||||
:10036800A1C1500CC1506CFDF6221006D2DF068FD9
|
||||
:1003780046F99FC4F9A0C5F9F7C6D77163073005D8
|
||||
:1003880000FD242F300500FD242F304A00C15022E3
|
||||
:10039800C15084FDB6221004717031F9E7D7300AD4
|
||||
:1003A80000FD242F716031F9E7D7716831F9F7D76B
|
||||
:1003B800716207303300FD242FF6C1E6A1C15084D5
|
||||
:1003C800FDB62210043431F9895C3F99F7D7F7D785
|
||||
:1003D800FDD603F7D7FD8303F7D7FDA603F7D7FDAF
|
||||
:1003E800B203F7D7FDB803F7D7C75A00FC8E205CD5
|
||||
:1003F800FC9E2071030E71520730A000FD242F715E
|
||||
:100408005307300400C1506CFDC521C056C8663181
|
||||
:100418008EF7BDD813BDDAFD3A0FC9DCCCCC30F469
|
||||
:1004280040FDA60EDE03E7EF2B669F38F9710A2020
|
||||
:100438007100300071120071020E306400FD242F2B
|
||||
:100448003102000F5A00FC8E205CFC9E2071030EC6
|
||||
:10045800E7EF01F7C6D7303200FD242F310400182A
|
||||
:1004680071520730FA00FD242F30FA00FD242F3096
|
||||
:10047800FA00FD242F7153075A00FC8E205CFC9E65
|
||||
:100488002071030EF7D7FDB803F7D73104070671BB
|
||||
:100498003031F9EF04713831F93102050671503104
|
||||
:1004A800F9EF04715831F931120506714031F9EF4D
|
||||
:1004B80004714831F94046F957DC094046F9B861FA
|
||||
:1004C800D8E5C6F94046F947DC094046F9BD61D888
|
||||
:1004D800F5C6F940C6F901DF0C4046F947DC06408D
|
||||
:1004E80046F9BDDC11D5C6F9DF114046F957DC0BDA
|
||||
:1004F8004046F9B8DE05712204EF03712304311276
|
||||
:1005080005058F3BF9EF01F1318EBE6A323200D713
|
||||
:10051800F7D7CEABACD7C720FE200CFBF8FFF6BF51
|
||||
:10052800BA015020BFBA01FD2708717BFA170408E9
|
||||
:1005380000FDE208629C06FD6D08620E069C06300E
|
||||
:100548000020BC02CC040F5112879C0897878C08A6
|
||||
:10055800974C1C61C8ED0406FD1A05878C08973175
|
||||
:100568008EFD2F08D2DD0E878C0897318EFD33085B
|
||||
:10057800629C06EFE6CC07008C074C04DE66F18728
|
||||
:100588009C0997AC02148C049EFD118972878C0912
|
||||
:1005980097318E07040800146299AC02A1BC028747
|
||||
:1005A8008C099781879C0997878C0997D1DFD4306C
|
||||
:1005B8004000C1878C0897318E31AD128C07318E7F
|
||||
:1005C800318D03BDD831FFBDDADADAADD8FD340B91
|
||||
:1005D800C0629C06D1DD08FD2B0800E7ED1107611C
|
||||
:1005E8005907EF94878C0897318EFD3708D2DFF4CE
|
||||
:1005F800878C089781879C0897ED55055104879C3F
|
||||
:100608000897878C08974C12DE17878C0897318ECD
|
||||
:10061800FD3308629C06878C089781879C0897EFB2
|
||||
:10062800E15104879C0897878C08974C1261C8EDA4
|
||||
:10063800CE06CC07008C074C04DE6D31825169FD73
|
||||
:100648001A0531B2E20631825102EFF6713BE287B8
|
||||
:100658008C0997318E07040800148E509971503018
|
||||
:1006680002878C099781879C0997878C0997D161A4
|
||||
:10067800E8318451CD304000C1878C0897318E31E4
|
||||
:10068800AD128C07318E318D03BDD831FFBDDADA5A
|
||||
:10069800DAADD8FD340BC0629C06D1DD06FD2B080F
|
||||
:1006A800E7EF66615907EF8D878C0897318EFD3724
|
||||
:1006B80008D2DFF431845102EF0C878C08978187C8
|
||||
:1006C8009C0897ED2F0671503002CC0000CC010039
|
||||
:1006D8008C014C09DE218C01318E1249F61F728C77
|
||||
:1006E80001318E04F64714896142DF03F1EF01E11D
|
||||
:1006F8000D9B615901EFD98BD1DF08FDF209FD048B
|
||||
:100708000BEF06FD2B08FD170710FE100CC6D7C708
|
||||
:1007180020FE200AFBF8FFF6BFBA015080BFBA01DD
|
||||
:10072800717BFAFD270817040600FDE208629C04A5
|
||||
:10073800FD6D08620E049C04300048BBCC020F51CA
|
||||
:1007480008879C0697878C06974C1261C8EDE907C5
|
||||
:10075800FD1A05878C0697318EFD3308629C04CC00
|
||||
:1007680005008C054C04DE61F1879C0797AB148C5F
|
||||
:10077800029EFD118972878C0797318E0704060047
|
||||
:10078800146299ABA1BB878C079781879C079787D1
|
||||
:100798008C0797D1DFD7304000C1878C0697318E00
|
||||
:1007A80031AD128C05318E318D03BDD831FFBDDAE4
|
||||
:1007B800DADAADD8FD340BC0629C04D1DD06FD2B1E
|
||||
:1007C80008E7EF21615905EF99878C0697318EFD6F
|
||||
:1007D8003708D2DFF4878C069781879C0697ED4D02
|
||||
:1007E80007FDF109F710FE100AC6D7717BFAC7207A
|
||||
:1007F800FE2004FBF8FFFD270817040200FDE208AD
|
||||
:10080800629C01FD6D08626E019C0130BEF9FDBC61
|
||||
:1008180009626E019C01FD2B0810FE1004C6D771F9
|
||||
:070828007ABED7717BBED739
|
||||
:10082F005208EF065203EF025206FEE600FE1B00CF
|
||||
:10083F00DC16089F03088F0408089F040862FE2433
|
||||
:10084F0000089F0408EEBF00EEBA00C1C514410EA8
|
||||
:10085F0011D9D0FF118FD1FF312E45C4C0D7F2313E
|
||||
:10086F00A2C401E2D79DE261DD4C09DF12717BFA70
|
||||
:10087F00C18F06089F0DFAC0CF060800EE27003182
|
||||
:10088F00F2FA04CF0608004C00DF05D50008DD168C
|
||||
:10089F0061DD717BFAD50608DD0ACDE31F61CD61FD
|
||||
:1008AF00CDEE160061CDFED40061FFFE9A00FCF87C
|
||||
:1008BF00FF0EFEB20061CDFED5004C09DF0EC18FD9
|
||||
:1008CF0006086F0DFA9F0608C0EE0400CF06080059
|
||||
:1008DF00F8E3D75200EF025202FE3700CF0CFA00B6
|
||||
:1008EF00CF060800BF0408C716629F000841001119
|
||||
:1008FF008F44209B4100118F45209F0108C6510056
|
||||
:10090F00FE62FFEF025205CF060800C1510CFE0A2E
|
||||
:10091F0000C0D7C1511DFE0200C0D761DD717BFA47
|
||||
:10092F0070CEC0A59EC47CFF9EC4609EC461CDD70F
|
||||
:10093F0061DD717BFAC18EC45C1BFED6FFCF06084A
|
||||
:10094F0001FED7FFC061CDD731F2FA1AC1AEE4BFB5
|
||||
:10095F00FEF9AEE6BF00FAAED4BF02FA30FFFFBE1B
|
||||
:10096F00E4BEE6BED4C0D731F2FA11C1AFFEF9BE74
|
||||
:10097F00E4AF00FABEE6AF02FABED4C0D7C1BF04DF
|
||||
:10098F00FA13BF06FA15BF08FA17BF0AFAC0D7AF96
|
||||
:10099F0004FADB06FAEB08FAFB0AFAD7534B30528C
|
||||
:1009AF005430324E323030475631323000C5C1519B
|
||||
:1009BF00045001EE0000FE5AFF9F03085109FEA4E8
|
||||
:1009CF00FEC4D2DF0908C3618AF3FE0500C2C4EE7C
|
||||
:1009DF0035FFC1C7FB040861C999A58392DFF8C62B
|
||||
:1009EF00C0D7FFC150FEFEAB0061DD717BFACF06B1
|
||||
:1009FF000800FE0A00FE6FFF61CDF8E3EECF00C7DF
|
||||
:100A0F00FB0408BFFEF98FC0009C05C5C337040661
|
||||
:100A1F0000BF00FA3536560A300000522BFE660032
|
||||
:100A2F00C2C4C630040AB800300000B8022004AFB8
|
||||
:100A3F0000FAB800300F00B802AFFEF961FF520A9A
|
||||
:100A4F00FE05FFECF8FF0E717BFAC1C7FB04088CA3
|
||||
:100A5F0005C65C80FE0200C0D761DD717BFA70CFE6
|
||||
:100A6F00C0FFA59FC0007CFF9FC000609FC00061BA
|
||||
:100A7F00CDD7618BFEE2FF717BBE410011FB000001
|
||||
:100A8F0017CEFC0061CB089EFDF31161C999A583B8
|
||||
:100A9F0092DFF7D7FE7CFED50CFADF23C1CF030818
|
||||
:100AAF00035109FEBFFDC0D2DF37FE3800A2040894
|
||||
:100ABF00CF0308075109FEACFDD2B20408DF22C7ED
|
||||
:100ACF00FB0408318302C6D7C6510AFE97FD624C5C
|
||||
:100ADF001FDF06CF0CFA01EF04CF0CFA00C0EE2691
|
||||
:100AEF00FEC0EE20FEC7C1FB04088B31196C0161FB
|
||||
:100AFF00589BC0C6D7717BFAFE18FEAF04080406D8
|
||||
:100B0F0000C11436680A300000522DF3FE77FF8FB4
|
||||
:100B1F00C000FEF6FD61CF5C807C8073C0041900BD
|
||||
:100B2F00CEFC0F61CBC55404EF03C55417FEE3FD94
|
||||
:100B3F00C7360008BB629C0288089C03D1DD334C8A
|
||||
:100B4F0041DE2F70F1312DB161090033081C00080F
|
||||
:100B5F0051FF612A410E118FD0FF613B118FD1FFE1
|
||||
:100B6F006138DC0E8B5C03DF0964C6C4FEF6FCEE55
|
||||
:070B7F0095FDC6C4EE8EFDDA
|
||||
:100E000061CF5100718C7109FECBF800FEFCF1003E
|
||||
:100E100000F6BF00F953C0F693935820FEDFF94166
|
||||
:100E20000036462034C0F9EF05118B99A7A5174469
|
||||
:100E30008420DFF53602F930C0F9EF04CC0000A7BA
|
||||
:100E400047DFF9410036842034FEF9EF05118B9914
|
||||
:100E5000A7A517448420DFF536FEF930FEF9EF042C
|
||||
:100E6000CC0000A747DFF9FCD80000EFFE61DD7180
|
||||
:100E70007BFABEF0ADD8BEF200AEF661CDD7DF1D75
|
||||
:100E800006DC44807FDF167152DEEF32DF0F06D8BA
|
||||
:100E900044807FDF083154DE3C3172DE3CC9DE0520
|
||||
:100EA00004FDF10EEF46C514ADDEC1657BDB5C8051
|
||||
:100EB0009DDEADDA71FB3571FB44807FDEC03544C9
|
||||
:100EC000807FDEC86BD96BD86BDD6BDC0561C8DD5C
|
||||
:100ED0001BADDA71FB3174DE077174DBF181EF0C4D
|
||||
:100EE00045ADD861F846DC61E87177DBC0BDDEC492
|
||||
:100EF000D78EFC708EFDC1C5C3ADDE315E04943566
|
||||
:100F0000320000C3C1D8DEF1C1AEF8FC1B0F00C037
|
||||
:100F1000C0C0C2C4C09EFD609EFCD71489728A0402
|
||||
:100F20009EFDAA021411894C40DD0E624C04300271
|
||||
:100F30000061C8300100BF00F9D7C5C3C1ADDADA1E
|
||||
:100F4000D831750914F62312F661D8B125ED590F81
|
||||
:100F5000C5C3C1ADDADAD8F4DB0361C8DD3B235584
|
||||
:100F60009E31730A9501311C61D8A13175F6618AF1
|
||||
:100F70004C80618ADC11DF0633718C33DE0983DF3C
|
||||
:100F80000604010061D8857174DB3561FB9DDB656A
|
||||
:0D0F900071F99DDA637064BDD8C0C2C4D78A
|
||||
:0A0FF60030383A34353A3339000040
|
||||
:10200000EA0102030405060708090A0B0C0D0E0F6E
|
||||
:10201000101112131415161718191A1B1C1D1E1F48
|
||||
:10202000202122232425262728292A2B2C2D2E2F38
|
||||
:10203000303132333435363738393A3B3C3D3E3F28
|
||||
:062040004A5740000801B0
|
||||
:102046000B001F000000000000000000C830000068
|
||||
:10205600892B0000F82C000093040000B724000030
|
||||
:102066007F2600008D2B0000042C00000C2C0000A5
|
||||
:0E207600472C0000482F000000000000000072
|
||||
:08208400317503F7332312D775
|
||||
:0A21000030383A34353A3339000024
|
||||
:10210A007140F00071783002713AE6713BE2713B3E
|
||||
:10211A00EA713BEE5A06FCCF34024AE552FF711AC5
|
||||
:10212A0052710A5271483002713030027120300205
|
||||
:10213A00CF320206CF330205713BE6717030028E50
|
||||
:10214A00265CFC9E26D7717830027148F000D7FDD4
|
||||
:10215A00AE2751205FA8FFD1DD0971502FF9FD226A
|
||||
:10216A0024EF03FD7402FD0027FD622AFDA221FD72
|
||||
:10217A00CC2D8F2FF95C20D1DD06CF0EF902EF03AB
|
||||
:10218A00F50EF9714221717AFAFD1A05FDCF2DFD7E
|
||||
:10219A00F62EFDEA00EFF2D731020403F1EF01E176
|
||||
:1021AA003410F9718C8971899931120403F1EF01A4
|
||||
:1021BA00E13410F9718C89719999D7C7C1C1FBF8BB
|
||||
:1021CA00FFFD22243164200300EFF9716220F51B20
|
||||
:1021DA00F98C02318EFD7323D2DD0ACF1BF902710D
|
||||
:1021EA006320F7EF478C0A318EFD8923FDD3238CB8
|
||||
:1021FA00026C01318EFD8923300400BF240130179F
|
||||
:10220A0040BF1C01300400BF2201F6BF2A01710B36
|
||||
:10221A00E2CE44FF3182E202EFFA8E449C01FDFED7
|
||||
:10222A0023710BE27163208C01318E121004C6D720
|
||||
:10223A00C7C1FBF8FF31722003FD22243164200359
|
||||
:10224A0000EFF97162208B318EFD7323D2DD0671A6
|
||||
:10225A006320E7EF548C08318EFD8923FDD3238B4D
|
||||
:10226A006C01318EFD8923300400BF2401301740F0
|
||||
:10227A00BF1C01300400BF22018C0A91DF04F6BFA3
|
||||
:10228A002A01710BE2CE44FF3182E202EFFAAC0C72
|
||||
:10229A00148E449961790C61690A8C0AD1DFDAFDDE
|
||||
:1022AA00FE23710BE2716320F7C0C6D7C7C1FBF8E2
|
||||
:1022BA00FF31722003FD22243164200300EFF971FB
|
||||
:1022CA006220710AE68B318EFD7323D2DD067163BB
|
||||
:1022DA0020E7EF158C08318EFD89238C0A318EFD9B
|
||||
:1022EA008923FDFE23716320F7C0C6D7C7C1FBF857
|
||||
:1022FA00FF31722003FD22243164200300EFF971BB
|
||||
:10230A006220710AE68B318EFD7323D2DD0671637A
|
||||
:10231A0020E7EF5231522039C73414F9AC0C165267
|
||||
:10232A00048B99A5A792DFF9C63184BD02EFFA7131
|
||||
:10233A007ABDCEB144CBB414F98C0A318EBEB8CE74
|
||||
:10234A00BB48714BE1714BE5710ABD8C089E44EFA5
|
||||
:10235A0014710BE28C089E44710BE68C0A9F1AF9E1
|
||||
:10236A00AC0CBF18F9F7C0C6D7C716FDAA2317F1D8
|
||||
:10237A00FD8923D2DD06FDFE23E7EF01F7C6D7C7A5
|
||||
:10238A0016710BE2669E443182E20300EFF9F642CF
|
||||
:10239A000401DD09AF0401BF0C01E7EF01F7C6D75D
|
||||
:1023AA00AF2801085CFB08BF280100000000AF2825
|
||||
:1023BA00015CFBBF2801300400BF2A01301780BF2F
|
||||
:1023CA001C01300400BF2201D7AF2401086C0408A5
|
||||
:1023DA00BF2401AF28016C0F086C0B08BF2801004D
|
||||
:1023EA00000000AF2A01085CFB08BF2A01000000B8
|
||||
:1023FA0000EDAA23300400BF2401F6BF2A01300BE6
|
||||
:10240A000BBF280100000000510FBF280100000087
|
||||
:10241A0000500FBF2801D7D77132057120F0000094
|
||||
:10242A00000000F6BF26015014BF1401CB44000A75
|
||||
:10243A00300F0FBF2801716320715320717220D7AA
|
||||
:10244A0031642002EFFAFDD3237133057128F000BD
|
||||
:10245A00717320D7D7D77100F200301100BFB601CF
|
||||
:10246A00300188BF9001300984BF9E01BF9C01BF23
|
||||
:10247A009A01BF9801BF9601BF9401BF9201F53C32
|
||||
:10248A00FF30FE00BFBE015006BFBC01F6BFB80157
|
||||
:10249A0050EEBFBA01A1BFB201C918FE03D730EF8F
|
||||
:1024AA0000BFB401F6BFBA017108F200D78F3CF938
|
||||
:1024BA00D1DD0B91DD4B91DD4391DD20EF438F0E92
|
||||
:1024CA00F92C03DC13D1DD0B91DD0D91DF05FDCA7B
|
||||
:1024DA0025F3D7FD1025F3D732FA00D7F6426CFF61
|
||||
:1024EA0061E8E1318F12AE6C23BE6CF6426EFF6179
|
||||
:1024FA00E8E1318F12AE6E23BE6EF7D7FDCA25F31F
|
||||
:10250A00D7FD1025F3D7C756008F38F9318EF7BD9E
|
||||
:10251A00D813BDDAFD3A0FC9DC0000304C41FDA6E4
|
||||
:10252A000EDE1DD51DF9DF0AF6BE6CBE6EE51DF97D
|
||||
:10253A00EF09D93BF9F1BE6EF51DF932FA00EF7ECB
|
||||
:10254A008F38F9318EF7BDD813BDDAFD3A0FC9DCE1
|
||||
:10255A000000304C42FDA60EDE2EF6426CFFDD0571
|
||||
:10256A00B26CFF5601D93BF9F1426EFFDD465601C6
|
||||
:10257A00D93BF912AE6E43DE03E1EF0251FF318F10
|
||||
:10258A0012AE6E03BE6EEF2CD93BF9F1426CFFDD41
|
||||
:10259A00185601D93BF912AE6C43DE03E1EF025142
|
||||
:1025AA00FF318F12AE6C03BE6CF6426EFFDD05B2D0
|
||||
:1025BA006EFF560166D1DF0532FA00EF01F7C6D782
|
||||
:1025CA00C75600AE6C4220F9DD1486AF20F9426C82
|
||||
:1025DA00FFDE05B26CFFEF06AE6CA1A1BE6CAE6E5B
|
||||
:1025EA004222F9DD155601AF22F9426EFFDE05B22D
|
||||
:1025FA006EFFEF06AE6EA1A1BE6E66D1DF498F1ED9
|
||||
:10260A00F9D1DD082C02DD042C02DF318F38F931D3
|
||||
:10261A008EF7BDD813BDDAFD3A0FC9DC0000304C85
|
||||
:10262A0042FDA60EDE0C307F00BF22F9F6BF20F96C
|
||||
:10263A00EF12F6BF22F9507FBF20F9EF07F6BF224B
|
||||
:10264A00F9BF20F9A01EF9320500C6D78F3EF95C02
|
||||
:10265A0001D1DD08D93BF9F1BE64EF03F6BE648F00
|
||||
:10266A003EF95C02D1DD078E386C809E38D78E38F1
|
||||
:10267A005C7F9E38D78F3DF95C01D1DF0432FA00C6
|
||||
:10268A00D7D51CF9DD18F51CF98F3DF95C02D1DDAF
|
||||
:10269A0006CF24F902EF03F524F932FA00D7D5243C
|
||||
:1026AA00F9DD2A8F25F991DD082C02DD042C02DFE1
|
||||
:1026BA0005F6BE66EF06D93BF9F1BE66A025F940DC
|
||||
:1026CA0025F920DF2DF525F9B024F9EF258F3DF9FD
|
||||
:1026DA005C01D1DF0BF6BE668ED46C109ED4EF126D
|
||||
:1026EA00D93BF9F1BE668E386C809E388ED45CEF89
|
||||
:1026FA009ED4321C00D77170F000CE9D08CE9EC0C9
|
||||
:10270A00CE9F80F592FFF593FFF594FFCE960EE5E6
|
||||
:10271A0095FFCE9709CE9809CE9C7F711AE7712B47
|
||||
:10272A00E7717A9DE541F9710321711321D7C73108
|
||||
:10273A0002211E710221710A9E31929E02EFFA3421
|
||||
:10274A0048F93692FF52078B99A5A792DFF9710BC8
|
||||
:10275A009EC6D7C788061631122115711221C734B1
|
||||
:10276A0026F93092FF1652078B99A5A792DFF9C670
|
||||
:10277A006673671826F9C6D7C73104210371032186
|
||||
:10278A003114211E711321710A9E31929E02EFFAB1
|
||||
:10279A003492FF3626F952078B99A5A792DFF97171
|
||||
:1027AA000B9EC6D7CF3BF9FFF53FF9CF40F903D7C8
|
||||
:1027BA00C788061666320003F02C052361D8ED5F40
|
||||
:1027CA00282361F8ED68289161F8ED7A289161F87B
|
||||
:1027DA00ED0F299161F8ED1B299161F8ED242991FA
|
||||
:1027EA0061F8ED52292361F8ED5E29912C0261D836
|
||||
:1027FA00ED00292C042C0761D8ED76299161F8EDBA
|
||||
:10280A00C8299161F8EDD229912361D8EDDC29D14B
|
||||
:10281A0061F8ED6B29912C0261D8ED8629D161F816
|
||||
:10282A00ED94292C0261F8EDA2299161F8EDAA290B
|
||||
:10283A002C072361D8EDB8299161F8EDC029912CB4
|
||||
:10284A000461D8EDDC292361D8EDE429D161F8EDE2
|
||||
:10285A00EC29ED052A667367182EF9ED052A6673C9
|
||||
:10286A0067182EF9D1DD06306D2CFD232EED052AD1
|
||||
:10287A00667367182EF9D1DD7A8F3AF95C01D1DDDA
|
||||
:10288A0005308000EF01F6609F80F98F3AF95C020B
|
||||
:10289A00D1DD03E1EF01F1723480F989616A998F20
|
||||
:1028AA003AF95C04D1DD045102EF01F1723480F986
|
||||
:1028BA0089616A998F3AF95C08D1DD045120EF01E8
|
||||
:1028CA00F1723480F989616A998F3AF95C10D1DD25
|
||||
:1028DA00045110EF01F1723480F989616A998F3AD3
|
||||
:1028EA00F95C20D1DD045140EF01F1723480F9899D
|
||||
:1028FA00616A99ED052A30D803FD232E667367189D
|
||||
:10290A002EF9ED052A667367182EF9FD5626ED0590
|
||||
:10291A002A667367182EF9ED052A667367182EF969
|
||||
:10292A008F3DF95C01D1DF0BF6BE668ED46C109E2A
|
||||
:10293A00D4EF12D93BF9F1BE668E386C809E388E80
|
||||
:10294A00D45CEF9ED4ED052A667367182EF9FD56FE
|
||||
:10295A0026ED052A675CBF72667362182EF9ED05CB
|
||||
:10296A002A667367182EF99E99ED052A67318EC17A
|
||||
:10297A00662C1A318EFD5D27C0ED052A667367182D
|
||||
:10298A002EF9307332FD232EEF71667367182EF914
|
||||
:10299A00302C32FD232EEF63667367182EF9EF5B36
|
||||
:1029AA00667367182EF9304F32FD232EEF4D66738A
|
||||
:1029BA0067182EF9EF45667367182EF9EF3D6673AF
|
||||
:1029CA0067182EF99E9AEF33667367182EF99E9B45
|
||||
:1029DA00EF29667367182EF9EF21667367182EF9C7
|
||||
:1029EA00EF19667367182EF9406CF96ADF0D406DAE
|
||||
:1029FA00F968DF074C6C61F8FD1E05C6D7C7166675
|
||||
:102A0A004C1ADC074C2161D8FD38276673092EF968
|
||||
:102A1A00318E12C6D7C71666D1DD0891DD0A91DD5F
|
||||
:102A2A000CEF0EF52EF9EF09F52FF9EF04CF30F977
|
||||
:102A3A000266D1DD0891DD05664C02DF19710A23B1
|
||||
:102A4A00D52EF9DF0BD52FF9DF064030F902DD0666
|
||||
:102A5A00710303710B23C6D7CF70F935CF76F90FFF
|
||||
:102A6A00CF77F907CF7BF903E57CF9E57FF9CF80CA
|
||||
:102A7A00F960D7C7880616662C042C02DC0B912C49
|
||||
:102A8A0005DC062C062C08DE066673671870F966E4
|
||||
:102A9A002C04DF0A67D1DD0630752BFD232EC6D73D
|
||||
:102AAA00C71666730970F9318E12C6D7C7C1C1FB42
|
||||
:102ABA00F8FF8C025CF09C018C025C0F9B8C014C31
|
||||
:102ACA0081DC05F792ED712B8C014C50DF05F792F2
|
||||
:102ADA00ED712B8C014C31DE468C014C11DE1E8CC3
|
||||
:102AEA00014C10DF0D8B4C03DE3351030D318E1276
|
||||
:102AFA00EF758B4C03DE268B318E12EF6A8C014CFC
|
||||
:102B0A0020DF0D8B4C02DE1551060D318E12EF5768
|
||||
:102B1A008B4C02DE5051080D318E12EF4AEF468C73
|
||||
:102B2A00014C61DE208C014C60DF0D8B4C04DE35DC
|
||||
:102B3A00510E0D318E12EF2F8B4C02DE28510A0DE9
|
||||
:102B4A00318E12EF228C014C70DF0D8B4C08DE1592
|
||||
:102B5A0051120D318E12EF0F8B4C02DE08511A0DF5
|
||||
:102B6A00318E12EF02F7921004C6D7716030F98FD6
|
||||
:102B7A0035F95C40D1DF06710303710B23F7D732B5
|
||||
:102B8A000A00D771320331240C06712031F9EF049F
|
||||
:102B9A00712831F931140706711031F9EF047118EF
|
||||
:102BAA0031F97133038F31F97F8CF9D1DD4271002C
|
||||
:102BBA002FF98F0EF92C02DC37D1DD3491DD079124
|
||||
:102BCA002C02DC12EF2A8F34F95C01D1DF22710367
|
||||
:102BDA0003710B23EF1A8F8CF95C02D1DD123112CB
|
||||
:102BEA00070E8F34F95C01D1DF06710303710B23E1
|
||||
:102BFA008F31F99F8CF9326400D7C7D5CAF9F79299
|
||||
:102C0A00C6D7C72004FBF8FF400EF903DD06400EC5
|
||||
:102C1A00F905DF228F2EF99C038F2FF99C028F3141
|
||||
:102C2A00F99C018F5FF99B17C1300400C1F6C150AE
|
||||
:102C3A0044FDF62210063203001004C6D78F56F957
|
||||
:102C4A005C01D1DF088F57F95C0391DF12400EF95E
|
||||
:102C5A0003DF0A31240F0630E831FD232EF7D7327D
|
||||
:102C6A00F800D78F39F95C01D1DD05F50EF9EF3996
|
||||
:102C7A008F39F95C02D1DD0C5A00FC8E205CFC9E77
|
||||
:102C8A002071030E8F39F95C04D161E87113008F4A
|
||||
:102C9A0039F95C08D161E871030E300500FD242F73
|
||||
:102CAA00710A2071120071020E8F39F95C20D1DD90
|
||||
:102CBA000830E203FD232EEF0E8F39F95C10D1DDC7
|
||||
:102CCA000630E703FD232E8F39F95C80D1DD083009
|
||||
:102CDA00DD03FD232EEF0E8F39F95C40D1DD06307E
|
||||
:102CEA00EC03FD232EF539F9F7D700EFFDD7400E97
|
||||
:102CFA00F903DD06400EF905DF453124211F8F3720
|
||||
:102D0A00F94F90F9DD148F37F99F90F9D990F9F1BD
|
||||
:102D1A00C1F6C15050FDB62210047123217150F042
|
||||
:102D2A0000CE301BCF170006CE3106717A30710BF8
|
||||
:102D3A00E3710BE7D936F9F1312DBD1A320800D704
|
||||
:102D4A00C7C1C1FBF8FFAC021489728A016142DE75
|
||||
:102D5A0011899C01AC02148A017299AC02148C018B
|
||||
:102D6A009A01AC021489728A01614ADC0689318EA1
|
||||
:102D7A0012EF1BAC02148A01728A02614ADE078AC8
|
||||
:102D8A0001318E12EF08AC02148A02318E1210043D
|
||||
:102D9A00C6D7C716710AE7710BE37150F000717B51
|
||||
:102DAA0030CE3023CF170006669E31717A30710B10
|
||||
:102DBA00E73182E302EFFA8D1F7158F000318E126B
|
||||
:102DCA00C6D7ED222EC73134212B71332130CCF9ED
|
||||
:102DDA00161744F8F9DD1E148A02D1DF0BA9CEFCBE
|
||||
:102DEA000061CA629C02EF0717148A02919A02A72D
|
||||
:102DFA00A7A7A7EFDC3144211C71432130CCF91677
|
||||
:102E0A001744F8F9DD0FABCEFC0061CA629C02A739
|
||||
:102E1A00A7A7A7EFEBF7C6D7D7717BFAC7C1C1FB44
|
||||
:102E2A00F8FFD5F9F9DD0300EFFDE5F9F940F8F906
|
||||
:102E3A000FDC0300EFFDCC01008C014FF8F9DE1D19
|
||||
:102E4A008C01F0317E12799CF9614902DF0A00F5A2
|
||||
:102E5A00F9F9717AFAE7EF60615901EFDCCC010008
|
||||
:102E6A008C014C0FDE188C01F0317E049CF914A9F8
|
||||
:102E7A006168DF05AC02B9EF05615901EFE2A0F81C
|
||||
:102E8A00F9CC0000CC01008C014C0EDE168C01F04E
|
||||
:102E9A00317E049CF914A9616861E861590061599D
|
||||
:102EAA0001EFE48B4FF8F9DD0300EFFDF5F9F97155
|
||||
:102EBA007AFAF7EF0300EFFD1004C6D7C716667754
|
||||
:102ECA0067F0317E049CF914A96168DD1A674C0F1A
|
||||
:102EDA00DE1581F0317E049CF914A91267F0317E67
|
||||
:102EEA0033789CF987EFD9B0F8F9C6D7C756006688
|
||||
:102EFA004C0FDE23F0317E049CF914A96168DD14BD
|
||||
:102F0A00A9CEFC0061CAD2DF0B717BFA17F1FDC6AC
|
||||
:102F1A002E717AFA86EFD8F7C6D7C7C1C1FBF8FF78
|
||||
:102F2A00FD1A058C02D1DD1261690230AE01BBF6D1
|
||||
:102F3A00614900DDEE618900EFF51004C6D78F0EF6
|
||||
:102F4A00F9D161F8ED693091DD1B9161F8ED1B3023
|
||||
:102F5A009161F8ED4E309161F8ED55309161F8EDDF
|
||||
:102F6A005E30EDC330712BE7713AE78F0FF991DDCF
|
||||
:102F7A002ED5BAF9DF05D5BDF9DD05F5FAF9EF0366
|
||||
:102F8A00A0FAF98FFAF901DE08F50EF9714221F774
|
||||
:102F9A00D740BAF903DE0840BDF903DE02F7D7715C
|
||||
:102FAA005221717221710222F5BAF9F5BCF9F5BD07
|
||||
:102FBA00F9FD2224FD8502FDF001D2DD09714221CD
|
||||
:102FCA00F50EF900EFFDFDF103D2DD0B714221FD93
|
||||
:102FDA004A24E50EF9F7D7FDD603D50FF9DF25F513
|
||||
:102FEA003CF9FD8303D2DF0B714221FD4A24E50E31
|
||||
:102FFA00F9F7D7FDA603D2DF0F714221FD4A24E576
|
||||
:10300A000EF9F7D7CF3CF903CF0EF902714221F737
|
||||
:10301A00D7FD6024CF37001DFD0A21FD5F24714AC8
|
||||
:10302A009DCE3831CE3971CBE43BEFCBE6F6F0CE0C
|
||||
:10303A00D4FFCF0EF903F556F9307332FD232EF57E
|
||||
:10304A000FF9EF783102000100EF71CF0EF905FD9B
|
||||
:10305A00B203EF68CF0EF9023102006000EF5DFDA6
|
||||
:10306A00A824FD5021FD5E24F52EF9F52FF9F5303F
|
||||
:10307A00F9717301717BFAFD5E04FD4A24CF3500B4
|
||||
:10308A0003CF370019CE3708F538FFCE3910CBE415
|
||||
:10309A00BFFFCBE6FFF5CED4FFF6BEE0BEE2BED060
|
||||
:1030AA00F5FAF9E50EF961FD717AFACED47F8E3818
|
||||
:1030BA006C809E38714221EF0300EFFDE7D7400E86
|
||||
:1030CA00F903DD06400EF901DF6331340708715355
|
||||
:1030DA0021F5BAF9EF1531542105F5BAF9EF0CA02B
|
||||
:1030EA00BAF9D5BAF961F8CFBAF9FF3144070871CC
|
||||
:1030FA000322F5BDF9EF1531042205F5BDF9EF0CF0
|
||||
:10310A00A0BDF9D5BDF961F8CFBDF9FF31040208B8
|
||||
:10311A00717321F5BCF9EF1531742105F5BCF9EF8E
|
||||
:10312A000CA0BCF9D5BCF961F8CFBCF9FF8F0EF938
|
||||
:10313A00D1DD0B2C03DD162C02DD12EDE431F5BADC
|
||||
:10314A00F9F5BDF9F5BCF9F5FBF9EDE43140BAF949
|
||||
:10315A0006DF1471202EF98F33F95C04D1DF207158
|
||||
:10316A000303710B23EF1840BAF942DF1271302EB4
|
||||
:10317A00F98F33F95C08D1DF06710303710B238FD2
|
||||
:10318A002EF95C08D1DD20A0FBF940FBF90DDC1A11
|
||||
:10319A00CF3CF903F6426CFFDF10426EFFDF0BF5FE
|
||||
:1031AA000EF9714221EF03F5FBF940BDF90ADF126E
|
||||
:1031BA0071402EF98F33F95C10D1DF067103037168
|
||||
:1031CA000B2340BCF90ADF1271502EF98F33F95CD8
|
||||
:1031DA0020D1DF06710303710B23320800D7C740E1
|
||||
:1031EA000EF903DF2C365CF9C7300600C150A8C1BE
|
||||
:1031FA005030FD3A2210068F57F95C0391DF1271A5
|
||||
:10320A00402FF98F34F95C10D1DF06710303710B7B
|
||||
:10321A00238F56F95C01D1DD068F57F95C0391F7CC
|
||||
:10322A00C6D7D958F9F1C15030FDC521C0629F5B9C
|
||||
:10323A00F971302FF98F34F95C08D1DF0671030375
|
||||
:10324A00710B23F7D7D95BF9F1C1D95AF9C15030BB
|
||||
:10325A00FDB622100471302FF98F34F95C08D1DFE2
|
||||
:10326A0006710303710B23F7D7C72004FBF8FF305D
|
||||
:10327A000F00C15030FDC521C0401BF902DF03F722
|
||||
:10328A00EF3FCC0100CC0202CC03808F56F95C01DF
|
||||
:10329A00D1DF0D8F57F95C03D1DF05CC0007EF10A2
|
||||
:1032AA008F57F95C0391DF05CC002FEF03CC00C7E1
|
||||
:1032BA0017C1300400C150A0C15030FDF6221006DB
|
||||
:0532CA00F71004C6D757
|
||||
:1032CF00400EF90161FC61FC61FC61FC61FCC1C352
|
||||
:1032DF00C5C7520C929269D4FEC1DFF88EFD708E75
|
||||
:1032EF00FCC1301805FD232EC09EFC609EFD34D41A
|
||||
:1032FF00FE5206C0B9A5A592DFF9C6C4C2C061FCD3
|
||||
:10330F00C1C3C5C7520C929269D4FEC1DFF88EFDBE
|
||||
:10331F00708EFCC13184510DF5C8F971483002FD32
|
||||
:10332F008227EDD33331A2510A71603002F5C8F90B
|
||||
:10333F00EDD3338FC8F9D1DD0891DD1291DD29EF7F
|
||||
:10334F00467150300271403002E5C8F9EF768E5069
|
||||
:10335F009F08F971503002D908F9F1FD072A629FD1
|
||||
:10336F000AF9CFC8F902EF5C31B4511731C45106D5
|
||||
:10337F00CFC8F903EF1171503002F5C8F971483019
|
||||
:10338F0002EF41CFC8F90440C8F903DF0E8F0AF9E5
|
||||
:10339F009E50D908F9F1FD1F2AEF158E509F0AF99B
|
||||
:1033AF0071503002D90AF9F1C1D908F9FDBA27C015
|
||||
:1033BF00A008F940C8F903DF0BD908F9F1FD072A76
|
||||
:1033CF00629F0AF9C09EFC609EFD34D4FE5206C077
|
||||
:1033DF00B9A5A592DFF9C6C4C2C061FCC1714AE5A7
|
||||
:1033EF00717BBD710BE6AF0401C061FCC1C5717A81
|
||||
:1033FF00FA31542013D51AF9DD0EEB18F9899E44D2
|
||||
:10340F00A218F9B01AF9EF2B710AE6300400BF24A5
|
||||
:10341F0001F6BF2A01300B0BBF280100000000513D
|
||||
:10342F000FBF280100000000500FBF28017153206B
|
||||
:10343F00716320C4C061FCEFFE61FCEFFE61FCEF25
|
||||
:10344F00FE61FCEFFE61FCEFFE61FCEFFE61FCEF45
|
||||
:10345F00FE61FCEFFE61FCEFFE61FCEFFE61FCEF35
|
||||
:10346F00FE61FCEFFE61FCEFFE61FCEFFE61FCEF25
|
||||
:10347F00FE61FCEFFE61FCEFFE61FCEFFE61FCEF15
|
||||
:10348F00FE61FCEFFE61FCEFFE61FCEFFE61FCEF05
|
||||
:10349F00FE61FCE51CF961FC71322161FCC18F52A8
|
||||
:1034AF00F94F96FFDF2B8F53F94F97FFDF238F5481
|
||||
:1034BF00F94F98FFDF1B71202FF98F34F95C04D17E
|
||||
:1034CF00DF0F710303710B23400EF90161F8E50F54
|
||||
:1034DF00F9C061FC61FCC1C3C5C7520C929269D49B
|
||||
:1034EF00FEC1DFF88EFD708EFCC1717AFA8E312C21
|
||||
:1034FF0006DD0991DD1D91DD3691EF4ED99AF9F177
|
||||
:10350F000491F9148D1F993091F9FD4A2D629F3660
|
||||
:10351F00F9EF378D1F764CC961C856C8E99AF9661D
|
||||
:10352F001894F93094F9FD4A2D629F37F9EF1BD9A2
|
||||
:10353F009AF9F10497F9148D1F993091F9FD4A2DDD
|
||||
:10354F00629F02F9300B03FD232E4031FF08DD058A
|
||||
:10355F00A031FFEF177158F000712221409AF90244
|
||||
:10356F00DF03F1EF048F9AF9819F9AF9C09EFC60F7
|
||||
:10357F009EFD34D4FE5206C0B9A5A592DFF9C6C48C
|
||||
:04358F00C2C061FC59
|
||||
:103594004040666D756C00004040666469760000CA
|
||||
:1035A40040406661646400004040667375620000D8
|
||||
:1035B400404066636D70000061636F73000000003B
|
||||
:1035C4006173696E000000006174616E00000000A8
|
||||
:1035D4006174616E32000000636F730000000000CC
|
||||
:1035E40073696E000000000074616E00000000004A
|
||||
:1035F400636F73680000000073696E680000000068
|
||||
:1036040074616E68000000006578700000000000BE
|
||||
:1036140066726578700000006C6465787000000064
|
||||
:103624006C6F6700000000006C6F673130000000B1
|
||||
:103634006D6F646600000000706F7700000000008A
|
||||
:1036440073717274000000006365696C000000000F
|
||||
:0E365400666C6F6F72000000666D6F640000A0
|
||||
:0A47F60030383A34353A3339000008
|
||||
:00000001FF
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,649 @@
|
||||
:02000000820577
|
||||
:02000200FFFFFE
|
||||
:020008005C0D8D
|
||||
:04001000D40AD60A2E
|
||||
:02001C002B0CAB
|
||||
:02002400770C57
|
||||
:02002A000A0BBF
|
||||
:080034005E0D250D200DCA0A26
|
||||
:04004A00D80A1B0DA8
|
||||
:0400C0007EFBFF853F
|
||||
:0A00C400FFFFFFFFFFFFFFFFFFFF3C
|
||||
:0A00CE00FFFFFFFFFFFFFFFFFFFF32
|
||||
:1000D800C7FD5D02C736F00071F4C6DE0671301048
|
||||
:1000E800F9EF10360000868767D1DFFB66D1DFF6AF
|
||||
:1000F800FD7C01360000674C09DE22318E12490072
|
||||
:10010800217267318E04F60FC1317B9EFDC41189BF
|
||||
:100118006142DF03F1EF01E1610687EFD940002179
|
||||
:10012800FFDF03E1EF01F161065700674C09DE1CB0
|
||||
:10013800318E124900217267318E04F647148961A5
|
||||
:1001480042DF03F1EF01E1610687EFDF66D161E885
|
||||
:10015800FD5E04FD3D05FD6824EDD900C6D761EDBF
|
||||
:10016800D7717BFACEA016CEA180CEA409F5AAFF3E
|
||||
:10017800F5A9FFD7F400F401F402CD0306F404F462
|
||||
:1001880005F406CD0740F40CF40EF408F40FF5302E
|
||||
:1001980000F53100F53300F53400CF350003CF37D3
|
||||
:1001A8000019F53C00F53E00F520FFF521FFCE22B1
|
||||
:1001B800E9E523FFCE240BCE2503F526FFCE271F26
|
||||
:1001C800CE2C1FE52EFFCE2F07CE28FFF54300F5D6
|
||||
:1001D8004700CF530006F55700F6BEE0BEE2F5D063
|
||||
:1001E800FFCBE4FFFFCBE6FFFFCED4FFCEE8FFCE88
|
||||
:1001F800ECFFCEE9FFCEEDFFCEEAFFCEEEFECEEB72
|
||||
:10020800FFCEEF49CED8FFCEDCFFCE38B1CE397164
|
||||
:10021800F537FF7108F20090BFB4017138F100F5AD
|
||||
:100228004002F54102F54302F5A5FFF5A6FF715816
|
||||
:10023800F000F530FF7128F0005087BF1801BF1A91
|
||||
:1002480001BF1C01BF1E017148F000F53002F5BC6A
|
||||
:10025800FFF5BDFFD7CEABACD7C720FE200CFBF80F
|
||||
:10026800FFF6BFBA015020BFBA01FD7105717BFAD4
|
||||
:1002780017040800FD2608629C06FDB107620E06F9
|
||||
:100288009C06300020BC02CC04005112879C0897C1
|
||||
:10029800878C08974C1C61C8ED4703FD5D02878C6D
|
||||
:1002A8000897318EFD7307D2DD0E878C0897318E43
|
||||
:1002B800FD7707629C06EFE6CC07008C074C04DE4E
|
||||
:1002C80066F1879C0997AC02148C049EFD11897213
|
||||
:1002D800878C0997318E07040800146299AC02A133
|
||||
:1002E800BC02878C099781879C0997878C0997D1CD
|
||||
:1002F800DFD4304000C1878C0897318E31AD128C25
|
||||
:1003080007318E318D03BDD831FFBDDADADAADD8C9
|
||||
:10031800FD780AC0629C06D1DD08FD7E0500E7ED88
|
||||
:100328005804615907EF94878C0897318EFD7B0735
|
||||
:10033800D2DFF4878C089781879C0897ED98025143
|
||||
:1003480004879C0897878C08974C12DE17878C08BF
|
||||
:1003580097318EFD7707629C06878C089781879C6A
|
||||
:100368000897EFE1715030025104879C0897878CF9
|
||||
:1003780008974C1261C8ED1504CC07008C074C0493
|
||||
:10038800DE6D31825169FD5D0231B2E20631825182
|
||||
:1003980002EFF6713BE2878C0997318E070408005B
|
||||
:1003A800148E509971503002878C099781879C0967
|
||||
:1003B80097878C0997D161E8318451CD304000C1CD
|
||||
:1003C800878C0897318E31AD128C07318E318D03B1
|
||||
:1003D800BDD831FFBDDADADAADD8FD780AC0629C43
|
||||
:1003E80006D1DD06FD7E05E7EF66615907EF8D87CB
|
||||
:1003F8008C0897318EFD7B07D2DFF431845102EFF0
|
||||
:100408000C878C089781879C0897ED76037160307C
|
||||
:1004180002CC0000CC01008C014C09DE218C01319A
|
||||
:100428008E1249F61F728C01318E04F647148961C9
|
||||
:1004380042DF03F1EF01E10D9B615901EFD98BD147
|
||||
:10044800DF08FD3609FD480AEF06FD7E05FD5E045E
|
||||
:1004580010FE100CC6D7C720FE200AFBF8FF717BE0
|
||||
:100468009DF6BFBA015080BFBA01717BFAFD7105D4
|
||||
:1004780017040600FD2608629C04FDB107620E04FD
|
||||
:100488009C04300048BBCC02005108879C06978723
|
||||
:100498008C06974C1261C8ED3305FD5D02878C060A
|
||||
:1004A80097318EFD7707629C04CC05008C054C04BF
|
||||
:1004B800DE61F1879C0797AB148C029EFD1189724F
|
||||
:1004C800878C0797318E07040600146299ABA1BB8D
|
||||
:1004D800878C079781879C0797878C0797D1DFD7E9
|
||||
:1004E800304000C1878C0697318E31AD128C0531B2
|
||||
:1004F8008E318D03BDD831FFBDDADADAADD8FD789B
|
||||
:100508000AC0629C04D1DD06FD7E05E7EF21615932
|
||||
:1005180005EF99878C0697318EFD7B07D2DFF4872C
|
||||
:100528008C069781879C0697ED9704FD3509F7108F
|
||||
:10053800FE100AC6D7717BFAC720FE2004FBF8FF1D
|
||||
:10054800FD710517040200FD2608629C01FDB10734
|
||||
:10055800626E019C013058FAFD0009626E019C012F
|
||||
:10056800FD7E0510FE1004C6D73184BD02EFFA7176
|
||||
:0A0578007BBD717ABED7717BBED740
|
||||
:1005820061CF5100718C7109FECBF800FEFC69014C
|
||||
:1005920000F6BF00F953C0F693935820FEDFF941ED
|
||||
:1005A20000365E20345AFAEF05118B99A7A517443D
|
||||
:1005B2007420DFF53602F9305AFAEF04CC0000A7B6
|
||||
:1005C20047DFF941003674203470FAEF05118B9938
|
||||
:1005D200A7A517447420DFF53670FA3070FAEF04DD
|
||||
:1005E200CC0000A747DFF9FCD80000EFFE61DD7107
|
||||
:1005F2007BFABEF0ADD8BEF200AEF661CDD706DA18
|
||||
:10060200BDDAADDC06D8BDD861D8A6DAD7C312AD43
|
||||
:10061200D826DCBDD861317006DA23BDDAC2D7D163
|
||||
:10062200DD1BC1C3DADA9DDAADD8311E33311E3398
|
||||
:1006320071F9B4DADFF4BDD813BDDAC2C0D75BDB1F
|
||||
:100642009DDB605BDA9DDAADDC5BD9085BD808BD67
|
||||
:10065200D8D7DF1D06DC44807FDF167152DEEF3211
|
||||
:10066200DF0F06D844807FDF083154DE3C3172DE72
|
||||
:100672003CC9DE0504FDC706EF46C514ADDEC16503
|
||||
:100682007BDB5C809DDEADDA71FB3571FB44807FE4
|
||||
:10069200DEC03544807FDEC86BD96BD86BDD6BDC86
|
||||
:1006A2000561C8DD1BADDA71FB3174DE077174DBE5
|
||||
:1006B200F181EF0C45ADD861F846DC61E87177DB7A
|
||||
:1006C200C0BDDEC4D78EFC708EFDC1C5C3ADDE31A8
|
||||
:1006D2005E048639320000C3C1D8DEF1C1AEF8FC37
|
||||
:1006E200F10600C0C0C0C2C4C09EFD609EFCD7140B
|
||||
:1006F20089728A049EFDAA021411894C40DD0E62A1
|
||||
:100702004C0430020061C8300100BF00F9D7C5C3F4
|
||||
:10071200C1ADDADAD831750914F62312F661D8B10F
|
||||
:1007220025ED2F07C5C3C1ADDADAD8F4DB0361C802
|
||||
:10073200DD3B23559E31730A9501311C61D8A131ED
|
||||
:1007420075F6618A4C80618ADC11DF0633718C3365
|
||||
:10075200DE0983DF0604010061D8857174DB35612F
|
||||
:10076200FB9DDB6571F99DDA637064BDD8C0C2C4BC
|
||||
:01077200D7AF
|
||||
:100773005208EF065203EF025206FEE600FE1B008C
|
||||
:10078300DC16089F03088F0408089F040862FE24F0
|
||||
:1007930000089F0408EEBF00EEBA00C1C514410E65
|
||||
:1007A30011D9D0FF118FD1FF312E45C4C0D7F231FB
|
||||
:1007B300A2C401E2D79DE261DD4C09DF12717BFA2D
|
||||
:1007C300C18F06089F7FFAC0CF060800EE270031CD
|
||||
:1007D300F2FA04CF0608004C00DF05D50008DD1649
|
||||
:1007E30061DD717BFAD50608DD0ACDE31F61CD61BA
|
||||
:1007F300CDEE160061CDFED40061FFFE9A00FCF839
|
||||
:10080300FF0EFEB20061CDFED5004C09DF0EC18F95
|
||||
:1008130006086F7FFA9F0608C0EE0400CF060800A3
|
||||
:10082300F8E3D75200EF025202FE3700CF7EFA0000
|
||||
:10083300CF060800BF0408C716629F0008410011D5
|
||||
:100843008F5C209B4100118F5D209F0108C65100E2
|
||||
:10085300FE62FFEF025205CF060800C1510CFE0AEB
|
||||
:1008630000C0D7C1511DFE0200C0D761DD717BFA04
|
||||
:1008730070CEC0A59EC47CFF9EC4609EC461CDD7CC
|
||||
:1008830061DD717BFAC18EC45C1BFED6FFCF060807
|
||||
:1008930001FED7FFC061CDD731F2FA1AC1AEE4BF72
|
||||
:1008A30070FAAEE6BF72FAAED4BF74FA30FFFFBE81
|
||||
:1008B300E4BEE6BED4C0D731F2FA11C1AF70FABEBE
|
||||
:1008C300E4AF72FABEE6AF74FABED4C0D7C1BF7646
|
||||
:1008D300FA13BF78FA15BF7AFA17BF7CFAC0D7AFFD
|
||||
:1008E30076FADB78FAEB7AFAFB7CFAD7534B305281
|
||||
:1008F3005430324E323030475631323000C5C15158
|
||||
:10090300045001EE0000FE5AFF9F03085109FEA4A4
|
||||
:10091300FEC4D2DF0908C3618AF3FE0500C2C4EE38
|
||||
:1009230035FFC1C7FB040861C999A58392DFF8C6E7
|
||||
:10093300C0D7FFC150FEFEAB0061DD717BFACF066D
|
||||
:100943000800FE0A00FE6FFF61CDF8E3EECF00C79B
|
||||
:10095300FB0408BF70FA8FC0009C05C5C3370406AB
|
||||
:1009630000BF72FA35369A09300000522BFE66003A
|
||||
:10097300C2C4C6304809B800300000B8022004AF32
|
||||
:1009830072FAB800300F00B802AF70FA61FF520A72
|
||||
:10099300FE05FFECF8FF0E717BFAC1C7FB04088C60
|
||||
:1009A30005C65C80FE0200C0D761DD717BFA70CFA3
|
||||
:1009B300C0FFA59FC0007CFF9FC000609FC0006177
|
||||
:1009C300CDD7618BFEE2FF717BBE410011FB0000BE
|
||||
:1009D30017CEFC0061CB089EFDF31161C999A58375
|
||||
:1009E30092DFF7D7FE7CFED57EFADF23C1CF030863
|
||||
:1009F300035109FEBFFDC0D2DF37FE3800A2040851
|
||||
:100A0300CF0308075109FEACFDD2B20408DF22C7A9
|
||||
:100A1300FB0408318302C6D7C6510AFE97FD624C18
|
||||
:100A23001FDF06CF7EFA01EF04CF7EFA00C0EE2669
|
||||
:100A3300FEC0EE20FEC7C1FB04088B31196C0161B7
|
||||
:100A4300589BC0C6D7717BFAFE18FEAF0408040694
|
||||
:100A530000C11436AC09300000522DF3FE77FF8F2E
|
||||
:100A6300C000FEF6FD61CF5C807C8073C00419007A
|
||||
:100A7300CEFC0F61CBC55404EF03C55417FEE3FD51
|
||||
:100A8300C7360008BB629C0288089C03D1DD334C47
|
||||
:100A930041DE2F70F1312DB161090033081C0008CC
|
||||
:100AA30051FF612A410E118FD0FF613B118FD1FF9E
|
||||
:100AB3006138DC0E8B5C03DF0964C6C4FEF6FCEE12
|
||||
:070AC30095FDC6C4EE8EFD97
|
||||
:100ACA00400EF90161FC61FC61FC61FC61FCC1C37F
|
||||
:100ADA00C5C7520C929269D4FEC1DFF88EFD708EA2
|
||||
:100AEA00FCC1301324FDA533C09EFC609EFD34D4A6
|
||||
:100AFA00FE5206C0B9A5A592DFF9C6C4C2C061FC00
|
||||
:100B0A00C1C3C5C7520C929269D4FEC1DFF88EFDEB
|
||||
:100B1A00708EFCC13184510DF562FA71483002FDC4
|
||||
:100B2A00EC2BED130C31A25139F562FA71483002FF
|
||||
:100B3A0071603002FDEC2BD542F9DF0FD543F9DFA6
|
||||
:100B4A000AD544F9DF05D545F9DD11710A233102C9
|
||||
:100B5A000302EFFA710303710B23EF03710A23ED0A
|
||||
:100B6A00130C319451124062FA03DD064062FA0412
|
||||
:100B7A00DF06F562FAFDEC2B8F62FAD1DD0891DD12
|
||||
:100B8A001291DD29EF467140300271503002E56260
|
||||
:100B9A00FAEF768E509F08F971503002D908F9F1B0
|
||||
:100BAA00FD792E629F0AF9CF62FA02EF5C31945105
|
||||
:100BBA001731C45106CF62FA03EF11F562FA714890
|
||||
:100BCA00300271603002EF41CF62FA044062FA03E8
|
||||
:100BDA00DF0E8F0AF99E50D908F9F1FD912EEF1513
|
||||
:100BEA008E509F0AF9D90AF9F1C1D908F9FD372CB3
|
||||
:100BFA00C071503002A008F94062FA03DF0BD9082D
|
||||
:100C0A00F9F1FD792E629F0AF9C09EFC609EFD34BF
|
||||
:100C1A00D4FE5206C0B9A5A592DFF9C6C4C2C06106
|
||||
:100C2A00FCC1C7F616710BE2714AE5717BBD710A08
|
||||
:100C3A00E651405F0401D1DD05A7F647DFF3710AEB
|
||||
:100C4A00E6300400BF2401F6BF2A01300B0BBF288F
|
||||
:100C5A000100000000510FBF280100000000500FE2
|
||||
:100C6A00BF2801715320716320C6C061FCC1C53120
|
||||
:100C7A00542016D51AF9DD0EEB18F9899E44A218EC
|
||||
:100C8A00F9B01AF9EF2B715320710AE6300400BF4C
|
||||
:100C9A002401F6BF2A01300B0BBF28010000000017
|
||||
:100CAA00510FBF280100000000500FBF28017163D7
|
||||
:100CBA0020C4C061FCEFFE61FCEFFE61FCEFFE6147
|
||||
:100CCA00FCEFFE61FCEFFE61FCEFFE61FCEFFE61F2
|
||||
:100CDA00FCEFFE61FCEFFE61FCEFFE61FCEFFE61E2
|
||||
:100CEA00FCEFFE61FCEFFE61FCEFFE61FCEFFE61D2
|
||||
:100CFA00FCEFFE61FCEFFE61FCEFFE61FCEFFE61C2
|
||||
:100D0A00FCEFFE61FCEFFE61FCEFFE61FCEFFE61B1
|
||||
:100D1A00FCE51CF961FC71422161FCC18F6CF94F41
|
||||
:100D2A0096FFDF2B8F6DF94F97FFDF238F6EF94FF9
|
||||
:100D3A0098FFDF1B8F4BF95C04D1DF13712043F955
|
||||
:100D4A00710303710B23400EF90161F8E50FF9C035
|
||||
:100D5A0061FC61FCC1C3C5C7520C929269D4FEC141
|
||||
:100D6A00DFF88EFD708EFCC1717AFA8E312C06DDA9
|
||||
:100D7A000991DD1D91DD3191EF49D9AEF9F104A553
|
||||
:100D8A00F9148D1F9930A5F9FDE932629F3AF9EFFE
|
||||
:100D9A0032D9AEF9F104A8F9148D1F9930A8F9FDDA
|
||||
:100DAA00E932629F3BF9EF1BD9AEF9F104ABF914B2
|
||||
:100DBA008D1F9930A5F9FDE932629F02F93012229E
|
||||
:100DCA00FDA5334031FF08DD05A031FFEF1771584B
|
||||
:100DDA00F00071322140AEF902DF03F1EF048FAE69
|
||||
:100DEA00F9819FAEF9C09EFC609EFD34D4FE520686
|
||||
:100DFA00C0B9A5A592DFF9C6C4C2C061FCC1C3C50A
|
||||
:100E0A00C7520C929269D4FEC1DFF88EFD708EFC37
|
||||
:100E1A00C18F72F95C03D1DD16400EF903DD06407D
|
||||
:100E2A000EF905DF0A31240F0630B737FDA533C0A6
|
||||
:100E3A009EFC609EFD34D4FE5206C0B9A5A592DF81
|
||||
:070E4A00F9C6C4C2C061FC3F
|
||||
:0A0FF60030383A34353A3339000040
|
||||
:10200000EA0102030405060708090A0B0C0D0E0F6E
|
||||
:10201000101112131415161718191A1B1C1D1E1F48
|
||||
:10202000202122232425262728292A2B2C2D2E2F38
|
||||
:10203000303132333435363738393A3B3C3D3E3F28
|
||||
:102040004A574000F6DA6E9472362B329223D2272A
|
||||
:0E2050008F29EB2AC52F653168311035080144
|
||||
:10205E000B001F0000000000000000000000000048
|
||||
:06206E000000000000006C
|
||||
:08207400317503F7332312D785
|
||||
:0A21000030383A34353A3339000024
|
||||
:10210A00F7D7C7C1FBF8FF31642002EFFA715220FA
|
||||
:10211A00340020C5304000C1C1506CFD05261006B0
|
||||
:10212A0017C1E6A1C1500EC1506CFD492510061712
|
||||
:10213A00C1E6A1C1500EC1506CFD4925100617C158
|
||||
:10214A00E6A1C1A1A1C1506CFD4925100617C1E63F
|
||||
:10215A00A1C1500EC1506CFD05261006CC0100CC61
|
||||
:10216A00000017C1E6A1C1503EC1506CFD05261002
|
||||
:10217A0006CF03F99EAF5AFABF04F9AF5CFABF065D
|
||||
:10218A00F9C0C6D7C72006FBF8FFC7170403001615
|
||||
:10219A00F74940209BA3A75102614ADFF4C6C7173B
|
||||
:1021AA00A116F74942209BA3A75102614ADFF4C650
|
||||
:1021BA0017A1C1E6A1C15006C1506CFD0526100643
|
||||
:1021CA0017040300C1E6A1C1503EC1506CFD0526AB
|
||||
:1021DA001006716201300900FD3B3362316A9C05C9
|
||||
:1021EA00716301FD0C21717201300800FD3B3362FD
|
||||
:1021FA009F02F9301222FDA533F6C15084FDD02486
|
||||
:10220A00C0629C051006C6D7C7C1FBF8FF51E0D9CA
|
||||
:10221A0002F9D651A36128319E9F3DF92F5EFA310A
|
||||
:10222A008EFD74201344040071FEDE05D55FFADFCB
|
||||
:10223A00548F3DF97C804C95DC15D93DF9F1241475
|
||||
:10224A0000BDD8AF04F9FDEF0512F623BBEF13D991
|
||||
:10225A003DF9F1241400BDD8AF06F9FDEF0512F6D9
|
||||
:10226A0023BBD903F9F1610900BB17C1E6A1C1502B
|
||||
:10227A000CC1506CFD05261006D2DF068F3DF99F72
|
||||
:10228A005EFAA05FFAF7C0C6D7300500FDEC34301D
|
||||
:10229A000500FDEC34717041F9E7D7303300FDECED
|
||||
:1022AA0034F6C1E6A1C15084FDC5251004717841F8
|
||||
:1022BA00F9F7D7300A00FDEC34716041F9E7D771BC
|
||||
:1022CA006841F9F7D7F7D7FDCF22F7D7FD9322F761
|
||||
:1022DA00D7FDBD22F7D7FDC922F7D7FDA522F7D72B
|
||||
:1022EA00C75A00FC8E205CFC9E2071030E715207B7
|
||||
:1022FA0030A000FDEC34715307300400C1506CFD6E
|
||||
:10230A00D024C056C866318EF7BDD813BDDAFD1089
|
||||
:10231A0007C9DCCCCC30F440FD7C06DE03E7EF2BAA
|
||||
:10232A00669F3CF9710A2071003000711200710237
|
||||
:10233A000E306400FDEC343102000F5A00FC8E208E
|
||||
:10234A005CFC9E2071030EE7EF01F7C6D73104004B
|
||||
:10235A00245A00FC8E205CFC9E2071030E715207E9
|
||||
:10236A0030FA00FDEC3430FA00FDEC3430FA00FDAE
|
||||
:10237A00EC347153075A00FC8E205CFC9E207103DA
|
||||
:10238A000EF7D7FDA522F7D7D560FADD04B060FABB
|
||||
:10239A00D7CF60FA3331040706713041F9EF04717F
|
||||
:1023AA003841F931120506714041F9EF047148418B
|
||||
:1023BA00F9403DF957DC09403DF9B861D8E561FAC1
|
||||
:1023CA00403DF947DC09403DF9BD61D8F561FA4065
|
||||
:1023DA0061FA01DF0C403DF947DC06403DF9BDDCFE
|
||||
:1023EA0011D561FADF11403DF957DC0B403DF9B8D0
|
||||
:1023FA00DE05712204EF03712304311205058F5A99
|
||||
:10240A00F9EF01F1318EBE6AD7F7D77140F000714A
|
||||
:10241A00783002713AE6713BE2713BEA713BEE5A5F
|
||||
:10242A0006FCCF34024AE552FF711A52710A527100
|
||||
:10243A004830027130300271203002CF330208CFA7
|
||||
:10244A0032020A71303102713BE6717030028E2617
|
||||
:10245A005CFC9E26D7717830027148F000D7FD6186
|
||||
:10246A002BFD65278F10F9313305F50EF9EF04CFEF
|
||||
:10247A000EF903FD2B2CFDA62EFD3727FDAD24FDFD
|
||||
:10248A006B33715221717AFAFD5D02FD6E3331545C
|
||||
:10249A002108715321FD6E33EFF4FD7834FD660196
|
||||
:1024AA00EFE6D731020403F1EF01E13410F9718C40
|
||||
:1024BA008971899931120403F1EF01E13410F9713C
|
||||
:1024CA008C89719999D7C7C1C1FBF8FF3172200372
|
||||
:1024DA00FD37273164200300EFF9716220F51BF9FB
|
||||
:1024EA008C02318EFD8826D2DD0ACF1BF902716378
|
||||
:1024FA0020F7EF478C0A318EFD9E26FDE8268C02D6
|
||||
:10250A006C01318EFD9E26300400BF240130174035
|
||||
:10251A00BF1C01300400BF2201F6BF2A01710BE281
|
||||
:10252A00CE44FF3182E202EFFA8E449C01FD13276A
|
||||
:10253A00710BE27163208C01318E121004C6D7C769
|
||||
:10254A00C1FBF8FF31722003FD37273164200300F5
|
||||
:10255A00EFF97162208B318EFD8826D2DD06716318
|
||||
:10256A0020E7EF548C08318EFD9E26FDE8268B6C01
|
||||
:10257A0001318EFD9E26300400BF2401301740BF72
|
||||
:10258A001C01300400BF22018C0A91DF04F6BF2A25
|
||||
:10259A0001710BE2CE44FF3182E202EFFAAC0C1475
|
||||
:1025AA008E449961790C61690A8C0AD1DFDAFD13CC
|
||||
:1025BA0027710BE2716320F7C0C6D7C7C1FBF8FFCA
|
||||
:1025CA0031722003FD37273164200300EFF971626D
|
||||
:1025DA0020710AE68B318EFD8826D2DD06716320D2
|
||||
:1025EA00E7EF158C08318EFD9E268C0A318EFD9EF2
|
||||
:1025FA0026FD1327716320F7C0C6D7C7C1FBF8FFB2
|
||||
:10260A0031722003FD37273164200300EFF971622C
|
||||
:10261A0020710AE6710BE28B318EFD8826D2DD0924
|
||||
:10262A00716320717AFAE7EF52710BE23152203965
|
||||
:10263A00C73414F9AC0C1652048B99A5A792DFF98A
|
||||
:10264A00C63184BD02EFFA717ABDCEB144CBB4145F
|
||||
:10265A00F98C0A318EBEB8CEBB48714BE1714BE59D
|
||||
:10266A00710ABD8C089E44EF118C089E44710BE6DA
|
||||
:10267A008C0A9F1AF9AC0CBF18F9F7C0C6D7C7164F
|
||||
:10268A00FDBF2617F1FD9E26D2DD06FD1327E7EFD3
|
||||
:10269A0001F7C6D7C716710BE2669E443182E20380
|
||||
:1026AA0000EFF9F6420401DD09AF0401BF0C01E7AE
|
||||
:1026BA00EF01F7C6D7AF2801085CFB08BF28010065
|
||||
:1026CA00000000AF28015CFBBF2801300400BF2ACC
|
||||
:1026DA0001301780BF1C01300400BF2201D7AF248C
|
||||
:1026EA0001086C0408BF2401AF28016C0F086C0BA9
|
||||
:1026FA0008BF280100000000AF2A01085CFB08BFE0
|
||||
:10270A002A0100000000EDBF26300400BF2401F6B4
|
||||
:10271A00BF2A01300B0BBF280100000000510FBF78
|
||||
:10272A00280100000000500FBF2801D7D7710BBD48
|
||||
:10273A00717BBD7132057120F00000000000F6BF08
|
||||
:10274A0026015014BF1401CB44000A300F0FBF28D2
|
||||
:10275A0001716320715320717220D731642002EF16
|
||||
:10276A00FAFDE8267133057128F000717320D7D776
|
||||
:10277A00D77100F200301100BFB601300188BF9056
|
||||
:10278A0001300984BF9E01BF9C01BF9A01BF980115
|
||||
:10279A00BF9601BF9401BF9201F53CFF30FE00BF16
|
||||
:1027AA00BE015004BFBC01F6BFB80150EEBFBA016A
|
||||
:1027BA00A1BFB201C918FE00D730EF00BFB401F6BD
|
||||
:1027CA00BFBA017108F200D78F5BF9D1DD1191DD33
|
||||
:1027DA004991DD4291DD2091DD4491DD49EF3B8F46
|
||||
:1027EA000EF92C03DC47D1DD0A91DD4191DF04FDAE
|
||||
:1027FA00D528D7FD3828D7F6426CFF61E8E1318F3A
|
||||
:10280A0012AE6C23BE6CF6426EFF61E8E1318F12A4
|
||||
:10281A00AE6E23BE6ED7FDD528D7FD3828D7F6BEB3
|
||||
:10282A006CCB6EFF00D7CB6CFF00F6BE6ED78F3C29
|
||||
:10283A00F9318EF7BDD813BDDAFD1007C9DC0000E7
|
||||
:10284A00304C41FD7C06DE17A01DF9401DF97FDEE4
|
||||
:10285A0007F6BE6CBE6EEF06D95AF9F1BE6ED78F77
|
||||
:10286A003CF9318EF7BDD813BDDAFD1007C9DC007B
|
||||
:10287A0000304C42FD7C06DE29F6426CFF61E8B26C
|
||||
:10288A006CFFD95AF9F1426EFFDD3FD95AF912AEFF
|
||||
:10289A006E43DE03E1EF0251FF318F12AE6E03BECB
|
||||
:1028AA006ED7D95AF9F1426CFFDD16D95AF912AE30
|
||||
:1028BA006C43DE03E1EF0251FF318F12AE6C03BEAF
|
||||
:1028CA006CF6426EFF61E8B26EFFD7D51EF9DD04E1
|
||||
:1028DA00B01EF9D7CF1EF903AE6E4222F9DD13AF4F
|
||||
:1028EA0022F9426EFFDE05B26EFFEF06AE6EA1A1BF
|
||||
:1028FA00BE6EAE6C4220F9DD13AF20F9426CFFDEEA
|
||||
:10290A0005B26CFFEF06AE6CA1A1BE6C8F1FF9D1A8
|
||||
:10291A00DD082C02DD042C02DF338F3CF9318EF7FF
|
||||
:10292A00BDD813BDDAFD1007C9DC0000304C42FDEA
|
||||
:10293A007C06DE0CF6BF20F9D95AF9BF22F9EF332B
|
||||
:10294A00D95AF9F1BF20F9F6BF22F9EF268F3CF9DF
|
||||
:10295A00318EF7BDD813BDDAFD1007C9DC0000308F
|
||||
:10296A004C42FD7C06DE07E6A1BF22F9EF05E6A18F
|
||||
:10297A00BF20F9AE6C4220F9DF0AAE6E4222F9613D
|
||||
:10298A00F8A01FF9D7C7D524F9DD06B024F9EDE977
|
||||
:10299A002A8F5CF9D1DD1491DD2391DD359161F83F
|
||||
:1029AA00ED322A9161F8ED612AEF12F6BE66F51C46
|
||||
:1029BA00F9F526F9F525F9714302EDE92AD95AF90B
|
||||
:1029CA00F1BE66F51CF9F526F9F525F9714202ED15
|
||||
:1029DA00E92AD51CF9DD07F51CF9CF25F902D52519
|
||||
:1029EA00F9DD358F26F991DD082C02DD042C02DF92
|
||||
:1029FA0008F6BE66714302EF09D95AF9F1BE66714B
|
||||
:102A0A004202A026F94026F920DF06F526F9B0256C
|
||||
:102A1A00F9CF24F916EDE92AD95AF9F1BE667142BD
|
||||
:102A2A0002CF24F9C8EDE92A7142028F26F991DD15
|
||||
:102A3A00082C02DD042C02DF08D95AF9F1BE66EF30
|
||||
:102A4A0003F6BE66A026F94026F91061F8F526F9C4
|
||||
:102A5A00CF24F932EDE92A714202D525F9DD0CF6C7
|
||||
:102A6A00BE66F525F9CF24F93CEF748F26F95C038D
|
||||
:102A7A003119728F26F931AE0444201489D2DD054A
|
||||
:102A8A00311992DFFB318FF1085CC076D1DF03F197
|
||||
:102A9A00EF048F26F9819F26F966D1DD0E2C40DDE1
|
||||
:102AAA00162C40DD1E2C40DD29EF0CF6BE66F525FE
|
||||
:102ABA00F9CF24F9B4EF28F6BE66E525F9CF24F953
|
||||
:102ACA003CEF1CD95AF9F1BE66E525F9CF24F93C49
|
||||
:102ADA00EF0DD95AF9F1BE66E525F9CF24F9B4C646
|
||||
:102AEA00D7D527F9DD04B027F9D78F5DF9D1DD0FE6
|
||||
:102AFA0091DD1D91DD1091DD1791DD2F91DD43F6FA
|
||||
:102B0A00BE64F564FAD7D95AF9F1BE64F564FAD706
|
||||
:102B1A00D564FADF0BD95AF9F1BE64E564FAEF0617
|
||||
:102B2A00F6BE64F564FACF27F9FAD7D564FADF0E50
|
||||
:102B3A00D95AF9F1BE64E564FACF27F9FAD7F55DF7
|
||||
:102B4A00F9D7D564FADF0BF6BE64E564FACF27F944
|
||||
:102B5A00FAD7CF5DF902D7C736F00071F4DC1371EA
|
||||
:102B6A0070F000CE9D08CE9EC0CE9F80CE9C7FE5A1
|
||||
:102B7A0034F9711BE3712BE3711AE7712BE7717A50
|
||||
:102B8A009D710A9E31929E02EFFA710B9E7103218A
|
||||
:102B9A00711321712321C6D7C73102211E71022167
|
||||
:102BAA00710A9E31929E02EFFA3462F93692FF520E
|
||||
:102BBA00078B99A5A792DFF9710B9EC6D7C788061E
|
||||
:102BCA001631122115711221C7342AF93092FF16D3
|
||||
:102BDA0052078B99A5A792DFF9C6667367182AF977
|
||||
:102BEA00C6D7C77103213114211E711321710A9EA0
|
||||
:102BFA0031929E02EFFA3492FF362AF952078B99E4
|
||||
:102C0A00A5A792DFF9710B9E31242113717B9E8F48
|
||||
:102C1A006AF99E9A8F6BF99E9B711321717A9EC6EF
|
||||
:102C2A00D7CF5AF9FFF532F9CF33F905D7C7880656
|
||||
:102C3A001666320002F02361F8EDE52C912361D883
|
||||
:102C4A00EDF22C2361D8ED012DD161F8ED0A2D2C7E
|
||||
:102C5A00032361D8ED622E2C0C2C0461D8ED262DAD
|
||||
:102C6A002C0461F8ED2F2D9161F8ED412D2361F8C7
|
||||
:102C7A00ED6A2E912C0461D8EDC72DD161F8EDD003
|
||||
:102C8A002D9161F8EDD92D9161F8EDE22D9161F860
|
||||
:102C9A00EDEB2D9161F8EDF42D2C042C0761D8EDA4
|
||||
:102CAA00FC2DD161F8ED0B2E912361D8ED152E2C58
|
||||
:102CBA000361D8ED202E2C0361F8ED282E9161F8DE
|
||||
:102CCA00ED362E2361F8ED442E9161F8ED4C2E2C51
|
||||
:102CDA00072C0361D8ED5A2EED772E675CBF72661A
|
||||
:102CEA0073621832F9ED772E30D122FDA53366735F
|
||||
:102CFA00671832F9ED772E6673671832F9ED772E79
|
||||
:102D0A006673671832F94037F96ADF0D4038F96897
|
||||
:102D1A00DF074C6C61F8FD6102ED772E6673671868
|
||||
:102D2A0032F9ED772E6673671832F9D1DD0630A0D5
|
||||
:102D3A0031FDA533ED772E6673671832F9D1DD7A46
|
||||
:102D4A008F53F95C01D1DD05308000EF01F6609FF9
|
||||
:102D5A0092F98F53F95C02D1DD03E1EF01F172348C
|
||||
:102D6A0092F989616A998F53F95C04D1DD045102A1
|
||||
:102D7A00EF01F1723492F989616A998F53F95C080B
|
||||
:102D8A00D1DD045120EF01F1723492F989616A9917
|
||||
:102D9A008F53F95C10D1DD045110EF01F1723492B6
|
||||
:102DAA00F989616A998F53F95C20D1DD045140EFAA
|
||||
:102DBA0001F1723492F989616A99ED772E66736727
|
||||
:102DCA001832F9ED772E6673671832F9ED772E66A9
|
||||
:102DDA0073671832F9ED772E6673671832F9ED7753
|
||||
:102DEA002E6673671832F9ED772E6673671832F913
|
||||
:102DFA00EF7B67318EC1662C30318EFDC72BC0EF59
|
||||
:102E0A006C6673671832F99E99EF626673671832B7
|
||||
:102E1A00F9712221EF576673671832F9EF4F66731B
|
||||
:102E2A00671832F9303139FDA533EF4166736718F7
|
||||
:102E3A0032F930EA38FDA533EF336673671832F991
|
||||
:102E4A00EF2B6673671832F9300D39FDA533EF1D84
|
||||
:102E5A006673671832F9EF156673671832F9EF0D62
|
||||
:102E6A006673671832F92C7261F8CEABAAC6D7C757
|
||||
:102E7A0016664C30DC074C3761D8FDA22B66730905
|
||||
:102E8A0032F9318E12C6D7C716664C13DF0CF545D8
|
||||
:102E9A00F9F544F9F543F9F542F9C6D7CF82F93580
|
||||
:102EAA00CF88F90FCF89F907CF8DF903E58EF9E5B8
|
||||
:102EBA0091F9CF92F960D7C7880616662C042C02BE
|
||||
:102ECA00DC0B912C05DC062C062C08DE06667367E3
|
||||
:102EDA001882F9662C04DF1667D1DD128F4DF95C72
|
||||
:102EEA0010D1DF0A714045F9710303710B23C6D76C
|
||||
:102EFA00C71666730982F9318E12C6D7C7C1C1FBDC
|
||||
:102F0A00F8FF8C025CF09C018C025C0F9B8C014CDC
|
||||
:102F1A0081DC05F792EDC12F8C014C50DF05F79249
|
||||
:102F2A00EDC12F8C014C31DE468C014C11DE1E8C1A
|
||||
:102F3A00014C10DF0D8B4C03DE3351030D318E1221
|
||||
:102F4A00EF758B4C03DE268B318E12EF6A8C014CA7
|
||||
:102F5A0020DF0D8B4C02DE1551060D318E12EF5714
|
||||
:102F6A008B4C02DE5051080D318E12EF4AEF468C1F
|
||||
:102F7A00014C61DE208C014C60DF0D8B4C04DE3588
|
||||
:102F8A00510E0D318E12EF2F8B4C02DE28510A0D95
|
||||
:102F9A00318E12EF228C014C70DF0D8B4C08DE153E
|
||||
:102FAA0051120D318E12EF0F8B4C02DE08511A0DA1
|
||||
:102FBA00318E12EF02F7921004C6D7C7D566FADD32
|
||||
:102FCA0006B066FAED6331CF66FA02713203312434
|
||||
:102FDA000C06712041F9EF04712841F931140706F2
|
||||
:102FEA00711041F9EF04711841F9713303400EF978
|
||||
:102FFA0003DD09400EF90561E8ED63318F41F97F80
|
||||
:10300A009EF976D161F8ED51318F41F99F9EF966AB
|
||||
:10301A005C80D1DD2E8F41F95C80D1DD148F4DF9B2
|
||||
:10302A005C08D1DF1E713045F9710303710B23EF80
|
||||
:10303A00128F4DF95C04D1DF0A712045F97103033F
|
||||
:10304A00710B23665C40D1DD2E8F41F95C40D1DDE6
|
||||
:10305A00148F4DF95C02D1DF1E711045F97103031B
|
||||
:10306A00710B23EF128F4DF95C01D1DF0A71004514
|
||||
:10307A00F9710303710B23665C10D1DD2E8F41F9C0
|
||||
:10308A005C10D1DD148F4CF95C80D1DF1E71704465
|
||||
:10309A00F9710303710B23EF128F4CF95C40D1DFF6
|
||||
:1030AA000A716044F9710303710B23665C08D1DD70
|
||||
:1030BA002E8F41F95C08D1DD148F4CF95C20D1DFE9
|
||||
:1030CA001E715044F9710303710B23EF128F4CF9EF
|
||||
:1030DA005C10D1DF0A714044F9710303710B236656
|
||||
:1030EA005C04D1DD2E8F41F95C04D1DD148F4CF9DB
|
||||
:1030FA005C04D1DF1E712044F9710303710B23EFC5
|
||||
:10310A00128F4CF95C08D1DF0A713044F97103035C
|
||||
:10311A00710B23665C02D1DD2E8F41F95C02D1DD91
|
||||
:10312A00148F4CF95C02D1DF1E711044F97103034C
|
||||
:10313A00710B23EF128F4CF95C01D1DF0A71004445
|
||||
:10314A00F9710303710B238F72F95C03D1DD0A3124
|
||||
:10315A00240F0630B737FDA533C6D7C7C6D7C72051
|
||||
:10316A0004FBF8FF400EF903DD06400EF905DF22E5
|
||||
:10317A008F42F99C038F43F99C028F44F99C018F7B
|
||||
:10318A0041F99B17C1300400C1F6C15044FD052620
|
||||
:10319A0010061004C6D78F52F95C01D1DD05F50E71
|
||||
:1031AA00F9EF398F52F95C02D1DD0C5A00FC8E20FE
|
||||
:1031BA005CFC9E2071030E8F52F95C04D161E871A8
|
||||
:1031CA0013008F52F95C08D161E871030E300500D3
|
||||
:1031DA00FDEC34710A2071120071020E8F52F95CF3
|
||||
:1031EA0020D1DD0830DB22FDA533EF0E8F52F95CCA
|
||||
:1031FA0010D1DD0630E022FDA5338F52F95C80D173
|
||||
:10320A00DD0830D622FDA533EF0E8F52F95C40D18E
|
||||
:10321A00DD0630E522FDA533F552F9F7D700EFFDBB
|
||||
:10322A00D7C7400EF903DD09400EF90561E8EDE75D
|
||||
:10323A003231342170D568FADD06B068FAEDE7322A
|
||||
:10324A00CF68FA088FA3F92F3BF9318EFD7420134A
|
||||
:10325A0044040071FEDC258F3BF99FA3F98F3BF9EB
|
||||
:10326A00315A4FA4F9DD159FA4F98F4AF95C40D170
|
||||
:10327A00DF0A716042F9710303710B238F3BF94F27
|
||||
:10328A00A1F9DD1E8F3BF9311A738F3BF9312A619F
|
||||
:10329A000B9FA1F9D9A1F9F1C1F6C15050FDC5257D
|
||||
:1032AA0010047133217150F000CE301BCF17000685
|
||||
:1032BA00CE3106717A30710BE3710BE78F5EF991AB
|
||||
:1032CA00DD0591DD0AEF13D95AF9F1BD1AEF0E5156
|
||||
:1032DA00FF2F3AF9318EBD1AEF03F6BD1AC6D7C7CA
|
||||
:1032EA00C1C1FBF8FFAC021489728A016142DE1186
|
||||
:1032FA00899C01AC02148A017299AC02148C019A5D
|
||||
:10330A0001AC021489728A01614ADC0689318E1283
|
||||
:10331A00EF1BAC02148A01728A02614ADE078A0133
|
||||
:10332A00318E12EF08AC02148A02318E121004C6D2
|
||||
:10333A00D7C716710AE7710BE37150F000717B3041
|
||||
:10334A00CE3023CF170006669E31717A30710BE7B3
|
||||
:10335A003182E302EFFA8D1F7158F000318E12C6E6
|
||||
:10336A00D7ED8D33C73144211771432130482016D8
|
||||
:10337A0017445C20DD0AABCEFC0061CAA7A7EFF0B8
|
||||
:10338A00F7C6D7C75600664C0FDE0BF0317E12F631
|
||||
:10339A0078B0F986EFF0F56AFAC6D7717BFAC7C139
|
||||
:1033AA00C1FBF8FFD56BFADD0300EFFDE56BFA40D0
|
||||
:1033BA006AFA0FDC0300EFFDCC01008C014F6AFAB8
|
||||
:1033CA00DE1D8C01F0317E1279B0F9614902DF0A03
|
||||
:1033DA0000F56BFA717AFAE7EF60615901EFDCCC1C
|
||||
:1033EA0001008C014C0FDE188C01F0317E04B0F91B
|
||||
:1033FA0014A96168DF05AC02B9EF05615901EFE272
|
||||
:10340A00A06AFACC0000CC01008C014C0EDE168CAE
|
||||
:10341A0001F0317E04B0F914A9616861E8615900CC
|
||||
:10342A00615901EFE48B4F6AFADD0300EFFDF56B9A
|
||||
:10343A00FA717AFAF7EF0300EFFD1004C6D7C71640
|
||||
:10344A00667767F0317E04B0F914A96168DD1A67FE
|
||||
:10345A004C0FDE1581F0317E04B0F914A91267F021
|
||||
:10346A00317E3378B0F987EFD9B06AFAC6D7C72068
|
||||
:10347A0004FBF8FFCC0200CC03008C034C0FDE39AE
|
||||
:10348A008C03F0317E04B0F914A96168DD26A9CE57
|
||||
:10349A00FC0061CAD2DF1DD50EF9DF0BCC01008C0E
|
||||
:1034AA0001D1DF0300EFF8717BFA8C03318EFD48FE
|
||||
:1034BA0034717AFA615903EFC1CC03008C034C0FC3
|
||||
:1034CA00DE168C03F0317E04B0F914A9616861E854
|
||||
:1034DA00615902615903EFE48C02D1DF97F71004B6
|
||||
:1034EA00C6D7C7C1C1FBF8FFFD5D028C02D1DD1250
|
||||
:1034FA0061690230AE01BBF6614900DDEE61890007
|
||||
:10350A00EFF51004C6D7C7712BE78F0EF9D161F812
|
||||
:10351A00ED103691DD1B9161F8EDC2359161F8ED40
|
||||
:10352A00F5359161F8EDFC359161F8ED0536ED6DF3
|
||||
:10353A00368F0FF991DD30D5CEF9DF05D5D1F9DD1A
|
||||
:10354A0005F56CFAEF03A06CFA8F6CFA01DE09F547
|
||||
:10355A000EF9715221ED703640CEF903DE0940D1E1
|
||||
:10356A00F90361D8ED7036F56CFA716221710222A5
|
||||
:10357A00711222FD3727FD8E21FD0A21D2DD097144
|
||||
:10358A005221F50EF900EFFDFDEA22D2DD0C71524F
|
||||
:10359A0021FD6527E50EF9ED7036FDCF227163072F
|
||||
:1035AA00D50FF9DF05F55BF9EF04CF5BF903CF0E11
|
||||
:1035BA00F902715221ED7036FD7B27CF37001DCB02
|
||||
:1035CA00E43BEFCBE6F6F0CED4EFFD1524FD7A27E7
|
||||
:1035DA00714A9DCF0EF903308000C15008C1505086
|
||||
:1035EA00FDC525100400F50FF9EF7B31020001003B
|
||||
:1035FA00EF74CF0EF905FDC922EF6BCF0EF9023138
|
||||
:10360A0002006300EF60FDC327FD5F24FD7927F503
|
||||
:10361A0042F9F543F9F544F9F545F9717301717BFE
|
||||
:10362A00FA716207FD5723CF350003CF370019CE51
|
||||
:10363A003708CBE4BFFFCBE6FFF5CED4FFF6BEE0FA
|
||||
:10364A00BEE2BED0F56CFAE50EF931949E02EFFAAD
|
||||
:10365A00FD652761FD713AE7712BE7717AFA7152BC
|
||||
:10366A0021EF0300EFFDC6D7D56FFADD04B06FFA7C
|
||||
:10367A00D7CF6FFA08400EF903DD06400EF901DFD5
|
||||
:10368A006331340708716321F5CEF9EF15316421EE
|
||||
:10369A0005F5CEF9EF0CA0CEF9D5CEF961F8CFCE6B
|
||||
:1036AA00F9FF31440708711322F5D1F9EF153114E6
|
||||
:1036BA002205F5D1F9EF0CA0D1F9D5D1F961F8CFEE
|
||||
:1036CA00D1F9FF31040208710322F5D0F9EF15315F
|
||||
:1036DA00042205F5D0F9EF0CA0D0F9D5D0F961F89C
|
||||
:1036EA00CFD0F9FF8F0EF9D1DD092C03DD122C02A0
|
||||
:1036FA00DD0ED7F5CEF9F5D1F9F5D0F9F56DFAD792
|
||||
:10370A00D5CEF9DF20406EFA04DC40406EFA32DE94
|
||||
:10371A003A8F4AF95C04D1DF32712042F97103030E
|
||||
:10372A00710B23EF2640CEF932DF148F4AF95C0879
|
||||
:10373A00D1DF18713042F9710303710B23EF0C408A
|
||||
:10374A00CEF9C8DF06F50EF97152218FCEF99F6EB8
|
||||
:10375A00FA8F42F95C08D1DD20A06DFA406DFA0DAE
|
||||
:10376A00DC1ACF5BF903F6426CFFDF10426EFFDF13
|
||||
:10377A000BF50EF9715221EF03F56DFA40D1F90AF2
|
||||
:10378A00DF128F4AF95C10D1DF0A714042F97103E6
|
||||
:10379A0003710B2340D0F90ADF128F4AF95C20D15A
|
||||
:1037AA00DF0A715042F9710303710B23D7C7400E28
|
||||
:1037BA00F90361E8EDD9383477F9C5300600C1500C
|
||||
:1037CA00A8C15030FD492510068F78F9F0F977F92C
|
||||
:1037DA00F303FD7420131431FF31EE05312FC18F2D
|
||||
:1037EA007AF9F0F979F9F303FD7420C01413C514BA
|
||||
:1037FA0031FF31EE05312FC405C18F7CF9F0F97B19
|
||||
:10380A00F9F303FD7420C01413C51431FF31EE051A
|
||||
:10381A00312FC40516F1609F77F917709F78F98FD9
|
||||
:10382A0056FA5C1FF0317E04D2F914A9BDDCF6BD4C
|
||||
:10383A00DEAF52FABDD8AF54FABDDAADDEFD0F06DF
|
||||
:10384A00ADDABF54FAADD8BF52FA8F56FA5C1FF000
|
||||
:10385A00317E121778D2F9BDDCF6BDDEAF52FABD61
|
||||
:10386A00D8AF54FABDDAADDEFD0006ADDABF54FAC0
|
||||
:10387A00ADD8BF52FAA056FAAF52FABDD8AF54FA31
|
||||
:10388A00BDDA5106FD2106C9DCFF00F6FD40068DB2
|
||||
:10389A00D89F79F9AF52FABDD8AF54FABDDA5106BA
|
||||
:1038AA00FD21065108FD2106C9DCFF00F6FD400690
|
||||
:1038BA008DD89F7AF98F72F95C03D1DD128F4BF99B
|
||||
:1038CA005C10D1DF0A714043F9710303710B238F36
|
||||
:1038DA0072F95C02D1DD068F72F95C01D1F7C6D7A5
|
||||
:1038EA00D973F9F1C15030FDD024C0629F76F971C5
|
||||
:1038FA003043F98F4BF95C08D1DF06710303710B72
|
||||
:10390A0023F7D7D976F9F1C1D975F9C15030FDC578
|
||||
:10391A00251004713043F98F4BF95C08D1DF067129
|
||||
:10392A000303710B23F7D7C72004FBF8FF300F00FE
|
||||
:10393A00C15030FDD024C0401BF902DF03F7EF3736
|
||||
:10394A00CC0100CC0202CC03808F72F95C03D1DF78
|
||||
:10395A0005CC0007EF108F72F95C01D1DD05CC00B0
|
||||
:10396A002FEF03CC002F17C1300400C150A0C15063
|
||||
:0B397A0030FD05261006F71004C6D72C
|
||||
:103986004040666D756C00004040666469760000D4
|
||||
:1039960040406661646400004040667375620000E2
|
||||
:1039A600404066636D70000061636F730000000045
|
||||
:1039B6006173696E000000006174616E00000000B2
|
||||
:1039C6006174616E32000000636F730000000000D6
|
||||
:1039D60073696E000000000074616E000000000054
|
||||
:1039E600636F73680000000073696E680000000072
|
||||
:1039F60074616E68000000006578700000000000C9
|
||||
:103A060066726578700000006C646578700000006E
|
||||
:103A16006C6F6700000000006C6F673130000000BB
|
||||
:103A26006D6F646600000000706F77000000000094
|
||||
:103A360073717274000000006365696C0000000019
|
||||
:0E3A4600666C6F6F72000000666D6F640000AA
|
||||
:0A47F60030383A34353A3339000008
|
||||
:00000001FF
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,261 @@
|
||||
/* ========================================================
|
||||
対SoC 新規チャンネル I2C通信
|
||||
藤田@開技.nintendo
|
||||
'09 Apr
|
||||
======================================================== */
|
||||
#include "incs.h"
|
||||
#include "accero.h"
|
||||
|
||||
#ifdef _MCU_BSR_
|
||||
// #ifdef _MODEL_TS0_ || _MODEL_WM0_
|
||||
|
||||
// ワーキングモデルはI2Cが逆
|
||||
// TEGは回路図でテレコ
|
||||
#define ACKD ACKD1
|
||||
#define ACKE ACKE1
|
||||
#define COI COI1
|
||||
#define IICAEN IICA1EN
|
||||
#define IICRSV IICRSV1
|
||||
#define IICA IICA1
|
||||
#define IICAIF IICAIF1
|
||||
#define IICAMK IICAMK1
|
||||
#define IICAPR0 IICAPR11
|
||||
#define IICAPR1 IICAPR01
|
||||
#define IICCTL0 IICCTL10
|
||||
#define IICE IICE1
|
||||
#define IICF IICF1
|
||||
#define IICS IICS1
|
||||
#define IICWH IICWH1
|
||||
#define IICWL IICWL1
|
||||
#define LREL LREL1
|
||||
#define SPD SPD1
|
||||
#define SPIE SPIE1
|
||||
#define STCEN STCEN1
|
||||
#define STD STD1
|
||||
#define SVA SVA1
|
||||
#define WREL WREL1
|
||||
#define WTIM WTIM1
|
||||
#define TRC TRC1
|
||||
#define SMC SMC1
|
||||
#define DFC DFC1
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
// ==============================================
|
||||
extern bit irq_readed; // いずれかのIRQレジスタが読まれた
|
||||
|
||||
u8 iic_burst_state;
|
||||
|
||||
|
||||
/* ========================================================
|
||||
======================================================== */
|
||||
enum
|
||||
{
|
||||
IIC_IDLE = 0,
|
||||
IIC_RCV_REG_ADRS,
|
||||
IIC_TX_OR_RX,
|
||||
IIC_TX,
|
||||
IIC_RX
|
||||
};
|
||||
|
||||
|
||||
// 1バイト送受の度に割り込みが発生するバージョン
|
||||
__interrupt void int_iic_ctr( )
|
||||
{
|
||||
static u8 state = IIC_IDLE;
|
||||
static u8 reg_adrs;
|
||||
static u8 reg_adrs_internal;
|
||||
static u8 tx_buf;
|
||||
u8 rx_buf;
|
||||
|
||||
EI();
|
||||
|
||||
// 読み出し終了
|
||||
if( !ACKD ) // 割り込み要因はNAK(データ送信の最後)
|
||||
{
|
||||
state = IIC_IDLE;
|
||||
SPIE = 0;
|
||||
LREL = 1;
|
||||
|
||||
// レジスタリードで、割り込みピンをネゲート
|
||||
// まだ読まれてない割り込みがあれば、再度アサート
|
||||
if( irq_readed )
|
||||
{
|
||||
IRQ0_neg;
|
||||
irq_readed = 0;
|
||||
if( !( ( vreg_ctr[VREG_C_IRQ0] == 0 )
|
||||
&& ( vreg_ctr[VREG_C_IRQ1] == 0 )
|
||||
&& ( vreg_ctr[VREG_C_IRQ2] == 0 )
|
||||
&& ( vreg_ctr[VREG_C_IRQ3] == 0 ) ) )
|
||||
{
|
||||
while( !IRQ0 ){;} // 時間稼ぎ不要かも
|
||||
IRQ0_ast;
|
||||
}
|
||||
}
|
||||
|
||||
// 歩数計読み出し終了
|
||||
hosu_read_end( );
|
||||
rtc_unlock( );
|
||||
iic_burst_state = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
if( SPD ) // 割り込み要因はストップコンディション
|
||||
// 通信の最後。↑の !ACKD に来たときは割り込み来ない (SPIE = 0 のため )
|
||||
{
|
||||
state = IIC_IDLE;
|
||||
SPIE = 0;
|
||||
// I2C終了時に何かする物 //
|
||||
rtc_unlock( );
|
||||
return;
|
||||
}
|
||||
|
||||
if( STD ) // 割り込み要因:スタートコンディション
|
||||
{
|
||||
if( ( state == IIC_TX ) || ( state == IIC_RX )
|
||||
|| ( state == IIC_RCV_REG_ADRS )
|
||||
)
|
||||
{
|
||||
state = IIC_IDLE;
|
||||
// no break //
|
||||
}
|
||||
}
|
||||
|
||||
switch ( state )
|
||||
{
|
||||
case ( IIC_IDLE ):
|
||||
// 自局呼び出しに応答。
|
||||
// 初期化など
|
||||
SPIE = 1;
|
||||
state = IIC_RCV_REG_ADRS;
|
||||
WREL = 1; // ウェイト解除
|
||||
break;
|
||||
|
||||
case ( IIC_RCV_REG_ADRS ): // 2バイト目(レジスタアドレス)受信後に来る
|
||||
// レジスタアドレス受信
|
||||
reg_adrs = IICA;
|
||||
tx_buf = vreg_ctr_read( reg_adrs ); // データの準備をしておく
|
||||
if( reg_adrs != VREG_C_INFO )
|
||||
{
|
||||
state = IIC_TX_OR_RX;
|
||||
}
|
||||
else
|
||||
{
|
||||
state = IIC_IDLE;
|
||||
}
|
||||
WREL = 1;
|
||||
break;
|
||||
|
||||
case ( IIC_TX_OR_RX ): // ↑の次に来る割り込み。STなら送信準備、データが来たら書き込まれ
|
||||
// if( TRC ){ // 送信方向フラグ で区別するのは、割り込み遅延時に不具合が起こりえる
|
||||
if( STD )
|
||||
{ // スタートコンディション検出フラグ
|
||||
// リードされる
|
||||
if( COI )
|
||||
{ // アドレス一致フラグ
|
||||
state = IIC_TX;
|
||||
// no break, no return //
|
||||
}
|
||||
else
|
||||
{
|
||||
// リスタートで違うデバイスが呼ばれた!
|
||||
state = IIC_IDLE; // 終了処理
|
||||
SPIE = 0;
|
||||
LREL = 1; // ウェイト解除?
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
state = IIC_RX; // データ1バイト受信の割り込みだった
|
||||
// no break, no return //
|
||||
}
|
||||
|
||||
default: // バースト R/W でここが何回も呼ばれることになる
|
||||
if( state == IIC_TX )
|
||||
{ // 送信
|
||||
IICA = tx_buf;
|
||||
vreg_ctr_after_read( reg_adrs ); // 読んだらクリアなどの処理
|
||||
}
|
||||
else
|
||||
{ // 受信
|
||||
rx_buf = IICA;
|
||||
vreg_ctr_write( reg_adrs, rx_buf );
|
||||
WREL = 1;
|
||||
}
|
||||
//
|
||||
if( ( reg_adrs != VREG_C_ACC_HOSU_HIST )
|
||||
&& ( reg_adrs != VREG_C_INFO ) )
|
||||
{ // この二つのレジスタは特殊なアクセス方法をする。アクセスポインタを進めない。
|
||||
reg_adrs += 1;
|
||||
}
|
||||
|
||||
if( state == IIC_TX )
|
||||
{ // さらにつぎに送るデータの準備だけシテオク。SPが来て使われないかもしれない
|
||||
tx_buf = vreg_ctr_read( reg_adrs );
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ========================================================
|
||||
void IIC_ctr_Init( void )
|
||||
{
|
||||
|
||||
IICAEN = 1;
|
||||
|
||||
IICE = 0; /* IICA disable */
|
||||
|
||||
IICAMK = 1; /* INTIICA disable */
|
||||
IICAIF = 0; /* clear INTIICA interrupt flag */
|
||||
|
||||
IICAPR0 = 1; /* set INTIICA high priority */
|
||||
IICAPR1 = 0; /* set INTIICA high priority */
|
||||
|
||||
#ifdef _MODEL_TEG2_
|
||||
P6 &= ~0x3;
|
||||
#else
|
||||
P20 &= ~0x3;
|
||||
#endif
|
||||
|
||||
SVA = IIC_C_SLAVEADDRESS;
|
||||
IICF = 0x01;
|
||||
|
||||
STCEN = 1; // リスタートの許可
|
||||
IICRSV = 1; // 通信予約をさせない:スレーブに徹する
|
||||
|
||||
SPIE = 0; // ストップコンディションでの割り込みを禁止
|
||||
WTIM = 1; // 自動でACKを返した後clkをLに固定する
|
||||
ACKE = 1; // ダメCPUは無視して次の通信をはじめるかもしれないんで早くclkを開放しないといけない
|
||||
|
||||
IICWH = 5;
|
||||
IICWL = 10; // L期間の長さ
|
||||
|
||||
SMC = 1; // 高速モード
|
||||
DFC = 1; // デジタルフィルタon (@fast mode)
|
||||
|
||||
IICAMK = 0; // 割り込みを許可
|
||||
|
||||
IICE = 1;
|
||||
|
||||
#ifdef _MODEL_TEG2_
|
||||
PM6 &= ~0x3; /* set clock pin for IICA */
|
||||
#else
|
||||
PM20 &= ~0x3; /* set clock pin for IICA */
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ========================================================
|
||||
void IIC_ctr_Stop( void )
|
||||
{
|
||||
IICE = 0; /* IICA disable */
|
||||
IICAEN = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,210 @@
|
||||
#ifndef _MDSERIAL_A_
|
||||
#define _MDSERIAL_A_
|
||||
|
||||
|
||||
/* IIC operation enable (IICE0) */
|
||||
#define IIC0_OPERATION 0x80
|
||||
#define IIC0_OPERATION_DISABLE 0x00 /* stop operation */
|
||||
#define IIC0_OPERATION_ENABLE 0x80 /* enable operation */
|
||||
|
||||
/* Exit from communications (LREL0) */
|
||||
#define IIC0_COMMUNICATION 0x40
|
||||
#define IIC0_COMMUNICATION_NORMAL 0x00 /* normal operation */
|
||||
#define IIC0_COMMUNICATION_EXIT 0x40 /* exit from current communication */
|
||||
|
||||
/* Wait cancellation (WREL0) */
|
||||
#define IIC0_WAITCANCEL 0x20
|
||||
#define IIC0_WAIT_NOTCANCEL 0x00 /* do not cancel wait */
|
||||
#define IIC0_WAIT_CANCEL 0x20 /* cancel wait */
|
||||
|
||||
/* Generation of interrupt when stop condition (SPIE0) */
|
||||
#define IIC0_STOPINT 0x10
|
||||
#define IIC0_STOPINT_DISABLE 0x00 /* disable */
|
||||
#define IIC0_STOPINT_ENABLE 0x10 /* enable */
|
||||
|
||||
/* Wait and interrupt generation (WTIM0) */
|
||||
#define IIC0_WAITINT 0x08
|
||||
#define IIC0_WAITINT_CLK8FALLING 0x00 /* generate at the eighth clocks falling edge */
|
||||
#define IIC0_WAITINT_CLK9FALLING 0x08 /* generated at the ninth clocks falling edge */
|
||||
|
||||
/* Acknowledgement control (ACKE0) */
|
||||
#define IIC0_ACK 0x04
|
||||
#define IIC0_ACK_DISABLE 0x00 /* enable acknowledgement */
|
||||
#define IIC0_ACK_ENABLE 0x04 /* disable acknowledgement */
|
||||
|
||||
/* Start condition trigger (STT0) */
|
||||
#define IIC0_STARTCONDITION 0x02
|
||||
#define IIC0_START_NOTGENERATE 0x00 /* do not generate start condition */
|
||||
#define IIC0_START_GENERATE 0x02 /* generate start condition */
|
||||
|
||||
/* Stop condition trigger (SPT0) */
|
||||
#define IIC0_STOPCONDITION 0x01
|
||||
#define IIC0_STOP_NOTGENERATE 0x00 /* do not generate stop condition */
|
||||
#define IIC0_STOP_GENERATE 0x01 /* generate stop condition */
|
||||
|
||||
/*
|
||||
IIC Status Register 0 (IICS0)
|
||||
*/
|
||||
/* Master device status (MSTS0) */
|
||||
#define IIC0_MASTERSTATUS 0x80
|
||||
#define IIC0_STATUS_NOTMASTER 0x00 /* slave device status or communication standby status */
|
||||
#define IIC0_STATUS_MASTER 0x80 /* master device communication status */
|
||||
|
||||
/* Detection of arbitration loss (ALD0) */
|
||||
#define IIC0_ARBITRATION 0x40
|
||||
#define IIC0_ARBITRATION_NO 0x00 /* arbitration win or no arbitration */
|
||||
#define IIC0_ARBITRATION_LOSS 0x40 /* arbitration loss */
|
||||
|
||||
/* Detection of extension code reception (EXC0) */
|
||||
#define IIC0_EXTENSIONCODE 0x20
|
||||
#define IIC0_EXTCODE_NOT 0x00 /* extension code not received */
|
||||
#define IIC0_EXTCODE_RECEIVED 0x20 /* extension code received */
|
||||
|
||||
/* Detection of matching addresses (COI0) */
|
||||
#define IIC0_ADDRESSMATCH 0x10
|
||||
#define IIC0_ADDRESS_NOTMATCH 0x00 /* addresses do not match */
|
||||
#define IIC0_ADDRESS_MATCH 0x10 /* addresses match */
|
||||
|
||||
/* Detection of transmit/receive status (TRC0) */
|
||||
#define IIC0_STATUS 0x08
|
||||
#define IIC0_STATUS_RECEIVE 0x00 /* receive status */
|
||||
#define IIC0_STATUS_TRANSMIT 0x08 /* transmit status */
|
||||
|
||||
/* Detection of acknowledge signal (ACKD0) */
|
||||
#define IIC0_ACKDETECTION 0x04
|
||||
#define IIC0_ACK_NOTDETECTED 0x00 /* ACK signal was not detected */
|
||||
#define IIC0_ACK_DETECTED 0x04 /* ACK signal was detected */
|
||||
|
||||
/* Detection of start condition (STD0) */
|
||||
#define IIC0_STARTDETECTION 0x02
|
||||
#define IIC0_START_NOTDETECTED 0x00 /* start condition not detected */
|
||||
#define IIC0_START_DETECTED 0x02 /* start condition detected */
|
||||
|
||||
/* Detection of stop condition (SPD0) */
|
||||
#define IIC0_STOPDETECTION 0x01
|
||||
#define IIC0_STOP_NOTDETECTED 0x00 /* stop condition not detected */
|
||||
#define IIC0_STOP_DETECTED 0x01 /* stop condition detected */
|
||||
|
||||
/*
|
||||
IIC Flag Register 0 (IICF0)
|
||||
*/
|
||||
/* STT0 clear flag (STCF) */
|
||||
#define IIC0_STARTFLAG 0x80
|
||||
#define IIC0_STARTFLAG_GENERATE 0x00 /* generate start condition */
|
||||
#define IIC0_STARTFLAG_UNSUCCESSFUL 0x80 /* start condition generation unsuccessful */
|
||||
|
||||
/* IIC bus status flag (IICBSY) */
|
||||
#define IIC0_BUSSTATUS 0x40
|
||||
#define IIC0_BUS_RELEASE 0x00 /* bus release status */
|
||||
#define IIC0_BUS_COMMUNICATION 0x40 /* bus communication status */
|
||||
|
||||
/* Initial start enable trigger (STCEN) */
|
||||
#define IIC0_STARTWITHSTOP 0x02
|
||||
#define IIC0_START_WITHSTOP 0x00 /* generation of a start condition without detecting a stop condition */
|
||||
#define IIC0_START_WITHOUTSTOP 0x02 /* generation of a start condition upon detection of a stop condition */
|
||||
|
||||
/* Communication reservation function disable bit (IICRSV) */
|
||||
#define IIC0_RESERVATION 0x01
|
||||
#define IIC0_RESERVATION_ENABLE 0x00 /* enable communication reservation */
|
||||
#define IIC0_RESERVATION_DISABLE 0x01 /* disable communication reservation */
|
||||
|
||||
/*
|
||||
IIC clock selection register 0 (IICCL0)
|
||||
*/
|
||||
#define IICCL0_INITIALVALUE 0x00
|
||||
/* Detection of SCL0 pin level (CLD0) */
|
||||
#define IIC0_SCLLEVEL 0x20
|
||||
#define IIC0_SCL_LOW 0x00 /* clock line at low level */
|
||||
#define IIC0_SCL_HIGH 0x20 /* clock line at high level */
|
||||
|
||||
/* Detection of SDA0 pin level (DAD0) */
|
||||
#define IIC0_SDALEVEL 0x10
|
||||
#define IIC0_SDA_LOW 0x00 /* data line at low level */
|
||||
#define IIC0_SDA_HIGH 0x10 /* data line at high level */
|
||||
|
||||
/* Operation mode switching (SMC0) */
|
||||
#define IIC0_OPERATIONMODE 0x08
|
||||
#define IIC0_MODE_STANDARD 0x00 /* operates in standard mode */
|
||||
#define IIC0_MODE_HIGHSPEED 0x08 /* operates in high-speed mode */
|
||||
|
||||
/* Digital filter operation control (DFC0) */
|
||||
#define IIC0_DIGITALFILTER 0x04
|
||||
#define IIC0_FILTER_OFF 0x00 /* digital filter off */
|
||||
#define IIC0_FILTER_ON 0x04 /* digital filter on */
|
||||
|
||||
/* Operation mode switching (CL01, CL00) */
|
||||
#define IIC0_CLOCKSELECTION 0x03
|
||||
|
||||
/* Combine of (SMC0, CL01, CL00)*/
|
||||
#define IIC0_CLOCK0 0x00
|
||||
#define IIC0_CLOCK1 0x01
|
||||
#define IIC0_CLOCK2 0x02
|
||||
#define IIC0_CLOCK3 0x03
|
||||
#define IIC0_CLOCK4 0x08
|
||||
#define IIC0_CLOCK5 0x09
|
||||
#define IIC0_CLOCK6 0x0a
|
||||
#define IIC0_CLOCK7 0x0b
|
||||
|
||||
/*
|
||||
IIC function expansion register 0 (IICX0)
|
||||
*/
|
||||
/* IIC clock expension (CLX0) */
|
||||
#define IIC0_CLOCKEXPENSION 0x01
|
||||
#define IIC0_EXPENSION0 0x00
|
||||
#define IIC0_EXPENSION1 0x01
|
||||
|
||||
/* Operation clock (CLX0, SMC0, CL01, CL00)
|
||||
| IIC0_EXPENSION0 | IIC0_EXPENSION1 |
|
||||
------------|-------------------|-------------------|----------------------
|
||||
IIC0_CLOCK0 | fprs/2 | prohibited | selection clock(fw)
|
||||
| fprs/88 | | transfer clock
|
||||
| normal | | mode
|
||||
------------|-------------------|-------------------|----------------------
|
||||
IIC0_CLOCK1 | fprs/2 | prohibited | selection clock(fw)
|
||||
| fprs/172 | | transfer clock
|
||||
| normal | | mode
|
||||
------------|-------------------|-------------------|----------------------
|
||||
IIC0_CLOCK2 | fprs/2 | prohibited | selection clock(fw)
|
||||
| fprs/344 | | transfer clock
|
||||
| normal | | mode
|
||||
------------|-------------------|-------------------|----------------------
|
||||
IIC0_CLOCK3 |prohibited/fexscl0 | prohibited | selection clock(fw)
|
||||
| fw/66 | | transfer clock
|
||||
| normal | | mode
|
||||
------------|-------------------|-------------------|----------------------
|
||||
IIC0_CLOCK4 | fprs/2 | fprs/2 | selection clock(fw)
|
||||
| fprs/48 | fprs/24 | transfer clock
|
||||
| high speed | high speed | mode
|
||||
------------|-------------------|-------------------|----------------------
|
||||
IIC0_CLOCK5 | fprs/2 | fprs/2 | selection clock(fw)
|
||||
| fprs/48 | fprs/24 | transfer clock
|
||||
| high speed | high speed | mode
|
||||
------------|-------------------|-------------------|----------------------
|
||||
IIC0_CLOCK6 | fprs/4 | fprs/4 | selection clock(fw)
|
||||
| fprs/96 | fprs/48 | transfer clock
|
||||
| high speed | high speed | mode
|
||||
------------|-------------------|-------------------|----------------------
|
||||
IIC0_CLOCK7 |prohibited/fexscl0 | prohibited | selection clock(fw)
|
||||
| fw/18 | | transfer clock
|
||||
| high speed | | mode
|
||||
------------|-------------------|-------------------|----------------------
|
||||
*/
|
||||
|
||||
#define ADDRESS_COMPLETE 0x80
|
||||
#define IIC_MASTER_FLAG_CLEAR 0x00
|
||||
|
||||
/******************************************************************************
|
||||
* Macro define
|
||||
******************************************************************************/
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
* Function define
|
||||
******************************************************************************/
|
||||
|
||||
void IIC_ctr_Init( void );
|
||||
void IIC_ctr_Stop( void );
|
||||
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,734 @@
|
||||
/* ========================================================
|
||||
簡易I2C(内蔵ペリフェラル使用)通信
|
||||
de JHL 藤田@開技
|
||||
'09 Feb -
|
||||
======================================================== */
|
||||
#pragma sfr
|
||||
#pragma di
|
||||
#pragma ei
|
||||
#pragma nop
|
||||
#pragma inline // memcpy()をインライン展開する
|
||||
|
||||
#include "incs.h"
|
||||
#include "i2c_mcu.h"
|
||||
|
||||
|
||||
|
||||
// ========================================================
|
||||
// レジスタのビット名
|
||||
// プリフィックスbだが、一部のビット名がレジスタ名にかぶるため...
|
||||
// SMR0n
|
||||
#define bCKS0 ( 1 << 15 )
|
||||
#define bCCS0 ( 1 << 14 )
|
||||
#define bSTS0 ( 1 << 8 )
|
||||
#define bSIS0 ( 1 << 6 )
|
||||
#define bMD0n2 ( 1 << 2 )
|
||||
#define bMD0n1 ( 1 << 1 )
|
||||
#define bMD0n0 ( 1 << 0 )
|
||||
#define bSMR0n_FIXEDBIT ( 1 << 5 )
|
||||
|
||||
// SSR0n
|
||||
#define bit_TSF0 6
|
||||
#define PEF0 ( 1 << 1 )
|
||||
|
||||
// SIR0n
|
||||
#define PECT0 ( 1 << 1 )
|
||||
|
||||
// SCR0n
|
||||
#define TXE0 ( 1 << 15 )
|
||||
#define RXE0 ( 1 << 14 )
|
||||
#define SLC02 4
|
||||
#define DLS02 0
|
||||
#define TSF0 ( 1 << 6 )
|
||||
|
||||
// SOn
|
||||
#define TAUS_MASK 0b0000101100001011;
|
||||
|
||||
// DMCn
|
||||
#define DRS ( 1 << 6 )
|
||||
|
||||
|
||||
|
||||
|
||||
// ========================================================
|
||||
static void iic_mcu_send_st( );
|
||||
static void iic_mcu_send_re_st( );
|
||||
static void iic_mcu_send_sp( );
|
||||
static err iic_mcu_send_a_byte( u8 );
|
||||
static err iic_mcu_call_slave( u8 slave );
|
||||
|
||||
|
||||
|
||||
// ========================================================
|
||||
bit iic_mcu_wo_dma;
|
||||
volatile bit iic_mcu_busy;
|
||||
volatile bit iic_mcu_initialized;
|
||||
|
||||
|
||||
u8 iic_send_work[4];
|
||||
u8 *p_iic_send_wo_dma_dat;
|
||||
u8 iic_send_wo_dma_len;
|
||||
|
||||
u8 iic_mcu_bus_status; // 一文字リードの時はデータを返す。
|
||||
// ステータスが必要ならこっちを呼んで
|
||||
|
||||
void nop8()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
スレーブからの 『1文字』 リード
|
||||
返値がデータそのものです。
|
||||
エラー判定ができません。
|
||||
======================================================== */
|
||||
u8 iic_mcu_read_a_byte( u8 SLA, u8 adrs )
|
||||
{
|
||||
u8 dat;
|
||||
|
||||
if( iic_mcu_initialized == 0 )
|
||||
{
|
||||
#ifdef _debug_
|
||||
iic_mcu_start( );
|
||||
#else
|
||||
while( 1 )
|
||||
{
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
while( iic_mcu_busy )
|
||||
{
|
||||
NOP( );
|
||||
}
|
||||
iic_mcu_busy = 1;
|
||||
|
||||
iic_mcu_bus_status = ERR_OK;
|
||||
|
||||
// スタートコンディションとスレーブの呼び出し、レジスタアドレスの送信
|
||||
if( iic_mcu_call_slave( SLA ) != 0 )
|
||||
{
|
||||
iic_mcu_bus_status = ERR_NOSLAVE;
|
||||
iic_mcu_busy = 0;
|
||||
return ( 0 );
|
||||
}
|
||||
|
||||
// レジスタアドレスの送信
|
||||
iic_mcu_send_a_byte( adrs ); // 終わるまで帰ってこない
|
||||
// if( err != ERR_SUCCESS )~
|
||||
|
||||
// データ受信 //
|
||||
iic_mcu_send_re_st( ); // リスタートコンディション
|
||||
iic_mcu_send_a_byte( SLA | 0x01 ); // 送信完了まで戻ってきません。
|
||||
|
||||
ST0 = 0x0004; // 受信モードに設定を変えるのでロジック停止
|
||||
SCR02 = RXE0 | 1 << SLC02 | 7 << DLS02; // 受信設定
|
||||
SS0 = 0x0004; // 通信待機
|
||||
|
||||
SOE0 = 0x0000; // 1バイト送信なので、最後のNAKを送る
|
||||
IICIF10 = 0;
|
||||
SIO10 = 0xFF; // ダミーデータを書くと受信開始
|
||||
|
||||
while( IICIF10 == 0 )
|
||||
{ // 受信完了待ち
|
||||
;
|
||||
}
|
||||
dat = SIO10;
|
||||
|
||||
iic_mcu_send_sp( );
|
||||
IICIF10 = 0; // 後を濁さないこと
|
||||
iic_mcu_busy = 0;
|
||||
return ( dat );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
スレーブからのリード
|
||||
0 正常終了
|
||||
1 スレーブが応答しない
|
||||
2 バスが誰かに占有されていてタイムアウト
|
||||
3 意味不明エラー
|
||||
【注】
|
||||
スレーブがウェイトコンディションを出すことは禁止です。
|
||||
その場合でもエラー検出などできません
|
||||
======================================================== */
|
||||
err iic_mcu_read( u8 slave, u8 adrs, u8 len, u8 * dest )
|
||||
{
|
||||
|
||||
//*
|
||||
// 使用中なら待つ
|
||||
if( iic_mcu_initialized == 0 )
|
||||
{
|
||||
#ifdef _debug_
|
||||
iic_mcu_start( );
|
||||
#else
|
||||
while( 1 )
|
||||
{
|
||||
}
|
||||
#endif
|
||||
}
|
||||
while( iic_mcu_busy )
|
||||
{
|
||||
NOP( );
|
||||
}
|
||||
/*/
|
||||
// 使用中なら帰る
|
||||
if( iic_mcu_initialized == 0 ){
|
||||
return(0x80);
|
||||
}
|
||||
if( iic_mcu_busy != 0 ){
|
||||
return( 3 );
|
||||
}
|
||||
//*/
|
||||
|
||||
iic_mcu_busy = 1;
|
||||
// スタートコンディションとスレーブの呼び出し、レジスタアドレスの送信
|
||||
if( iic_mcu_call_slave( slave ) != 0 )
|
||||
{
|
||||
iic_mcu_busy = 0;
|
||||
return ( ERR_NOSLAVE );
|
||||
}
|
||||
|
||||
// レジスタアドレスの送信
|
||||
iic_mcu_send_a_byte( adrs ); // 終わるまで帰ってこない
|
||||
// if( err != ERR_SUCCESS )~
|
||||
|
||||
// データ受信 //
|
||||
iic_mcu_send_re_st( ); // リスタートコンディション
|
||||
iic_mcu_send_a_byte( slave | 0x01 ); // 送信完了まで戻ってきません。
|
||||
|
||||
// データ受信
|
||||
ST0 = 0x0004; // 受信モードに設定を変えるのでロジック停止
|
||||
SCR02 = RXE0 | 1 << SLC02 | 7 << DLS02; // 受信設定
|
||||
SS0 = 0x0004; // 通信待機
|
||||
|
||||
do
|
||||
{
|
||||
if( len == 1 )
|
||||
{
|
||||
SOE0 = 0x0000; // 最後のNAK
|
||||
}
|
||||
IICIF10 = 0;
|
||||
SIO10 = 0xFF; // ダミーデータを書くと受信開始
|
||||
while( IICIF10 == 0 )
|
||||
{ // 受信完了待ち
|
||||
;
|
||||
}
|
||||
*dest = SIO10;
|
||||
dest++;
|
||||
len--;
|
||||
}
|
||||
while( len != 0 );
|
||||
|
||||
iic_mcu_send_sp( );
|
||||
|
||||
IICIF10 = 0;
|
||||
iic_mcu_busy = 0;
|
||||
return ( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
スレーブへ 『1バイト』 ライト
|
||||
前の転送が終わるのを待って、ライトします。
|
||||
返値 iic_mcu_write に同じ
|
||||
|
||||
======================================================== */
|
||||
err iic_mcu_write_a_byte( u8 SLA, u8 adrs, u8 dat )
|
||||
{
|
||||
|
||||
if( iic_mcu_initialized == 0 )
|
||||
{
|
||||
#ifdef _debug_
|
||||
iic_mcu_start( );
|
||||
#else
|
||||
while( 1 )
|
||||
{
|
||||
}
|
||||
#endif
|
||||
}
|
||||
while( iic_mcu_busy )
|
||||
{
|
||||
NOP( );
|
||||
}
|
||||
iic_mcu_busy = 1;
|
||||
#if 0
|
||||
temp = dat;
|
||||
return ( iic_mcu_write( SLA, adrs, 1, &temp ) );
|
||||
}
|
||||
#else
|
||||
// スタートコンディションとスレーブの呼び出し...
|
||||
IICMK10 = 1;
|
||||
if( iic_mcu_call_slave( SLA ) != 0 )
|
||||
{
|
||||
iic_mcu_busy = 0;
|
||||
return ( ERR_NAK );
|
||||
}
|
||||
iic_mcu_send_a_byte( adrs );
|
||||
iic_mcu_send_a_byte( dat );
|
||||
iic_mcu_send_sp( );
|
||||
iic_mcu_busy = 0;
|
||||
return ( ERR_SUCCESS );
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
スレーブへライト
|
||||
レジスタ adrs を先頭に、
|
||||
*strから
|
||||
len文字書きます。
|
||||
|
||||
0 正常終了
|
||||
1 スレーブが応答しない
|
||||
2 バスが誰かに占有されていてタイムアウト
|
||||
3 前に指示された通信がまだ終わってない
|
||||
【注】
|
||||
スレーブがウェイトコンディションを出すことは禁止です。
|
||||
その場合でもエラー検出などできません
|
||||
DMA1を使用します。
|
||||
******************************************************************************/
|
||||
err iic_mcu_write( u8 slave, u8 adrs, u8 len, void * src )
|
||||
{
|
||||
//*
|
||||
// 使用中なら待つ
|
||||
if( iic_mcu_initialized == 0 )
|
||||
{
|
||||
#ifdef _debug_
|
||||
iic_mcu_start( );
|
||||
#else
|
||||
while( 1 )
|
||||
{
|
||||
}
|
||||
#endif
|
||||
}
|
||||
while( iic_mcu_busy )
|
||||
{
|
||||
NOP( );
|
||||
}
|
||||
/*/
|
||||
// 使用中なら帰る
|
||||
if( iic_mcu_initialized == 0 ){
|
||||
return(0x80);
|
||||
}
|
||||
if( iic_mcu_busy != 0 ){
|
||||
return( 3 );
|
||||
}
|
||||
//*/
|
||||
iic_mcu_busy = 1;
|
||||
// スタートコンディションとスレーブの呼び出し...
|
||||
IICMK10 = 1;
|
||||
IICIF10 = 0;
|
||||
if( iic_mcu_call_slave( slave ) != 0 )
|
||||
{
|
||||
iic_mcu_busy = 0;
|
||||
EI( );
|
||||
return ( ERR_NAK );
|
||||
}
|
||||
|
||||
IICIF10 = 0;
|
||||
if( !iic_mcu_wo_dma )
|
||||
{
|
||||
// DMAを使用する(通常)
|
||||
|
||||
// レジスタアドレスを送り、データの準備
|
||||
memcpy( iic_send_work, src, 4 ); //バッファとして4バイトしか用意して無いため。
|
||||
// DMAセット
|
||||
while( DST1 )
|
||||
{;
|
||||
}
|
||||
|
||||
DEN1 = 1;
|
||||
DSA1 = ( u8 ) ( &SIO10 );
|
||||
DRA1 = ( u16 ) iic_send_work;
|
||||
DBC1 = len;
|
||||
DMC1 = DRS | 8; // RAM -> SFR, 8bit, IRQ, IIC10
|
||||
|
||||
DMAIF1 = 0;
|
||||
DMAMK1 = 0;
|
||||
DST1 = 1;
|
||||
|
||||
SIO10 = adrs; // 書きっぱなし! 割り込みが発生してDMAスタート
|
||||
// 残りは割り込みルーチン内で
|
||||
}
|
||||
else
|
||||
{
|
||||
// DMAを使用しない //
|
||||
|
||||
// レジスタアドレスの送信
|
||||
SIO10 = adrs;
|
||||
|
||||
IICMK10 = 0;
|
||||
iic_send_wo_dma_len = len;
|
||||
p_iic_send_wo_dma_dat = src;
|
||||
// 残りは割り込みルーチン内で
|
||||
}
|
||||
return ( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
DMA1転送終了割り込み
|
||||
IIC_mcu の送信完了コールバック関数のようなもの
|
||||
注:DMA転送が終わっただけで、I2Cの転送は終わってません
|
||||
割り込み中などで、DMA1の処理が遅延した場合、
|
||||
IIC10の割り込みの準備ができずに、割り込みを発生させられなくなる
|
||||
恐れがあります。また、回避方法も特にありません。
|
||||
そのため、DMA仕様の差異は、最後のバイトは送信完了を
|
||||
フラグのポーリングで確認します。
|
||||
======================================================== */
|
||||
__interrupt void int_dma1( )
|
||||
{
|
||||
u16 i = 0;
|
||||
|
||||
EI();
|
||||
|
||||
DMAMK1 = 1;
|
||||
DEN1 = 0;
|
||||
while( ( SSR02L & TSF0 ) != 0 )
|
||||
{
|
||||
if( ++i == 0 ) // タイムアウト?
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// iic_mcu_send_sp(); // ISR中で外の関数を呼ぶのは都合が悪いので展開
|
||||
{
|
||||
ST0 = 0x0004;
|
||||
SOE0 = 0; // 受信の時はもっと前に「も」設定してる。(NACK出力)
|
||||
SO0 = 0x0000 | TAUS_MASK; // SCL
|
||||
nop8();
|
||||
/*
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
#ifdef _OVERCLOCK_
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
#endif
|
||||
*/
|
||||
SO0 = 0x0400 | TAUS_MASK; // SCL
|
||||
nop8();
|
||||
/*
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
#ifdef _OVERCLOCK_
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
#endif
|
||||
*/
|
||||
SO0 = 0x0404 | TAUS_MASK;
|
||||
}
|
||||
IICMK10 = 1;
|
||||
iic_mcu_busy = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
IIC MCUのバイト送出完了割り込み
|
||||
※DMA使用時は使用されません。
|
||||
他の割り込み処理中でDMAの割り込みにすぐ飛ばない場合、
|
||||
IIC割り込みのセットが間に合わず困ることがあります。
|
||||
======================================================== */
|
||||
__interrupt void int_iic10( )
|
||||
{
|
||||
EI();
|
||||
if( iic_send_wo_dma_len != 0 )
|
||||
{
|
||||
SIO10 = *p_iic_send_wo_dma_dat;
|
||||
p_iic_send_wo_dma_dat++;
|
||||
iic_send_wo_dma_len--;
|
||||
return;
|
||||
}
|
||||
|
||||
// 最後のバイト送信完了
|
||||
IICMK10 = 1;
|
||||
// iic_mcu_send_sp(); // ISR中で外の関数を呼ぶのは都合が悪いので展開
|
||||
{
|
||||
ST0 = 0x0004;
|
||||
SOE0 = 0; // 受信の時はもっと前に「も」設定してる。(NACK出力)
|
||||
SO0 = 0x0000 | TAUS_MASK; // SCL
|
||||
nop8();
|
||||
/*
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
#ifdef _OVERCLOCK_
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
#endif
|
||||
*/
|
||||
SO0 = 0x0400 | TAUS_MASK; // SCL
|
||||
nop8();
|
||||
/*
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
#ifdef _OVERCLOCK_
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
#endif
|
||||
*/
|
||||
SO0 = 0x0404 | TAUS_MASK;
|
||||
}
|
||||
iic_mcu_wo_dma = 0;
|
||||
iic_mcu_busy = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
スレーブの呼び出し
|
||||
スレーブアドレスを呼んで、ACKの確認。
|
||||
ACK → 返:0
|
||||
NACK → ストップコンディションを出す。 返:1
|
||||
======================================================== */
|
||||
static err iic_mcu_call_slave( u8 slave )
|
||||
{
|
||||
iic_mcu_send_st( );
|
||||
|
||||
// SIR02 = SSR02; // NAKエラーのフラグクリア
|
||||
if( iic_mcu_send_a_byte( slave ) != ERR_SUCCESS )
|
||||
{
|
||||
iic_mcu_send_sp( );
|
||||
return ( ERR_NAK ); // 指定のスレーブがいない / busy
|
||||
}
|
||||
|
||||
return ( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
ほんとに1バイト書くのみ
|
||||
書き終わるまで帰りません
|
||||
======================================================== */
|
||||
static err iic_mcu_send_a_byte( u8 dat )
|
||||
{
|
||||
IICMK10 = 1;
|
||||
IICIF10 = 0;
|
||||
SIO10 = dat;
|
||||
while( IICIF10 == 0 )
|
||||
{
|
||||
NOP( );
|
||||
} // 通信中
|
||||
if( SSR02 != 0 )
|
||||
{
|
||||
SIR02 = SSR02;
|
||||
return ( ERR_NAK );
|
||||
}
|
||||
return ( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
スタートコンディションを発行
|
||||
ソフトウェア制御
|
||||
======================================================== */
|
||||
static void iic_mcu_send_st( )
|
||||
{
|
||||
SO0 &= ~0x0004; // SDA
|
||||
nop8();
|
||||
/*
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
#ifdef _OVERCLOCK_
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
#endif
|
||||
*/
|
||||
SO0 &= ~0x0400; // SCL
|
||||
SOE0 = 0x0004; // ハード制御へ
|
||||
|
||||
SCR02 = TXE0 | 1 << SLC02 | 7 << DLS02; // 送信許可、データは8ビット単位
|
||||
SS0 = 0x0004; // 通信待機
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
リスタート発行
|
||||
======================================================== */
|
||||
static void iic_mcu_send_re_st( )
|
||||
{
|
||||
ST0 |= 0x0004;
|
||||
SO0 |= 0x0400 | TAUS_MASK; // ( SDA = H ), SCL -> H
|
||||
nop8();
|
||||
/*
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
#ifdef _OVERCLOCK_
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
#endif
|
||||
*/
|
||||
SOE0 &= ~0x0004; // ( SCL = H ), SDA -> L
|
||||
nop8();
|
||||
/*
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
#ifdef _OVERCLOCK_
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
#endif
|
||||
*/
|
||||
iic_mcu_send_st( );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
ストップコンディション発行
|
||||
この前に、「最後のバイトの送受信」の時に前準備が必要です。
|
||||
======================================================== */
|
||||
static void iic_mcu_send_sp( )
|
||||
{
|
||||
ST0 = 0x0004;
|
||||
SOE0 = 0; // 受信の時はもっと前に「も」設定してる。(NACK出力)
|
||||
SO0 = 0x0000 | TAUS_MASK; // SCL
|
||||
nop8();
|
||||
/*
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
#ifdef _OVERCLOCK_
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
#endif
|
||||
*/
|
||||
SO0 = 0x0400 | TAUS_MASK; // SCL
|
||||
nop8();
|
||||
/*
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
#ifdef _OVERCLOCK_
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
#endif
|
||||
*/
|
||||
SO0 = 0x0404 | TAUS_MASK;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
ペリフェラルモジュールの初期化
|
||||
======================================================== */
|
||||
void iic_mcu_start( )
|
||||
{
|
||||
DST1 = 0;
|
||||
NOP( ); // 2clkもしくは、DSTn==0をポーリング
|
||||
NOP( );
|
||||
DEN1 = 0;
|
||||
I2C_PU = 1;
|
||||
SAU0EN = 1;
|
||||
nop8();
|
||||
/*
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
#ifdef _OVERCLOCK_
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
NOP( );
|
||||
#endif
|
||||
*/
|
||||
SPS0 = 0x0000; // シリアルユニットのクロック0。(8M/2)/1
|
||||
SMR02 = bSMR0n_FIXEDBIT | bMD0n2; // 簡易I2Cに設定
|
||||
#ifdef _OVERCLOCK_
|
||||
SDR02 = 12 << 9; // ボーレート設定 (8M/2)/1/(x+1)/2
|
||||
#else
|
||||
SDR02 = 5 << 9; // ボーレート設定 (8M/2)/1/(x+1)/2
|
||||
#endif
|
||||
|
||||
SO0 = 0x0404 | TAUS_MASK; // 最初はHH
|
||||
iic_mcu_busy = 0;
|
||||
iic_mcu_wo_dma = 0;
|
||||
|
||||
|
||||
// バスのリセット
|
||||
IICIF10 = 0;
|
||||
IICMK10 = 1;
|
||||
|
||||
iic_mcu_send_st();
|
||||
|
||||
SIO10 = 0xFF;
|
||||
while( IICIF10 == 0 ){} // 通信中
|
||||
iic_mcu_send_sp();
|
||||
|
||||
SIR02 = SSR02;
|
||||
|
||||
iic_mcu_initialized = 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
モジュールの停止
|
||||
再度使うときは初期化が必要
|
||||
======================================================== */
|
||||
void iic_mcu_stop( )
|
||||
{
|
||||
while( iic_mcu_busy )
|
||||
{;
|
||||
} // DMA動作中はもう少し待つ
|
||||
iic_mcu_send_re_st( ); // SCL,SDAをLLにする
|
||||
I2C_PU = 0;
|
||||
SAU0EN = 0;
|
||||
iic_mcu_initialized = 0;
|
||||
}
|
||||
@ -0,0 +1,34 @@
|
||||
#ifndef __ic2_mcu__
|
||||
#define __ic2_mcu__
|
||||
|
||||
|
||||
// ========================================================
|
||||
#define ERR_OK 0
|
||||
#define ERR_NAK 1
|
||||
#define ERR_NOSLAVE 2
|
||||
|
||||
|
||||
|
||||
// ========================================================
|
||||
extern volatile bit iic_mcu_busy;
|
||||
extern bit iic_mcu_wo_dma;
|
||||
|
||||
extern u8 iic_mcu_bus_status;
|
||||
|
||||
|
||||
|
||||
// ========================================================
|
||||
err iic_mcu_read( u8 SLA, u8 adrs, u8 len, u8 * dest );
|
||||
u8 iic_mcu_read_a_byte( u8 SLA, u8 adrs );
|
||||
|
||||
err iic_mcu_write( u8 SLA, u8 adrs, u8 len, void * src );
|
||||
err iic_mcu_write_a_byte( u8 SLA, u8 adrs, u8 dat );
|
||||
|
||||
// ↓その通信が完了したら解除されます。
|
||||
#define iic_mcu_set_wo_dma() { while( iic_mcu_busy ){;} iic_mcu_wo_dma = 1; }
|
||||
|
||||
void iic_mcu_start( );
|
||||
void iic_mcu_stop( );
|
||||
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,206 @@
|
||||
#pragma sfr /* 特殊機能レジスタ使用 */
|
||||
|
||||
|
||||
|
||||
/*============================================================================*/
|
||||
#include "incs.h"
|
||||
#include "i2c_twl_defs.h"
|
||||
|
||||
|
||||
extern u8 vreg_twl[];
|
||||
|
||||
#ifdef _MCU_BSR_
|
||||
//#ifdef _MODEL_TS0_ || _MODEL_WM0_
|
||||
|
||||
// ワーキングモデルはI2Cが逆
|
||||
#define ACKD ACKD0
|
||||
#define ACKE ACKE0
|
||||
#define COI COI0
|
||||
#define IICAEN IICA0EN
|
||||
#define IICRSV IICRSV0
|
||||
#define IICA IICA0
|
||||
#define IICAIF IICAIF0
|
||||
#define IICAMK IICAMK0
|
||||
#define IICAPR0 IICAPR00
|
||||
#define IICAPR1 IICAPR10
|
||||
#define IICCTL0 IICCTL00
|
||||
#define IICE IICE0
|
||||
#define IICF IICF0
|
||||
#define IICS IICS0
|
||||
#define IICWH IICWH0
|
||||
#define IICWL IICWL0
|
||||
#define LREL LREL0
|
||||
#define SPD SPD0
|
||||
#define SPIE SPIE0
|
||||
#define STCEN STCEN0
|
||||
#define STD STD0
|
||||
#define SVA SVA0
|
||||
#define WREL WREL0
|
||||
#define WTIM WTIM0
|
||||
#define SMC SMC0
|
||||
|
||||
#endif
|
||||
|
||||
#ifndef _MCU_BSR_
|
||||
|
||||
// ke3の時はダミー関数
|
||||
void IIC_twl_Stop( void )
|
||||
{
|
||||
}
|
||||
void IIC_twl_Init( void )
|
||||
{
|
||||
}
|
||||
#else
|
||||
|
||||
|
||||
/*============================================================================*/
|
||||
u8 vreg_adrs;
|
||||
u8 pre_dat;
|
||||
|
||||
|
||||
u16 tot;
|
||||
|
||||
|
||||
// 注! ↓はマクロなので、returnはメインループに戻ります。
|
||||
#define wait_next { \
|
||||
tot = 0; \
|
||||
while( IICAIF != 1 ){ \
|
||||
if( SPD ){ \
|
||||
LREL = 1; \
|
||||
return; \
|
||||
} \
|
||||
tot++; \
|
||||
if( tot == 0 ){ \
|
||||
LREL = 1; \
|
||||
return; \
|
||||
} \
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
__interrupt void int_iic_twl( )
|
||||
{
|
||||
u8 temp;
|
||||
u16 tot;
|
||||
|
||||
// WDT_Restart();
|
||||
// フラグ1回目 スレーブアドレス,R/W
|
||||
/* COI != 1 なら、割り込みはいらない
|
||||
if( COI != 1 ){ // 被呼び出し?
|
||||
LREL = 1; // 呼ばれたのは他のID
|
||||
return;
|
||||
}else{
|
||||
ACKE0 = 1; // 自動でackを返すようにする
|
||||
WREL = 1; // ウェイト解除して次のバイトを待つ
|
||||
}
|
||||
*/
|
||||
WREL = 1; // ウェイト解除して次のバイトを待つ
|
||||
wait_next; // 1バイト受信完了を待つ
|
||||
|
||||
// 2回目 R/W レジスタアドレス
|
||||
temp = IICA;
|
||||
IICAIF = 0;
|
||||
WREL = 1;
|
||||
|
||||
vreg_adrs = adrs_table_twl_ext2int( temp );
|
||||
|
||||
// 3回目
|
||||
// スタートコンディションか、データ受信完了フラグ待ち
|
||||
|
||||
while( 1 )
|
||||
{
|
||||
u8 my_iics = IICS;
|
||||
|
||||
if( my_iics & 0x01 ) // SPD
|
||||
{ // 強制終了
|
||||
LREL = 1;
|
||||
return;
|
||||
}
|
||||
else if( my_iics & 0x02 ) // ( STD && !SPD )
|
||||
{
|
||||
// 送信 // (スタートコンディション検出)
|
||||
pre_dat = vreg_twl_read( vreg_adrs ); // mcu内部アドレスを渡す。一バイト目の準備 IICBに書き込むとウェイト解除
|
||||
|
||||
// 自局をRで呼ばれるのを待つ
|
||||
wait_next;
|
||||
IICAIF = 0;
|
||||
if( COI != 1 )
|
||||
{ // 被呼び出し?
|
||||
LREL = 1; // 呼ばれたのは他のID(あれ?)
|
||||
return;
|
||||
}
|
||||
IICA = pre_dat; // データを送る。ウェイトも解除される。
|
||||
|
||||
wait_next;
|
||||
// 4回目。(送信データ後の、ACK/NACK後) どうしても発生してしまう。
|
||||
IICAIF = 0; // おしまい
|
||||
LREL = 1;
|
||||
return;
|
||||
}
|
||||
else if( IICAIF && (( my_iics & 0x03 ) == 0 )) // !STD && !SPD )
|
||||
{
|
||||
// 受信 //
|
||||
IICAIF = 0;
|
||||
temp = IICA;
|
||||
WREL = 1;
|
||||
|
||||
// 通常アクセス(ライト) //
|
||||
LREL = 1; // スタートコンディション待ちへ(連続書き込み未対応のため)
|
||||
vreg_twl_write( vreg_adrs, temp );
|
||||
return; // 受信おしまい //
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*****************************************************/
|
||||
void IIC_twl_Init( void )
|
||||
{
|
||||
|
||||
IICAEN = 1;
|
||||
|
||||
IICE = 0; /* IICA disable */
|
||||
|
||||
IICAMK = 1; /* INTIICA disable */
|
||||
IICAIF = 0; /* clear INTIICA interrupt flag */
|
||||
|
||||
IICAPR0 = 0; /* set INTIICA high priority */
|
||||
IICAPR1 = 0; /* set INTIICA high priority */
|
||||
P20 &= ~0x3;
|
||||
|
||||
SVA = IIC_T_SLAVEADDRESS;
|
||||
IICF = 0x01;
|
||||
|
||||
STCEN = 1; // リスタートの許可
|
||||
IICRSV = 1; // 通信予約をさせない:スレーブに徹する
|
||||
|
||||
SPIE = 0; // ストップコンディションでの割り込みを禁止
|
||||
WTIM = 1; // 自動でACKを返した後clkをLに固定する
|
||||
ACKE = 1; // ダメCPUは無視して次の通信をはじめるかもしれないんで早くclkを開放しないといけない
|
||||
|
||||
IICWH = 5;
|
||||
IICWL = 10; // L期間の長さ(?)
|
||||
|
||||
SMC = 1;
|
||||
|
||||
IICAMK = 0; // 割り込みを許可
|
||||
|
||||
IICE = 1;
|
||||
|
||||
PM20 &= ~0x3; /* set clock pin for IICA */
|
||||
|
||||
LREL = 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//****************************************************************************
|
||||
void IIC_twl_Stop( void )
|
||||
{
|
||||
IICE = 0; /* IICA disable */
|
||||
IICAEN = 0;
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,7 @@
|
||||
#ifndef _iic_twl_
|
||||
#define _iic_twl_
|
||||
|
||||
void IIC_twl_Init( void );
|
||||
void IIC_twl_Stop( void );
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,196 @@
|
||||
#ifndef _MDSERIAL_
|
||||
#define _MDSERIAL_
|
||||
|
||||
|
||||
/* IIC operation enable (IICE0) */
|
||||
#define IIC0_OPERATION 0x80
|
||||
#define IIC0_OPERATION_DISABLE 0x00 /* stop operation */
|
||||
#define IIC0_OPERATION_ENABLE 0x80 /* enable operation */
|
||||
|
||||
/* Exit from communications (LREL0) */
|
||||
#define IIC0_COMMUNICATION 0x40
|
||||
#define IIC0_COMMUNICATION_NORMAL 0x00 /* normal operation */
|
||||
#define IIC0_COMMUNICATION_EXIT 0x40 /* exit from current communication */
|
||||
|
||||
/* Wait cancellation (WREL0) */
|
||||
#define IIC0_WAITCANCEL 0x20
|
||||
#define IIC0_WAIT_NOTCANCEL 0x00 /* do not cancel wait */
|
||||
#define IIC0_WAIT_CANCEL 0x20 /* cancel wait */
|
||||
|
||||
/* Generation of interrupt when stop condition (SPIE0) */
|
||||
#define IIC0_STOPINT 0x10
|
||||
#define IIC0_STOPINT_DISABLE 0x00 /* disable */
|
||||
#define IIC0_STOPINT_ENABLE 0x10 /* enable */
|
||||
|
||||
/* Wait and interrupt generation (WTIM0) */
|
||||
#define IIC0_WAITINT 0x08
|
||||
#define IIC0_WAITINT_CLK8FALLING 0x00 /* generate at the eighth clocks falling edge */
|
||||
#define IIC0_WAITINT_CLK9FALLING 0x08 /* generated at the ninth clocks falling edge */
|
||||
|
||||
/* Acknowledgement control (ACKE0) */
|
||||
#define IIC0_ACK 0x04
|
||||
#define IIC0_ACK_DISABLE 0x00 /* enable acknowledgement */
|
||||
#define IIC0_ACK_ENABLE 0x04 /* disable acknowledgement */
|
||||
|
||||
/* Start condition trigger (STT0) */
|
||||
#define IIC0_STARTCONDITION 0x02
|
||||
#define IIC0_START_NOTGENERATE 0x00 /* do not generate start condition */
|
||||
#define IIC0_START_GENERATE 0x02 /* generate start condition */
|
||||
|
||||
/* Stop condition trigger (SPT0) */
|
||||
#define IIC0_STOPCONDITION 0x01
|
||||
#define IIC0_STOP_NOTGENERATE 0x00 /* do not generate stop condition */
|
||||
#define IIC0_STOP_GENERATE 0x01 /* generate stop condition */
|
||||
|
||||
/*
|
||||
IIC Status Register 0 (IICS0)
|
||||
*/
|
||||
/* Master device status (MSTS0) */
|
||||
#define IIC0_MASTERSTATUS 0x80
|
||||
#define IIC0_STATUS_NOTMASTER 0x00 /* slave device status or communication standby status */
|
||||
#define IIC0_STATUS_MASTER 0x80 /* master device communication status */
|
||||
|
||||
/* Detection of arbitration loss (ALD0) */
|
||||
#define IIC0_ARBITRATION 0x40
|
||||
#define IIC0_ARBITRATION_NO 0x00 /* arbitration win or no arbitration */
|
||||
#define IIC0_ARBITRATION_LOSS 0x40 /* arbitration loss */
|
||||
|
||||
/* Detection of extension code reception (EXC0) */
|
||||
#define IIC0_EXTENSIONCODE 0x20
|
||||
#define IIC0_EXTCODE_NOT 0x00 /* extension code not received */
|
||||
#define IIC0_EXTCODE_RECEIVED 0x20 /* extension code received */
|
||||
|
||||
/* Detection of matching addresses (COI0) */
|
||||
#define IIC0_ADDRESSMATCH 0x10
|
||||
#define IIC0_ADDRESS_NOTMATCH 0x00 /* addresses do not match */
|
||||
#define IIC0_ADDRESS_MATCH 0x10 /* addresses match */
|
||||
|
||||
/* Detection of transmit/receive status (TRC0) */
|
||||
#define IIC0_STATUS 0x08
|
||||
#define IIC0_STATUS_RECEIVE 0x00 /* receive status */
|
||||
#define IIC0_STATUS_TRANSMIT 0x08 /* transmit status */
|
||||
|
||||
/* Detection of acknowledge signal (ACKD0) */
|
||||
#define IIC0_ACKDETECTION 0x04
|
||||
#define IIC0_ACK_NOTDETECTED 0x00 /* ACK signal was not detected */
|
||||
#define IIC0_ACK_DETECTED 0x04 /* ACK signal was detected */
|
||||
|
||||
/* Detection of start condition (STD0) */
|
||||
#define IIC0_STARTDETECTION 0x02
|
||||
#define IIC0_START_NOTDETECTED 0x00 /* start condition not detected */
|
||||
#define IIC0_START_DETECTED 0x02 /* start condition detected */
|
||||
|
||||
/* Detection of stop condition (SPD0) */
|
||||
#define IIC0_STOPDETECTION 0x01
|
||||
#define IIC0_STOP_NOTDETECTED 0x00 /* stop condition not detected */
|
||||
#define IIC0_STOP_DETECTED 0x01 /* stop condition detected */
|
||||
|
||||
/*
|
||||
IIC Flag Register 0 (IICF0)
|
||||
*/
|
||||
/* STT0 clear flag (STCF) */
|
||||
#define IIC0_STARTFLAG 0x80
|
||||
#define IIC0_STARTFLAG_GENERATE 0x00 /* generate start condition */
|
||||
#define IIC0_STARTFLAG_UNSUCCESSFUL 0x80 /* start condition generation unsuccessful */
|
||||
|
||||
/* IIC bus status flag (IICBSY) */
|
||||
#define IIC0_BUSSTATUS 0x40
|
||||
#define IIC0_BUS_RELEASE 0x00 /* bus release status */
|
||||
#define IIC0_BUS_COMMUNICATION 0x40 /* bus communication status */
|
||||
|
||||
/* Initial start enable trigger (STCEN) */
|
||||
#define IIC0_STARTWITHSTOP 0x02
|
||||
#define IIC0_START_WITHSTOP 0x00 /* generation of a start condition without detecting a stop condition */
|
||||
#define IIC0_START_WITHOUTSTOP 0x02 /* generation of a start condition upon detection of a stop condition */
|
||||
|
||||
/* Communication reservation function disable bit (IICRSV) */
|
||||
#define IIC0_RESERVATION 0x01
|
||||
#define IIC0_RESERVATION_ENABLE 0x00 /* enable communication reservation */
|
||||
#define IIC0_RESERVATION_DISABLE 0x01 /* disable communication reservation */
|
||||
|
||||
/*
|
||||
IIC clock selection register 0 (IICCL0)
|
||||
*/
|
||||
#define IICCL0_INITIALVALUE 0x00
|
||||
/* Detection of SCL0 pin level (CLD0) */
|
||||
#define IIC0_SCLLEVEL 0x20
|
||||
#define IIC0_SCL_LOW 0x00 /* clock line at low level */
|
||||
#define IIC0_SCL_HIGH 0x20 /* clock line at high level */
|
||||
|
||||
/* Detection of SDA0 pin level (DAD0) */
|
||||
#define IIC0_SDALEVEL 0x10
|
||||
#define IIC0_SDA_LOW 0x00 /* data line at low level */
|
||||
#define IIC0_SDA_HIGH 0x10 /* data line at high level */
|
||||
|
||||
/* Operation mode switching (SMC0) */
|
||||
#define IIC0_OPERATIONMODE 0x08
|
||||
#define IIC0_MODE_STANDARD 0x00 /* operates in standard mode */
|
||||
#define IIC0_MODE_HIGHSPEED 0x08 /* operates in high-speed mode */
|
||||
|
||||
/* Digital filter operation control (DFC0) */
|
||||
#define IIC0_DIGITALFILTER 0x04
|
||||
#define IIC0_FILTER_OFF 0x00 /* digital filter off */
|
||||
#define IIC0_FILTER_ON 0x04 /* digital filter on */
|
||||
|
||||
/* Operation mode switching (CL01, CL00) */
|
||||
#define IIC0_CLOCKSELECTION 0x03
|
||||
|
||||
/* Combine of (SMC0, CL01, CL00)*/
|
||||
#define IIC0_CLOCK0 0x00
|
||||
#define IIC0_CLOCK1 0x01
|
||||
#define IIC0_CLOCK2 0x02
|
||||
#define IIC0_CLOCK3 0x03
|
||||
#define IIC0_CLOCK4 0x08
|
||||
#define IIC0_CLOCK5 0x09
|
||||
#define IIC0_CLOCK6 0x0a
|
||||
#define IIC0_CLOCK7 0x0b
|
||||
|
||||
/*
|
||||
IIC function expansion register 0 (IICX0)
|
||||
*/
|
||||
/* IIC clock expension (CLX0) */
|
||||
#define IIC0_CLOCKEXPENSION 0x01
|
||||
#define IIC0_EXPENSION0 0x00
|
||||
#define IIC0_EXPENSION1 0x01
|
||||
|
||||
/* Operation clock (CLX0, SMC0, CL01, CL00)
|
||||
| IIC0_EXPENSION0 | IIC0_EXPENSION1 |
|
||||
------------|-------------------|-------------------|----------------------
|
||||
IIC0_CLOCK0 | fprs/2 | prohibited | selection clock(fw)
|
||||
| fprs/88 | | transfer clock
|
||||
| normal | | mode
|
||||
------------|-------------------|-------------------|----------------------
|
||||
IIC0_CLOCK1 | fprs/2 | prohibited | selection clock(fw)
|
||||
| fprs/172 | | transfer clock
|
||||
| normal | | mode
|
||||
------------|-------------------|-------------------|----------------------
|
||||
IIC0_CLOCK2 | fprs/2 | prohibited | selection clock(fw)
|
||||
| fprs/344 | | transfer clock
|
||||
| normal | | mode
|
||||
------------|-------------------|-------------------|----------------------
|
||||
IIC0_CLOCK3 |prohibited/fexscl0 | prohibited | selection clock(fw)
|
||||
| fw/66 | | transfer clock
|
||||
| normal | | mode
|
||||
------------|-------------------|-------------------|----------------------
|
||||
IIC0_CLOCK4 | fprs/2 | fprs/2 | selection clock(fw)
|
||||
| fprs/48 | fprs/24 | transfer clock
|
||||
| high speed | high speed | mode
|
||||
------------|-------------------|-------------------|----------------------
|
||||
IIC0_CLOCK5 | fprs/2 | fprs/2 | selection clock(fw)
|
||||
| fprs/48 | fprs/24 | transfer clock
|
||||
| high speed | high speed | mode
|
||||
------------|-------------------|-------------------|----------------------
|
||||
IIC0_CLOCK6 | fprs/4 | fprs/4 | selection clock(fw)
|
||||
| fprs/96 | fprs/48 | transfer clock
|
||||
| high speed | high speed | mode
|
||||
------------|-------------------|-------------------|----------------------
|
||||
IIC0_CLOCK7 |prohibited/fexscl0 | prohibited | selection clock(fw)
|
||||
| fw/18 | | transfer clock
|
||||
| high speed | | mode
|
||||
------------|-------------------|-------------------|----------------------
|
||||
*/
|
||||
|
||||
#define ADDRESS_COMPLETE 0x80
|
||||
#define IIC_MASTER_FLAG_CLEAR 0x00
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,36 @@
|
||||
#pragma SFR
|
||||
#pragma di
|
||||
#pragma ei
|
||||
#pragma nop
|
||||
#pragma stop
|
||||
#pragma halt
|
||||
|
||||
#pragma section @@CODE ROM_CODE
|
||||
//#pragma section @@CNST ROM_CNST
|
||||
|
||||
//=========================================================
|
||||
#ifndef _incs_h_
|
||||
#define _incs_h_
|
||||
|
||||
#define _mcu_
|
||||
|
||||
#include "jhl_defs.h"
|
||||
#include "user_define.h"
|
||||
|
||||
#include "bsr_system.h"
|
||||
#include "renge.h"
|
||||
|
||||
#include "vreg_ctr.h"
|
||||
#include "vreg_twl.h"
|
||||
|
||||
#include "i2c_mcu.h"
|
||||
|
||||
#include "rtc.h"
|
||||
|
||||
#include "accero.h"
|
||||
|
||||
|
||||
//=========================================================
|
||||
err firm_update( );
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,38 @@
|
||||
#pragma SFR
|
||||
#pragma di
|
||||
#pragma ei
|
||||
#pragma nop
|
||||
#pragma stop
|
||||
#pragma halt
|
||||
|
||||
|
||||
#pragma section @@CODE LDR_CODE
|
||||
#pragma section @@CODEL LDR_CODL
|
||||
|
||||
//#pragma section @@R_INIT FSL_RINT // これやるとスタートアップルーチンが初期値を
|
||||
//#pragma section @@CNST FSL_CNST // セットしてくれない
|
||||
#pragma section @@CNSTL LDR_CNSL
|
||||
|
||||
|
||||
|
||||
//=========================================================
|
||||
#include "jhl_defs.h"
|
||||
#include "user_define.h"
|
||||
|
||||
#include "bsr_system.h"
|
||||
#include "renge.h"
|
||||
|
||||
#include "vreg_ctr.h"
|
||||
#include "vreg_twl.h"
|
||||
|
||||
#include "loader.h"
|
||||
|
||||
#include "i2c_mcu.h"
|
||||
|
||||
#include "WDT.h"
|
||||
|
||||
|
||||
|
||||
//=========================================================
|
||||
err firm_update( );
|
||||
err firm_restore( );
|
||||
@ -0,0 +1,283 @@
|
||||
#pragma nop
|
||||
|
||||
|
||||
#include "config.h"
|
||||
|
||||
//#pragma interrupt INTWDTI fn_intwdti // 未使用
|
||||
//#pragma interrupt INTLVI fn_intlvi // 未使用
|
||||
|
||||
//#pragma interrupt INTP0 intp0_slp // SLP (CPUより、要求) ポーリング
|
||||
//#pragma interrupt INTP1 fn_intp1 // (I2C)
|
||||
//#pragma interrupt INTP2 fn_intp2 // (I2C)
|
||||
//#pragma interrupt INTP3 fn_intp3 // 未搭載
|
||||
#pragma interrupt INTP4 intp4_extdc // EXTDC, ただし電源offから起こすのみ。通常はポーリング
|
||||
#pragma interrupt INTP5 intp5_shell // SHELL_CLOSE, ただし電源offから起こすのみ。通常はポーリング
|
||||
#pragma interrupt INTP6 intp6_PM_irq // CODEC経由で旧PMICへのコマンド書き込み
|
||||
|
||||
//#ifdef _MCU_BSR_ // 割り込みそのものは使いません
|
||||
//#pragma interrupt INTP21 intp21_RFTx // 電波送信パルス
|
||||
//#else
|
||||
//#pragma interrupt INTP7 intp21_RFTx
|
||||
//#endif
|
||||
|
||||
#ifdef _MCU_BSR_
|
||||
#pragma interrupt INTP23 intp23_ACC_ready // 加速度センサ、データ準備完了
|
||||
#endif
|
||||
|
||||
//#pragma interrupt INTCMP0 fn_intcmp0
|
||||
//#pragma interrupt INTCMP1 fn_intcmp1
|
||||
//#pragma interrupt INTDMA0 fn_intdma0
|
||||
#pragma interrupt INTDMA1 int_dma1
|
||||
|
||||
//#pragma interrupt INTST0 fn_intst0
|
||||
/* #pragma interrupt INTCSI00 fn_intcsi00 */
|
||||
//#pragma interrupt INTSR0 fn_intsr0
|
||||
/* #pragma interrupt INTCSI01 fn_intcsi01 */
|
||||
//#pragma interrupt INTSRE0 fn_intsre0
|
||||
|
||||
//#pragma interrupt INTST1 fn_intst1
|
||||
/* #pragma interrupt INTCSI10 fn_intcsi10 */
|
||||
#pragma interrupt INTIIC10 int_iic10
|
||||
//#pragma interrupt INTSR1 fn_intsr1
|
||||
//#pragma interrupt INTSRE1 fn_intsre1
|
||||
|
||||
|
||||
#ifdef _MCU_KE3_
|
||||
#pragma interrupt INTIICA int_iic_ctr // CTR側
|
||||
#else
|
||||
|
||||
// TSはマザボでテレコ、WMは回路図がテレコで結局一致…
|
||||
#pragma interrupt INTIICA0 int_iic_twl
|
||||
#pragma interrupt INTIICA1 int_iic_ctr
|
||||
#endif
|
||||
|
||||
//#pragma interrupt INTTM00 fn_inttm00
|
||||
//#pragma interrupt INTTM01 fn_inttm01
|
||||
//#pragma interrupt INTTM02 fn_inttm02
|
||||
//#pragma interrupt INTTM03 fn_inttm03
|
||||
|
||||
#pragma interrupt INTAD int_adc
|
||||
#pragma interrupt INTRTC int_rtc
|
||||
#pragma interrupt INTRTCI int_rtc_int
|
||||
#pragma interrupt INTKR int_kr
|
||||
//#pragma interrupt INTMD fn_intmd
|
||||
|
||||
//#pragma interrupt INTTM04 fn_inttm04
|
||||
//#pragma interrupt INTTM05 fn_inttm05
|
||||
//#pragma interrupt INTTM06 fn_inttm06
|
||||
//#pragma interrupt INTTM07 fn_inttm07
|
||||
|
||||
|
||||
/****************************************************/
|
||||
/* 未使用時のダミー関数定義 */
|
||||
/****************************************************/
|
||||
__interrupt void fn_intwdti( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
__interrupt void fn_intlvi( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
|
||||
__interrupt void fn_intp0(){
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
|
||||
__interrupt void fn_intp1( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
} //
|
||||
__interrupt void fn_intp2( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
__interrupt void fn_intp3( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
__interrupt void intp21_RFTx( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//__interrupt void fn_intp4(){ while(1){} } // pm.c
|
||||
//__interrupt void fn_intp5(){ while(1){} } // pm.c
|
||||
//__interrupt void fn_intp6(){ while(1){} } // pm.c
|
||||
//__interrupt void fn_intp7(){ while(1){} } // led.c
|
||||
//__interrupt void fn_intp21(){ while(1){} } // led.c
|
||||
|
||||
__interrupt void fn_intcmp0( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
__interrupt void fn_intcmp1( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
__interrupt void fn_intdma0( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
|
||||
//__interrupt void fn_intdma1(){} // i2c_mcu.cにある
|
||||
|
||||
__interrupt void fn_intst0( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
|
||||
/* __interrupt void fn_intcsi00(){} */
|
||||
__interrupt void fn_intsr0( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
|
||||
/* __interrupt void fn_intcsi01(){} */
|
||||
__interrupt void fn_intsre0( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
|
||||
__interrupt void fn_intst1( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
|
||||
/* __interrupt void fn_intcsi10(){} */
|
||||
//__interrupt void fn_intiic10(){ while(1){} }
|
||||
__interrupt void fn_intsr1( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
__interrupt void fn_intsre1( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
|
||||
//__interrupt void fn_intiica(){} // i2c.cにある
|
||||
/* __interrupt void fn_inttm00(){} *//* sub.cにて定義 */
|
||||
__interrupt void fn_inttm01( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
|
||||
__interrupt void fn_inttm02( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
__interrupt void fn_inttm03( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
|
||||
//__interrupt void fn_intad(){ while(1){} } // adc.c
|
||||
__interrupt void fn_intrtc( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
|
||||
//__interrupt void int_rtcint(){} // rtc.cにある
|
||||
//__interrupt void fn_intkr(){} // main.c
|
||||
__interrupt void fn_intmd( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
|
||||
__interrupt void fn_inttm04( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
|
||||
__interrupt void fn_inttm05( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
|
||||
__interrupt void fn_inttm06( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
|
||||
__interrupt void fn_inttm07( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,26 @@
|
||||
#ifndef __jhl_defs_h__
|
||||
#define __jhl_defs_h__
|
||||
|
||||
typedef unsigned char u8;
|
||||
typedef signed char s8;
|
||||
typedef unsigned short u16;
|
||||
typedef signed short s16;
|
||||
|
||||
typedef unsigned char err;
|
||||
|
||||
|
||||
#include "config.h"
|
||||
|
||||
|
||||
|
||||
#define set_bit( cond, reg, pos ) \
|
||||
{ \
|
||||
if( cond ){ \
|
||||
reg |= pos; \
|
||||
}else{ \
|
||||
reg &= ~pos; \
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,618 @@
|
||||
/* ========================================================
|
||||
LED.c
|
||||
|
||||
======================================================== */
|
||||
#pragma sfr
|
||||
|
||||
|
||||
#include "incs.h"
|
||||
#include "led.h"
|
||||
|
||||
|
||||
|
||||
// ========================================================
|
||||
// TPS0
|
||||
#define BIT_PRS012 ( 1 << 2 )
|
||||
#define BIT_PRS002 ( 1 << 6 )
|
||||
|
||||
// TMR0
|
||||
#define BIT_CKS0 15
|
||||
#define BIT_CCS0 12
|
||||
#define BIT_MASTER0 11
|
||||
#define BIT_STS0 8
|
||||
#define BIT_CIS0 6
|
||||
#define BIT_MD123 1
|
||||
#define BIT_MD0 0
|
||||
|
||||
// ========================================================
|
||||
static void led_pow_normal( );
|
||||
static void led_pow_hotaru( );
|
||||
|
||||
|
||||
|
||||
// ========================================================
|
||||
static const char MSG_MAIL[] = { 0b11110110, 0b11011010, 0b01101110, 0b10010100 };
|
||||
#define MSG_SPD 60
|
||||
// ↑255/3以下であること!
|
||||
|
||||
// ========================================================
|
||||
void LED_init( )
|
||||
{
|
||||
/**
|
||||
PWMのセット、とりあえず全部消灯
|
||||
|
||||
マスタチャネル:0 (P01:/reset2) マスターは偶数チャネルしかできない
|
||||
スレーブ 1 SLTO。(3D LED?)
|
||||
2 カメラ
|
||||
3 WiFi
|
||||
4 (ピンはRTC32kHz out に使用)
|
||||
5 充電
|
||||
6 電源 L
|
||||
7 電源 H
|
||||
*/
|
||||
TAU0EN = 1;
|
||||
TPS0 = BIT_PRS012 | BIT_PRS002; // マスタークロックはCK01,8M/2 /2^4 = 250kHz
|
||||
|
||||
TMR00 =
|
||||
1 << BIT_CKS0 | 0 << BIT_CCS0 | 1 << BIT_MASTER0 | 0 << BIT_STS0 | 0
|
||||
<< BIT_CIS0 | 0 << BIT_MD123 | 1 << BIT_MD0;
|
||||
TMR01 = TMR02 = TMR03 = TMR04 = TMR05 = TMR06 = TMR07 =
|
||||
1 << BIT_CKS0 | 0 << BIT_CCS0 | 0 << BIT_MASTER0 | 4 << BIT_STS0 | 0
|
||||
<< BIT_CIS0 | 4 << BIT_MD123 | 1 << BIT_MD0;
|
||||
ISC = 0;
|
||||
TOM0 = 0b0000000011111110; // 出力モード。4はPWM出力しないが1にしないとTO5以降にクロックが届かない
|
||||
|
||||
#ifdef _MCU_BSR_
|
||||
TOL0 = 0b0000000000000000; // 出力を反転させるかフラグ
|
||||
#else
|
||||
TOL0 = 0b0000000000000100; // 出力を反転させるかフラグ
|
||||
#endif
|
||||
|
||||
TO0 = 0; // タイマー動作中で、タイマー出力にしてないときのピンのラッチ。タイマー出力を使わないなら0
|
||||
TOE0 = 0b0000000011101110; // TOxをタイマーモジュールが制御?
|
||||
TS0 = 0b0000000011101111; // 動作開始
|
||||
|
||||
TDR00 = LED_BRIGHT_MAX - 1; // 10bit, 周期
|
||||
|
||||
if( system_status.reboot )
|
||||
{
|
||||
vreg_ctr[VREG_C_LED_POW] = LED_POW_ILM_AUTO;
|
||||
LED_duty_pow_H = LED_BRIGHT_MAX;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void LED_stop( )
|
||||
{
|
||||
TT0 = 0b0000000011101111; // 一斉停止(しないとだめ)
|
||||
TOE0 = 0b0000000000000000; // TOxをタイマーモジュールが制御?(GPIOになる)
|
||||
TAU0EN = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
// 電源LED
|
||||
LED_POW_B,R 6,7
|
||||
|
||||
TDR00 周期(0x03FF。TPS0で250kHzでカウントアップ。10bitなら250Hz位になる)
|
||||
TDR0x Duty 0で消灯、TDR00(より大 =0x03FF以上)で点灯です。
|
||||
|
||||
enum pwr_state_{
|
||||
OFF_TRIG = 0,
|
||||
OFF,
|
||||
ON_TRIG,
|
||||
ON,
|
||||
SLEEP_TRIG,
|
||||
SLEEP
|
||||
};
|
||||
|
||||
enum LED_ILUM_MODE{
|
||||
LED_POW_ILM_AUTO,
|
||||
LED_POW_ILM_ON,
|
||||
LED_POW_ILM_HOTARU,
|
||||
LED_POW_ILM_CEOFF
|
||||
};
|
||||
======================================================== */
|
||||
void tsk_led_pow( )
|
||||
{
|
||||
switch ( vreg_ctr[VREG_C_LED_POW] )
|
||||
{
|
||||
// 自動切り替え
|
||||
case ( LED_POW_ILM_AUTO ):
|
||||
switch ( system_status.pwr_state )
|
||||
{
|
||||
case SLEEP:
|
||||
led_pow_hotaru( );
|
||||
break;
|
||||
|
||||
case ON:
|
||||
led_pow_normal( );
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
// 強制
|
||||
case ( LED_POW_ILM_OFF ):
|
||||
LED_duty_pow_H -= ( LED_duty_pow_H == 0x0000 ) ? 0 : 1;
|
||||
LED_duty_pow_L -= ( LED_duty_pow_L == 0x0000 ) ? 0 : 1;
|
||||
break;
|
||||
|
||||
case ( LED_POW_ILM_HOTARU ):
|
||||
led_pow_hotaru( );
|
||||
break;
|
||||
|
||||
case ( LED_POW_ILM_ON ):
|
||||
default:
|
||||
led_pow_normal( );
|
||||
break;
|
||||
|
||||
case ( LED_POW_ILM_ONLY_RED ):
|
||||
LED_duty_pow_H = 0x0000;
|
||||
LED_duty_pow_L = LED_BRIGHT_MAX;
|
||||
break;
|
||||
|
||||
case ( LED_POW_ILM_ONLY_BLUE ):
|
||||
LED_duty_pow_H = LED_BRIGHT_MAX;
|
||||
LED_duty_pow_L = 0x0000;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
電池残量で、 青→赤→赤点滅
|
||||
======================================================== */
|
||||
static void led_pow_normal( )
|
||||
{
|
||||
static u8 state;
|
||||
|
||||
if( vreg_ctr[VREG_C_BT_REMAIN] < 3 )
|
||||
{
|
||||
// 赤点滅
|
||||
state++;
|
||||
if( state < 127 )
|
||||
{
|
||||
LED_duty_pow_H = 0x0000;
|
||||
LED_duty_pow_L = 0x0000;
|
||||
}
|
||||
else
|
||||
{
|
||||
LED_duty_pow_L = vreg_ctr[VREG_C_LED_BRIGHT];
|
||||
}
|
||||
return;
|
||||
|
||||
}
|
||||
else if( vreg_ctr[VREG_C_BT_REMAIN] < 12 )
|
||||
{
|
||||
// 赤点灯
|
||||
if( LED_duty_pow_H != 0x0000 )
|
||||
{ // 青フェードアウト
|
||||
LED_duty_pow_H -= 1;
|
||||
}
|
||||
if( LED_duty_pow_L != vreg_ctr[VREG_C_LED_BRIGHT] )
|
||||
{ // 赤フェードイン
|
||||
LED_duty_pow_L += ( LED_duty_pow_L < vreg_ctr[VREG_C_LED_BRIGHT] ) ? 1 : -1;
|
||||
}
|
||||
return;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
// 青点灯
|
||||
if( LED_duty_pow_H != vreg_ctr[VREG_C_LED_BRIGHT] )
|
||||
{
|
||||
LED_duty_pow_H += ( LED_duty_pow_H < vreg_ctr[VREG_C_LED_BRIGHT] ) ? 1 : -1;
|
||||
}
|
||||
if( LED_duty_pow_L != 0x0000 )
|
||||
{
|
||||
LED_duty_pow_L -= 1;
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
ホタルパターン
|
||||
======================================================== */
|
||||
static void led_pow_hotaru( )
|
||||
{
|
||||
static u8 delay;
|
||||
static u8 state;
|
||||
static u16 blue_to;
|
||||
static u16 red_to;
|
||||
|
||||
if( delay != 0 )
|
||||
{
|
||||
delay -= 1;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
delay = 10;
|
||||
}
|
||||
|
||||
if( LED_duty_pow_L != red_to )
|
||||
{
|
||||
if( LED_duty_pow_L > red_to )
|
||||
{
|
||||
LED_duty_pow_L -= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
LED_duty_pow_L += 2;
|
||||
}
|
||||
}
|
||||
|
||||
if( LED_duty_pow_H != blue_to )
|
||||
{
|
||||
if( LED_duty_pow_H > blue_to )
|
||||
{
|
||||
LED_duty_pow_H -= 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
LED_duty_pow_H += 2;
|
||||
}
|
||||
}
|
||||
|
||||
switch ( state )
|
||||
{
|
||||
// フェードイン
|
||||
case ( 0 ):
|
||||
case ( 2 ):
|
||||
case ( 4 ):
|
||||
if( vreg_ctr[VREG_C_BT_REMAIN] < 12 )
|
||||
{
|
||||
// 赤いとき
|
||||
blue_to = 0;
|
||||
red_to = vreg_ctr[VREG_C_LED_BRIGHT];
|
||||
}
|
||||
else
|
||||
{
|
||||
blue_to = vreg_ctr[VREG_C_LED_BRIGHT];
|
||||
red_to = 0;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
// フェードアウト
|
||||
if( vreg_ctr[VREG_C_BT_REMAIN] < 12 )
|
||||
{
|
||||
red_to = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
blue_to = 2;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if( ( LED_duty_pow_H == blue_to ) && ( LED_duty_pow_L == red_to ) )
|
||||
{
|
||||
state += 1;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
* 割り込みそのものは使いません *
|
||||
LED_Wifi 3
|
||||
todo 直書きの点滅間隔など
|
||||
======================================================== */
|
||||
void tsk_led_wifi( )
|
||||
{
|
||||
static u8 task_interval;
|
||||
static u8 remain_wifi_tx;
|
||||
static u8 state_wifi_tx;
|
||||
static u8 flag_wifi_TX;
|
||||
|
||||
|
||||
if( task_interval-- != 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// 送信パルスのラッチ
|
||||
if( vreg_ctr[VREG_C_LED_WIFI] == WIFI_LED_TXAUTO )
|
||||
{
|
||||
if( WIFI_txLatch )
|
||||
{
|
||||
WIFI_txLatch = 0;
|
||||
flag_wifi_TX = 2;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
flag_wifi_TX = 0;
|
||||
}
|
||||
|
||||
|
||||
switch ( vreg_ctr[VREG_C_LED_WIFI] )
|
||||
{
|
||||
case ( WIFI_LED_OFF ):
|
||||
default:
|
||||
LED_duty_WiFi = 0;
|
||||
state_wifi_tx = 0;
|
||||
remain_wifi_tx = 0;
|
||||
break;
|
||||
|
||||
case ( WIFI_LED_ON ):
|
||||
LED_duty_WiFi = vreg_ctr[VREG_C_LED_BRIGHT];
|
||||
state_wifi_tx = 0;
|
||||
remain_wifi_tx = 0;
|
||||
break;
|
||||
|
||||
case ( WIFI_LED_TXAUTO ):
|
||||
if( flag_wifi_TX != 0 ) // 短いパルスを捕まえるために、割り込みフラグを見る
|
||||
{
|
||||
// 送信パターン
|
||||
switch ( state_wifi_tx )
|
||||
{
|
||||
case ( 1 ):
|
||||
case ( 3 ):
|
||||
case ( 5 ):
|
||||
LED_duty_WiFi = 0;
|
||||
break;
|
||||
default:
|
||||
LED_duty_WiFi = vreg_ctr[VREG_C_LED_BRIGHT];
|
||||
}
|
||||
state_wifi_tx++;
|
||||
if( state_wifi_tx == 32 )
|
||||
{
|
||||
state_wifi_tx = 0;
|
||||
flag_wifi_TX -= 1;
|
||||
}
|
||||
task_interval = 22;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 送信フラグ待ち
|
||||
LED_duty_WiFi = vreg_ctr[VREG_C_LED_BRIGHT];
|
||||
task_interval = 200;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
* 割り込みそのものは使いません *
|
||||
LED_Wifi2 P24 (未)
|
||||
======================================================== */
|
||||
void tsk_led_notify( )
|
||||
{
|
||||
static u8 task_interval;
|
||||
static u8 flg_char_space;
|
||||
static u8 state_notify_led; // 点灯パターンの進行具合
|
||||
static u8 flag_wifi_TX;
|
||||
|
||||
|
||||
if( task_interval-- != 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch ( vreg_ctr[VREG_C_LED_NOTIFY] )
|
||||
{
|
||||
case ( NOTIFY_LED_OFF ):
|
||||
default:
|
||||
LED_duty_NOTIFY = 0;
|
||||
state_notify_led = 0;
|
||||
flg_char_space = 0;
|
||||
break;
|
||||
|
||||
case ( NOTIFY_LED_ON ):
|
||||
LED_duty_NOTIFY = vreg_ctr[VREG_C_LED_BRIGHT];
|
||||
state_notify_led = 0;
|
||||
flg_char_space = 0;
|
||||
break;
|
||||
|
||||
case ( NOTIFY_LED_PTN0 ):
|
||||
// ゆっくりバースト
|
||||
switch ( state_notify_led )
|
||||
{
|
||||
case ( 1 ):
|
||||
case ( 3 ):
|
||||
case ( 5 ):
|
||||
LED_duty_NOTIFY = vreg_ctr[VREG_C_LED_BRIGHT];
|
||||
break;
|
||||
default:
|
||||
LED_duty_NOTIFY = 0;
|
||||
}
|
||||
state_notify_led++;
|
||||
if( state_notify_led == 16 )
|
||||
{
|
||||
state_notify_led = 0;
|
||||
}
|
||||
task_interval = 50;
|
||||
return;
|
||||
|
||||
case ( NOTIFY_LED_PTN1 ):
|
||||
// データテーブルに従って点滅
|
||||
{
|
||||
u8 dat;
|
||||
|
||||
task_interval = MSG_SPD; // 共通のため。場合によって上書き
|
||||
|
||||
if( flg_char_space != 0 )
|
||||
{
|
||||
LED_duty_NOTIFY = 0;
|
||||
flg_char_space = 0;
|
||||
return;
|
||||
}
|
||||
|
||||
// データバッファの見る位置の更新
|
||||
dat = ( MSG_MAIL[state_notify_led / 4] << ( ( state_notify_led % 4 ) * 2 ) ) & 0xC0;
|
||||
if( dat == 0 )
|
||||
{
|
||||
state_notify_led = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
state_notify_led += 1;
|
||||
}
|
||||
|
||||
flg_char_space = 1;
|
||||
if(( dat & 0b10000000 ) != 0 )
|
||||
{
|
||||
// 点灯はさせる
|
||||
LED_duty_NOTIFY = vreg_ctr[VREG_C_LED_BRIGHT];
|
||||
if(( dat & 0b01000000 ) == 0 )
|
||||
{
|
||||
// 短
|
||||
// nothing to do
|
||||
}
|
||||
else
|
||||
{
|
||||
// 長
|
||||
task_interval = ( MSG_SPD * 3 );
|
||||
}
|
||||
// 次は単語間休み、とかの判定をさせたかったが
|
||||
/// 1バイトに2ビットずつデータが並んでおり、次のバイトに
|
||||
/// またがるようなときが面倒なのでやめる
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(( dat & 0b01000000 ) == 0 )
|
||||
{
|
||||
// 一文終了
|
||||
task_interval = ( MSG_SPD * 3 );
|
||||
}
|
||||
else
|
||||
{
|
||||
// 単語間
|
||||
// nothing to do
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/******************************************************//**
|
||||
LED_Cam TO02
|
||||
\n BLINK,*_PLUSE の時は、1周期分は必ずその状態になります。
|
||||
\n その間に OFF→BLINK などされると、OFFが無視されます。
|
||||
*********************************************************/
|
||||
void tsk_led_cam( )
|
||||
{
|
||||
static u8 state_led_cam = 0;
|
||||
static u8 task_interval;
|
||||
static u8 state_led_cam_twl;
|
||||
|
||||
if( task_interval != 0 )
|
||||
{
|
||||
task_interval -= 1;
|
||||
return;
|
||||
}
|
||||
|
||||
// ブリンクのように待たせたいとき以外は毎週起動する
|
||||
// (レジスタの変更にすぐに反応する)
|
||||
|
||||
switch ( vreg_ctr[VREG_C_LED_CAM] )
|
||||
{
|
||||
case ( CAM_LED_OFF ):
|
||||
default:
|
||||
LED_duty_CAM = 0;
|
||||
state_led_cam = 0;
|
||||
break;
|
||||
|
||||
case ( CAM_LED_ON ):
|
||||
LED_duty_CAM = vreg_ctr[VREG_C_LED_BRIGHT];
|
||||
state_led_cam = 0;
|
||||
break;
|
||||
|
||||
case ( CAM_LED_BLINK ):
|
||||
if( state_led_cam == 0 )
|
||||
{
|
||||
LED_duty_CAM = vreg_ctr[VREG_C_LED_BRIGHT];
|
||||
state_led_cam = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
LED_duty_CAM = 0;
|
||||
state_led_cam = 0;
|
||||
}
|
||||
task_interval = 250;
|
||||
break;
|
||||
|
||||
case ( CAM_LED_ON_PLUSE ):
|
||||
if( state_led_cam == 0 )
|
||||
{
|
||||
LED_duty_CAM = vreg_ctr[VREG_C_LED_BRIGHT];
|
||||
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_duty_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 ):
|
||||
switch ( vreg_twl[ REG_TWL_INT_ADRS_CAM ] ){ // switchのネストとか…
|
||||
case( TWL_CAMLED_OFF ):
|
||||
LED_duty_CAM = 0;
|
||||
state_led_cam = 0;
|
||||
break;
|
||||
|
||||
case( TWL_CAMLED_BLINK ):
|
||||
if( state_led_cam == 0 )
|
||||
{
|
||||
LED_duty_CAM = vreg_ctr[VREG_C_LED_BRIGHT];
|
||||
state_led_cam = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
LED_duty_CAM = 0;
|
||||
state_led_cam = 0;
|
||||
}
|
||||
task_interval = 250;
|
||||
break;
|
||||
|
||||
case( TWL_CAMLED_ON ):
|
||||
case( TWL_CAMLED_DEF_ON ):
|
||||
default:
|
||||
LED_duty_CAM = vreg_ctr[VREG_C_LED_BRIGHT];
|
||||
state_led_cam = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
@ -0,0 +1,90 @@
|
||||
#ifndef __led__
|
||||
#define __led__
|
||||
|
||||
|
||||
// ====================================
|
||||
|
||||
// LED_DUTY
|
||||
#define LED_duty_pow_L TDR07
|
||||
#define LED_duty_pow_H TDR06
|
||||
#define LED_duty_WiFi TDR03
|
||||
#define LED_duty_NOTIFY TDR05
|
||||
#define LED_duty_CAM TDR02
|
||||
#define LED_duty_TUNE TDR01
|
||||
// wifi2はPWMできません。
|
||||
|
||||
|
||||
#define LED_BRIGHT_MAX 0x00FF
|
||||
|
||||
|
||||
// ====================================
|
||||
#ifdef _MCU_BSR_ // 電波送信パルス
|
||||
#define WIFI_txLatch PIF21
|
||||
#else
|
||||
#define WIFI_txLatch PIF7
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
// ====================================
|
||||
enum LED_ILUM_MODE
|
||||
{
|
||||
LED_POW_ILM_AUTO = 0,
|
||||
LED_POW_ILM_ON,
|
||||
LED_POW_ILM_HOTARU,
|
||||
LED_POW_ILM_OFF,
|
||||
LED_POW_ILM_ONLY_RED,
|
||||
LED_POW_ILM_ONLY_BLUE
|
||||
};
|
||||
|
||||
|
||||
enum LED_MODE_TUNE
|
||||
{
|
||||
LED_TUNE_ILM_OFF = 0,
|
||||
LED_TUNE_ILM_ON,
|
||||
LED_TUNE_ILM_SVR
|
||||
};
|
||||
|
||||
|
||||
// VREG_C_WIFI_LED
|
||||
enum
|
||||
{
|
||||
WIFI_LED_OFF = 0,
|
||||
WIFI_LED_ON,
|
||||
WIFI_LED_TXAUTO,
|
||||
WIFI_LED_PTN0,
|
||||
WIFI_LED_PTN1
|
||||
};
|
||||
|
||||
|
||||
// VREG_C_WIFI_NOTIFY
|
||||
enum
|
||||
{
|
||||
NOTIFY_LED_OFF = 0,
|
||||
NOTIFY_LED_ON,
|
||||
NOTIFY_LED_PTN0,
|
||||
NOTIFY_LED_PTN1,
|
||||
NOTIFY_LED_PTN2
|
||||
};
|
||||
|
||||
|
||||
// VREG_C_CAM_LED
|
||||
enum
|
||||
{
|
||||
CAM_LED_OFF = 0,
|
||||
CAM_LED_BLINK,
|
||||
CAM_LED_ON,
|
||||
CAM_LED_BY_TWL,
|
||||
CAM_LED_ON_PLUSE,
|
||||
CAM_LED_OFF_PLUSE
|
||||
};
|
||||
|
||||
|
||||
|
||||
// ====================================
|
||||
void LED_init( );
|
||||
void LED_stop( );
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,392 @@
|
||||
/* ========================================================
|
||||
MCU CTR BSR
|
||||
2009/03/30
|
||||
開発技術部 藤田
|
||||
|
||||
ブートローダー部
|
||||
ホストの通信と、自己書き換え、ファームのチェックを行う。
|
||||
|
||||
======================================================== */
|
||||
#pragma SFR
|
||||
#pragma di
|
||||
#pragma ei
|
||||
#pragma nop
|
||||
#pragma stop
|
||||
#pragma halt
|
||||
#pragma opc
|
||||
|
||||
|
||||
#include "incs_loader.h"
|
||||
|
||||
#include "fsl.h"
|
||||
#include "fsl_user.h"
|
||||
|
||||
#include "i2c_ctr.h"
|
||||
#include "i2c_mcu.h"
|
||||
#include "pm.h"
|
||||
#include "rtc.h"
|
||||
|
||||
#include "reboot.h"
|
||||
|
||||
|
||||
// ========================================================
|
||||
#if (FSL_DATA_BUFFER_SIZE>0)
|
||||
fsl_u08 fsl_data_buffer[FSL_DATA_BUFFER_SIZE];
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#ifdef FSL_INT_BACKUP
|
||||
static fsl_u08 fsl_MK0L_bak_u08; /* if (interrupt backup required) */
|
||||
static fsl_u08 fsl_MK0H_bak_u08; /* { */
|
||||
static fsl_u08 fsl_MK1L_bak_u08; /* reserve space for backup information */
|
||||
static fsl_u08 fsl_MK1H_bak_u08; /* of interrupt mask flags */
|
||||
static fsl_u08 fsl_MK2L_bak_u08; /* */
|
||||
static fsl_u08 fsl_MK2H_bak_u08; /* } */
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
// magic.c の記述と違わないように注意!
|
||||
#define MGC_LOAD 0x0FF6
|
||||
#define MGC_FOOT 0x4FF6
|
||||
|
||||
|
||||
|
||||
// ========================================================
|
||||
void FSL_Open( void );
|
||||
void FSL_Close( void );
|
||||
void hdwinit( void );
|
||||
void power_save( );
|
||||
static void hdwinit2( );
|
||||
|
||||
extern void main_loop( );
|
||||
|
||||
|
||||
|
||||
// ========================================================
|
||||
void main( )
|
||||
{
|
||||
while( 1 )
|
||||
{
|
||||
WDT_Restart( );
|
||||
if( RTCEN )
|
||||
{
|
||||
system_status.reboot = 1;
|
||||
}
|
||||
else if( ( RESF & 0x10 ) != 0) // WDRF,WDTでリセット
|
||||
{
|
||||
system_status.reboot = 1;
|
||||
#ifdef _PMIC_TWL_
|
||||
// 暴走してしまうので再起動させる
|
||||
PM_reset_ast();
|
||||
/// hdwinit2ないでリセット解除される。続きに続行してよい(頭痛が痛い的)
|
||||
#endif
|
||||
vreg_ctr[ VREG_C_MCU_STATUS ] |= REG_BIT_STATUS_WDT_RESET;
|
||||
// set_irq( VREG_C_IRQ0, REG_BIT_IRQ_WDT_RESET );
|
||||
// ↑I2Cの初期化後に行う
|
||||
hdwinit2( );
|
||||
}
|
||||
else
|
||||
{
|
||||
u8 pwup_delay0 = 0;
|
||||
u8 pwup_delay1 = 0;
|
||||
|
||||
do
|
||||
{ // 電池接続時、16ms待ってみる(チャタリング対策)
|
||||
pwup_delay0 += 1;
|
||||
do
|
||||
{
|
||||
pwup_delay1 += 1;
|
||||
}
|
||||
while( pwup_delay1 != 0 ); // u16にするとコンパイラが怒るんだが…。
|
||||
}
|
||||
while( pwup_delay0 != 0 );
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
if( comp != 0 )
|
||||
{
|
||||
// ファームリストアを試みる
|
||||
firm_restore( );
|
||||
// 帰ってこない。リセットをかける。
|
||||
}
|
||||
}
|
||||
|
||||
// 通常運転
|
||||
main_loop( );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
キーリターン割り込み
|
||||
======================================================== */
|
||||
__interrupt void int_kr( )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
ext dc
|
||||
======================================================== */
|
||||
__interrupt void intp4( )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
/* ========================================================
|
||||
shell close
|
||||
======================================================== */
|
||||
__interrupt void intp5( )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ========================================================
|
||||
void hdwinit( void )
|
||||
{ // スタートアップルーチンが勝手に呼びます
|
||||
DI( ); /* マスタ割り込み禁止 */
|
||||
|
||||
CMC = 0b00010110; /* X1発振せず(入力ポート)、XT1使用、推奨の推奨で超低電力発振 */
|
||||
CSC = 0b10000000; /* X1発振なし、XT1発振あり、高速内蔵発振動作 */
|
||||
#ifdef _MCU_BSR_
|
||||
OSMC = 0x01; /* 隠しレジスタ */
|
||||
#endif
|
||||
#ifdef _OVERCLOCK_
|
||||
CKC = 0b00001000; /* CPU/周辺クロック=fMAIN、fMAIN=fMX、fCLK=fMX */
|
||||
#else
|
||||
// CKC デフォルトでよい
|
||||
#endif
|
||||
|
||||
/*--- 低電圧検出回路の設定 ---*/
|
||||
/* リセット解除時のデフォルトは、オプション・バイトにて指定される */
|
||||
LVIS = 0b00000000; /* VLVI = 4.22±0.1V */
|
||||
LVIM = 0b00000000; /* LVI動作禁止 */
|
||||
/* 電源電圧(VDD)<検出電圧(VLVI)時に割込発生 */
|
||||
/* 電源電圧(VDD)≧検出電圧<VLVI)、または動作禁止時に低電圧検出 */
|
||||
}
|
||||
|
||||
|
||||
void hdwinit2( )
|
||||
{
|
||||
// ポート設定 /////////////////////////////////////////
|
||||
if( system_status.reboot ) // リセットピンだけはすぐにセットする
|
||||
{
|
||||
#ifdef _MODEL_TEG2_
|
||||
P0 = 0b00000011;
|
||||
P3 = 0b00000110; // 簡易I2Cは出力ラッチを1にする
|
||||
P14 = 0b00000001;
|
||||
#endif
|
||||
#ifdef _MODEL_WM0_
|
||||
P0 = 0b00000011;
|
||||
P3 = 0b00000110; // 簡易I2Cは出力ラッチを1にする
|
||||
P14 = 0b00000001;
|
||||
#endif
|
||||
#ifdef _MODEL_TS0_
|
||||
P0 = 0b00000001;
|
||||
P3 = 0b00000111; // 簡易I2Cは出力ラッチを1にする
|
||||
P14 = 0b00000000;
|
||||
#endif
|
||||
#ifdef _MODEL_CTR_
|
||||
P0 = 0b00000001;
|
||||
P3 = 0b00000111; // 簡易I2Cは出力ラッチを1にする
|
||||
P14 = 0b00000000;
|
||||
#endif
|
||||
}
|
||||
else
|
||||
{
|
||||
P0 = 0b00000000;
|
||||
P3 = 0b00000110; // 簡易I2Cは出力ラッチを1にする
|
||||
P14 = 0b00000000;
|
||||
}
|
||||
|
||||
#ifdef _MCU_BSR_
|
||||
PM0 = 0b11111111; // BSRマイコンでは、reset1は監視のみになる。
|
||||
#else
|
||||
PM0 = 0b00000000; // 0で出力
|
||||
#endif
|
||||
PM3 = 0b11110000; // P31,32は簡易I2C
|
||||
PM14 = 0b11111100; // debugger[1] とりあえず出力
|
||||
|
||||
P1 = 0b00000000;
|
||||
P2 = 0b00000000;
|
||||
P4 = 0b00000000;
|
||||
P5 = 0b00000000;
|
||||
P6 = 0b00000000;
|
||||
P7 = 0b01000000;
|
||||
P12 = 0b00000000;
|
||||
|
||||
#ifdef _MCU_BSR_
|
||||
P20 = 0b00000000;
|
||||
#else
|
||||
P8 = 0b00000000;
|
||||
#endif
|
||||
|
||||
P15 = 0b00000000;
|
||||
|
||||
|
||||
PM1 = 0b00000000;
|
||||
PM2 = 0b11101001;
|
||||
|
||||
#ifdef _PMIC_CTR_
|
||||
PM4 = 0b11110111;
|
||||
#else
|
||||
PM4 = 0b11111011;
|
||||
#endif
|
||||
|
||||
PM5 = 0b11110011;
|
||||
PM6 = 0b11111100; // I2CのラインがL出力になってしまうが、システムがOFFなのでかまわない
|
||||
PM7 = 0b00011111;
|
||||
PM12 = 0b11111111; // 32kHzクロックのピン設定はどっちでもよい
|
||||
PM15 = 0b11111111;
|
||||
|
||||
#ifdef _MCU_BSR_
|
||||
#ifdef _MODEL_CTR_
|
||||
PM20 = 0b11111101;
|
||||
#else
|
||||
PM20 = 0b11111100;
|
||||
#endif
|
||||
#else
|
||||
PM8 = 0b11111111;
|
||||
#endif
|
||||
|
||||
// プルアップ /////////////////////////////////////////
|
||||
PU0 = 0b00000000; // バッテリ認証後にそれぞれセット
|
||||
PU1 = 0b00000000;
|
||||
PU3 = 0b00000000; // 外部でプルアップしないと具合が悪い。CPUがプルアップする
|
||||
PU4 = 0b00000000; // 外部でプルアップしてほしいtool0,1)
|
||||
PU5 = 0b00000011;
|
||||
PU7 = 0b00011001;
|
||||
PU12 = 0b00000000;
|
||||
PU14 = 0b00000000;
|
||||
|
||||
#ifdef _MCU_BSR_
|
||||
#ifdef _MODEL_CTR_
|
||||
#ifdef _SW_HOME_ENABLE_
|
||||
PU20 = 0b00010001;
|
||||
#else
|
||||
PU20 = 0b00000001;
|
||||
#endif
|
||||
#else
|
||||
PU20 = 0b00000000;
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// ポート入力モード・レジスタ設定 /////////////////////
|
||||
// [0:通常入力バッファ 1:TTL入力バッファ]
|
||||
PIM3 = 0b00000000;
|
||||
PIM7 = 0b00000000;
|
||||
|
||||
// ポート出力モード・レジスタ設定
|
||||
// [0:通常出力モード 1:N-chオープン・ドレーン出力]
|
||||
POM3 = 0b00000110;
|
||||
POM7 = 0b00000000;
|
||||
|
||||
/*--- 割り込み設定 ---------*/
|
||||
IF0 = 0x0000; /* 割り込み要求フラグクリア */
|
||||
IF1 = 0x0000;
|
||||
#ifdef _MCU_BSR_
|
||||
IF2 = 0x0000;
|
||||
#else
|
||||
IF2L = 0x00;
|
||||
#endif
|
||||
|
||||
MK0 = 0xFFFF; /* 割り込み禁止 */
|
||||
MK1 = 0xFFFF;
|
||||
|
||||
#ifdef _MCU_BSR_
|
||||
MK2 = 0xFFFF;
|
||||
#else
|
||||
MK2L = 0xFF;
|
||||
#endif
|
||||
|
||||
PR00L = 0b11111111; /* 割り込み優先順位、全て低位(LV3) */
|
||||
PR10L = 0b11111111;
|
||||
PR00H = 0b11111111;
|
||||
PR10H = 0b11111111;
|
||||
PR01L = 0b11111111;
|
||||
PR11L = 0b11111110;
|
||||
PR01H = 0b11111111;
|
||||
PR11H = 0b11111111;
|
||||
PR02L = 0b11111111;
|
||||
PR12L = 0b11111111;
|
||||
|
||||
/*--- 外部割込の有効エッジ設定 ---*/
|
||||
#ifdef _MCU_BSR_
|
||||
EGP0 = 0b00110001;
|
||||
EGN0 = 0b01110001;
|
||||
EGP2 = 0b00001010;
|
||||
EGN2 = 0b00000000;
|
||||
#else
|
||||
EGP0 = 0b10110001;
|
||||
EGN0 = 0b01110001;
|
||||
#endif
|
||||
/*--- キー割り込み設定 ---*/
|
||||
KRM = 0b00000000; /* 全キー割り込み信号を検出しない */
|
||||
|
||||
/*--- タイマ・アレイ・ユニットの動作停止 ---*/
|
||||
TAU0EN = 0; /* タイマ・アレイ・ユニットへのクロック供給停止 */
|
||||
TT0 = 0x00ff; /* 全タイマ・チャネルの動作停止 */
|
||||
|
||||
/*--- RTCの動作停止 ---*/
|
||||
// RTCEN = 0; /* RTCへのクロック供給停止 */
|
||||
// RTCC0 = 0b00000000; /* カウンタ動作停止 */
|
||||
// 別途初期化関数
|
||||
|
||||
#ifndef _MCU_BSR_
|
||||
/*--- コンパレータ/プログラマブル・ゲイン・アップの動作停止 ---*/
|
||||
OACMPEN = 0; /* クロック供給停止 */
|
||||
OAM = 0x00; /* プログラマブル・ゲイン・アップの動作停止 */
|
||||
C0CTL = 0x00; /* コンパレータ0動作停止 */
|
||||
C1CTL = 0x00; /* コンパレータ1動作停止 */
|
||||
#endif
|
||||
|
||||
/*--- クロック出力/ブザー出力停止 ---*/
|
||||
CKS0 = 0b00000000;
|
||||
CKS1 = 0b00000000;
|
||||
|
||||
/*--- ADCの動作停止 ---*/
|
||||
ADCEN = 0; /* ADCへのクロック供給停止 */
|
||||
ADM = 0b00000000; /* 変換動作停止 */
|
||||
|
||||
/*--- シリアル・アレイ・ユニットの動作停止 ---*/
|
||||
SAU0EN = 0; /* シリアル・アレイ・ユニット0へのクロック供給停止 */
|
||||
SCR00 = 0x0087; /* 各チャンネルの通信禁止 */
|
||||
SCR01 = 0x0087;
|
||||
SCR02 = 0x0087;
|
||||
SCR03 = 0x0087;
|
||||
|
||||
#ifdef _MCU_BSR_
|
||||
// IICの動作停止
|
||||
IICA0EN = 0; /* IICA0(CTR)へのクロック供給停止 */
|
||||
IICCTL00 = 0x00; /* IICA1動作停止 */
|
||||
IICA1EN = 0; // IICA1(TWL)へのクロック供給停止
|
||||
IICCTL01 = 0x00; // IICA1動作停止
|
||||
|
||||
#else
|
||||
/*--- IICAの動作停止 ---*/
|
||||
IICAEN = 0; /* IICAへのクロック供給停止 */
|
||||
IICCTL0 = 0x00; /* IICA動作停止 */
|
||||
#endif
|
||||
|
||||
/*--- DMAの動作停止 ---*/
|
||||
DRC0 = 0b00000000; /* DMAチャネル0の動作禁止 */
|
||||
DRC1 = 0b00000000; /* DMAチャネル1の動作禁止 */
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
#include "jhl_defs.h"
|
||||
|
||||
|
||||
err firm_update( );
|
||||
@ -0,0 +1,65 @@
|
||||
/*****************************************************************************
|
||||
ビルド時刻を埋め込みます。
|
||||
ビルドの度に更新されるようにする必要があります。
|
||||
(touchしてね)
|
||||
****************************************************************************/
|
||||
#include "config.h"
|
||||
|
||||
// V0.5 (ニセ0.1改)
|
||||
#pragma section @@CNSTL MGC_LOAD AT 0x0FF6
|
||||
__far static const unsigned char MGC_LOAD[] = __TIME__;
|
||||
|
||||
#pragma section @@CNST MGC_MIMI AT 0x2100
|
||||
static const unsigned char MGC_HEAD[] = __TIME__;
|
||||
|
||||
#pragma section @@CNST MGC_TAIL AT 0x4FF6
|
||||
static const unsigned char MGC_TAIL[] = __TIME__;
|
||||
|
||||
|
||||
// 0Dまでこれを使用
|
||||
// #define SIG { 0x30, 0x38, 0x3A, 0x34, 0x35, 0x3A, 0x33, 0x39, 0x00, 0x00 }
|
||||
|
||||
|
||||
// あーあ。
|
||||
/*
|
||||
// V0.5 (ニセ0.1改)
|
||||
#define SIG { 0x30, 0x38, 0x3A, 0x34, 0x35, 0x3A, 0x33, 0x39, 0x00, 0x00 }
|
||||
*/
|
||||
|
||||
/*
|
||||
メモ
|
||||
(未使用)
|
||||
V0.2の署名 31 34 3A 33 35 3A 33 35 00 00
|
||||
#define SIG { 0x31, 0x34, 0x3A, 0x33, 0x35, 0x3A, 0x33, 0x35, 0x00, 0x00 };
|
||||
|
||||
ctr_wm0
|
||||
31373A30353A32310000
|
||||
#define SIG { 0x31, 0x37, 0x3A, 0x30, 0x35, 0x3A, 0x32, 0x31, 0x00, 0x00 };
|
||||
|
||||
ctr_wm0_2
|
||||
31303A34393A35390000
|
||||
#define SIG { 0x31, 0x30, 0x3A, 0x34, 0x39, 0x3A, 0x35, 0x39, 0x00, 0x00 };
|
||||
|
||||
bsr_V0.2_090828_WM2
|
||||
31323A35393A32350000
|
||||
#define SIG { 0x31, 0x32, 0x3A, 0x35, 0x39, 0x3A, 0x32, 0x35, 0x00, 0x00 };
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
// V0.1の署名(日付) 30 38 3A 34 35 3A 33 39 00 00
|
||||
#pragma section @@CNSTL MGC_LOAD AT 0x0FF6
|
||||
__far static const unsigned char MGC_LOAD[] =
|
||||
#define SIG { 0x30, 0x38, 0x3A, 0x34, 0x35, 0x3A, 0x33, 0x39, 0x00, 0x00 }
|
||||
|
||||
|
||||
// V0.4以降
|
||||
#pragma section @@CNSTL MGC_LOAD AT 0x0FF6
|
||||
__far static const unsigned char MGC_LOAD[] = __TIME__;
|
||||
|
||||
#pragma section @@CNST MGC_MIMI AT 0x2100
|
||||
static const unsigned char MGC_HEAD[] = __TIME__;
|
||||
|
||||
#pragma section @@CNST MGC_TAIL AT 0x47F6
|
||||
static const unsigned char MGC_TAIL[] = __TIME__;
|
||||
*/
|
||||
@ -0,0 +1,103 @@
|
||||
/* ========================================================
|
||||
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;
|
||||
|
||||
|
||||
u16 pool[256]; // アップデート時のワークエリア 兼 歩数計データ
|
||||
/* ========================================================
|
||||
本当のエントリ関数は loader.c にあります
|
||||
======================================================== */
|
||||
void main_loop( void )
|
||||
{
|
||||
|
||||
// 電池投入時、ファームアップデート後のみ
|
||||
RTC_init( ); // 内部でリブートか判定しています
|
||||
|
||||
renge_init( );
|
||||
|
||||
iic_mcu_start( );
|
||||
EI( );
|
||||
|
||||
PM_init();
|
||||
|
||||
if( system_status.reboot )
|
||||
{
|
||||
#ifdef _PMIC_TWL_
|
||||
if( RESET1_n )
|
||||
#else
|
||||
if( PM_chk_LDSW() != 0 )
|
||||
#endif
|
||||
{
|
||||
system_status.pwr_state = ON_TRIG;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// リブート時は実行されない
|
||||
system_status.pwr_state = OFF_TRIG;
|
||||
}
|
||||
|
||||
#ifdef _PARRADIUM_
|
||||
system_status.pwr_state = OFF;
|
||||
#endif
|
||||
vreg_ctr_init( );
|
||||
vreg_twl_init( );
|
||||
|
||||
read_dipsw( ); // 特定スイッチで何かするか?
|
||||
|
||||
clear_hosu_hist(); // 履歴クリア
|
||||
|
||||
renge_task_interval_run_force = 1;
|
||||
|
||||
RTCIMK = 0; /* 割り込み(アラーム&インターバル)許可 */
|
||||
|
||||
// メインループ //
|
||||
while( 1 )
|
||||
{ // システムtick、または割り込みで廻ります。
|
||||
WDT_Restart( );
|
||||
renge_task_interval_run( ); // 内部で、システムtickまたは強制起動します
|
||||
while( renge_task_interval_run_force != 0 )
|
||||
{
|
||||
renge_task_interval_run( );
|
||||
}
|
||||
WDT_Restart( );
|
||||
while( renge_task_immed_run( ) != ERR_SUCCESS ); // ここのループが廻る度に実行されます
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,74 @@
|
||||
#!/usr/bin/ruby
|
||||
$KCODE = "S"
|
||||
=begin
|
||||
|
||||
NECの環境が吐きだしたSRECを、
|
||||
●未指定部分には0xFFパディングし、
|
||||
●BSRのアップデート用に必要な部分だけ切り出します。
|
||||
(0x0000 - 0x0FFF, 0x2000-0x47FF)
|
||||
|
||||
=end
|
||||
|
||||
|
||||
=begin
|
||||
if( ARGV[0] == nil )
|
||||
print( "input file name is nessesary!\nabort.\n" )
|
||||
exit(1)
|
||||
end
|
||||
|
||||
|
||||
unless(File.exist?( ARGV[0] ))
|
||||
print( "file" << ARGV[0] << " not found.\nabort.\n" )
|
||||
exit(1)
|
||||
end
|
||||
=end
|
||||
|
||||
#src = File.open( '/cygdrive/c/78k_data/yav-mcu-basara/bsr.hex' )
|
||||
src = File.open( 'bsr.hex' )
|
||||
|
||||
dest = File.new( "hoge.bin","wb" )
|
||||
|
||||
|
||||
dest.write( 'jhl' )
|
||||
|
||||
### get data ##########################
|
||||
src_in = Hash.new
|
||||
tempA = Array.new
|
||||
dataTemp = Array.new
|
||||
|
||||
offset = Numeric.new
|
||||
bindata = Array.new( 32*1024, 0xFF )
|
||||
|
||||
while(src.readline)
|
||||
tempA = $_.scan(/(\:)(\w\w)(\w\w\w\w)(\w\w)(\w+)(\w\w)/)
|
||||
|
||||
break if( tempA.size == 0 )
|
||||
|
||||
src_in = { "len" => tempA[0][1], "offset" => tempA[0][2], "type" => tempA[0][3], "data" => tempA[0][4], "CRC" => tempA[0][5] }
|
||||
|
||||
break if src_in["type"].hex == 01
|
||||
break if src_in["len"].hex == 00
|
||||
# next if src_in["type"].hex != 00
|
||||
if( src_in["type"].hex != 00 )
|
||||
# p dat
|
||||
next
|
||||
end
|
||||
|
||||
offset = src_in["offset"].hex
|
||||
next if(( 0x1000 <= offset ) && ( offset < 0x2000 ))
|
||||
|
||||
dataTemp = src_in["data"].scan(/\w\w/)
|
||||
|
||||
( 0...(src_in["len"].to_s.hex) ).each{|i|
|
||||
bindata[ offset + i ] = ( dataTemp[ i ] ).to_s.hex
|
||||
}
|
||||
end
|
||||
|
||||
### format data and output #############
|
||||
4096.times{
|
||||
bindata.delete_at(4096)
|
||||
}
|
||||
dest.write( bindata[0..(0x4FFF - 0x1000)].pack("c*") )
|
||||
dest.close
|
||||
|
||||
printf( "intel-HEX to bsr bin converter\n file converted!\n\n" )
|
||||
@ -0,0 +1,411 @@
|
||||
/* ********************************************************
|
||||
|
||||
|
||||
|
||||
|
||||
********************************************************* */
|
||||
#pragma MUL
|
||||
#pragma BCD
|
||||
|
||||
#include "incs.h"
|
||||
#include <math.h>
|
||||
|
||||
#include "accero.h"
|
||||
#include "pedometer.h"
|
||||
|
||||
|
||||
static void hosu_increment();
|
||||
u16 get_long_hour();
|
||||
|
||||
|
||||
|
||||
extern u16 pool[];
|
||||
|
||||
|
||||
|
||||
/*=========================================================
|
||||
歩数計
|
||||
========================================================*/
|
||||
void pedometer()
|
||||
{
|
||||
static s16 th_H = 15000; // 閾値。暫定。動的変更とかしたい…ので変数
|
||||
static s16 th_L = 11000;
|
||||
static u16 acc_norm[3]; // 加速度の大きさのヒストリ。数字が大きい方が古い
|
||||
static u16 acc_norm_temp;
|
||||
static u8 interval_hh; // 山-山間の時間。短過ぎたらはじく。
|
||||
static u8 time_l; // 前回の極小からの経過時間
|
||||
static u16 peak_l; // 谷の深さ
|
||||
static u16 peak_h; // 山の高さ
|
||||
static u16 norm_hist[TAP];
|
||||
|
||||
static u8 hist_indx;
|
||||
static u8 t_rise;
|
||||
|
||||
signed long filterd;
|
||||
|
||||
u8 i;
|
||||
|
||||
signed long temp1,temp2,temp3;
|
||||
signed long temp4,temp5,temp6;
|
||||
|
||||
u16 sx16 = abs( (u16)vreg_ctr[VREG_C_ACC_XH] * 256 + vreg_ctr[VREG_C_ACC_XL] );
|
||||
u16 sy16 = abs( (u16)vreg_ctr[VREG_C_ACC_YH] * 256 + vreg_ctr[VREG_C_ACC_YL] );
|
||||
u16 sz16 = abs( (u16)vreg_ctr[VREG_C_ACC_ZH] * 256 + vreg_ctr[VREG_C_ACC_ZL] );
|
||||
|
||||
// ベクトルのノルム
|
||||
#ifdef _mcu_
|
||||
norm_hist[ hist_indx & TAP-1 ] = sqrt( (long)sx16 * ( sx16 / 2 ) +
|
||||
(long)sy16 * ( sy16 / 2 ) +
|
||||
(long)sz16 * ( sz16 / 2 )
|
||||
);
|
||||
#endif
|
||||
|
||||
#ifdef _pc_
|
||||
norm_hist[ hist_indx & TAP-1 ] = normh * 256 + norml;
|
||||
#endif
|
||||
|
||||
hist_indx += 1;
|
||||
|
||||
// ヒストリにフィルタを掛けて、今回の値を求める
|
||||
filterd = 0;
|
||||
// for( i = 8; i != 55; i++ ) // 係数が0ばかりのため
|
||||
for( i = 0; i != 46; i++ ) // 係数テーブルをいじりました。パラメータ調整時注意
|
||||
{
|
||||
filterd += (signed long)norm_hist[ ( hist_indx + i ) & TAP-1 ] * lpf_coeff[ i ];
|
||||
}
|
||||
|
||||
filterd += (4096)*512;
|
||||
acc_norm_temp = (s16)( filterd /1024 & 0xFFFF ); // ←FIL_COEFF_QUANTから正規化
|
||||
/*
|
||||
if( acc_norm[0] < acc_norm_temp )
|
||||
{
|
||||
t_rise += 1;
|
||||
if( t_rise == 0 )
|
||||
t_rise == 254;
|
||||
}
|
||||
else
|
||||
{
|
||||
t_rise = 0;
|
||||
}
|
||||
*/
|
||||
if( acc_norm[0] != acc_norm_temp )
|
||||
{
|
||||
acc_norm[2] = acc_norm[1]; // ヒストリ
|
||||
acc_norm[1] = acc_norm[0];
|
||||
acc_norm[0] = acc_norm_temp;
|
||||
}
|
||||
|
||||
if( acc_norm[2] <= acc_norm[1] && acc_norm[1] > acc_norm[0]
|
||||
&& acc_norm[0] > th_H )
|
||||
// 極大で、閾値を超えていた
|
||||
{
|
||||
if( 21 < interval_hh )
|
||||
// 前回の極大からの間隔がほどよい
|
||||
{
|
||||
if(( interval_hh < 160 ) && ( time_l < interval_hh ))
|
||||
// 谷を挟んでいる
|
||||
{
|
||||
if( acc_norm[0] - peak_l > 4200 ){
|
||||
// 一歩増えました
|
||||
hosu_increment();
|
||||
}
|
||||
}
|
||||
interval_hh = 0;
|
||||
}
|
||||
if( acc_norm[0] > 18000 )
|
||||
{
|
||||
th_L = acc_norm[0] - 10000;
|
||||
}
|
||||
else
|
||||
{
|
||||
th_L = 11000;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
interval_hh += ( interval_hh != 255 ) ? 1: 0; // 飽和加算って楽に書けたらいいのに
|
||||
}
|
||||
|
||||
// (2) 直近の極小からの時間
|
||||
if( acc_norm[2] >= acc_norm[1] && acc_norm[1] < acc_norm[0]
|
||||
&& acc_norm[0] < th_L )
|
||||
{
|
||||
// 極小を検出
|
||||
time_l = 0;
|
||||
peak_l = acc_norm[0];
|
||||
}
|
||||
else
|
||||
{
|
||||
time_l += ( time_l != 255 ) ? 1: 0;
|
||||
}
|
||||
|
||||
{
|
||||
/*
|
||||
static u8 i = 0;
|
||||
|
||||
vreg_ctr[VREG_C_FREE_0] = i++;
|
||||
|
||||
vreg_ctr[VREG_C_FREE_1] = (u8)( acc_norm[0] / 256 & 0x00FF );
|
||||
vreg_ctr[VREG_C_FREE_2] = (u8)( acc_norm[0] & 0x00FF );
|
||||
|
||||
vreg_ctr[VREG_C_FREE_3] = (u8)( norm_hist[ hist_indx -1 & TAP-1 ] / 256 & 0xFF );
|
||||
vreg_ctr[VREG_C_FREE_4] = (u8)( norm_hist[ hist_indx -1 & TAP-1 ] & 0xFF );
|
||||
|
||||
vreg_ctr[VREG_C_FREE_5] = interval_hh;
|
||||
vreg_ctr[VREG_C_FREE_6] = time_l;
|
||||
|
||||
vreg_ctr[VREG_C_FREE_7] = vreg_ctr[ VREG_C_ACC_HOSU_L ];
|
||||
vreg_ctr[VREG_C_FREE_8] = (u8)( peak_l / 256 & 0x00FF );
|
||||
vreg_ctr[VREG_C_FREE_9] = (u8)( peak_l & 0x00FF );
|
||||
// vreg_ctr[VREG_C_FREE_A] = (u8)( norm_avg[0] / 256 & 0x00FF );
|
||||
// vreg_ctr[VREG_C_FREE_B] = (u8)( norm_avg[0] & 0x00FF );
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*=========================================================
|
||||
歩数+1
|
||||
累積をインクリメント
|
||||
履歴を更新
|
||||
========================================================*/
|
||||
u8 p_record;
|
||||
u8 last_hour = 0x23; // 履歴の最新は何時?
|
||||
u8 last_day = 0x30;
|
||||
u8 last_month = 0x12;
|
||||
u8 last_year = 0x99;
|
||||
|
||||
#define HOSU_NODATA 0xFFFF
|
||||
#define HOSU_MAX 0xFFFE
|
||||
|
||||
static void hosu_increment()
|
||||
{
|
||||
static u16 last_hour_fny;
|
||||
|
||||
// 累積の更新 //
|
||||
// いろいろ失敗した...
|
||||
if( ++vreg_ctr[ VREG_C_ACC_HOSU_L ] == 0 )
|
||||
{
|
||||
if( ++vreg_ctr[ VREG_C_ACC_HOSU_M ] == 0 )
|
||||
{
|
||||
if( ++vreg_ctr[ VREG_C_ACC_HOSU_H ] == 0 ){
|
||||
vreg_ctr[ VREG_C_ACC_HOSU_L ] = 255; // カンスト orz
|
||||
vreg_ctr[ VREG_C_ACC_HOSU_M ] = 255;
|
||||
vreg_ctr[ VREG_C_ACC_HOSU_H ] = 255;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
// 毎時履歴の更新 /////////////////////////////
|
||||
// 空白の時間を考慮する。1時間以上放置されたなど。
|
||||
u16 now_hour;
|
||||
u8 now_year;
|
||||
|
||||
// 時計を止める必要が有るので↓は一気に行って下さい
|
||||
DI();
|
||||
RWAIT = 1;
|
||||
while( !RWST ){;}
|
||||
now_year = bcdtob( YEAR );
|
||||
last_hour = HOUR; // 履歴読み出し時に使用。BCDのままでよい
|
||||
last_day = DAY;
|
||||
last_month = MONTH;
|
||||
now_hour = get_long_hour();
|
||||
// RWAIT = 0; ↑で行っています
|
||||
// EI(); 〃
|
||||
|
||||
// 歩数計が止まっていた時間を考慮して必要なら進める //
|
||||
if( last_year == now_year )
|
||||
{
|
||||
if( now_hour > last_hour_fny )
|
||||
{
|
||||
fill_hosu_hist_hours( now_hour - last_hour_fny );
|
||||
}
|
||||
}
|
||||
else if( last_year == ( now_year -1 ) )
|
||||
{
|
||||
// 年をまたいでいるとき
|
||||
u16 temp_hours = ( ( 365 + (( now_year & 0x03 ) == 1 ? 1: 0 )) * 24 ) - last_hour_fny + now_hour;
|
||||
fill_hosu_hist_hours( temp_hours );
|
||||
}
|
||||
else if( last_year < now_year )
|
||||
{
|
||||
// 数年放置
|
||||
fill_hosu_hist_hours( 0 );
|
||||
}
|
||||
else
|
||||
{
|
||||
// カレンダーが巻き戻るなど
|
||||
// ノーケアでよい
|
||||
}
|
||||
last_year = now_year;
|
||||
last_hour_fny = now_hour;
|
||||
|
||||
// 実際にインクリメント
|
||||
if( pool[ p_record ] == HOSU_NODATA )
|
||||
{
|
||||
pool[ p_record ] = 1;
|
||||
}
|
||||
else if( pool[ p_record ] != HOSU_MAX )
|
||||
{
|
||||
pool[ p_record ] += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
空白の時間を適切に0にして、
|
||||
今を含む1時間のデータを書く位置にポインタ?を進める
|
||||
======================================================== */
|
||||
void fill_hosu_hist_hours( u16 hours )
|
||||
{
|
||||
if( hours > 255 )
|
||||
{
|
||||
hours = 0;
|
||||
}
|
||||
|
||||
// 空白の数時間の設定
|
||||
do
|
||||
{
|
||||
p_record += 1;
|
||||
pool[ p_record ] = 0;
|
||||
hours -= 1;
|
||||
}
|
||||
while( hours != 0 );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
空白の時間を適切に0にして、
|
||||
今を含む1時間のデータを書く位置にポインタ?を進める
|
||||
======================================================== */
|
||||
void clear_hosu_hist()
|
||||
{
|
||||
u8 hours = 0;
|
||||
// 空白の数時間の設定
|
||||
do
|
||||
{
|
||||
pool[ hours ] = 0xFFFF;
|
||||
hours -= 1;
|
||||
}
|
||||
while( hours != 0 );
|
||||
vreg_ctr[ VREG_C_ACC_HOSU_L ] = 0;
|
||||
vreg_ctr[ VREG_C_ACC_HOSU_M ] = 0;
|
||||
vreg_ctr[ VREG_C_ACC_HOSU_H ] = 0;
|
||||
}
|
||||
|
||||
|
||||
extern u8 iic_burst_state;
|
||||
bit record_read_msb_lsb;
|
||||
|
||||
/* ========================================================
|
||||
歩数計ヒストリ読み出しの後処理(初期化)
|
||||
読み出しポインタのクリア
|
||||
======================================================== */
|
||||
void hosu_read_end( )
|
||||
{
|
||||
record_read_msb_lsb = 0;
|
||||
}
|
||||
|
||||
|
||||
/* ========================================================
|
||||
歩数計のヒストリを返す。
|
||||
1回呼ぶ度に、ヒストリの下位、上位、一時間遡って下位上位...
|
||||
======================================================== */
|
||||
u8 hosu_read( )
|
||||
{
|
||||
u8 dat;
|
||||
u16 temp;
|
||||
static u8 p_record_buffer;
|
||||
|
||||
switch( iic_burst_state ){
|
||||
case( 0 ):
|
||||
p_record_buffer = p_record;
|
||||
iic_burst_state += 1;
|
||||
return( last_hour );
|
||||
|
||||
case( 1 ):
|
||||
iic_burst_state += 1;
|
||||
return( last_day );
|
||||
|
||||
case( 2 ):
|
||||
iic_burst_state += 1;
|
||||
return( last_month );
|
||||
|
||||
case( 3 ):
|
||||
iic_burst_state += 1;
|
||||
return( btobcd(last_year) );
|
||||
|
||||
case( 4 ):
|
||||
iic_burst_state += 1;
|
||||
return( 0x55 ); // reserved dummy
|
||||
|
||||
case( 5 ):
|
||||
iic_burst_state += 1;
|
||||
return( 0xAA ); // reserved. dummy
|
||||
|
||||
default:
|
||||
temp = pool[ p_record_buffer ];
|
||||
if( record_read_msb_lsb == 0 )
|
||||
{
|
||||
dat = (u8)( temp & 0x00FF );
|
||||
}
|
||||
else
|
||||
{
|
||||
dat = (u8)(( temp >> 8 ) & 0x00FF );
|
||||
p_record_buffer -= 1;
|
||||
}
|
||||
record_read_msb_lsb += 1;
|
||||
return( dat );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
今年の元旦からの経過時間(hour)を返す。
|
||||
引数 無し
|
||||
返値 u16 long_hour
|
||||
======================================================== */
|
||||
static const u16 DAYS_FROM_HNY[] = {
|
||||
0,
|
||||
0, 31, 31+28, 59+31, 90+30,
|
||||
120+31, 151+30, 181+31, 212+31, 243+30,
|
||||
273+31, 304+30 };
|
||||
|
||||
u16 get_long_hour()
|
||||
{
|
||||
u16 long_hour;
|
||||
u8 year_hex;
|
||||
u8 month_hex;
|
||||
u8 day_hex;
|
||||
u8 hour_hex;
|
||||
|
||||
year_hex = bcdtob( YEAR );
|
||||
month_hex = bcdtob( MONTH );
|
||||
day_hex = bcdtob( DAY );
|
||||
hour_hex = bcdtob( HOUR );
|
||||
|
||||
RWAIT = 0;
|
||||
EI();
|
||||
|
||||
// まず日数の部分
|
||||
long_hour = DAYS_FROM_HNY[ month_hex ];
|
||||
if(( ( year_hex & 0x03 ) == 0 ) && ( ( 3 <= month_hex )
|
||||
|| (( 2 == month_hex ) && ( day_hex == 29 )) ))
|
||||
{
|
||||
// 閏年で、閏日より後
|
||||
long_hour += 1;
|
||||
}
|
||||
long_hour += day_hex - 1;
|
||||
long_hour *= 24; // 日数→時間
|
||||
|
||||
long_hour += hour_hex;
|
||||
|
||||
return( long_hour );
|
||||
}
|
||||
|
||||
@ -0,0 +1,84 @@
|
||||
#ifndef _pedo_coeff_h_
|
||||
#define _pedo_coeff_h_
|
||||
|
||||
// =========================================================
|
||||
#define TAP 64
|
||||
#define FIL_COEFF_QUANT 10
|
||||
const s8 lpf_coeff[]={
|
||||
/*
|
||||
Window Function Algorithm LPF
|
||||
Sampling Frequency = 100.0
|
||||
cutoff1 = 6.0000000
|
||||
Tap Count =64
|
||||
Kaiser Constant = 7.000000
|
||||
Quantized by 11 [bits]
|
||||
*/
|
||||
/* 0,// [0]
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
*/
|
||||
1,// 8
|
||||
2,
|
||||
2,
|
||||
3,
|
||||
3,
|
||||
2,
|
||||
0,
|
||||
-2,
|
||||
-5,// 16
|
||||
-9,
|
||||
-13,
|
||||
-16,
|
||||
-16,
|
||||
-13,
|
||||
-6,
|
||||
4,
|
||||
18,// 24
|
||||
37,
|
||||
56,
|
||||
77,
|
||||
95,
|
||||
110,
|
||||
119,
|
||||
122,
|
||||
119,// 32
|
||||
110,
|
||||
95,
|
||||
77,
|
||||
56,
|
||||
37,
|
||||
18,
|
||||
4,
|
||||
-6,// 40
|
||||
-13,
|
||||
-16,
|
||||
-16,
|
||||
-13,
|
||||
-9,
|
||||
-5,
|
||||
-2,
|
||||
0,// 48
|
||||
2,
|
||||
3,
|
||||
3,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
/*
|
||||
0,
|
||||
0,// 56
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
*/
|
||||
};
|
||||
#endif
|
||||
@ -0,0 +1,99 @@
|
||||
#ifndef _pedo_
|
||||
#define _pedo_
|
||||
|
||||
|
||||
void hosu_read_end( );
|
||||
u8 hosu_read( );
|
||||
void fill_hosu_hist_hours( u16 );
|
||||
void clear_hosu_hist();
|
||||
|
||||
|
||||
// =========================================================
|
||||
#define TAP 64
|
||||
#define FIL_COEFF_QUANT 10
|
||||
static const s8 lpf_coeff[]={
|
||||
/*
|
||||
Window Function Algorithm LPF
|
||||
Sampling Frequency = 100.0
|
||||
cutoff1 = 6.0000000
|
||||
Tap Count =64
|
||||
Kaiser Constant = 7.000000
|
||||
Quantized by 11 [bits]
|
||||
*/
|
||||
/* 0,// [0]
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
*/
|
||||
1,// 8
|
||||
2,
|
||||
2,
|
||||
3,
|
||||
3,
|
||||
2,
|
||||
0,
|
||||
-2,
|
||||
-5,// 16
|
||||
-9,
|
||||
-13,
|
||||
-16,
|
||||
-16,
|
||||
-13,
|
||||
-6,
|
||||
4,
|
||||
18,// 24
|
||||
37,
|
||||
56,
|
||||
77,
|
||||
95,
|
||||
110,
|
||||
119,
|
||||
122,
|
||||
119,// 32
|
||||
110,
|
||||
95,
|
||||
77,
|
||||
56,
|
||||
37,
|
||||
18,
|
||||
4,
|
||||
-6,// 40
|
||||
-13,
|
||||
-16,
|
||||
-16,
|
||||
-13,
|
||||
-9,
|
||||
-5,
|
||||
-2,
|
||||
0,// 48
|
||||
2,
|
||||
3,
|
||||
3,
|
||||
2,
|
||||
2,
|
||||
1,
|
||||
/*
|
||||
0,
|
||||
0,// 56
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0
|
||||
*/
|
||||
};
|
||||
// */
|
||||
|
||||
// =========================================================
|
||||
|
||||
void pedometer();
|
||||
static void hosu_increment();
|
||||
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,930 @@
|
||||
/* ========================================================
|
||||
対PMIC
|
||||
藤田@開技
|
||||
nintendo
|
||||
'08 Dec
|
||||
======================================================== */
|
||||
#pragma nop
|
||||
|
||||
#include "incs.h"
|
||||
#include "adc.h"
|
||||
#include "led.h"
|
||||
#include "pm.h"
|
||||
#include "renge.h"
|
||||
|
||||
#include "batt_params.h"
|
||||
|
||||
#include <fsl.h>
|
||||
#include "fsl_user.h"
|
||||
extern u16 pool[];
|
||||
|
||||
// ========================================================
|
||||
|
||||
|
||||
// ========================================================
|
||||
u8 raw_adc_temperature;
|
||||
u8 rcomp;
|
||||
float temp_co_up;
|
||||
float temp_co_dn;
|
||||
|
||||
// ========================================================
|
||||
static void PM_get_batt_left();
|
||||
|
||||
|
||||
/******************************************************//**
|
||||
PMIC達の初期化
|
||||
\n 電池メーカー識別
|
||||
\n 電池残量ICのセット
|
||||
\n バージョン情報の取得
|
||||
\n
|
||||
\n 以下のピンは主にここで操作・監視されます。
|
||||
\n ・PM_BT_DET,_P
|
||||
*********************************************************/
|
||||
#define swap_endian_16( x ) (unsigned int)( x << 8 | x >> 8 )
|
||||
|
||||
void PM_init( )
|
||||
{
|
||||
u8 temp;
|
||||
u8 origParam[4];
|
||||
union{
|
||||
u16 _u16; // ↓でわかるように、little endian です。注意。
|
||||
struct{
|
||||
u8 lsb;
|
||||
u8 msb;
|
||||
}chars;
|
||||
}dat_16;
|
||||
|
||||
system_status.model = MODEL_JIKKI;
|
||||
wait_ms( 150 );
|
||||
|
||||
// -1. なんかおかしい… リセットをかけてみる
|
||||
dat_16._u16 = swap_endian_16( 0x5400 ); // reset
|
||||
iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_COMMAND, 2, &dat_16 ); // こいつはNACKを返す
|
||||
|
||||
// 0. バッテリ残量IC クイックスタート
|
||||
dat_16._u16 = swap_endian_16( 0x4000 ); // quick start
|
||||
if( iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_MODE, 2, &dat_16 ) != ERR_SUCCESS )
|
||||
{
|
||||
vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_GASGAUGE_ERR;
|
||||
system_status.model = MODEL_TS_BOARD;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 1. ロック解除
|
||||
dat_16._u16 = swap_endian_16( 0x4057 ); // unlock key
|
||||
iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_LOCK, 2, &dat_16 );
|
||||
|
||||
// 2. 初期パラメータを一時保存
|
||||
iic_mcu_read( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_RCOMP, 4, origParam );
|
||||
|
||||
// 3. 一時的にOCVを変更
|
||||
dat_16._u16 = swap_endian_16( 0xD4C0 ); // マジックナンバー的なもの。メーカー指定
|
||||
iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_OCV, 2, &dat_16 );
|
||||
|
||||
// 4. 一時的にRCOMPを変更
|
||||
dat_16._u16 = swap_endian_16( 0xFF00 );
|
||||
iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_RCOMP, 2, &dat_16 );
|
||||
|
||||
// 電池メーカーの識別
|
||||
BT_DET_P = 1;
|
||||
temp = ( u8 ) ( ( get_adc( ADC_SEL_BATT_DET ) >> 5 ) -1 ); // 識別値0の白箱の分、インデックス合わせ
|
||||
BT_DET_P = 0;
|
||||
|
||||
iic_mcu_set_wo_dma( );
|
||||
// 5.メーカー別パラメータのロード
|
||||
switch ( temp )
|
||||
{
|
||||
case( BT_VENDER_SHIROBAKO ):
|
||||
system_status.model = MODEL_SHIROBAKO;
|
||||
break;
|
||||
|
||||
case( BT_VENDER_PANA ):
|
||||
case( BT_VENDER_MAXELL ):
|
||||
default:
|
||||
iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_BT_PARAM, 64, &BT_PARAM[0] );
|
||||
rcomp = BT_PANA_RCOMP;
|
||||
temp_co_up = BT_PANA_TEMPCOUP;
|
||||
temp_co_dn = BT_PANA_TEMPCODN;
|
||||
break;
|
||||
}
|
||||
|
||||
// 6. 150ms以上待つ
|
||||
wait_ms( 200 );
|
||||
|
||||
// 7. OCVに「とある値」を書く
|
||||
dat_16._u16 = swap_endian_16( 0xD4C0 );
|
||||
iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_OCV, 2, &dat_16 );
|
||||
|
||||
// 8. 150~600ms待つ。600msは厳守
|
||||
wait_ms( 200 );
|
||||
|
||||
// 9. SOCを読む。ベリファイのため。
|
||||
temp = iic_mcu_read_a_byte( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_SOC );
|
||||
|
||||
if( 0x6D == temp || temp == 0x6E || temp == 0x6F ){
|
||||
// カスタムモデル書き込みOK!
|
||||
}else{
|
||||
// 失敗だったらリトライするのか?
|
||||
}
|
||||
|
||||
// 10.元のRCOMPとOCVを書き戻す
|
||||
iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_RCOMP, 4, origParam );
|
||||
|
||||
// 11. ロック
|
||||
dat_16._u16 = swap_endian_16( 0x0000 ); // lock key
|
||||
iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_LOCK, 2, &dat_16 );
|
||||
|
||||
// おしまい //
|
||||
}
|
||||
|
||||
// 電池温度測定
|
||||
BT_TEMP_P = 1; // 電池温度監視スタート
|
||||
raw_adc_temperature = get_adc( ADC_SEL_BATT_TEMP ); // 温度のtemp。
|
||||
renge_task_immed_add( PM_bt_temp_update );
|
||||
|
||||
// PMIC バージョン読み出し
|
||||
// temp = iic_mcu_read_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_VER );
|
||||
// vreg_ctr[ VREG_C_PM_INFO ] = temp;
|
||||
// デバッグ用は別にまとめた
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
raw_adc_temperatureに入っている値を℃に変換するとともに、
|
||||
・レジスタにセット
|
||||
・残量ICにセット
|
||||
todo
|
||||
======================================================== */
|
||||
task_status_immed PM_bt_temp_update( )
|
||||
{
|
||||
static u8 count = 0; // たまにしか書きに行かない
|
||||
|
||||
static u8 rawdat_old;
|
||||
static s16 temperature; // todo
|
||||
u16 newrcomp;
|
||||
|
||||
/*
|
||||
サーミスタ - 10kΩ分圧点の時、
|
||||
常用温度では分圧比のカーブがほぼリニアで、
|
||||
村田 T[℃] = 81.48 - 111.97 x ratio
|
||||
TDK T = 81.406 - 111.81 x ratio
|
||||
*/
|
||||
if( rawdat_old != raw_adc_temperature ){
|
||||
DBG_P_n = 1;
|
||||
temperature = 81.45 - 111.9 * raw_adc_temperature/256.0;
|
||||
vreg_ctr[VREG_C_BT_TEMP] = (u8)temperature;
|
||||
DBG_P_n = 0;
|
||||
}
|
||||
|
||||
// 時々書きにゆく
|
||||
if( count == 0 )
|
||||
{
|
||||
DBG_P_n = 1;
|
||||
if( vreg_ctr[VREG_C_BT_TEMP] > 20 )
|
||||
{
|
||||
newrcomp = -( ( temperature - 20 ) * temp_co_up );
|
||||
}
|
||||
else
|
||||
{
|
||||
newrcomp = -( ( temperature - 20 ) * temp_co_dn );
|
||||
}
|
||||
newrcomp += rcomp;
|
||||
|
||||
newrcomp = swap_endian_16( (u16)newrcomp );
|
||||
DBG_P_n = 0;
|
||||
|
||||
if( iic_mcu_write
|
||||
( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_RCOMP, 2, &newrcomp ) == ERR_SUCCESS )
|
||||
{
|
||||
rawdat_old = raw_adc_temperature;
|
||||
}
|
||||
}
|
||||
count += 1;
|
||||
|
||||
return ( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
|
||||
#ifdef _PMIC_TWL_
|
||||
u8 blset;
|
||||
#endif
|
||||
|
||||
#ifndef _PARRADIUM_
|
||||
/* ========================================================
|
||||
液晶系の電源制御
|
||||
ステータスフラグはすぐに立ててしまう。
|
||||
不感応時間があるし、
|
||||
起動失敗であれば電源が落ちる
|
||||
別のタスクで電源落ちは監視していて、ステータスもクリアする
|
||||
======================================================== */
|
||||
// BSR //
|
||||
err PM_LCD_on( )
|
||||
{
|
||||
u8 rv;
|
||||
|
||||
PM_VDDLCD_on( );
|
||||
|
||||
wait_ms( DELAY_PM_TSS_50B_AND_TCOM );
|
||||
|
||||
PM_TCOM_on( );
|
||||
|
||||
wait_ms( DELAY_PM_TCOM_TO_VCS );
|
||||
|
||||
PM_VCS_on( );
|
||||
|
||||
wait_ms( DELAY_PM_VCS_TO_BL );
|
||||
#ifdef _PM_BUG_
|
||||
iic_mcu_write_a_byte( IIC_SLA_PMIC, 0x22, 0x4A ); // バグ持ちPMIC対策
|
||||
#endif
|
||||
|
||||
rv = PM_chk_LDSW( );
|
||||
|
||||
if( rv != 0 )
|
||||
{
|
||||
// 電源起動エラーなら電源も切れてしまう。ここではケアしない
|
||||
vreg_ctr[VREG_C_STATUS] |= REG_BIT_LCD_POW;
|
||||
set_irq( VREG_C_IRQ3, REG_BIT_LCD_ON );
|
||||
|
||||
SND_DEPOP_DEACT; // 1でミュート
|
||||
}
|
||||
|
||||
#ifdef _PMIC_TWL_
|
||||
PM_TEG_LCD_dis( 0 );
|
||||
blset = ( PM_REG_BIT_BL_U | PM_REG_BIT_BL_L );
|
||||
#endif
|
||||
return ( rv );
|
||||
}
|
||||
|
||||
// BSR //
|
||||
void PM_LCD_off()
|
||||
{
|
||||
SND_DEPOP_ACT;
|
||||
|
||||
// BLついてたら消す
|
||||
#ifdef _PMIC_TWL_
|
||||
if( blset != 0 )
|
||||
#else
|
||||
if( ( iic_mcu_read_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_BL ) & 0x03 ) != 0 )
|
||||
#endif
|
||||
{
|
||||
u8 tot;
|
||||
|
||||
PM_BL_set( REG_BIT_CMD_BL_U_OFF | REG_BIT_CMD_BL_L_OFF );
|
||||
vreg_ctr[VREG_C_STATUS] &= 0b10011111;
|
||||
|
||||
if( (( REG_BIT_BL_U_OFF | REG_BIT_BL_L_OFF ) & ~vreg_ctr[ VREG_C_IRQ_MASK3 ] ) != 0 )
|
||||
{
|
||||
vreg_ctr[ VREG_C_IRQ3 ] |= ( ( REG_BIT_BL_U_OFF | REG_BIT_BL_L_OFF ) & ~vreg_ctr[ VREG_C_IRQ_MASK3 ] );
|
||||
IRQ0_neg;
|
||||
tot = 0;
|
||||
while( !IRQ0 && ( ++tot != 0 ) ){;}
|
||||
IRQ0_ast;
|
||||
}
|
||||
vreg_ctr[VREG_C_COMMAND2] &= ~( REG_BIT_CMD_BL_U_OFF | REG_BIT_CMD_BL_L_OFF );
|
||||
}
|
||||
|
||||
#ifdef _PMIC_TWL_
|
||||
PM_TEG_LCD_dis( 1 );
|
||||
blset = 0;
|
||||
#endif
|
||||
|
||||
PM_TCOM_VCS_off( );
|
||||
wait_ms( DELAY_PM_LCD_OFF );
|
||||
|
||||
PM_VDDLCD_off( ); // 残ってたの全部止めます。
|
||||
vreg_ctr[VREG_C_STATUS] &= ~REG_BIT_LCD_POW;
|
||||
|
||||
|
||||
set_irq( VREG_C_IRQ3, REG_BIT_LCD_OFF );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
バックライトの個別on/off
|
||||
現状から on/off/維持 のフラグなので面倒
|
||||
例えば、BL on/on の状態で、on/onにしろと言われても、on/on割り込みを入れます。
|
||||
======================================================== */
|
||||
err PM_BL_set( u8 dat )
|
||||
{
|
||||
#ifndef _PMIC_TWL_
|
||||
u8 blset;
|
||||
#endif
|
||||
u8 intset = 0;
|
||||
// RMWを行う
|
||||
|
||||
#ifndef _PMIC_TWL_
|
||||
// Read
|
||||
blset = iic_mcu_read_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_BL ) ;
|
||||
#endif
|
||||
|
||||
// Modify
|
||||
// ue
|
||||
if(( dat & REG_BIT_CMD_BL_U_ON ) != 0 )
|
||||
{
|
||||
blset |= PM_REG_BIT_BL_U;
|
||||
intset |= REG_BIT_BL_U_ON;
|
||||
}
|
||||
else if(( dat & REG_BIT_CMD_BL_U_OFF ) != 0 )
|
||||
{
|
||||
blset &= ~PM_REG_BIT_BL_U;
|
||||
intset |= REG_BIT_BL_U_OFF;
|
||||
}
|
||||
|
||||
// shita
|
||||
if(( dat & REG_BIT_CMD_BL_L_ON ) != 0 )
|
||||
{
|
||||
blset |= PM_REG_BIT_BL_L;
|
||||
intset |= REG_BIT_BL_L_ON;
|
||||
}
|
||||
else if(( dat & REG_BIT_CMD_BL_L_OFF ) != 0 )
|
||||
{
|
||||
blset &= ~PM_REG_BIT_BL_L;
|
||||
intset |= REG_BIT_BL_L_OFF;
|
||||
}
|
||||
|
||||
/*
|
||||
SoCがPWMを出すようレジスタをセットしてから遅延が有るため、ステータスを先に
|
||||
更新してしまう。
|
||||
// Write
|
||||
iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_BL, blset );
|
||||
if( blset != 0x00 ){
|
||||
wait_ms( 10 );
|
||||
}
|
||||
*/
|
||||
vreg_ctr[VREG_C_STATUS] = (( vreg_ctr[VREG_C_STATUS] & 0b10011111 )
|
||||
| (( blset << 6 ) | ( blset << 4 )) & 0b01100000 );
|
||||
// PMICのBLのビットと、MCUのSTATUSレジスタのビット位置が逆なため入れ替え
|
||||
|
||||
{
|
||||
u8 tot;
|
||||
|
||||
if( ( intset & ~vreg_ctr[ VREG_C_IRQ_MASK3 ] ) != 0 )
|
||||
{
|
||||
vreg_ctr[ VREG_C_IRQ3 ] |= ( intset & ~vreg_ctr[ VREG_C_IRQ_MASK3 ] );
|
||||
IRQ0_neg;
|
||||
tot = 0;
|
||||
while( !IRQ0 && ( ++tot != 0 ) ){;} // 割り込みを入れ直す
|
||||
IRQ0_ast;
|
||||
}
|
||||
}
|
||||
|
||||
// Write
|
||||
if( blset != 0 ) // BLを付ける場合はウェイトを挟まないとPWMが来ておらず
|
||||
/// シャットダウンすることがある
|
||||
{
|
||||
wait_ms( 10 );
|
||||
}
|
||||
iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_BL, blset );
|
||||
|
||||
return( ERR_SUCCESS ); // ここでは異常チェック不要
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
液晶の対向電圧の設定を行います。
|
||||
仮想レジスタの内容を送るだけ
|
||||
======================================================== */
|
||||
err PM_LCD_vcom_set( )
|
||||
{
|
||||
u8 rv;
|
||||
|
||||
rv = iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_POW_DAC1, vreg_ctr[VREG_C_VCOM_T] ); // がっかりなことに、PMICはバースト書き込み不可
|
||||
rv |= iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_POW_DAC2, vreg_ctr[VREG_C_VCOM_B] );
|
||||
return ( rv );
|
||||
}
|
||||
|
||||
|
||||
|
||||
#else
|
||||
// パラディウム上のSoCでチェックしたいとき、PMICも液晶もつながってないので
|
||||
// 異常終了しないようにダミー関数にする
|
||||
err PM_LCD_on( )
|
||||
{
|
||||
vreg_ctr[VREG_C_STATUS] |= REG_BIT_LCD_POW;
|
||||
set_irq( VREG_C_IRQ3, REG_BIT_LCD_ON );
|
||||
SND_DEPOP_DEACT; // 1でミュート
|
||||
return ( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
void PM_LCD_off( )
|
||||
{
|
||||
SND_DEPOP_ACT;
|
||||
vreg_ctr[VREG_C_STATUS] &= ~REG_BIT_LCD_POW;
|
||||
set_irq( VREG_C_IRQ3, REG_BIT_LCD_OFF );
|
||||
}
|
||||
|
||||
|
||||
err PM_BL_set( u8 )
|
||||
{
|
||||
wait_ms( 10 );
|
||||
vreg_ctr[VREG_C_STATUS] = ( vreg_ctr[VREG_C_STATUS] & ~( REG_BIT_BL_U | REG_BIT_BL_L )
|
||||
| ( command_bl_set & REG_BIT_CMD_BL_U_ON )? REG_BIT_BL_U
|
||||
| ( command_bl_set & REG_BIT_CMD_BL_L_ON )? REG_BIT_BL_L
|
||||
);
|
||||
return ( PM_chk_LDSW( ) );
|
||||
}
|
||||
|
||||
|
||||
err PM_LCD_vcom_set( )
|
||||
{
|
||||
return ( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
↑で、レジスタ書き込みから呼び出される時のため
|
||||
I2Cの取り合いの関係でここから呼ぶ
|
||||
======================================================== */
|
||||
task_status_immed tski_vcom_set( )
|
||||
{
|
||||
PM_LCD_vcom_set( );
|
||||
return ( ERR_FINISED );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
シーケンスの通り電源を立ち上げてゆきます。
|
||||
返値 0 最後まで正常に完了した。
|
||||
1 ショートなどで電源があがりきらなかった
|
||||
|
||||
以下のピンは主にここで操作・監視されます。
|
||||
・POW_CONT1,2 TEG電源のみ
|
||||
======================================================== */
|
||||
err PM_sys_pow_on( )
|
||||
{
|
||||
#ifdef _PMIC_CTR_
|
||||
u8 temp;
|
||||
|
||||
// 電池温度測定
|
||||
while( ADCEN != 0 )
|
||||
{;
|
||||
}
|
||||
BT_TEMP_P = 1;
|
||||
vreg_ctr[VREG_C_BT_TEMP] = get_adc( ADC_SEL_BATT_TEMP );
|
||||
BT_TEMP_P = 0;
|
||||
PM_bt_temp_update( ); // 温度のtemp。 残量ICに行きます
|
||||
|
||||
// 残量チェック
|
||||
PM_get_batt_left(); // 先に、PM_init()が実行されている必要があります。(大丈夫)
|
||||
// todo: batt remain -> volatage?
|
||||
if( vreg_ctr[VREG_C_BT_REMAIN] < 0 )
|
||||
{
|
||||
return ( 1 );
|
||||
}
|
||||
|
||||
// 電源順次立ち上げ
|
||||
// PM_reset_ast( ); 不要 PM_LDSW_onまかせ
|
||||
RESET2_ast;
|
||||
FCRAM_RST_ast;
|
||||
|
||||
PM_LDSW_on( );
|
||||
|
||||
wait_ms( 1 );
|
||||
#ifdef _PM_BUG_
|
||||
iic_mcu_write_a_byte( IIC_SLA_PMIC, 0x22, 0xCA ); // バグ持ちPMIC対策 OVP解除
|
||||
#endif
|
||||
|
||||
wait_ms( DELAY_PM_TW_PWUP );
|
||||
|
||||
PM_VDD_on( );
|
||||
wait_ms( DELAY_PM_TW_PWUP );
|
||||
|
||||
PM_VDD50A_on( ); // 液晶電源ではなく、ledとかに使うものです
|
||||
|
||||
wait_ms( DELAY_PM_TW_PWUP );
|
||||
|
||||
PM_VDD_normMode();
|
||||
#ifdef _PM_BUG_
|
||||
iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_POW_SAVE, 0x03 ); // バグ持ちPMIC対策 強制PWM
|
||||
#endif
|
||||
if( PM_chk_LDSW( ) == 0 )
|
||||
{
|
||||
return ( ERR_ERR );
|
||||
}
|
||||
FCRAM_RST_neg;
|
||||
PM_reset_neg();
|
||||
RESET2_neg;
|
||||
/*
|
||||
wait_ms( 100 );
|
||||
{
|
||||
// CODEC 不定レジスタ初期化
|
||||
u8 codec_reg_init[3] = { 0,0,0 };
|
||||
iic_mcu_write( IIC_SLA_CODEC, CODEC_REG_PM, 3, codec_reg_init );
|
||||
}
|
||||
*/
|
||||
|
||||
#else
|
||||
// TWL PMIC
|
||||
u8 temp;
|
||||
|
||||
// 電源投入
|
||||
PM_reset_ast();
|
||||
RESET2_ast;
|
||||
FCRAM_RST_ast;
|
||||
|
||||
PM_TEG_PWSW = 1;
|
||||
wait_ms( 160 );
|
||||
PM_TEG_PWSW = 0;
|
||||
|
||||
|
||||
// 残量確認
|
||||
temp = 99;
|
||||
if( temp < 5 )
|
||||
{
|
||||
return ( ERR_ERR );
|
||||
}
|
||||
vreg_ctr[VREG_C_BT_REMAIN] = temp;
|
||||
FCRAM_RST_neg;
|
||||
PM_reset_neg();
|
||||
RESET2_neg;
|
||||
wait_ms( 100 );
|
||||
if( !RESET1_n )
|
||||
{
|
||||
// 起動失敗
|
||||
PM_reset_ast();
|
||||
RESET2_ast;
|
||||
FCRAM_RST_ast;
|
||||
return ( ERR_ERR );
|
||||
}
|
||||
/*
|
||||
{ // CODEC 不定レジスタ初期化
|
||||
u8 codec_reg_init[3] = { 0,0,0 };
|
||||
iic_mcu_write( IIC_SLA_CODEC, CODEC_REG_PM, 3, codec_reg_init );
|
||||
}
|
||||
*/
|
||||
#endif
|
||||
|
||||
return ( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
電源OFFシーケンス
|
||||
todo: 電源異常断の場合
|
||||
======================================================== */
|
||||
err PM_sys_pow_off( )
|
||||
{
|
||||
#ifdef _PMIC_CTR_
|
||||
// PM_BL_set( REG_BIT_CMD_BL_U_OFF | REG_BIT_CMD_BL_L_OFF );
|
||||
// PM_LCD_off( ); // TCOM,VCS OFF も消してきます。
|
||||
|
||||
PM_reset_ast( );
|
||||
RESET2_ast;
|
||||
FCRAM_RST_ast;
|
||||
|
||||
PM_off( );
|
||||
|
||||
PM_LDSW_off( );
|
||||
#else
|
||||
|
||||
if( RESET1_n )
|
||||
{
|
||||
PM_reset_ast();
|
||||
RESET2_ast;
|
||||
FCRAM_RST_ast;
|
||||
PM_TEG_PWSW = 1;
|
||||
wait_ms( 250 );
|
||||
wait_ms( 250 );
|
||||
wait_ms( 250 );
|
||||
PM_TEG_PWSW = 0;
|
||||
}
|
||||
PM_reset_ast();
|
||||
RESET2_ast;
|
||||
FCRAM_RST_ast;
|
||||
|
||||
#endif
|
||||
return ( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
電池の管理
|
||||
|
||||
以下のピンは主にここで操作・監視されます。
|
||||
・PM_BT_AUTH 現状、GPI in
|
||||
・PM_CHARGE_n CCIC /CHG in
|
||||
・PM_CHARGE_ERR_n /FLT in
|
||||
・PM_EXTDC_n /DOK INTP4 in
|
||||
・PM_CHARGE_EN_n /CEN out
|
||||
|
||||
以下の物は関係ありそうですが別のところで主に監視されています。
|
||||
・LED_Pow R, B, Charge tsk_LED
|
||||
・BT_TEMP,_P tsk_ADC
|
||||
|
||||
PM_EXTDCは割り込みメインにするかも
|
||||
======================================================== */
|
||||
#define INTERVAL_TSK_BATT 250
|
||||
|
||||
void tsk_batt( )
|
||||
{
|
||||
static u8 task_interval = 0;
|
||||
static u8 charge_hys = 0; // ヒステリシスで上限下限を拡張するとき1
|
||||
static bit pm_extdc_old;
|
||||
|
||||
if( task_interval-- != 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
task_interval = (u8)( INTERVAL_TSK_BATT / SYS_INTERVAL_TICK );
|
||||
}
|
||||
|
||||
|
||||
// アダプタ? //
|
||||
if( pm_extdc_old != !PM_EXTDC_n )
|
||||
{
|
||||
pm_extdc_old = !PM_EXTDC_n;
|
||||
if( pm_extdc_old )
|
||||
{
|
||||
set_bit( 1, vreg_ctr[VREG_C_STATUS], REG_BIT_POW_SUPPLY );
|
||||
set_irq( VREG_C_IRQ1, REG_BIT_BT_DC_CONNECT );
|
||||
}
|
||||
else
|
||||
{
|
||||
set_bit( 0, vreg_ctr[VREG_C_STATUS], REG_BIT_POW_SUPPLY );
|
||||
set_irq( VREG_C_IRQ1, REG_BIT_BT_DC_DISC );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// 充電 ///////////////////////////
|
||||
// 温度付きヒステリシス
|
||||
if( vreg_ctr[VREG_C_BT_TEMP] < 0x36 )
|
||||
{
|
||||
charge_hys = 1;
|
||||
}
|
||||
|
||||
if( ( 1 < vreg_ctr[VREG_C_BT_TEMP] )
|
||||
&& ( vreg_ctr[VREG_C_BT_TEMP] < 0x2C ) )
|
||||
{
|
||||
charge_hys = 0;
|
||||
}
|
||||
|
||||
if( ( ( charge_hys == 1 )
|
||||
&& ( 1 < vreg_ctr[VREG_C_BT_TEMP] )
|
||||
&& ( vreg_ctr[VREG_C_BT_TEMP] < 0x2C ) )
|
||||
||
|
||||
( ( charge_hys == 0 )
|
||||
&& ( vreg_ctr[VREG_C_BT_TEMP] < 0x36 ) ) )
|
||||
{
|
||||
#ifndef _MODEL_WM0_
|
||||
BT_CHG_ENABLE(); // 温度範囲OKで充電再開
|
||||
}
|
||||
else
|
||||
{
|
||||
BT_CHG_DISABLE(); // 温度危険! 充電停止
|
||||
#endif
|
||||
}
|
||||
#ifdef _MODEL_WM0_
|
||||
// CHG_ENABLEピンは /WL_RST に配線されているので
|
||||
#endif
|
||||
|
||||
// 充電 //
|
||||
// →割り込み。miscの中でよろしくやってくれている。
|
||||
set_bit( !BT_CHG_n, vreg_ctr[VREG_C_STATUS], REG_BIT_BATT_CHARGE );
|
||||
LED_CHARGE = !BT_CHG_n ? 1 : 0;
|
||||
|
||||
|
||||
// 電池残量 //
|
||||
PM_get_batt_left();
|
||||
|
||||
// dubug monitor
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/*=========================================================
|
||||
extDC割り込み
|
||||
電源OFFから起こす(充電の温度監視のため)のみ
|
||||
普段はポーリング(pm)
|
||||
=========================================================*/
|
||||
__interrupt void intp4_extdc( )
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*=========================================================
|
||||
フタ開け閉め割り込み
|
||||
普段はポーング(misc)
|
||||
=========================================================*/
|
||||
__interrupt void intp5_shell( )
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
|
||||
/*=========================================================
|
||||
旧PMICへのコマンド書き込み
|
||||
=========================================================*/
|
||||
__interrupt void intp6_PM_irq( )
|
||||
{
|
||||
if( system_status.pwr_state == ON )
|
||||
{
|
||||
EI();
|
||||
renge_task_immed_add( ntr_pmic_comm );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
extern u8 temp_debug_3;
|
||||
|
||||
/* ========================================================
|
||||
PMICからの割り込みを受けて、NTR PMIC互換レジスタからリード
|
||||
======================================================== */
|
||||
task_status_immed ntr_pmic_comm( )
|
||||
{
|
||||
static u8 reg_shadow;
|
||||
u8 reg1_old;
|
||||
u8 irq_work = 0;
|
||||
|
||||
reg1_old = reg_shadow;
|
||||
reg_shadow = iic_mcu_read_a_byte( IIC_SLA_CODEC, CODEC_REG_PM );
|
||||
if( iic_mcu_bus_status != ERR_SUCCESS )
|
||||
{
|
||||
return ( ERR_FINISED );
|
||||
}
|
||||
|
||||
DI( );
|
||||
|
||||
// バックライト 上 ////////////////////////////////////
|
||||
if( ( ( reg1_old ^ reg_shadow ) & REG_BIT_TWL_REQ_BL_U ) != 0 )
|
||||
{
|
||||
if( ( reg_shadow & REG_BIT_TWL_REQ_BL_U ) == 0 ) // 消えた
|
||||
{
|
||||
// irq_work = REG_BIT_TWL_BL_U_OFF;
|
||||
set_irq( VREG_C_IRQ2, REG_BIT_TWL_BL_U_OFF );
|
||||
}
|
||||
else
|
||||
{
|
||||
// irq_work = REG_BIT_TWL_BL_U_ON;
|
||||
set_irq( VREG_C_IRQ2, REG_BIT_TWL_BL_U_ON );
|
||||
}
|
||||
}
|
||||
|
||||
// バックライト 下
|
||||
if( ( ( reg1_old ^ reg_shadow ) & REG_BIT_TWL_REQ_BL_L ) != 0 )
|
||||
{
|
||||
if( ( reg_shadow & REG_BIT_TWL_REQ_BL_L ) == 0 ) // 消えた
|
||||
{
|
||||
// irq_work = REG_BIT_TWL_BL_L_OFF;
|
||||
set_irq( VREG_C_IRQ2, REG_BIT_TWL_BL_L_OFF );
|
||||
}
|
||||
else
|
||||
{
|
||||
// irq_work = REG_BIT_TWL_BL_L_ON;
|
||||
set_irq( VREG_C_IRQ2, REG_BIT_TWL_BL_L_ON );
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
irq_work &= ~VREG_C_IRQ_MASK2;
|
||||
// set_irq 相当品
|
||||
if( irq_work != 0 )
|
||||
{
|
||||
u8 tot;
|
||||
|
||||
DI();
|
||||
vreg_ctr[ VREG_C_IRQ2 ] |= irq_work;
|
||||
EI();
|
||||
IRQ0_neg; // 一瞬上げてパルスを送り直す
|
||||
tot = 0;
|
||||
while( !IRQ0 && ( ++tot != 0 ) ){;} // O.Dなのでちゃんとあがるのを待つ & IRQ_mcu がLに縛られてると困る(基板不良)
|
||||
IRQ0_ast;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
// バックライト設定
|
||||
// 勝手に消しておく
|
||||
/// 今のところさらに細かくは分けないけど…
|
||||
if( ( reg_shadow & ( REG_BIT_TWL_REQ_BL_U | REG_BIT_TWL_REQ_BL_U ) ) == 0 )
|
||||
{
|
||||
vreg_ctr[ VREG_C_COMMAND2 ] = ( REG_BIT_CMD_BL_U_OFF | REG_BIT_CMD_BL_U_OFF );
|
||||
renge_task_immed_add( tski_PM_BL_set );
|
||||
}
|
||||
#endif
|
||||
|
||||
// offリクエスト //////////////////////////////////////
|
||||
if( ( reg_shadow & REG_BIT_TWL_REQ_OFF_REQ ) != 0 )
|
||||
{
|
||||
set_irq( VREG_C_IRQ2, REG_BIT_TWL_OFF_REQ );
|
||||
}
|
||||
|
||||
// リセットリクエスト /////////////////////////////////
|
||||
if( ( reg_shadow & REG_BIT_TWL_REQ_RST_REQ ) != 0 )
|
||||
{
|
||||
// CODECバグ回避
|
||||
// リセット単品でなかったら無視
|
||||
// codec 修正済↓
|
||||
// if( ( reg1_old ^ reg_shadow ) == REG_BIT_TWL_REQ_RST_REQ )
|
||||
{
|
||||
set_irq( VREG_C_IRQ2, REG_BIT_TWL_RESET_REQ );
|
||||
}
|
||||
}
|
||||
|
||||
// バックライトをマスクして書き戻す
|
||||
EI( );
|
||||
if( ( reg_shadow & ( REG_BIT_TWL_REQ_OFF_REQ | REG_BIT_TWL_REQ_RST_REQ )) != 0 )
|
||||
{
|
||||
reg_shadow &= ~( REG_BIT_TWL_REQ_OFF_REQ | REG_BIT_TWL_REQ_RST_REQ );
|
||||
iic_mcu_write_a_byte( IIC_SLA_CODEC, CODEC_REG_PM, reg_shadow );
|
||||
}
|
||||
return ( ERR_FINISED );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**********************************************************
|
||||
電池残量ICから残量を取得し、レジスタに書き込む。
|
||||
電池残量ICが無い・故障などの時はとりあえず残量99%とする。
|
||||
↑は status_1で確認可能。電源投入時にチェックしています。
|
||||
PM_init()が実行されている必要があります。
|
||||
**********************************************************/
|
||||
static void PM_get_batt_left(){
|
||||
if(( vreg_ctr[ VREG_C_STATUS_1 ] & REG_BIT_GASGAUGE_ERR ) == 0 )
|
||||
{
|
||||
// 電池残量の取得
|
||||
{
|
||||
u8 temp[2];
|
||||
|
||||
iic_mcu_read( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_SOC, 2, temp );
|
||||
|
||||
vreg_ctr[ VREG_C_BT_REMAIN ] = temp[0];
|
||||
vreg_ctr[ VREG_C_BT_REMAIN_FINE ] = temp[1];
|
||||
// todo 閾値を超えたら割り込み
|
||||
}
|
||||
|
||||
vreg_ctr[ VREG_C_BT_VOLTAGE ] = iic_mcu_read_a_byte( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_VCELL );
|
||||
}
|
||||
else
|
||||
{
|
||||
vreg_ctr[ VREG_C_BT_REMAIN ] = 99;
|
||||
}
|
||||
|
||||
// PMIC-NTRに電池残量を教えてあげる
|
||||
iic_mcu_write_a_byte( IIC_SLA_CODEC, CODEC_REG_BT,
|
||||
( vreg_ctr[ VREG_C_BT_REMAIN ] < 5 )? 1 : 0 ); // 1で電池切れ
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**********************************************************
|
||||
command2 液晶系
|
||||
ラッパー的な物。ERR_SUCCESSしか返さないが…
|
||||
**********************************************************/
|
||||
task_status_immed tski_PM_LCD_on()
|
||||
{
|
||||
PM_LCD_on();
|
||||
return( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
task_status_immed tski_PM_LCD_off()
|
||||
{
|
||||
PM_LCD_off();
|
||||
return( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
task_status_immed tski_PM_BL_set()
|
||||
{
|
||||
u8 cmd_BL; // ↓volatileとか付けなくても大丈夫みたい
|
||||
|
||||
do
|
||||
{
|
||||
cmd_BL = vreg_ctr[VREG_C_COMMAND2];
|
||||
PM_BL_set( cmd_BL ); // マスク済み
|
||||
}
|
||||
while( cmd_BL != vreg_ctr[VREG_C_COMMAND2] );
|
||||
vreg_ctr[VREG_C_COMMAND2] = 0;
|
||||
|
||||
return( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,177 @@
|
||||
#ifndef __PM__
|
||||
#define __PM__
|
||||
|
||||
|
||||
#define IIC_SLA_PMIC 0x84
|
||||
#define IIC_SLA_BT_GAUGE 0x6C
|
||||
|
||||
#define VCOM_DEFAULT_T 92
|
||||
#define VCOM_DEFAULT_B 95
|
||||
|
||||
//=========================================================
|
||||
enum PMIC_REG_ADRS
|
||||
{
|
||||
PM_REG_ADRS_VER = 0x00, // verinfo など
|
||||
PM_REG_ADRS_VDD_SYS, // システムが使用する電源
|
||||
PM_REG_ADRS_VDD_LCD, // 液晶電源
|
||||
PM_REG_ADRS_CONT, // /RESET1, LoadSwitch
|
||||
PM_REG_ADRS_BL, // バックライト on/off
|
||||
PM_REG_ADRS_POW_SAVE, // 省電力設定
|
||||
PM_REG_ADRS_POW_DAC1,
|
||||
PM_REG_ADRS_POW_DAC2
|
||||
};
|
||||
|
||||
enum BT_GAUGE_REG_ADRS
|
||||
{
|
||||
BT_GAUGE_REG_VCELL = 0x02, // それぞれ16ビットのため
|
||||
BT_GAUGE_REG_SOC = 0x04,
|
||||
BT_GAUGE_REG_MODE = 0x06,
|
||||
BT_GAUGE_REG_VERSION = 0x08,
|
||||
BT_GAUGE_REG_OCV = 0x0E,
|
||||
BT_GAUGE_REG_RCOMP = 0x0C,
|
||||
BT_GAUGE_REG_LOCK = 0x3E,
|
||||
BT_GAUGE_REG_BT_PARAM = 0x40,
|
||||
BT_GAUGE_REG_COMMAND = 0xFE
|
||||
};
|
||||
|
||||
enum BT_VENDER
|
||||
{
|
||||
BT_VENDER_SHIROBAKO = 0,
|
||||
BT_VENDER_PANA = 3,
|
||||
BT_VENDER_MAXELL = 7
|
||||
};
|
||||
|
||||
|
||||
//=========================================================
|
||||
// CODEC上のPMIC互換レジスタ
|
||||
#define CODEC_REG_PM 0x10
|
||||
#define CODEC_REG_BL 0x11
|
||||
#define CODEC_REG_BT 0x12
|
||||
//#define CODEC_REG_VOL 0x13 // ...都合により、adc.hで定義
|
||||
|
||||
// TWLがSPIでPMICに投げたコマンド
|
||||
#define REG_BIT_TWL_REQ_OFF_REQ ( 1 << 6 )
|
||||
#define REG_BIT_TWL_REQ_RST_REQ ( 1 << 0 )
|
||||
#define REG_BIT_TWL_REQ_BL ( 3 << 2 )
|
||||
|
||||
|
||||
|
||||
|
||||
// 0x03 pw cnt3
|
||||
#define PM_REG_BIT_LDSW ( 1 << 0 )
|
||||
#define PM_REG_BIT_nRST1 ( 1 << 1 )
|
||||
|
||||
// 0x01 pw cnt1
|
||||
#define PM_REG_BIT_VDD 0x0F
|
||||
#define PM_REG_BIT_VDD50A ( 1 << 4 )
|
||||
|
||||
// 0x02 pw cnt2
|
||||
#define PM_REG_BIT_VDDLCD 0x07
|
||||
#define PM_REG_BIT_LCD_VCS ( 0x01 << 4 )
|
||||
#define PM_REG_BIT_LCD_TCOM ( 0x01 << 3 )
|
||||
|
||||
// 0x04 bl cnt
|
||||
#define PM_REG_BIT_BL_U 0x01
|
||||
#define PM_REG_BIT_BL_L 0x02
|
||||
|
||||
|
||||
// 0x05 pow save
|
||||
#define PM_REG_BIT_VDD1P_1R15 0b00000000
|
||||
#define PM_REG_BIT_VDD1P_1R05 0b00001000
|
||||
#define PM_REG_BIT_VDD1P_0R90 0b00100000
|
||||
#define PM_REG_BIT_VDD_AUTO 0b00000111
|
||||
#define PM_REG_BIT_VDD_PWM 0b00000000
|
||||
|
||||
|
||||
#define DELAY_PM_TW_PWUP 16
|
||||
#define DELAY_PM_TSS_50B_AND_TCOM 17
|
||||
#define DELAY_PM_5V_TO_TCOM 17
|
||||
#define DELAY_PM_TCOM_TO_VCS 3
|
||||
#define DELAY_PM_VCS_TO_BL ( 17 + 5 )
|
||||
#define DELAY_PM_LCD_OFF ( 50 + 1 )
|
||||
|
||||
|
||||
//=========================================================
|
||||
extern u8 raw_adc_temperature;
|
||||
|
||||
|
||||
//=========================================================
|
||||
err PM_sys_pow_on( );
|
||||
err PM_sys_pow_off( );
|
||||
err PM_bt_auth( );
|
||||
void PM_init( );
|
||||
err PM_LCD_vcom_set( );
|
||||
|
||||
err PM_LCD_on( );
|
||||
void PM_LCD_off( );
|
||||
err PM_BL_set( u8 );
|
||||
|
||||
task_status_immed PM_bt_temp_update( );
|
||||
task_status_immed tski_vcom_set( );
|
||||
task_status_immed tski_PM_LCD_on();
|
||||
task_status_immed tski_PM_LCD_off();
|
||||
task_status_immed tski_PM_BL_set();
|
||||
|
||||
|
||||
// これを呼ぶ前に、現在温度を教えておく必要があります。
|
||||
#define PM_reset() ( iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_CONT, 0x00 ) )
|
||||
|
||||
|
||||
//=========================================================
|
||||
|
||||
|
||||
// 元栓 //
|
||||
#define PM_LDSW_on() ( iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_CONT, PM_REG_BIT_LDSW ))
|
||||
#define PM_LDSW_off() ( iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_CONT, 0 ))
|
||||
|
||||
|
||||
// システム電源 //
|
||||
#define PM_VDD_on() ( iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_VDD_SYS, PM_REG_BIT_VDD ))
|
||||
#define PM_VDD50A_on() ( iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_VDD_SYS, ( PM_REG_BIT_VDD | PM_REG_BIT_VDD50A )))
|
||||
#define PM_VDD_off() ( iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_VDD_SYS, 0 ))
|
||||
#define PM_off() ( iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_VDD_SYS, 0 ))
|
||||
|
||||
#ifdef _MODEL_CTR_
|
||||
#define PM_VDD_normMode() ( iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_POW_SAVE, PM_REG_BIT_VDD1P_1R15 | PM_REG_BIT_VDD_PWM ))
|
||||
#define PM_VDD_ecoMode() ( iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_POW_SAVE, PM_REG_BIT_VDD1P_0R90 | PM_REG_BIT_VDD_AUTO ))
|
||||
|
||||
#else
|
||||
// 本番チップ待ち
|
||||
#ifdef _PM_BUG_
|
||||
#define PM_VDD_ecoMode() ( iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_POW_SAVE, PM_REG_BIT_VDD1P_0R90 | PM_REG_BIT_VDD_AUTO ))
|
||||
#define PM_VDD_normMode() ( iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_POW_SAVE, PM_REG_BIT_VDD1P_1R10 | PM_REG_BIT_VDD_PWM ))
|
||||
|
||||
#else
|
||||
#define PM_VDD_ecoMode() ( iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_POW_SAVE, PM_REG_BIT_VDD1P_1R05 | PM_REG_BIT_VDD_AUTO ))
|
||||
#define PM_VDD_normMode() ( iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_POW_SAVE, PM_REG_BIT_VDD1P_1R05 | PM_REG_BIT_VDD_PWM ))
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// ほか //
|
||||
#ifdef _PMIC_TWL_
|
||||
#define PM_reset_neg() { PM0.0 = 1; }
|
||||
#define PM_reset_ast() { P0.0 = 0; PM0.0 = 0; }
|
||||
#define PM_chk_LDSW() ( 1 )
|
||||
#else
|
||||
|
||||
#define PM_reset_neg() ( iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_CONT, ( PM_REG_BIT_LDSW | PM_REG_BIT_nRST1 )))
|
||||
#define PM_reset_ast() ( iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_CONT, ( PM_REG_BIT_LDSW )))
|
||||
#define PM_chk_LDSW() ( iic_mcu_read_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_CONT ) & PM_REG_BIT_LDSW )
|
||||
// ↑ 0 だと異常
|
||||
#endif
|
||||
|
||||
|
||||
// 液晶系電源 //
|
||||
#define PM_VDDLCD_on() ( iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_VDD_LCD, PM_REG_BIT_VDDLCD ))
|
||||
#define PM_TCOM_on() ( iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_VDD_LCD, ( PM_REG_BIT_VDDLCD | PM_REG_BIT_LCD_TCOM )))
|
||||
#define PM_VCS_on() ( iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_VDD_LCD, ( PM_REG_BIT_VDDLCD | PM_REG_BIT_LCD_VCS | PM_REG_BIT_LCD_TCOM )))
|
||||
#define PM_TCOM_VCS_off() PM_VDDLCD_on()
|
||||
#define PM_VDDLCD_off() ( iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_VDD_LCD, 0 ) )
|
||||
|
||||
#define PM_set_BL( dat ) ( iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_BL, dat ) )
|
||||
#define PM_set_adc1( dat ) ( iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_POW_DAC1, dat ) )
|
||||
#define PM_set_adc2( dat ) ( iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_POW_DAC2, dat ) )
|
||||
|
||||
|
||||
#endif // __PM__
|
||||
@ -0,0 +1,23 @@
|
||||
#ifndef _pool_h_
|
||||
#define _pool_h_
|
||||
|
||||
|
||||
#include "pedometer.h"
|
||||
|
||||
#define VREG_C_FREE_SIZE 24
|
||||
|
||||
// 空いてるメモリ
|
||||
typedef struct {
|
||||
unsigned short pedo_log[ PEDOMETER_LOG_SIZE ];
|
||||
unsigned char vreg_c_free[ VREG_C_FREE_SIZE ];
|
||||
}st_vreg_c_ext;
|
||||
|
||||
typedef union{
|
||||
st_vreg_c_ext vreg_c_ext;
|
||||
u8 self_update_work[ 256 ]; // 256以上はまとめ書きできない
|
||||
}uni_pool;
|
||||
|
||||
extern uni_pool pool;
|
||||
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,24 @@
|
||||
/********************************************************//*
|
||||
|
||||
むりやりリブート
|
||||
|
||||
ファイル中にインラインアセンブラがあると、
|
||||
そのモジュール全部最適化が聞かなくなるため追い出した
|
||||
|
||||
**********************************************************/
|
||||
#pragma SFR
|
||||
|
||||
#include "incs_loader.h"
|
||||
|
||||
|
||||
void my_reboot(){
|
||||
#asm
|
||||
|
||||
MOV PSW,#06H ; ダミーのPSWをセット
|
||||
MOVW AX,#000d0h ; リセットのベクタ値を取り込んでいます。
|
||||
PUSH PSW
|
||||
PUSH AX ; これでRETIのためのスタックを準備
|
||||
RETI ; これでリセット・ベクタに分岐
|
||||
|
||||
#endasm
|
||||
}
|
||||
@ -0,0 +1,6 @@
|
||||
#ifndef __MYREBOOT__
|
||||
#define __MYREBOOT__
|
||||
|
||||
void my_reboot();
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,359 @@
|
||||
#pragma section @@CODE ROM_CODE
|
||||
#pragma nop
|
||||
#pragma ei
|
||||
#pragma di
|
||||
#pragma sfr
|
||||
|
||||
/******************************************************************************
|
||||
タスクシステム?
|
||||
なるほど、iTRONにはコンフィギュレータがあるはずだ。
|
||||
→作りました
|
||||
ctr_mcu_config.rb 参照。 task_config.hが作成されます。
|
||||
*****************************************************************************/
|
||||
#include "renge.h"
|
||||
#include "renge_task_intval.h"
|
||||
#include "renge_task_immediate.h"
|
||||
#include "..\WDT.h"
|
||||
#include "..\config.h"
|
||||
#include "..\user_define.h"
|
||||
|
||||
|
||||
#define _renge_test_
|
||||
|
||||
//******************************************************************************
|
||||
bit renge_flg_interval;
|
||||
bit renge_task_interval_run_force;
|
||||
bit renge_task_immediate_not_empty;
|
||||
|
||||
u8 system_time;
|
||||
|
||||
|
||||
|
||||
#include "..\bsr_system.h"
|
||||
extern system_status_ system_status;
|
||||
|
||||
|
||||
|
||||
//******************************************************************************
|
||||
static void renge_task_immed_init();
|
||||
static void renge_task_immed_del();
|
||||
|
||||
|
||||
|
||||
//******************************************************************************
|
||||
task_status_immed ( *tasks_immed[ TASK_IMMED_RUN_LIST_MAX ] )();
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
初期化
|
||||
・タスクシステムの動的部分の初期化
|
||||
・インターバルタイマ
|
||||
*****************************************************************************/
|
||||
void renge_init(){
|
||||
renge_task_immed_init();
|
||||
/*
|
||||
イベントタイマのセットなど
|
||||
今回はRTCを流用しているのでコメントアウト
|
||||
#define renge_tick 19xxxxxxx [ms]
|
||||
renge_interval_init(); → RTC_init();
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
システムチックを進める
|
||||
*****************************************************************************/
|
||||
/*
|
||||
void renge_interval(){
|
||||
// RTCがやってくれる
|
||||
→__interrupt void int_rtc_int();
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
コンパイル時に決まっている、インターバル起動のタスク
|
||||
そのうち、逐次起動と混ぜるかもしれない。
|
||||
*****************************************************************************/
|
||||
err renge_task_interval_run(){
|
||||
u8 i;
|
||||
|
||||
// インターバル起動
|
||||
if(( renge_flg_interval == 1 )
|
||||
|| ( renge_task_interval_run_force != 0 )) // todo 統合
|
||||
{
|
||||
renge_task_interval_run_force = 0;
|
||||
renge_flg_interval = 0;
|
||||
for( i = 0; i != TSK_LAST; i += 1 )
|
||||
{
|
||||
tasks[ i ]();
|
||||
// 逐次起動タスクがあったら起動しておく
|
||||
renge_task_immed_run();
|
||||
}
|
||||
}
|
||||
return( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
■逐一起動タスク■
|
||||
|
||||
●task_immed を返す関数。
|
||||
●システムtick、何らかの割り込み(I2C通信完了など)で
|
||||
スリープから復帰したタイミングで実行されます。
|
||||
|
||||
■返値 ERR_FINISED タスクを削除
|
||||
それ以外 次のタイミングでまた実行
|
||||
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
/**************************************
|
||||
**************************************/
|
||||
void renge_task_immed_init(){
|
||||
u8 i;
|
||||
|
||||
for( i = 0; i < TASK_IMMED_RUN_LIST_MAX; i++ ){
|
||||
tasks_immed[ i ] = TSK_IMM_EMPTY_;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**************************************
|
||||
逐次実行タスクの登録
|
||||
割り込み禁止 36us →
|
||||
**************************************/
|
||||
err renge_task_immed_add( task_status* new_task ){
|
||||
u8 i;
|
||||
|
||||
// リストの空きの先頭に登録
|
||||
// 削除したばかりのタスクは、削除マーク(TSK_IMM_DELETED_)となり、空きとは明示的に区別される
|
||||
// 重複登録を避ける
|
||||
for( i = 0; i < TASK_IMMED_RUN_LIST_MAX; i += 1 )
|
||||
{
|
||||
if( tasks_immed[ i ] != TSK_IMM_EMPTY_ )
|
||||
{
|
||||
// 重複登録チェック
|
||||
if( tasks_immed[ i ] == new_task )
|
||||
{
|
||||
// 重複登録はしない
|
||||
NOP();
|
||||
return( ERR_ERR );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 空きを見つけた
|
||||
// もたもたしているうちに割り込み等から割り込まれるのを考慮
|
||||
// 滅多にないはずだが
|
||||
for( ; i < TASK_IMMED_RUN_LIST_MAX; i += 1 )
|
||||
{
|
||||
if( tasks_immed[ i ] == TSK_IMM_EMPTY_ )
|
||||
{
|
||||
tasks_immed[ i ] = new_task;
|
||||
return( ERR_SUCCESS );
|
||||
}
|
||||
}
|
||||
// 割り込まれてタスク登録できなくなった
|
||||
return( ERR_ERR );
|
||||
}
|
||||
}
|
||||
// タスク登録しすぎ(無いはず
|
||||
NOP(); // デバッガで捕まえるため
|
||||
return( ERR_ERR );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**************************************
|
||||
逐次実行タスクの実行
|
||||
**************************************/
|
||||
err renge_task_immed_run(){
|
||||
u8 list_id;
|
||||
u8 last_task_id;
|
||||
|
||||
do{
|
||||
last_task_id = 0xFF;
|
||||
for( list_id = 0; list_id < TASK_IMMED_RUN_LIST_MAX; list_id += 1 ){
|
||||
if( tasks_immed[ list_id ] != TSK_IMM_EMPTY_ ){
|
||||
#ifdef _renge_test_
|
||||
if( tasks_immed[ list_id ] == TSK_IMM_DELETED_ )
|
||||
{
|
||||
NOP();
|
||||
// タスク管理の不備
|
||||
// 存在しないタスクを実行しようとした
|
||||
// タスクの削除後の処理がまずい
|
||||
// 予期しないタイミングで immed_run が呼ばれた
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
if( tasks_immed[ list_id ]() == ERR_SUCCESS )
|
||||
{
|
||||
tasks_immed[ list_id ] = TSK_IMM_DELETED_;
|
||||
}
|
||||
last_task_id = list_id;
|
||||
}
|
||||
}
|
||||
#ifdef _renge_test_
|
||||
else
|
||||
{
|
||||
list_id += 1;
|
||||
for( ; list_id < TASK_IMMED_RUN_LIST_MAX; list_id++ )
|
||||
{
|
||||
if( tasks_immed[ list_id ] != TSK_IMM_EMPTY_ )
|
||||
{
|
||||
NOP(); // ?
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
// タスク削除
|
||||
{
|
||||
if( last_task_id != 0xFF )
|
||||
{
|
||||
u8 i,j;
|
||||
|
||||
#ifdef _renge_test_
|
||||
if ( tasks_immed[ 1 ] != 0 ){
|
||||
NOP();
|
||||
}
|
||||
#endif
|
||||
// リスト前詰め
|
||||
|
||||
i = 0; // 前詰め後リストの最後尾
|
||||
j = 1; // リストの後ろの方のタスクを探す
|
||||
for( ; j < TASK_IMMED_RUN_LIST_MAX; j++ )
|
||||
{
|
||||
DI();
|
||||
if( tasks_immed[ i ] == TSK_IMM_DELETED_ )
|
||||
{
|
||||
if( tasks_immed[ j ] == TSK_IMM_EMPTY_ )
|
||||
{
|
||||
// リストの最後だった
|
||||
for( ; i < j ; i += 1 )
|
||||
{
|
||||
tasks_immed[ i ] = TSK_IMM_EMPTY_;
|
||||
}
|
||||
#ifdef _renge_test_
|
||||
/// ほんと?
|
||||
j += 1;
|
||||
for( ; j < TASK_IMMED_RUN_LIST_MAX; j++ )
|
||||
{
|
||||
if( tasks_immed[ j ] != TSK_IMM_EMPTY_ )
|
||||
{
|
||||
NOP(); // ?
|
||||
}
|
||||
}
|
||||
#endif
|
||||
EI();
|
||||
break;
|
||||
}
|
||||
if( tasks_immed[ j ] != TSK_IMM_DELETED_ )
|
||||
{
|
||||
// 探索隊が前詰めすべきタスクを見つけた
|
||||
tasks_immed[ i ] = tasks_immed[ j ];
|
||||
tasks_immed[ j ] = TSK_IMM_DELETED_;
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef _renge_test_
|
||||
// タスクが滞留
|
||||
if( tasks_immed[ i ] == TSK_IMM_EMPTY_ )
|
||||
{
|
||||
NOP();
|
||||
// そんなはずない
|
||||
}
|
||||
#endif
|
||||
i += 1;
|
||||
}
|
||||
EI();
|
||||
if( tasks_immed[ i ] == TSK_IMM_EMPTY_ )
|
||||
{
|
||||
#ifdef _renge_test_
|
||||
NOP();
|
||||
#endif
|
||||
break;
|
||||
// リストの最後だった
|
||||
}
|
||||
}
|
||||
DI();
|
||||
|
||||
// ここまでで完全に前詰めされている
|
||||
for( j = 0; j < TASK_IMMED_RUN_LIST_MAX; j++ )
|
||||
{
|
||||
if( tasks_immed[ j ] == TSK_IMM_EMPTY_ )
|
||||
{
|
||||
#ifdef _renge_test_
|
||||
NOP();
|
||||
j += 1;
|
||||
for( ; j < TASK_IMMED_RUN_LIST_MAX; j++ )
|
||||
{
|
||||
if( tasks_immed[ j ] != TSK_IMM_EMPTY_ )
|
||||
{
|
||||
NOP(); // ?
|
||||
}
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
// リストの最後
|
||||
}
|
||||
if( tasks_immed[ j ] == TSK_IMM_DELETED_ )
|
||||
{
|
||||
tasks_immed[ j ] = TSK_IMM_EMPTY_;
|
||||
}
|
||||
}
|
||||
EI();
|
||||
}
|
||||
}
|
||||
}
|
||||
#if 0
|
||||
while( last_task_id != 0xFF ); // タスクが残っていたら延々再実行
|
||||
#else
|
||||
while( 0 );
|
||||
#endif
|
||||
|
||||
if( last_task_id != 0xFF )
|
||||
{
|
||||
// まだタスクが残ってる(また呼んでね)
|
||||
return( ERR_ERR );
|
||||
}
|
||||
|
||||
return( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
単位は ms
|
||||
NOPを回すだけ、指定時間CPUを *占有します* 。
|
||||
割り込みとか入るとその分遅れます。
|
||||
少し誤差あります。
|
||||
*****************************************************************************/
|
||||
void wait_ms( u8 ms ){
|
||||
u16 fine;
|
||||
|
||||
WDT_Restart();
|
||||
// まだ適当です!
|
||||
while( ms != 0 ){
|
||||
ms--;
|
||||
#ifdef _OVERCLOCK_
|
||||
fine = 860;
|
||||
#else
|
||||
fine = 430;
|
||||
#endif
|
||||
while( fine != 0 ){
|
||||
fine -= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,32 @@
|
||||
#ifndef __renge__
|
||||
#define __renge__
|
||||
|
||||
//******************************************************************************
|
||||
|
||||
|
||||
|
||||
//******************************************************************************
|
||||
#include "renge_defs.h"
|
||||
#include "renge_task_immediate.h"
|
||||
// #include "renge_task_interval_run.h" // ŠO‚©‚ç‹<E280B9>§‹N“®‹ÖŽ~<7E>I
|
||||
|
||||
|
||||
//******************************************************************************
|
||||
void renge_init();
|
||||
void renge_task_immed_init();
|
||||
err renge_task_immed_run();
|
||||
err renge_task_immed_add( task_immed );
|
||||
// static err renge_task_immed_del( u8 );
|
||||
|
||||
void wait_ms( u8 );
|
||||
|
||||
|
||||
|
||||
//******************************************************************************
|
||||
err renge_task_interval_run();
|
||||
extern bit renge_task_interval_run_force;
|
||||
extern bit renge_flg_interval;
|
||||
|
||||
extern u8 system_time;
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,56 @@
|
||||
#ifndef __renge_defs__
|
||||
#define __renge_defs__
|
||||
/******************************************************************************
|
||||
Renge Ver.0 (2009/04/09)
|
||||
2009- 7k4jhl R.Fujita @ RED.nintendo
|
||||
|
||||
OSにはほど遠い、簡易的なタスクシステム。
|
||||
Range の Typo ではないです。レンゲです。
|
||||
|
||||
なんと レンゲ は俗称で日本名は ゲンゲ
|
||||
小さいけど役に立つ役草です。
|
||||
大きく育ってね!
|
||||
******************************************************************************/
|
||||
|
||||
typedef unsigned char u8;
|
||||
typedef signed char s8;
|
||||
typedef unsigned short u16;
|
||||
typedef signed short s16;
|
||||
|
||||
typedef unsigned char err;
|
||||
|
||||
|
||||
|
||||
// ************************************
|
||||
#define SYS_INTERVAL_TICK 1.953
|
||||
|
||||
|
||||
|
||||
// ************************************
|
||||
typedef enum{
|
||||
ERR_SUCCESS = 0,
|
||||
ERR_ERR
|
||||
}ERR;
|
||||
|
||||
|
||||
typedef enum{
|
||||
ERR_FINISED = 0,
|
||||
ERR_CONTINUE
|
||||
}IMMED_TASK_ERR;
|
||||
|
||||
|
||||
|
||||
/**************************************
|
||||
インターバル起動
|
||||
*************************************/
|
||||
typedef void task_status;
|
||||
|
||||
|
||||
/**************************************
|
||||
逐一起動のタスクリスト
|
||||
廃止になるかもしれないが
|
||||
*************************************/
|
||||
typedef IMMED_TASK_ERR task_status_immed;
|
||||
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,60 @@
|
||||
#!/usr/bin/ruby -Ks
|
||||
|
||||
tasklist = Array.new
|
||||
|
||||
|
||||
if( ARGV[0] == nil )
|
||||
printf( "既定ファイル renge_tasks.txt を使用します" )
|
||||
datfile = "renge_tasks.txt"
|
||||
else
|
||||
datfile = ARGV[0]
|
||||
end
|
||||
|
||||
if( !File.exist?( datfile ) )
|
||||
printf("設定ファイルが見つかりません。")
|
||||
exit( 1 )
|
||||
end
|
||||
|
||||
|
||||
setting = File.open( datfile )
|
||||
|
||||
setting.each{|dat|
|
||||
dat.chomp!
|
||||
if( dat != nil )
|
||||
tasklist << dat
|
||||
end
|
||||
}
|
||||
|
||||
tasklist.each{|dat|
|
||||
printf( "\n%s" , dat )
|
||||
}
|
||||
printf( "\n----------\nタスク数 %d \n", tasklist.size )
|
||||
|
||||
|
||||
#----- 静的タスクの列挙 -------------------------------------------------------
|
||||
conf = File.new( "renge_task_intval.h", "w+" )
|
||||
|
||||
conf << "/*スクリプトによる自動生成です。手動で書き換えない方がよいです*/\n\n"
|
||||
conf << "#ifndef __renge_task__\n#define __renge_task__\n\n"
|
||||
conf << "#include \"renge_defs.h\"\n\n"
|
||||
|
||||
conf << "enum {\n "
|
||||
tasklist.each{|dat|
|
||||
conf << "TSK_" << dat.upcase << ", "
|
||||
}
|
||||
conf << "TSK_LAST \n };\n\n"
|
||||
|
||||
|
||||
tasklist.each{|dat|
|
||||
conf << "extern void tsk_" << dat << "();\n"
|
||||
}
|
||||
conf << "\n"
|
||||
|
||||
conf << "static const task_status ( *tasks[ TSK_LAST ] )() = {\n"
|
||||
tasklist.each{|dat|
|
||||
conf << " tsk_" << dat << ",\n"
|
||||
}
|
||||
conf << " };\n"
|
||||
|
||||
|
||||
conf << "\n\n#endif\n"
|
||||
@ -0,0 +1,26 @@
|
||||
#ifndef __tasks__
|
||||
#define __tasks__
|
||||
|
||||
#include "renge_defs.h"
|
||||
|
||||
// *************************************
|
||||
#define TASK_IMMED_RUN_LIST_MAX 8
|
||||
|
||||
|
||||
extern task_status_immed do_command0( );
|
||||
extern task_status_immed ntr_pmic_comm();
|
||||
extern task_status_immed acc_read();
|
||||
extern task_status_immed acc_write();
|
||||
extern task_status_immed tski_mcu_info_read();
|
||||
//extern task_status_immed acc_hosu_set();
|
||||
extern task_status_immed tski_mcu_reset();
|
||||
|
||||
|
||||
|
||||
// *************************************
|
||||
#define TSK_IMM_EMPTY_ ( void * )( 0x0000 )
|
||||
#define TSK_IMM_DELETED_ ( void * )( 0x0001 )
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,39 @@
|
||||
/*スクリプトによる自動生成です。手動で書き換えない方がよいです*/
|
||||
|
||||
#ifndef __renge_task__
|
||||
#define __renge_task__
|
||||
|
||||
#include "renge_defs.h"
|
||||
|
||||
enum {
|
||||
TSK_SW, TSK_ADC, TSK_BATT, TSK_LED_POW, TSK_LED_WIFI, TSK_LED_NOTIFY, TSK_LED_CAM, TSK_MISC_STAT, TSK_DEBUG, TSK_DEBUG2, TSK_SYS, TSK_LAST
|
||||
};
|
||||
|
||||
extern void tsk_sw();
|
||||
extern void tsk_adc();
|
||||
extern void tsk_batt();
|
||||
extern void tsk_led_pow();
|
||||
extern void tsk_led_wifi();
|
||||
extern void tsk_led_notify();
|
||||
extern void tsk_led_cam();
|
||||
extern void tsk_misc_stat();
|
||||
extern void tsk_debug();
|
||||
extern void tsk_debug2();
|
||||
extern void tsk_sys();
|
||||
|
||||
static const task_status ( *tasks[ TSK_LAST ] )() = {
|
||||
tsk_sw,
|
||||
tsk_adc,
|
||||
tsk_batt,
|
||||
tsk_led_pow,
|
||||
tsk_led_wifi,
|
||||
tsk_led_notify,
|
||||
tsk_led_cam,
|
||||
tsk_misc_stat,
|
||||
tsk_debug,
|
||||
tsk_debug2,
|
||||
tsk_sys,
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,11 @@
|
||||
sw
|
||||
adc
|
||||
batt
|
||||
led_pow
|
||||
led_wifi
|
||||
led_notify
|
||||
led_cam
|
||||
misc_stat
|
||||
debug
|
||||
debug2
|
||||
sys
|
||||
@ -0,0 +1,180 @@
|
||||
/* ========================================================
|
||||
RTC
|
||||
======================================================== */
|
||||
#pragma sfr
|
||||
#pragma inline
|
||||
|
||||
|
||||
#include "incs.h"
|
||||
|
||||
|
||||
|
||||
// ========================================================
|
||||
u8 rtc_work[7];
|
||||
bit rtc_lock;
|
||||
bit rtc_dirty;
|
||||
bit rtc_alarm_dirty;
|
||||
|
||||
/* ========================================================
|
||||
ペリフェラルの初期化
|
||||
レジスタの電池交換ビットのセット
|
||||
======================================================== */
|
||||
void RTC_init( void )
|
||||
{
|
||||
|
||||
if( !RTCEN ) // ビットが立っていたらリブート
|
||||
{
|
||||
RTCEN = 1; // モジュールON
|
||||
|
||||
// RTC設定
|
||||
RTCC0 = 0b00001000; /* 動作停止、24時間制、32k出力「まだなし」、定周期割り込みなし */
|
||||
RTCC1 = 0b11000000; /* アラーム割り込み有効&動作開始 */
|
||||
RTCC2 = 0b10000000; /* インターバル:32k/2^6=2ms、RTCDIV出力なし */
|
||||
|
||||
SEC = 0x00;
|
||||
MIN = 0x00;
|
||||
HOUR = 0x15;
|
||||
DAY = 0x01;
|
||||
WEEK = 0x00;
|
||||
MONTH = 0x11;
|
||||
YEAR = 0x09;
|
||||
|
||||
ALARMWW = 0x7F;
|
||||
|
||||
vreg_ctr[VREG_C_MCU_STATUS] |= REG_BIT_RTC_BLACKOUT;
|
||||
}
|
||||
// 割り込み設定
|
||||
RTCIF = 0;
|
||||
RTCIIF = 0;
|
||||
RTCMK = 1; /* 割り込み(定周期)禁止 */
|
||||
RTCIMK = 0; /* 割り込み(アラーム&インターバル)許可 */
|
||||
|
||||
RTCE = 1; /* 動作開始 */
|
||||
|
||||
RWAIT = 1;
|
||||
while( !RWST )
|
||||
{;
|
||||
}
|
||||
RWAIT = 0;
|
||||
|
||||
rtc_lock = 0;
|
||||
rtc_dirty = 0;
|
||||
rtc_alarm_dirty = 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
RTC アラーム割り込み
|
||||
2^6/fXT(1.953125 ms)
|
||||
======================================================== */
|
||||
__interrupt void int_rtc( )
|
||||
{
|
||||
// 日付も指定日で
|
||||
if( ( vreg_ctr[VREG_C_RTC_ALARM_DAY] == DAY )
|
||||
&& ( vreg_ctr[VREG_C_RTC_ALARM_MONTH] == MONTH )
|
||||
&& ( vreg_ctr[VREG_C_RTC_ALARM_YEAR] == YEAR ) )
|
||||
{
|
||||
if( ( vreg_ctr[VREG_C_IRQ_MASK1] & REG_BIT_RTC_ALARM ) == 0 )
|
||||
{
|
||||
vreg_ctr[VREG_C_IRQ1] |= REG_BIT_RTC_ALARM;
|
||||
IRQ0_ast;
|
||||
// マスクをしてあったら、電源を入れません
|
||||
if(( system_status.pwr_state == BT_CHARGE ) ||
|
||||
( system_status.pwr_state == OFF ))
|
||||
{
|
||||
system_status.poweron_reason = RTC_ALARM;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
RTC のリード
|
||||
レジスタは、sec,min,hour,week,day,month,year の順
|
||||
======================================================== */
|
||||
void rtc_buf_reflesh( )
|
||||
{
|
||||
if( rtc_lock == 0 )
|
||||
{
|
||||
rtc_lock = 1;
|
||||
RWAIT = 1;
|
||||
while( !RWST )
|
||||
{;
|
||||
}
|
||||
|
||||
memcpy( &vreg_ctr[VREG_C_RTC_SEC], &SEC, 7 );
|
||||
RWAIT = 0;
|
||||
// renge_task_immed_add( tski_rtc_close );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
RTC のライト
|
||||
set_rtc_close と対で使って下さい。
|
||||
こいつはバッファにコピーするだけで、
|
||||
実際にRTCにセットするのはset_rtc_close()です。
|
||||
======================================================== */
|
||||
void set_rtc( u8 adrs, u8 data )
|
||||
{
|
||||
if( rtc_dirty == 0 )
|
||||
{
|
||||
rtc_dirty = 1;
|
||||
memcpy( rtc_work, &SEC, 7 );
|
||||
// renge_task_immed_add( tski_rtc_close ); // I2C終了時に行う
|
||||
}
|
||||
rtc_work[adrs] = data;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
必要ならば、RTCレジスタの更新
|
||||
======================================================== */
|
||||
// task_status_immed tski_rtc_close(){
|
||||
void rtc_unlock( )
|
||||
{
|
||||
// リードロック
|
||||
// if( rtc_lock != 0 ){
|
||||
rtc_lock = 0;
|
||||
// }
|
||||
|
||||
// ライトロック
|
||||
if( rtc_dirty != 0 )
|
||||
{
|
||||
rtc_dirty = 0;
|
||||
RWAIT = 1;
|
||||
while( !RWST )
|
||||
{;
|
||||
}
|
||||
memcpy( &SEC, rtc_work, 7 );
|
||||
RWAIT = 0;
|
||||
}
|
||||
|
||||
// アラームセット
|
||||
if( rtc_alarm_dirty )
|
||||
{
|
||||
WALE = 0;
|
||||
ALARMWM = vreg_ctr[VREG_C_RTC_ALARM_MIN];
|
||||
ALARMWH = vreg_ctr[VREG_C_RTC_ALARM_HOUR];
|
||||
rtc_dirty = 0;
|
||||
WALE = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
RTC システムチックタイマ割り込みベクタ
|
||||
2^6/fXT(1.953125 ms)
|
||||
======================================================== */
|
||||
__interrupt void int_rtc_int( )
|
||||
{
|
||||
renge_flg_interval = 1;
|
||||
}
|
||||
@ -0,0 +1,21 @@
|
||||
#ifndef __rtc_h__
|
||||
#define __rtc_h__
|
||||
|
||||
|
||||
void RTC_init( void );
|
||||
void rtc_buf_reflesh( );
|
||||
void set_rtc( );
|
||||
|
||||
//task_status_immed tski_rtc_close();
|
||||
void rtc_unlock( );
|
||||
|
||||
// ------------------------------------
|
||||
#define RTC_32k_on() { RCLOE0 = 1; }
|
||||
#define RTC_32k_off() { RCLOE0 = 0; }
|
||||
|
||||
|
||||
// ------------------------------------
|
||||
extern bit rtc_alarm_dirty;
|
||||
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,402 @@
|
||||
/* ========================================================
|
||||
自己アップデータ
|
||||
======================================================== */
|
||||
#pragma SFR
|
||||
#pragma di
|
||||
#pragma ei
|
||||
#pragma nop
|
||||
#pragma stop
|
||||
#pragma halt
|
||||
|
||||
|
||||
#include "incs_loader.h"
|
||||
|
||||
#include <fsl.h>
|
||||
#include "fsl_user.h"
|
||||
#include "i2c_ctr.h"
|
||||
|
||||
|
||||
|
||||
// ========================================================
|
||||
const u8 fsl_fx_MHz_u08 = 8;
|
||||
const u8 fsl_low_voltage_u08 = 1;
|
||||
|
||||
|
||||
// 自己フラッシュパラメータ
|
||||
#define SAM_BLOCK_SIZE 1024
|
||||
#define SELF_UPDATE_BUFF_SIZE 256
|
||||
#define SELF_UPDATE_SPLIT_WRITE_NUM ( SAM_BLOCK_SIZE / SELF_UPDATE_BUFF_SIZE )
|
||||
#define SAM_WORD_SIZE 4
|
||||
|
||||
// ↓ブロック番号(1ブロック=1kB)
|
||||
#define INACTIVE_BOOTSECT_TOP 4
|
||||
#define FIRM_TOP 8
|
||||
#define FIRM_SIZE 12
|
||||
#define UPDATE_BLOCK_LAST ( FIRM_TOP + FIRM_SIZE - 1 )
|
||||
|
||||
|
||||
#ifdef _MCU_BSR_
|
||||
|
||||
|
||||
#define ACKD ACKD1
|
||||
#define ACKE ACKE1
|
||||
#define COI COI1
|
||||
#define IICAEN IICA1EN
|
||||
#define IICAPR0 IICAPR10
|
||||
#define IICRSV IICRSV1
|
||||
#define IICA IICA1
|
||||
#define IICAIF IICAIF1
|
||||
#define IICAMK IICAMK1
|
||||
#define IICAPR1 IICAPR11
|
||||
#define IICCTL0 IICCTL01
|
||||
#define IICE IICE1
|
||||
#define IICF IICF1
|
||||
#define IICS IICS1
|
||||
#define IICWH IICWH1
|
||||
#define IICWL IICWL1
|
||||
#define LREL LREL1
|
||||
#define SPD SPD1
|
||||
#define SPIE SPIE1
|
||||
#define STCEN STCEN1
|
||||
#define STD STD1
|
||||
#define SVA SVA1
|
||||
#define WREL WREL1
|
||||
#define WTIM WTIM1
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
// ========================================================
|
||||
static void FSL_Open( void );
|
||||
static void FSL_Close( void );
|
||||
err firm_restore( );
|
||||
|
||||
static err my_FSL_Init();
|
||||
static err firm_duplicate( __far u8 * p_rom, u8 block_dest );
|
||||
|
||||
|
||||
|
||||
// ========================================================
|
||||
extern u16 pool[];
|
||||
|
||||
|
||||
// 0.D以降 新アップデータ向け
|
||||
#define N_MGC_L 0x1FF6
|
||||
#define N_MGC_T 0x4FF6
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
I2Cで受信して、
|
||||
書き込み、
|
||||
チェックOK → 新ファームに切り替えて再起動
|
||||
NG → 旧(現)ファームに戻して再起動
|
||||
(この関数からは戻りません)
|
||||
======================================================== */
|
||||
err firm_update( )
|
||||
{
|
||||
u8 target_block;
|
||||
u8 split_write_count; // ブロックへちまちま書き込むカウンタ
|
||||
|
||||
// 書き替え前準備 /////////////////////////////////////
|
||||
my_FSL_Init();
|
||||
|
||||
/* ファームのバックアップ
|
||||
0x2000 - 0x4FFF を
|
||||
0x5000 - 0x7FFF (ブロック 20 - 31) にコピー
|
||||
*/
|
||||
firm_duplicate( ( __far u8 * ) 0x2000,
|
||||
( 0x5000 / 0x0400 ) );
|
||||
|
||||
// 全ブロック削除 /////////////////////////////////////
|
||||
// 電源断を判定するため、最初に全クラスタ消去する
|
||||
//(新ファームが書かれるところに残ってる、以前のファームのフッタを消したい)
|
||||
for( target_block = INACTIVE_BOOTSECT_TOP;
|
||||
target_block <= UPDATE_BLOCK_LAST;
|
||||
target_block += 1 )
|
||||
{
|
||||
FSL_Erase( target_block );
|
||||
}
|
||||
|
||||
// 書き替え ///////////////////////////////////////////
|
||||
// ●ストップコンディションが来るまで続ける
|
||||
// ●終わったら、スタートアップルーチンに飛ぶ
|
||||
for( target_block = INACTIVE_BOOTSECT_TOP;
|
||||
target_block <= UPDATE_BLOCK_LAST;
|
||||
target_block += 1 )
|
||||
{
|
||||
// 新ファーム領域削除
|
||||
FSL_Erase( target_block );
|
||||
|
||||
// 分割書き込み
|
||||
for( split_write_count = 0;
|
||||
( ( split_write_count < SELF_UPDATE_SPLIT_WRITE_NUM )
|
||||
&& ( !SPD ) );
|
||||
split_write_count += 1 )
|
||||
{
|
||||
u8* p_buffer = pool;
|
||||
u8 buffer_fill = 0;
|
||||
|
||||
WDT_Restart( );
|
||||
|
||||
// I2Cから書き込みデータをバッファにためる
|
||||
do
|
||||
{
|
||||
while( !IICAIF && !SPD ){;}
|
||||
IICAIF = 0;
|
||||
*p_buffer = IICA;
|
||||
WREL = 1;
|
||||
p_buffer += 1;
|
||||
buffer_fill += 1;
|
||||
}
|
||||
while( ( buffer_fill != ( u8 ) SELF_UPDATE_BUFF_SIZE ) && !SPD );
|
||||
|
||||
// 書き込み
|
||||
// 最後だと、ゴミをパディングするが別にかまわない
|
||||
if( FSL_Write( ( fsl_u32 ) ( target_block * SAM_BLOCK_SIZE
|
||||
+
|
||||
split_write_count *
|
||||
SELF_UPDATE_BUFF_SIZE ),
|
||||
( fsl_u08 ) ( SELF_UPDATE_BUFF_SIZE / SAM_WORD_SIZE ) )
|
||||
|
||||
!= FSL_OK )
|
||||
{
|
||||
// 書き込み後のチェックエラー
|
||||
// リブートののち、リストア
|
||||
// FSL_ForceReset(); // リセット
|
||||
FSL_SwapBootCluster( );
|
||||
// FSL_Close( );
|
||||
return ( ERR_ERR );
|
||||
}
|
||||
|
||||
}
|
||||
// 1ブロック書き込み完了。内部ベリファイを行う
|
||||
if( FSL_IVerify( target_block ) != FSL_OK ){
|
||||
// todo 再度消去→書き込み ベリファイを繰り返すだけじゃダメでした...
|
||||
NOP();
|
||||
}
|
||||
|
||||
if( SPD )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
LREL = 1;
|
||||
|
||||
// 書き込んだファームのチェック //
|
||||
{
|
||||
u8 i;
|
||||
u8 comp = 0;
|
||||
|
||||
// ローダーのマジックと、本文の末尾のマジックは同じか確認
|
||||
for( i = 0; i < sizeof( __TIME__ ); i++ )
|
||||
{
|
||||
comp += ( *( u8 * ) ( N_MGC_L + i ) == *( u8 * ) ( N_MGC_T + i ) ) ? 0 : 1;
|
||||
}
|
||||
if( comp == 0 )
|
||||
{
|
||||
FSL_InvertBootFlag( );
|
||||
FSL_SwapBootCluster( ); // リセットせずに頭から。FSL_Closeは不要
|
||||
// FSL_ForceReset(); // リセット
|
||||
// FSL_SwapActiveBootCluster(); // ←スワップされてしまうので、続けられず暴走!
|
||||
// 戻ってこない //
|
||||
}
|
||||
else
|
||||
{
|
||||
// データエラー
|
||||
// リブートののち、リストア
|
||||
// FSL_ForceReset(); // リセット
|
||||
FSL_SwapBootCluster( );
|
||||
// FSL_Close( );
|
||||
// 戻ってこない //
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
■ファームをバックアップ領域からリストアします。
|
||||
チェック後、最後の最後でブートスワップするので、
|
||||
ここではブートスワップは不要です。
|
||||
|
||||
======================================================== */
|
||||
err firm_restore( )
|
||||
{
|
||||
my_FSL_Init();
|
||||
|
||||
/* ファームのリストア
|
||||
0x4800 - 0x7FFF (ブロック 18 - 27) から
|
||||
0x2000 - 0x47FF (ブロック 8 - 17) へコピー
|
||||
*/
|
||||
firm_duplicate( ( __far u8 * ) 0x5000,
|
||||
FIRM_TOP );
|
||||
|
||||
// todo
|
||||
// リストア失敗したら、LEDちかちかとかさせて、サービス送りにしてもらう
|
||||
|
||||
// リブート
|
||||
// スワップは不要です!
|
||||
FSL_SwapBootCluster();
|
||||
// FSL_ForceReset( );
|
||||
return ( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// ========================================================
|
||||
static void FSL_Open( void )
|
||||
{
|
||||
/* save the configuration of the interrupt controller and set */
|
||||
#ifdef FSL_INT_BACKUP
|
||||
fsl_MK0L_bak_u08 = MK0L; /* if (interrupt backup required) */
|
||||
fsl_MK0H_bak_u08 = MK0H; /* { */
|
||||
fsl_MK1L_bak_u08 = MK1L; /* */
|
||||
fsl_MK1H_bak_u08 = MK1H; /* save interrupt controller */
|
||||
fsl_MK2L_bak_u08 = MK2L; /* configuration */
|
||||
fsl_MK2H_bak_u08 = MK2H; /* */
|
||||
MK0L = FSL_MK0L_MASK; /* */
|
||||
MK0H = FSL_MK0H_MASK; /* */
|
||||
MK1L = FSL_MK1L_MASK; /* prepare interrupt controller */
|
||||
MK1H = FSL_MK1H_MASK; /* for selfprogramming */
|
||||
MK2L = FSL_MK2L_MASK; /* */
|
||||
MK2H = FSL_MK2H_MASK; /* } */
|
||||
#endif
|
||||
|
||||
// 何か前準備?
|
||||
// todo DMAを止める
|
||||
while( DST1 ){;}
|
||||
DEN1 = 0;
|
||||
|
||||
MK0 = 0xFFFF;
|
||||
MK1 = 0xFFFF;
|
||||
MK2 = 0xFFFF;
|
||||
|
||||
FSL_FLMD0_HIGH; // フラッシュ書き替え許可
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* leave the "user room" and restore previous conditions */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
static void FSL_Close( void )
|
||||
{
|
||||
// 何か後始末?
|
||||
|
||||
FSL_FLMD0_LOW; // フラッシュライトプロテクト
|
||||
|
||||
#ifdef FSL_INT_BACKUP
|
||||
MK0L = fsl_MK0L_bak_u08; /* do{ */
|
||||
MK0H = fsl_MK0H_bak_u08; /* restore interrupt controller */
|
||||
MK1L = fsl_MK1L_bak_u08; /* configuration */
|
||||
MK1H = fsl_MK1H_bak_u08; /* */
|
||||
MK2L = fsl_MK2L_bak_u08; /* */
|
||||
MK2H = fsl_MK2H_bak_u08; /* } */
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
マイコン内でファームをコピーします。
|
||||
__far u8 * p_rom コピー元の先頭アドレス
|
||||
block_dest コピー先の先頭ブロック
|
||||
|
||||
コピー先に書けるようにmy_FSL_Initをあらかじめ実行する必要があります。
|
||||
======================================================== */
|
||||
static err firm_duplicate( __far u8 * p_rom,
|
||||
u8 block_dest )
|
||||
{
|
||||
u8 target_block;
|
||||
u8 split_write_count; // ブロックへちまちま書き込むカウンタ
|
||||
|
||||
// 書き込み先ブロックの数だけ繰り返す
|
||||
for( target_block = block_dest;
|
||||
target_block < block_dest + FIRM_SIZE;
|
||||
target_block += 1 )
|
||||
{
|
||||
WDT_Restart( );
|
||||
// ブロック消去
|
||||
while( FSL_BlankCheck( target_block ) != FSL_OK )
|
||||
{
|
||||
FSL_Erase( target_block );
|
||||
}
|
||||
|
||||
// 分割書き込み分繰り返す
|
||||
for( split_write_count = 0;
|
||||
split_write_count < SELF_UPDATE_SPLIT_WRITE_NUM;
|
||||
split_write_count += 1 )
|
||||
{
|
||||
u8 buffer_fill;
|
||||
u8* p_buff;
|
||||
|
||||
// 書き込みデータをバッファにためる
|
||||
buffer_fill = 0;
|
||||
p_buff = pool;
|
||||
do
|
||||
{
|
||||
*p_buff = *p_rom;
|
||||
p_rom += 1;
|
||||
p_buff += 1;
|
||||
buffer_fill +=1;
|
||||
}
|
||||
while( buffer_fill != ( u8 ) SELF_UPDATE_BUFF_SIZE );
|
||||
|
||||
// 書き込み
|
||||
if( FSL_Write( ( fsl_u32 ) ( target_block * SAM_BLOCK_SIZE
|
||||
+
|
||||
split_write_count *
|
||||
SELF_UPDATE_BUFF_SIZE ),
|
||||
( fsl_u08 ) ( SELF_UPDATE_BUFF_SIZE / SAM_WORD_SIZE ) )
|
||||
!= FSL_OK )
|
||||
{
|
||||
FSL_Close( );
|
||||
return ( ERR_ERR );
|
||||
}
|
||||
}
|
||||
|
||||
// 1ブロック書き込み完了。内部電圧チェックを行う
|
||||
while( FSL_IVerify( target_block ) != FSL_OK ){
|
||||
// todo
|
||||
;
|
||||
}
|
||||
}
|
||||
return( ERR_SUCCESS );
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
======================================================== */
|
||||
static err my_FSL_Init()
|
||||
{
|
||||
RTCE = 0;
|
||||
|
||||
// 書き替え前準備 //
|
||||
DI( );
|
||||
FSL_Open( ); // 割り込み禁止など
|
||||
|
||||
FSL_Init( pool ); // ライブラリ初期化。割り込み中断考慮せず
|
||||
FSL_ModeCheck( ); // ライトプロテクトチェック。失敗することを考慮せず
|
||||
|
||||
return( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
task_status_immed tski_mcu_reset()
|
||||
{
|
||||
// 普通に再起動
|
||||
my_FSL_Init();
|
||||
FSL_Close( );
|
||||
// FSL_SwapBootCluster();
|
||||
FSL_ForceReset(); // リセット
|
||||
|
||||
// 保険? //
|
||||
WDTE = 0xAA; // WDTで再起動(テスト向け)
|
||||
return( ERR_SUCCESS ); // no reach
|
||||
}
|
||||
@ -0,0 +1,9 @@
|
||||
#ifndef _self_flash_h_
|
||||
#define _self_flash_h_
|
||||
|
||||
|
||||
void firm_update();
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
@ -0,0 +1,189 @@
|
||||
#pragma SFR
|
||||
#pragma NOP
|
||||
#pragma HALT
|
||||
#pragma STOP
|
||||
|
||||
#include "incs.h"
|
||||
|
||||
#include "i2c_twl.h"
|
||||
#include "i2c_ctr.h"
|
||||
#include "led.h"
|
||||
#include "accero.h"
|
||||
#include "pm.h"
|
||||
#include "rtc.h"
|
||||
|
||||
|
||||
|
||||
//=========================================================
|
||||
#define INTERVAL_TSK_SW 16
|
||||
#define CLICK_THRESHOLD 1
|
||||
#define HOLD_THREASHOLD (u8)( 600 / INTERVAL_TSK_SW )
|
||||
|
||||
|
||||
|
||||
//=========================================================
|
||||
u8 SW_pow_count, SW_home_count, SW_wifi_count;
|
||||
bit SW_pow_mask, SW_home_mask, SW_wifi_mask;
|
||||
|
||||
bit SW_HOME_n;
|
||||
|
||||
|
||||
//=========================================================
|
||||
// 押した時間を数える。押しっぱなしでも0に戻らない
|
||||
// maskが非0の時は、一度離すまで無視する
|
||||
#define count_sw_n( sw, counter, mask ) \
|
||||
{ \
|
||||
if( sw ){ \
|
||||
mask = 0; \
|
||||
counter = 0; \
|
||||
}else{ \
|
||||
if( mask != 0 ){ \
|
||||
counter = 0; \
|
||||
}else{ \
|
||||
counter += 1; \
|
||||
if( counter == 0 ) counter = 255; \
|
||||
} \
|
||||
} \
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
スイッチの監視
|
||||
チャタリングをはねたり、長押しや、押したトリガなどの検出など
|
||||
======================================================== */
|
||||
void tsk_sw( )
|
||||
{
|
||||
static u8 cnt_force_off = 0;
|
||||
static u8 task_interval = 0;
|
||||
|
||||
switch ( system_status.pwr_state )
|
||||
{
|
||||
case ( OFF_TRIG ):
|
||||
SW_pow_count = 0;
|
||||
SW_wifi_count = 0;
|
||||
SW_home_count = 0;
|
||||
cnt_force_off = 0;
|
||||
break;
|
||||
|
||||
case ( ON_TRIG ):
|
||||
// 電源投入
|
||||
SW_pow_mask = 1;
|
||||
SW_home_mask = 1;
|
||||
SW_wifi_mask = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
if( task_interval-- != 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
task_interval = (u8)( INTERVAL_TSK_SW / SYS_INTERVAL_TICK );
|
||||
}
|
||||
|
||||
|
||||
switch ( system_status.pwr_state )
|
||||
{
|
||||
case ( ON ):
|
||||
case ( SLEEP ):
|
||||
case ( BT_CHARGE ):
|
||||
case ( OFF ):
|
||||
// 電源スイッチの監視 //
|
||||
if( SW_POW_n )
|
||||
{
|
||||
if( ( CLICK_THRESHOLD < SW_pow_count ) && ( SW_pow_count <= HOLD_THREASHOLD ) )
|
||||
{
|
||||
#ifdef _SW_HOME_ENABLE_
|
||||
set_irq( VREG_C_IRQ0, REG_BIT_SW_POW_CLICK );
|
||||
#else
|
||||
set_irq( VREG_C_IRQ0, REG_BIT_SW_HOME_CLICK );
|
||||
#endif
|
||||
}
|
||||
}
|
||||
else if( SW_pow_count == HOLD_THREASHOLD )
|
||||
{
|
||||
#ifdef _SW_HOME_ENABLE_
|
||||
set_irq( VREG_C_IRQ0, REG_BIT_SW_POW_HOLD );
|
||||
#else
|
||||
set_irq( VREG_C_IRQ0, REG_BIT_SW_HOME_HOLD );
|
||||
#endif
|
||||
}
|
||||
else if( SW_pow_count == (u8)( 1000 / INTERVAL_TSK_SW ))
|
||||
{ // todo
|
||||
vreg_ctr[ VREG_C_LED_POW ] = LED_POW_ILM_ONLY_RED;
|
||||
system_status.pwr_state = OFF_TRIG;
|
||||
renge_task_interval_run_force = 1;
|
||||
}
|
||||
|
||||
// 電源OFF割り込みを入れたが…
|
||||
if( ( vreg_ctr[VREG_C_IRQ0] & REG_BIT_SW_POW_HOLD ) != 0 )
|
||||
{
|
||||
cnt_force_off += 1;
|
||||
if( cnt_force_off >= 13 )
|
||||
{ // …返事がない。強制的に切る。
|
||||
vreg_ctr[ VREG_C_LED_POW ] = LED_POW_ILM_ONLY_RED;
|
||||
system_status.pwr_state = OFF_TRIG;
|
||||
renge_task_interval_run_force = 1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
cnt_force_off = 0;
|
||||
}
|
||||
|
||||
// HOME スイッチ //
|
||||
switch( system_status.model )
|
||||
{
|
||||
#ifdef _MODEL_CTR_
|
||||
case( MODEL_JIKKI ):
|
||||
SW_HOME_n = SW_HOME_n_JIKKI;
|
||||
break;
|
||||
#endif
|
||||
case( MODEL_TS_BOARD ):
|
||||
case( MODEL_SHIROBAKO ):
|
||||
SW_HOME_n = SW_HOME_n_TSBOARD;
|
||||
break;
|
||||
default:
|
||||
SW_HOME_n = 1;
|
||||
}
|
||||
|
||||
if( SW_HOME_n )
|
||||
{
|
||||
if( ( CLICK_THRESHOLD < SW_home_count ) && ( SW_home_count <= HOLD_THREASHOLD ) )
|
||||
{
|
||||
set_irq( VREG_C_IRQ0, REG_BIT_SW_HOME_CLICK );
|
||||
}
|
||||
}
|
||||
else if( SW_home_count == HOLD_THREASHOLD )
|
||||
{
|
||||
set_irq( VREG_C_IRQ0, REG_BIT_SW_HOME_HOLD );
|
||||
}
|
||||
|
||||
// wifi sw //
|
||||
if( SW_wifi_count == CLICK_THRESHOLD )
|
||||
{
|
||||
set_irq( VREG_C_IRQ0, REG_BIT_SW_WIFI_CLICK );
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
// ボタン押し時間のカウント
|
||||
/*
|
||||
if( ( system_status.pwr_state == ON )
|
||||
|| ( system_status.pwr_state == OFF )
|
||||
|| ( system_status.pwr_state == BT_CHARGE ) )
|
||||
*/
|
||||
|
||||
{
|
||||
count_sw_n( SW_POW_n, SW_pow_count, SW_pow_mask );
|
||||
#ifdef _SW_HOME_ENABLE_
|
||||
count_sw_n( SW_HOME_n, SW_home_count, SW_home_mask );
|
||||
#endif
|
||||
count_sw_n( SW_WIFI_n, SW_wifi_count, SW_wifi_mask );
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
@ -0,0 +1,7 @@
|
||||
#ifndef _sw_
|
||||
#define _sw_
|
||||
|
||||
extern u8 SW_pow_count, SW_home_count, SW_wifi_count;
|
||||
extern bit SW_pow_mask, SW_home_mask, SW_wifi_mask;
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,110 @@
|
||||
#pragma SFR
|
||||
#pragma NOP
|
||||
#pragma HALT
|
||||
#pragma STOP
|
||||
|
||||
#include "incs.h"
|
||||
#include "renge.h"
|
||||
#include "pm.h"
|
||||
|
||||
#include "accero.h"
|
||||
|
||||
|
||||
/* ========================================================
|
||||
======================================================== */
|
||||
void tsk_debug( )
|
||||
{
|
||||
u8 temp;
|
||||
static u8 count = 0;
|
||||
static u8 task_interval;
|
||||
|
||||
if( system_status.pwr_state == ON_TRIG ){
|
||||
|
||||
#ifdef _MODEL_WM0_
|
||||
PM_CHG_TIMEOUT_DISABLE(); // /WL_RST に配線されています
|
||||
#endif
|
||||
#ifndef _MODEL_CTR_
|
||||
iic_mcu_write_a_byte( IIC_SLA_DCP, 0x08, 0x80 ); // ACR←0x80 揮発モードへ
|
||||
#endif
|
||||
|
||||
/*
|
||||
temp = iic_mcu_read_a_byte( IIC_SLA_8LEDS, IIC_8LEDS_REG_DO );
|
||||
count += 1;
|
||||
iic_mcu_write_a_byte( IIC_SLA_8LEDS, IIC_8LEDS_REG_DO, count );
|
||||
iic_mcu_write_a_byte( IIC_SLA_DBG_MONITOR, 3, count );
|
||||
*/
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
u8 temp_debug_3;
|
||||
|
||||
void tsk_debug2( )
|
||||
{
|
||||
u8 str[4];
|
||||
|
||||
if( ( system_status.pwr_state == ON ) || ( system_status.pwr_state == SLEEP ) )
|
||||
{
|
||||
/*
|
||||
str[3] = vreg_ctr[ VREG_C_FREE0 ];
|
||||
str[2] = vreg_ctr[ VREG_C_FREE1 ];
|
||||
str[1] = vreg_ctr[ VREG_C_STATUS ];
|
||||
str[0] = vreg_ctr[ VREG_C_RTC_SEC ];
|
||||
*/
|
||||
str[3] = vreg_ctr[ VREG_C_SND_VOL ];
|
||||
str[2] = vreg_ctr[ VREG_C_TUNE ];
|
||||
str[1] = vreg_ctr[ VREG_C_ACC_CONFIG ];
|
||||
str[0] = SEC;
|
||||
|
||||
// iic_mcu_write_a_byte( IIC_SLA_DBG_MONITOR, 2, vreg_ctr[ VREG_C_IRQ1 ] );
|
||||
// iic_mcu_write_a_byte( IIC_SLA_DBG_MONITOR, 1, boot_ura );
|
||||
// iic_mcu_write_a_byte( IIC_SLA_DBG_MONITOR, 1, vreg_ctr[ VREG_C_SND_VOL ] );
|
||||
// iic_mcu_write_a_byte( IIC_SLA_DBG_MONITOR, 1, vreg_ctr[ VREG_TUNE ] );
|
||||
// iic_mcu_write_a_byte( IIC_SLA_DBG_MONITOR, 0, vreg_ctr[ VREG_C_ACC_ZH ] );
|
||||
// iic_mcu_write_a_byte( IIC_SLA_DBG_MONITOR, 3, vreg_ctr[ VREG_C_TUNE ] );
|
||||
// iic_mcu_write_a_byte( IIC_SLA_DBG_MONITOR, 2, vreg_ctr[ VREG_C_SND_VOL ] );
|
||||
// iic_mcu_write_a_byte( IIC_SLA_DBG_MONITOR, 1, vreg_ctr[ VREG_C_STATUS ] );
|
||||
// iic_mcu_write_a_byte( IIC_SLA_DBG_MONITOR, 0, vreg_ctr[ VREG_C_ACC_ZH ] );
|
||||
|
||||
iic_mcu_write( IIC_SLA_DBG_MONITOR, 0, 4, &str[0] );
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
#if 0
|
||||
/* ========================================================
|
||||
タスクひな形
|
||||
======================================================== */
|
||||
task_interval tsk_hina( )
|
||||
{
|
||||
switch ( system_status.pwr_state )
|
||||
{
|
||||
case OFF:
|
||||
case ON_TRIG:
|
||||
case ON:
|
||||
case SLEEP_TRIG:
|
||||
case SLEEP:
|
||||
case OFF_TRIG:
|
||||
default:
|
||||
}
|
||||
|
||||
return ( 次の起 ・ョまでのシ ・X ・e ・ tick ・・); // 毎 tic 呼ばれることになります
|
||||
}
|
||||
|
||||
|
||||
// ポインタで何かもらうのは危険な気がしてきた
|
||||
/* このように使う
|
||||
renge_task_immed_add( タスク関数へのポインタ );
|
||||
*/
|
||||
task_status_immed tsk_imm_hina( u8 * arg )
|
||||
{
|
||||
return ( ERR_FINISED );
|
||||
// ERR_FINISED タスクを削除
|
||||
// ERR_CONTINUE 次になんか割り込みなり、ユーザー操作なり、システムチックが
|
||||
// 来たときに再度実行
|
||||
}
|
||||
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,276 @@
|
||||
#pragma SFR
|
||||
#pragma NOP
|
||||
#pragma HALT
|
||||
#pragma STOP
|
||||
|
||||
#include "incs.h"
|
||||
#include "renge.h"
|
||||
#include "pm.h"
|
||||
|
||||
#include "accero.h"
|
||||
#include "adc.h"
|
||||
#include "i2c_mcu.h"
|
||||
|
||||
|
||||
#ifdef _MCU_BSR_
|
||||
#define ACKD ACKD1
|
||||
#define ACKE ACKE1
|
||||
#define COI COI1
|
||||
#define IICAEN IICA1EN
|
||||
#define IICRSV IICRSV1
|
||||
#define IICA IICA1
|
||||
#define IICAIF IICAIF1
|
||||
#define IICAMK IICAMK1
|
||||
#define IICAPR0 IICAPR11
|
||||
#define IICAPR1 IICAPR01
|
||||
#define IICCTL0 IICCTL10
|
||||
#define IICE IICE1
|
||||
#define IICF IICF1
|
||||
#define IICS IICS1
|
||||
#define IICWH IICWH1
|
||||
#define IICWL IICWL1
|
||||
#define LREL LREL1
|
||||
#define SPD SPD1
|
||||
#define SPIE SPIE1
|
||||
#define STCEN STCEN1
|
||||
#define STD STD1
|
||||
#define SVA SVA1
|
||||
#define WREL WREL1
|
||||
#define WTIM WTIM1
|
||||
#define TRC TRC1
|
||||
#define SMC SMC1
|
||||
#define DFC DFC1
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
// ========================================================
|
||||
#define INTERVAL_TSK_MISC_STAT 4
|
||||
|
||||
|
||||
/* ========================================================
|
||||
ステータスレジスタなど
|
||||
======================================================== */
|
||||
void tsk_misc_stat( )
|
||||
{
|
||||
static u8 interval_task_misc_stat = 0;
|
||||
static u8 state_old; // ステータス変化検出→割り込み の為
|
||||
#ifdef _BL_INDEPENDENT_
|
||||
static u8 state2_old;
|
||||
#endif
|
||||
u8 diff;
|
||||
|
||||
if( interval_task_misc_stat != 0 )
|
||||
{
|
||||
interval_task_misc_stat -= 1;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
interval_task_misc_stat = ( INTERVAL_TSK_MISC_STAT / SYS_INTERVAL_TICK );
|
||||
}
|
||||
|
||||
set_bit( SHELL_OPEN, vreg_ctr[VREG_C_STATUS], REG_BIT_ST_SHELL_OPEN );
|
||||
|
||||
// ステータスレジスタ関係 → 割り込み //
|
||||
if( ( system_status.pwr_state == ON ) || ( system_status.pwr_state == SLEEP ) )
|
||||
{
|
||||
// pm.c で、その場で行います。
|
||||
// REG_BIT_LCD_ON/OFF
|
||||
// REG_BIT_BL_ON/OFF
|
||||
// REG_BIT_BT_DC_CONNECT/DISC
|
||||
|
||||
|
||||
diff = vreg_ctr[VREG_C_STATUS] ^ state_old;
|
||||
if( diff != 0 )
|
||||
{
|
||||
state_old = vreg_ctr[VREG_C_STATUS];
|
||||
|
||||
if( diff & REG_BIT_BATT_CHARGE )
|
||||
{
|
||||
// 充電状態に以下略
|
||||
if( vreg_ctr[VREG_C_STATUS] & REG_BIT_BATT_CHARGE )
|
||||
{
|
||||
set_irq( VREG_C_IRQ1, REG_BIT_BT_CHG_START );
|
||||
}
|
||||
else
|
||||
{
|
||||
set_irq( VREG_C_IRQ1, REG_BIT_BT_CHG_STOP );
|
||||
}
|
||||
}
|
||||
|
||||
if( diff & REG_BIT_ST_SHELL_OPEN )
|
||||
{
|
||||
// 蓋の開け閉め
|
||||
if( vreg_ctr[VREG_C_STATUS] & REG_BIT_ST_SHELL_OPEN )
|
||||
{
|
||||
set_irq( VREG_C_IRQ0, REG_BIT_SHELL_OPEN );
|
||||
}
|
||||
else
|
||||
{
|
||||
set_irq( VREG_C_IRQ0, REG_BIT_SHELL_CLOSE );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//#ifdef _MCU_KE3_
|
||||
// KE3では必須です。
|
||||
/* ========================================================
|
||||
加速度センサ割り込みピンがオリジナルマイコンには無いので
|
||||
ポーリングする。
|
||||
歩数計用
|
||||
BSRマイコンはaccero.cで割り込みルーチンからタスク登録します。
|
||||
======================================================== */
|
||||
// 割り込みの取りこぼし?
|
||||
if( ( vreg_ctr[VREG_C_ACC_CONFIG] & 0x03 ) != 0x00 )
|
||||
{
|
||||
if( ACC_VALID )
|
||||
{
|
||||
if( renge_task_immed_add( tsk_cbk_accero ) == ERR_SUCCESS ){
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
}
|
||||
//#endif
|
||||
|
||||
// 割り込みの取りこぼし?
|
||||
if( !PM_IRQ_n ){
|
||||
renge_task_immed_add( ntr_pmic_comm );
|
||||
NOP();
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
逐一起動タスク
|
||||
======================================================== */
|
||||
|
||||
/* ========================================================
|
||||
COMMANDレジスタへの書き込み
|
||||
0なら呼ばれません。ケア不要
|
||||
======================================================== */
|
||||
task_status_immed do_command0( )
|
||||
{
|
||||
// command0 本体電源など
|
||||
if( ( vreg_ctr[VREG_C_COMMAND0] & ( REG_BIT_OFF_REQ | REG_BIT_RESET1_REQ | REG_BIT_FCRAM_RESET_REQ | REG_BIT_RESET2_REQ )) != 0x00 )
|
||||
{
|
||||
if( vreg_ctr[VREG_C_COMMAND0] & REG_BIT_OFF_REQ )
|
||||
{
|
||||
system_status.pwr_state = OFF_TRIG;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( vreg_ctr[VREG_C_COMMAND0] & REG_BIT_RESET1_REQ )
|
||||
{
|
||||
PM_reset_ast( );
|
||||
RESET2_ast;
|
||||
FCRAM_RST_ast;
|
||||
}
|
||||
if( vreg_ctr[VREG_C_COMMAND0] & REG_BIT_FCRAM_RESET_REQ )
|
||||
{
|
||||
FCRAM_RST_ast;
|
||||
}
|
||||
else if( vreg_ctr[VREG_C_COMMAND0] & REG_BIT_RESET2_REQ )
|
||||
{
|
||||
RESET2_ast;
|
||||
}
|
||||
wait_ms( 5 );
|
||||
FCRAM_RST_neg;
|
||||
PM_reset_neg();
|
||||
RESET2_neg;
|
||||
/*
|
||||
// CODEC 不定レジスタ初期化
|
||||
wait_ms( 100 );
|
||||
{
|
||||
u8 codec_reg_init[3] = { 0,0,0 };
|
||||
iic_mcu_write( IIC_SLA_CODEC, CODEC_REG_PM, 3, codec_reg_init );
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
vreg_ctr[VREG_C_COMMAND0] = 0;
|
||||
return ( ERR_FINISED );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
互換向け、TWLアプリへの割り込み
|
||||
仮想レジスタの書き込み時に行います。
|
||||
======================================================== */
|
||||
// task_status_immed do_command1( )
|
||||
|
||||
|
||||
extern u8 iic_burst_state;
|
||||
/* ========================================================
|
||||
デバッグ用にいろいろ読んできます。
|
||||
返値はデータそのもの
|
||||
======================================================== */
|
||||
task_status_immed tski_mcu_info_read()
|
||||
{
|
||||
u8 temp;
|
||||
|
||||
|
||||
if( SPD )
|
||||
{
|
||||
goto end;
|
||||
}
|
||||
|
||||
if( STD )
|
||||
{
|
||||
SPIE = 1;
|
||||
}
|
||||
|
||||
if( IICAIF == 0 )
|
||||
{
|
||||
return( ERR_CONTINUE );
|
||||
}
|
||||
else
|
||||
{
|
||||
IICAIF = 0;
|
||||
}
|
||||
|
||||
switch( iic_burst_state++ ){
|
||||
case( 0 ): // 本体種類識別
|
||||
IICA = (u8)system_status.model;
|
||||
break;
|
||||
|
||||
case( 1 ): // IICがなにかエラーでも知らない。00かFFならエラーの可能性が高い
|
||||
IICA = iic_mcu_read_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_VER );
|
||||
break;
|
||||
|
||||
case( 2 ): // 電池メーカーの識別
|
||||
BT_DET_P = 1;
|
||||
IICA = ( u8 ) ( get_adc( ADC_SEL_BATT_DET ) >> 5 );
|
||||
BT_DET_P = 0;
|
||||
break;
|
||||
|
||||
case( 3 ): // ガスゲージバージョン
|
||||
IICA = iic_mcu_read_a_byte( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_VERSION );
|
||||
break;
|
||||
|
||||
case( 4 ): // LSB
|
||||
IICA = iic_mcu_read_a_byte( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_VERSION + 1 );
|
||||
break;
|
||||
|
||||
default:
|
||||
goto end;
|
||||
}
|
||||
return( ERR_CONTINUE );
|
||||
|
||||
end:
|
||||
LREL = 1;
|
||||
SPIE = 0;
|
||||
IICAMK = 0;
|
||||
iic_burst_state = 0;
|
||||
return( ERR_FINISED );
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,388 @@
|
||||
#pragma SFR
|
||||
#pragma NOP
|
||||
#pragma HALT
|
||||
#pragma STOP
|
||||
|
||||
#include "incs.h"
|
||||
|
||||
#include "i2c_twl.h"
|
||||
#include "i2c_ctr.h"
|
||||
#include "led.h"
|
||||
#include "accero.h"
|
||||
#include "pm.h"
|
||||
#include "rtc.h"
|
||||
#include "sw.h"
|
||||
#include "adc.h"
|
||||
|
||||
|
||||
|
||||
//=========================================================
|
||||
static void chk_emergencyExit();
|
||||
|
||||
|
||||
|
||||
//=========================================================
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
マイコン内部で必要なもの
|
||||
・省電力に入れる
|
||||
system_status.pwr_state == OFF_TRIG で、このタスクが呼ばれると、
|
||||
省電力モードに入ります
|
||||
======================================================== */
|
||||
void tsk_sys( )
|
||||
{
|
||||
static u8 timeout = 0;
|
||||
|
||||
switch ( system_status.pwr_state )
|
||||
{
|
||||
case OFF: //-------------------------------------------------------
|
||||
// スイッチ操作などで割り込みが発生し、スリープが解除されるとここに来ます。
|
||||
|
||||
#ifndef _PARRADIUM_
|
||||
switch ( system_status.poweron_reason )
|
||||
{
|
||||
default:
|
||||
// スイッチで電源on
|
||||
|
||||
if( SW_pow_count != 0 )
|
||||
{
|
||||
timeout = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
timeout += 1;
|
||||
}
|
||||
if( timeout > 127 )
|
||||
{
|
||||
system_status.pwr_state = OFF_TRIG; // スイッチはノイズだった。寝る。
|
||||
renge_task_interval_run_force = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
if( SW_pow_count < 3 )
|
||||
{
|
||||
// もう少しスイッチの様子を見る
|
||||
return;
|
||||
}
|
||||
// 電源投入
|
||||
system_status.poweron_reason = PWSW;
|
||||
break;
|
||||
|
||||
case ( RTC_ALARM ):
|
||||
break;
|
||||
}
|
||||
|
||||
timeout = 0;
|
||||
|
||||
// 電源投入 //
|
||||
iic_mcu_start( );
|
||||
|
||||
// ↓で電池残量ICの起動待ちウェイトなどがあります。
|
||||
PM_init( ); // 電池残量ICの設定
|
||||
|
||||
if( PM_sys_pow_on( ) != ERR_SUCCESS )
|
||||
{ // 電源起動不可エラー
|
||||
renge_task_interval_run_force = 1;
|
||||
iic_mcu_stop( );
|
||||
system_status.pwr_state = OFF_TRIG;
|
||||
return;
|
||||
}
|
||||
PM_CHG_TIMEOUT_ENABLE();
|
||||
// IRQ0_active;
|
||||
|
||||
#else
|
||||
vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_GASGAUGE_ERR;
|
||||
system_status.poweron_reason = PWSW;
|
||||
#endif // _PARADDIUM_
|
||||
|
||||
PM_LCD_vcom_set( ); // LCDの対向電圧値など書き込み
|
||||
#ifdef _PMIC_TWL_
|
||||
PM_TEG_LCD_dis( 0 );
|
||||
#endif
|
||||
|
||||
if( system_status.poweron_reason == PWSW )
|
||||
{
|
||||
// 電源ボタンでのonの時は、LEDを点灯させる
|
||||
vreg_ctr[VREG_C_LED_POW] = LED_POW_ILM_AUTO;
|
||||
}
|
||||
else
|
||||
{
|
||||
// とりあえず、LED消灯状態で起動させる
|
||||
vreg_ctr[VREG_C_LED_POW] = LED_POW_ILM_OFF;
|
||||
// todo?
|
||||
}
|
||||
system_status.pwr_state = ON_TRIG;
|
||||
// ここまで来ると、電源投入確定
|
||||
break;
|
||||
|
||||
case ON_TRIG: //-------------------------------------------------------
|
||||
|
||||
LED_init( );
|
||||
|
||||
PU7 = 0b00011101; // 4:SW_WIFI 3:SW_PWSW 2:PM_IRQ 0:PM_EXTDC_n
|
||||
|
||||
IIC_ctr_Init( );
|
||||
if( ( vreg_ctr[ VREG_C_MCU_STATUS ] & REG_BIT_STATUS_WDT_RESET )
|
||||
/*
|
||||
if( vreg_ctr[ VREG_C_IRQ0 ]
|
||||
| vreg_ctr[ VREG_C_IRQ0 ]
|
||||
| vreg_ctr[ VREG_C_IRQ0 ]
|
||||
| vreg_ctr[ VREG_C_IRQ0 ]
|
||||
*/
|
||||
!= 0 )
|
||||
{
|
||||
set_irq( VREG_C_IRQ0, REG_BIT_IRQ_WDT_RESET );
|
||||
}
|
||||
IIC_twl_Init( );
|
||||
RTC_32k_on( );
|
||||
|
||||
KRM = 0b00000000;
|
||||
|
||||
system_status.poweron_reason = NONE;
|
||||
renge_task_interval_run_force = 1;
|
||||
|
||||
MK0 = INT_MSK0_RSV;
|
||||
MK1 = INT_MSK1_RSV;
|
||||
#ifdef _MCU_BSR_
|
||||
// MK2 = ~( INT_MSK2_IIC_TWL | INT_MSK2_WIFI_TX_BSR | INT_MSK2_CODEC_PMIRQ );
|
||||
// PMK21 = 0; // wifi 使わない
|
||||
PMK6 = 0; // pm_irq
|
||||
#else
|
||||
MK2L = ~INT_MSK2_WIFI_TX_KE3;
|
||||
#endif
|
||||
|
||||
system_status.reboot = 0;
|
||||
system_status.pwr_state = ON;
|
||||
break;
|
||||
|
||||
case ON: //---------------------------------------------
|
||||
// PMICによる強制電源断チェック
|
||||
// デバッガがreset1をアサートすることもある。そのときは全部リセット
|
||||
chk_emergencyExit();
|
||||
|
||||
// SLP監視
|
||||
if( SLP_REQ ){
|
||||
system_status.pwr_state = SLEEP_TRIG;
|
||||
renge_task_interval_run_force = 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case SLEEP_TRIG: //-------------------------------------
|
||||
PM_VDD_ecoMode();
|
||||
system_status.pwr_state = SLEEP;
|
||||
break;
|
||||
|
||||
case SLEEP: //------------------------------------------
|
||||
chk_emergencyExit();
|
||||
// スリープから復帰
|
||||
if( !SLP_REQ ){
|
||||
PM_VDD_normMode();
|
||||
wait_ms( 5 ); // tdly_sw
|
||||
|
||||
#ifdef _MODEL_CTR_
|
||||
SLP_ACK = 1;
|
||||
NOP(); // 適当ウェイト
|
||||
NOP();
|
||||
NOP();
|
||||
NOP();
|
||||
SLP_ACK = 0;
|
||||
#endif
|
||||
|
||||
system_status.pwr_state = ON_TRIG;
|
||||
renge_task_interval_run_force = 1;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case OFF_TRIG: //---------------------------------------
|
||||
// LED消灯を待つ
|
||||
vreg_ctr[VREG_C_LED_POW] = LED_POW_ILM_OFF;
|
||||
if(( LED_duty_pow_H != 0 ) || ( LED_duty_pow_L != 0 ))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
PM_CHG_TIMEOUT_ENABLE();
|
||||
LED_stop( );
|
||||
IIC_ctr_Stop( );
|
||||
IIC_twl_Stop( );
|
||||
RTC_32k_off();
|
||||
|
||||
vreg_ctr[VREG_C_IRQ0] = 0;
|
||||
vreg_ctr[VREG_C_IRQ1] = 0;
|
||||
vreg_ctr[VREG_C_IRQ2] = 0;
|
||||
vreg_ctr[VREG_C_IRQ3] = 0;
|
||||
|
||||
// 電源オン条件の割り込みセット
|
||||
// PWSW KR3 押すとL
|
||||
// BG24 KR4
|
||||
// ふた開け INTP5 閉じるとL
|
||||
// ACアダプタ INTP4 アダプタありでL
|
||||
// RTC
|
||||
|
||||
#ifdef _PMIC_TWL_
|
||||
PM_TEG_LCD_dis( 1 );
|
||||
#endif
|
||||
// IRQ0_deactive;
|
||||
// pullup_off(); ↓
|
||||
{
|
||||
PU5 = 0b00000011; // PM_CHG,PM_CHGERR
|
||||
PU7 = 0b00011001; // SW_WiFi,PWSWI,PM_EXTTDC
|
||||
}
|
||||
|
||||
PM_sys_pow_off( );
|
||||
|
||||
KRM = ( KR_SW_POW ); // Mask ではなく、Modeなのだそうだ。紛らわしい
|
||||
// intp20系は後ほど
|
||||
MK0 = ~( INT_MSK0_EXTDC );
|
||||
MK1 = ~( INT_MSK1_KR | INT_MSK1_RTCALARM | INT_MSK1_RTCINTVAL );
|
||||
MK2L = 0b11111111;
|
||||
|
||||
IF0 = 0;
|
||||
IF1 = 0;
|
||||
IF2 = 0;
|
||||
|
||||
timeout = 0;
|
||||
|
||||
system_status.pwr_state = BT_CHARGE;
|
||||
SW_pow_count = 0;
|
||||
SW_wifi_count = 0;
|
||||
// no break //
|
||||
|
||||
case BT_CHARGE:
|
||||
if( !PM_EXTDC_n )
|
||||
{
|
||||
// アダプタ有り:充電温度監視
|
||||
BT_TEMP_P = 1;
|
||||
|
||||
// 電源on?
|
||||
if( ( SW_pow_count > 3 ) || ( SW_wifi_count > 3 )
|
||||
|| ( system_status.poweron_reason == RTC_ALARM ) )
|
||||
{
|
||||
system_status.pwr_state = OFF; // 若干抵抗有るが...
|
||||
renge_task_interval_run_force = 1;
|
||||
KRMK = 1;
|
||||
return;
|
||||
}
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 省電力へ移行
|
||||
BT_TEMP_P = 0;
|
||||
while( RWST )
|
||||
{;}
|
||||
|
||||
iic_mcu_stop( );
|
||||
|
||||
// 割り込み待ちで寝る //
|
||||
RTCIMK = 1;
|
||||
#ifndef _PARRADIUM_
|
||||
|
||||
#ifdef _MCU_BSR_
|
||||
CKC = 0b00001001;
|
||||
OSMC = 0x00;
|
||||
#endif
|
||||
STOP( );
|
||||
#ifdef _MCU_BSR_
|
||||
OSMC = 0x01;
|
||||
CKC = 0b00001000;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
RTCIMK = 0;
|
||||
// 起きる //
|
||||
|
||||
// 起きる条件は
|
||||
// ・KeyReturn割り込み(電源ボたん)
|
||||
// ・RTCアラーム
|
||||
// ・アダプタ挿抜
|
||||
system_status.pwr_state = OFF; //
|
||||
renge_task_interval_run_force = 1;
|
||||
KRMK = 1;
|
||||
return;
|
||||
}
|
||||
|
||||
default:
|
||||
while( 1 )
|
||||
{
|
||||
NOP( );
|
||||
// あり得ないステート
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*******************************************************//**
|
||||
PMICが電源異常で止めたか確認
|
||||
**********************************************************/
|
||||
static void chk_emergencyExit(){
|
||||
#ifndef _PARRADIUM_
|
||||
static state;
|
||||
|
||||
if( !RESET1_n )
|
||||
{
|
||||
if( PM_chk_LDSW( ) == 0 )
|
||||
{
|
||||
// PMICが異常終了判断をした
|
||||
system_status.pwr_state = OFF_TRIG;
|
||||
renge_task_interval_run_force = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if( state == 0 )
|
||||
{
|
||||
state = 1;
|
||||
// デバッガなりがリセットをかけた
|
||||
iic_mcu_write_a_byte( IIC_SLA_PMIC, PM_REG_ADRS_BL, 0 );
|
||||
vreg_ctr[VREG_C_STATUS] = ( vreg_ctr[VREG_C_STATUS] & 0b10011111 );
|
||||
vreg_ctr[VREG_C_COMMAND0] |= REG_BIT_RESET1_REQ;
|
||||
renge_task_immed_add( do_command0 );
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
state = 0;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
CPUからのスリープ要求
|
||||
ポーリングにしました。
|
||||
======================================================== */
|
||||
/*
|
||||
__interrupt void intp0_slp( )
|
||||
{ // SLP
|
||||
if( SLP_REQ ){
|
||||
system_status.pwr_state = SLEEP_TRIG;
|
||||
}else{
|
||||
system_status.pwr_state = ON_TRIG;
|
||||
if( PM_BL_set() != ERR_SUCCESS ){
|
||||
renge_task_interval_run_force = 1;
|
||||
iic_mcu_stop();
|
||||
system_status.pwr_state = OFF_TRIG;
|
||||
}
|
||||
}
|
||||
renge_task_interval_run_force = 1;
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*******************************************************//**
|
||||
全く意味ないですが、気分的な物で...
|
||||
**********************************************************/
|
||||
task_status_immed tski_firm_update(){
|
||||
firm_update();
|
||||
return( ERR_SUCCESS );
|
||||
}
|
||||
@ -0,0 +1,273 @@
|
||||
#ifndef _USER_DEF_
|
||||
#define _USER_DEF_
|
||||
|
||||
#define IIC_SLV_ADDR_MONITOR 0x6E
|
||||
#define IIC_T_SLAVEADDRESS 0x4A
|
||||
#define IIC_C_SLAVEADDRESS 0x4A
|
||||
|
||||
#define IIC_SLA_DCP 0x50
|
||||
|
||||
#ifdef _debug_
|
||||
|
||||
// 8ドットのLED
|
||||
#define IIC_SLA_8LEDS 0x42
|
||||
#define IIC_8LEDS_REG_DO 1
|
||||
#define IIC_8LEDS_REG_DI 2
|
||||
#define IIC_8LEDS_REG_DIR 3
|
||||
|
||||
// 7セグ 4バイト版
|
||||
#define IIC_SLA_DBG_MONITOR 0x44
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef _debug_led_
|
||||
#define DBG_LED_WIFI_2_on { PM2.4 = 0; P2.4 = 1; }
|
||||
#define DBG_LED_WIFI_2_off { PM2.4 = 1; P2.4 = 0; }
|
||||
#define DBG_LED_WIFI_2_toggle ( P2.4 ^= 1 )
|
||||
|
||||
#else
|
||||
#define DBG_LED_WIFI_2_on ;
|
||||
#define DBG_LED_WIFI_2_off ;
|
||||
#define DBG_LED_WIFI_2_toggle ;
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef _PMIC_TWL_
|
||||
#define PM_TEG_PWSW P7.5 // TEGのみ
|
||||
#define PM_TEG_LCD_dis( val ) ( P7.6 = val ) // TEGのみ
|
||||
|
||||
#else
|
||||
|
||||
#define SLP_ACK P7.7
|
||||
#endif
|
||||
|
||||
|
||||
#define IIC_SLA_CODEC 0xA4
|
||||
#define IIC_SLA_ACCEL 0x30 // ST LIS331DLH
|
||||
|
||||
|
||||
// PMxは0で出力モード
|
||||
|
||||
// SoC
|
||||
#ifdef _MODEL_TEG2_
|
||||
#define IRQ0_ast { P3.0 = 0; PM3.0 = 0; }
|
||||
#define IRQ0_neg { PM3.0 = 1; }
|
||||
#define IRQ0 ( P3.0 )
|
||||
#endif
|
||||
#ifdef _MODEL_WM0_
|
||||
#define IRQ0_ast { P3.0 = 0; PM3.0 = 0; }
|
||||
#define IRQ0_neg { PM3.0 = 1; }
|
||||
#define IRQ0 ( P3.0 )
|
||||
#endif
|
||||
|
||||
#ifdef _MODEL_TS0_
|
||||
#define IRQ0_ast { P7.6 = 0; PM7.6 = 0; }
|
||||
#define IRQ0_neg { PM7.6 = 1; }
|
||||
#define IRQ0 ( P7.6 )
|
||||
#endif
|
||||
#ifdef _MODEL_CTR_
|
||||
#define IRQ0_ast { P7.6 = 0; PM7.6 = 0; }
|
||||
#define IRQ0_neg { PM7.6 = 1; }
|
||||
#define IRQ0 ( P7.6 )
|
||||
#endif
|
||||
|
||||
|
||||
// ↓誤代入防止
|
||||
#define RESET1_n ( P0.0 )
|
||||
|
||||
#if 0 // PM_RESET1~を使う
|
||||
#define RESET1_ast { P0.0 = 0; PM0.0 = 0; }
|
||||
#define RESET1_neg { PM0.0 = 1; }
|
||||
#endif
|
||||
|
||||
#define RESET2_ast { P0.1 = 0; PM0.1 = 0; }
|
||||
#define RESET2_neg { PM0.1 = 1; }
|
||||
|
||||
#ifndef _PARRADIUM_
|
||||
#define SLP_REQ P12.0
|
||||
#else
|
||||
#define SLP_REQ 0
|
||||
#endif
|
||||
|
||||
// FCRAM
|
||||
#ifdef _MODEL_TEG2_
|
||||
#define FCRAM_RST P14.0
|
||||
#define FCRAM_RST_ast { P14.0 = 0; }
|
||||
#define FCRAM_RST_neg { P14.0 = 1; }
|
||||
#endif
|
||||
#ifdef _MODEL_WM0_
|
||||
#define FCRAM_RST P14.0
|
||||
#define FCRAM_RST_ast { P14.0 = 0; }
|
||||
#define FCRAM_RST_neg { P14.0 = 1; }
|
||||
#endif
|
||||
|
||||
#ifdef _MODEL_TS0_
|
||||
#define FCRAM_RST P3.0
|
||||
#define FCRAM_RST_ast { P3.0 = 0; }
|
||||
#define FCRAM_RST_neg { P3.0 = 1; }
|
||||
#endif
|
||||
#ifdef _MODEL_CTR_
|
||||
#define FCRAM_RST P3.0
|
||||
#define FCRAM_RST_ast { P3.0 = 0; }
|
||||
#define FCRAM_RST_neg { P3.0 = 1; }
|
||||
#endif
|
||||
|
||||
|
||||
// CODEC
|
||||
#define PM_IRQ_n P7.2
|
||||
// INTP6
|
||||
|
||||
#ifndef _MODEL_CTR_
|
||||
#define SND_DEPOP_ACT P7.6 = 1
|
||||
#define SND_DEPOP_DEACT P7.6 = 0
|
||||
#else
|
||||
#define SND_DEPOP_ACT ;
|
||||
#define SND_DEPOP_DEACT ;
|
||||
#endif
|
||||
|
||||
// PM
|
||||
#define PM_EXTDC_n P7.0
|
||||
// INTP7
|
||||
//#define BT_TEMP P15.0
|
||||
// ANI8
|
||||
//#define BT_DET P15.1
|
||||
// ANI9
|
||||
#define BT_DET_P P1.6
|
||||
#define BT_TEMP_P P1.7
|
||||
|
||||
|
||||
// 充電せよ(out)
|
||||
#ifdef _PMIC_CTR_
|
||||
#define BT_CHG_ENABLE() ( P4.3 = 0 )
|
||||
#define BT_CHG_DISABLE() ( P4.3 = 1 )
|
||||
#else
|
||||
#define BT_CHG_ENABLE() ( P4.2 = 0 )
|
||||
#define BT_CHG_DISABLE() ( P4.2 = 1 )
|
||||
#endif
|
||||
|
||||
#ifdef PM_CCIC_TIM
|
||||
#define PM_CHG_TIMEOUT_ENABLE() ( P5.0 = 0 )
|
||||
#define PM_CHG_TIMEOUT_DISABLE() ( P5.0 = 1 )
|
||||
#else
|
||||
#define PM_CHG_TIMEOUT_ENABLE() ;
|
||||
#define PM_CHG_TIMEOUT_DISABLE() ;
|
||||
#endif
|
||||
|
||||
// 充電中(in)
|
||||
#define BT_CHG_n P5.1
|
||||
|
||||
#define SW_WIFI_n P7.4
|
||||
// KR4
|
||||
#define SW_POW_n P7.3
|
||||
// KR3
|
||||
#define SW_SEL_n P2.3
|
||||
//#define VOL P2.7
|
||||
// ANI7
|
||||
|
||||
#define SW_HOME_n_JIKKI P20.4
|
||||
// INTP22
|
||||
#define SW_HOME_n_TSBOARD P2.0
|
||||
|
||||
// WiFi
|
||||
#ifndef _TEG_
|
||||
#define WL_TX P20.3 // INTP21
|
||||
#define WL_RX P20.2 // INTP20
|
||||
#else
|
||||
#define WL_TX P20.3 // INTP21
|
||||
#define WL_RX P20.2 // INTP20
|
||||
#endif
|
||||
|
||||
//#define LED_CAM P1.0 // TO02
|
||||
//#define LED_WIFI P1.1 // TO03
|
||||
//#define LED_NOTIFY P1.3 // TO05
|
||||
//#define LED_TUNE P5.2 // SLTO ← TO01
|
||||
//#define LED_POW2 P1.4 // TO06 ( 青 )
|
||||
//#define LED_POW1 P1.5 // TO07 ( 赤 )
|
||||
#define LED_CHARGE P2.4
|
||||
|
||||
|
||||
#define I2C_PU P5.3
|
||||
//#define I2C_M_SDA P3.1 // SDA10
|
||||
//#define I2C_M_SCL P3.2 // SCL10
|
||||
|
||||
//#define I2C_0_SCL P6.0 // IIC_TWL SCL0
|
||||
//#define I2C_0_SDA P6.1 // SDA0
|
||||
|
||||
//#define I2C_1_SCL P20.0 // IIC CTR SCL1
|
||||
//#define I2C_1_SDA P20.1 // SDA1
|
||||
|
||||
//#define 32kHz_O P1.2 // RTCCL
|
||||
//#define 32k_I1 P12.3 // XT1
|
||||
//#define 32k_I2 P12.4 // XT2
|
||||
|
||||
#define DIPSW_0 P4.0 // mini cube ソフトウェアディップスイッチ
|
||||
#define DIPSW_1 P4.1 // mini cube ソフトウェアディップスイッチ
|
||||
|
||||
#ifndef _MODEL_WM0_
|
||||
#define SHELL_OPEN P7.1 // INTP5 ふた開閉 (閉じると?)
|
||||
#else
|
||||
#define SHELL_OPEN 1
|
||||
#endif
|
||||
|
||||
//#define DBG_VR P2.6
|
||||
// ANI6
|
||||
|
||||
#define DBG P14.1
|
||||
|
||||
#ifdef _MODEL_TEG2_
|
||||
#define ACC_VALID P15.2
|
||||
#define ACCEL_INT1 P2.5
|
||||
#endif
|
||||
|
||||
#ifdef _MODEL_TS0_ || _MODEL_CTR_
|
||||
#define ACC_VALID P20.5
|
||||
#define ACCEL_INT1 P2.5
|
||||
#endif
|
||||
|
||||
#ifdef _MODEL_WM0_
|
||||
// テレコになっていたが、センサ側の設定を変えたため、TS0と同じでよい
|
||||
#define ACC_VALID P20.5
|
||||
#define ACCEL_INT1 P2.5
|
||||
#endif
|
||||
|
||||
#ifdef _MODEL_CTR_
|
||||
#define ACC_VALID P20.5
|
||||
#define ACCEL_INT1 P2.5
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
#define DBG_M_n P2.1
|
||||
#define DBG_P_n P2.2
|
||||
|
||||
|
||||
|
||||
#define KR_SW_POW ( 1 << 3 )
|
||||
#define KR_SW_WIFI ( 1 << 4 )
|
||||
|
||||
|
||||
#define INT_MSK0_IIC_M_DMA 0b0001000000000000
|
||||
#define INT_MSK0_SHELL 0b0000000010000000
|
||||
#define INT_MSK0_EXTDC 0b0000000001000000
|
||||
//#define INT_MSK0_SLP 0b0000000000000100 )
|
||||
//#define INT_MSK0_RSV 0b1110111100111011 )
|
||||
#define INT_MSK0_RSV 0b1110111100111111
|
||||
|
||||
#define INT_MSK1_KR 0b0000100000000000
|
||||
#define INT_MSK1_RTCINTVAL 0b0000010000000000
|
||||
#define INT_MSK1_RTCALARM 0b0000001000000000
|
||||
#define INT_MSK1_ADC 0b0000000100000000
|
||||
#define INT_MSK1_IIC_CTR 0b0000000000001000
|
||||
#define INT_MSK1_IIC_MCU 0b0000000000000001
|
||||
#define INT_MSK1_RSV 0b1111000011110110
|
||||
|
||||
#define INT_MSK2_WIFI_TX_KE3 0b00010000
|
||||
#define INT_MSK2L_RSV 0b11101111
|
||||
|
||||
#define INT_MSK2_IIC_TWL ( 0b0000000100000000 )
|
||||
#define INT_MSK2_WIFI_TX_BSR ( 0b0000010000000000 )
|
||||
#define INT_MSK2_CODEC_PMIRQ ( 0b0000000000001000 )
|
||||
#define INT_MSK2_RSV 0b1111101111110111
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,407 @@
|
||||
/* ========================================================
|
||||
|
||||
CTR MCU I2Cレジスタ
|
||||
|
||||
====================================================== */
|
||||
#include "incs.h"
|
||||
#include "vreg_ctr.h"
|
||||
#include "rtc.h"
|
||||
#include "led.h"
|
||||
#include "accero.h"
|
||||
#include "pm.h"
|
||||
|
||||
#include <fsl.h>
|
||||
#include "fsl_user.h"
|
||||
|
||||
extern u8 mcu_info_read(); // task_misc.c
|
||||
|
||||
|
||||
|
||||
// ********************************************************
|
||||
u8 vreg_ctr[VREG_C_ENDMARK_];
|
||||
|
||||
bit irq_readed; // AAA型のため。
|
||||
|
||||
extern bit update;
|
||||
extern u16 pool[];
|
||||
|
||||
|
||||
// ********************************************************
|
||||
extern task_status_immed tski_firm_update();
|
||||
extern task_status_immed tski_mcu_info_read();
|
||||
|
||||
// ********************************************************
|
||||
#ifdef _MCU_BSR_
|
||||
#define IICAMK IICAMK1
|
||||
#endif
|
||||
|
||||
|
||||
// ********************************************************
|
||||
// 非ゼロの初期値の指定が必要なアドレス
|
||||
void vreg_ctr_init( )
|
||||
{
|
||||
vreg_ctr[VREG_C_LED_BRIGHT] = 0xFF;
|
||||
|
||||
#ifdef _PMIC_TWL_
|
||||
vreg_ctr[VREG_C_MCU_VER_MAJOR] = MCU_VER_MAJOR;
|
||||
#else
|
||||
vreg_ctr[VREG_C_MCU_VER_MAJOR] = MCU_VER_MAJOR | 0x10;
|
||||
#endif
|
||||
vreg_ctr[VREG_C_MCU_VER_MINOR] = MCU_VER_MINOR;
|
||||
|
||||
vreg_ctr[VREG_C_VCOM_T] = VCOM_DEFAULT_T;
|
||||
vreg_ctr[VREG_C_VCOM_B] = VCOM_DEFAULT_B;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// ********************************************************
|
||||
// I2C仮想レジスタに書きます。
|
||||
// 引数 adrs は内部アドレス
|
||||
// 書けないアドレスにアクセスした場合、何もしません。
|
||||
// ●書き込んだ結果、I2C_mcu通信が発生する場合、renge_task_immed_add()
|
||||
// を使用しないと、I2C_mcu使用中でエラー終了した場合にリトライしません。
|
||||
void vreg_ctr_write( u8 adrs, u8 data )
|
||||
{
|
||||
if( adrs >= VREG_C_ENDMARK_ )
|
||||
return;
|
||||
|
||||
switch ( adrs )
|
||||
{
|
||||
|
||||
case ( VREG_C_MCU_STATUS ):
|
||||
vreg_ctr[adrs] = data;
|
||||
vreg_twl[ REG_TWL_INT_ADRS_MODE ] = ( ( data & 0xC0 ) >> 6 );
|
||||
break;
|
||||
|
||||
case ( VREG_C_VCOM_T ):
|
||||
case ( VREG_C_VCOM_B ):
|
||||
renge_task_immed_add( tski_vcom_set );
|
||||
vreg_ctr[adrs] = data;
|
||||
break;
|
||||
|
||||
case ( VREG_C_DBG1 ):
|
||||
case ( VREG_C_DBG2 ):
|
||||
vreg_ctr[adrs] = data;
|
||||
break;
|
||||
case ( VREG_C_DBG3 ):
|
||||
vreg_ctr[adrs] = data;
|
||||
if( ( vreg_ctr[VREG_C_DBG1] == 'j' )
|
||||
&& ( vreg_ctr[VREG_C_DBG2] == 'h' )
|
||||
&& ( data == 'l' ) )
|
||||
{
|
||||
renge_task_immed_add( tski_firm_update );
|
||||
IICAMK = 1;
|
||||
}
|
||||
break;
|
||||
|
||||
case ( VREG_C_IRQ_MASK0 ):
|
||||
case ( VREG_C_IRQ_MASK1 ):
|
||||
case ( VREG_C_IRQ_MASK2 ):
|
||||
case ( VREG_C_IRQ_MASK3 ):
|
||||
case ( VREG_C_IRQ_MASK4 ):
|
||||
vreg_ctr[adrs] = data;
|
||||
break;
|
||||
|
||||
case ( VREG_C_COMMAND0 ):
|
||||
vreg_ctr[adrs] |= data;
|
||||
if( data != 0 )
|
||||
{
|
||||
renge_task_immed_add( do_command0 );
|
||||
}
|
||||
break;
|
||||
|
||||
case ( VREG_C_COMMAND2 ):
|
||||
// こちらからの完了割り込みを待ってくれないそうです。 #-ω-) 何のための割り込みだ
|
||||
// 液晶電源
|
||||
if(( data & REG_BIT_CMD_LCD_ON ) != 0 )
|
||||
{
|
||||
renge_task_immed_add( tski_PM_LCD_on );
|
||||
}
|
||||
else if(( data & REG_BIT_CMD_LCD_OFF ) != 0 )
|
||||
{
|
||||
renge_task_immed_add( tski_PM_LCD_off );
|
||||
}
|
||||
|
||||
// バックライト設定
|
||||
/// 今のところさらに細かくは分けないけど…
|
||||
if(( data & REG_BITS_CMD_BL ) != 0 )
|
||||
{
|
||||
vreg_ctr[adrs] = ( data & REG_BITS_CMD_BL );
|
||||
renge_task_immed_add( tski_PM_BL_set );
|
||||
}
|
||||
break;
|
||||
|
||||
case ( VREG_C_COMMAND1 ):
|
||||
if( data != 0 )
|
||||
{
|
||||
// TWLに割り込みを入れる
|
||||
/// 実際に割り込みを入れるのはSoC
|
||||
vreg_twl[REG_TWL_INT_ADRS_IRQ] = ( ( data & REG_BIT_SEND_TWL_PWSW_DET ) != 0 ) ? REG_BIT_TWL_IRQ_PWSW_DET : 0x00; //pwsw_det
|
||||
vreg_twl[REG_TWL_INT_ADRS_IRQ] |= ( ( data & REG_BIT_SEND_TWL_RESET_DET ) != 0 ) ? REG_BIT_TWL_IRQ_RESET : 0x00; //reset_req
|
||||
|
||||
vreg_twl[REG_TWL_INT_ADRS_IRQ] |= ( ( data & REG_BIT_SEND_TWL_OFF_DET ) != 0 ) ? REG_BIT_TWL_IRQ_OFF : 0x00; //off_req
|
||||
|
||||
vreg_twl[REG_TWL_INT_ADRS_IRQ] |= ( ( data & REG_BIT_SEND_TWL_BATT_LOW ) != 0 ) ? REG_BIT_TWL_IRQ_BT_LOW : 0x00; //batt_low
|
||||
vreg_twl[REG_TWL_INT_ADRS_IRQ] |= ( ( data & REG_BIT_SEND_TWL_BATT_EMPTY ) != 0 ) ? REG_BIT_TWL_IRQ_BT_EMPTY : 0x00; //batt_empty
|
||||
|
||||
vreg_twl[REG_TWL_INT_ADRS_IRQ] |= ( ( data & REG_BIT_SEND_TWL_VOL_CLICK ) != 0 ) ? REG_BIT_TWL_IRQ_VOL_CHANGE : 0x00; //vol_changed
|
||||
}
|
||||
break;
|
||||
|
||||
case ( VREG_C_DBG20 ):
|
||||
case ( VREG_C_DBG21 ):
|
||||
case ( VREG_C_DBG22 ):
|
||||
case ( VREG_C_DBG23 ):
|
||||
vreg_ctr[adrs] = data;
|
||||
break;
|
||||
|
||||
case ( VREG_C_FREE_0 ):
|
||||
case ( VREG_C_FREE_1 ):
|
||||
case ( VREG_C_FREE_2 ):
|
||||
case ( VREG_C_FREE_3 ):
|
||||
case ( VREG_C_FREE_4 ):
|
||||
case ( VREG_C_FREE_5 ):
|
||||
case ( VREG_C_FREE_6 ):
|
||||
case ( VREG_C_FREE_7 ):
|
||||
case ( VREG_C_FREE_8 ):
|
||||
case ( VREG_C_FREE_9 ):
|
||||
case ( VREG_C_FREE_A ):
|
||||
case ( VREG_C_FREE_B ):
|
||||
case ( VREG_C_FREE_C ):
|
||||
case ( VREG_C_FREE_D ):
|
||||
case ( VREG_C_FREE_E ):
|
||||
case ( VREG_C_FREE_F ):
|
||||
vreg_ctr[adrs] = data;
|
||||
break;
|
||||
|
||||
case ( VREG_C_LED_BRIGHT ):
|
||||
vreg_ctr[adrs] = data;
|
||||
break;
|
||||
|
||||
case ( VREG_C_LED_POW ):
|
||||
case ( VREG_C_LED_WIFI ):
|
||||
case ( VREG_C_LED_CAM ):
|
||||
case ( VREG_C_LED_TUNE ):
|
||||
case ( VREG_C_LED_NOTIFY ):
|
||||
vreg_ctr[adrs] = data & 0x0F;
|
||||
break;
|
||||
|
||||
/// 非同期で動いているためここでは書かない。
|
||||
// 予約するだけでstopで書く
|
||||
case ( VREG_C_RTC_SEC ):
|
||||
case ( VREG_C_RTC_MIN ):
|
||||
set_rtc( adrs - VREG_C_RTC_SEC, data & 0x7F );
|
||||
break;
|
||||
|
||||
case ( VREG_C_RTC_HOUR ):
|
||||
set_rtc( adrs - VREG_C_RTC_SEC, data & 0x3F );
|
||||
break;
|
||||
|
||||
case ( VREG_C_RTC_YOBI ):
|
||||
set_rtc( adrs - VREG_C_RTC_SEC, data & 0x07 );
|
||||
break;
|
||||
|
||||
case ( VREG_C_RTC_DAY ):
|
||||
set_rtc( adrs - VREG_C_RTC_SEC, data & 0x3F );
|
||||
break;
|
||||
|
||||
case ( VREG_C_RTC_MONTH ):
|
||||
set_rtc( adrs - VREG_C_RTC_SEC, data & 0x1F );
|
||||
break;
|
||||
|
||||
case ( VREG_C_RTC_YEAR ):
|
||||
set_rtc( adrs - VREG_C_RTC_SEC, data );
|
||||
break;
|
||||
|
||||
case ( VREG_C_RTC_COMP ):
|
||||
vreg_ctr[adrs] = data;
|
||||
SUBCUD = data;
|
||||
break;
|
||||
|
||||
case ( VREG_C_RTC_ALARM_MIN ):
|
||||
vreg_ctr[adrs] = ( data & 0x7F );
|
||||
rtc_alarm_dirty = 1;
|
||||
break;
|
||||
|
||||
case ( VREG_C_RTC_ALARM_HOUR ):
|
||||
vreg_ctr[adrs] = ( data & 0x3F );
|
||||
rtc_alarm_dirty = 1;
|
||||
break;
|
||||
|
||||
// 書くだけでよい
|
||||
case ( VREG_C_RTC_ALARM_DAY ):
|
||||
vreg_ctr[adrs] = ( data & 0x3F );
|
||||
break;
|
||||
|
||||
case ( VREG_C_RTC_ALARM_MONTH ):
|
||||
vreg_ctr[adrs] = ( data & 0x1F );
|
||||
break;
|
||||
|
||||
case ( VREG_C_RTC_ALARM_YEAR ):
|
||||
vreg_ctr[adrs] = data;
|
||||
break;
|
||||
|
||||
|
||||
case ( VREG_C_ACC_CONFIG ):
|
||||
vreg_ctr[adrs] = data;
|
||||
renge_task_immed_add( acc_hosu_set );
|
||||
break;
|
||||
|
||||
case ( VREG_C_ACC_R_ADRS ):
|
||||
vreg_ctr[adrs] = data;
|
||||
renge_task_immed_add( acc_read );
|
||||
break;
|
||||
|
||||
case ( VREG_C_ACC_W_ADRS ):
|
||||
vreg_ctr[adrs] = data;
|
||||
break;
|
||||
|
||||
case ( VREG_C_ACC_W_BUF ):
|
||||
vreg_ctr[adrs] = data;
|
||||
renge_task_immed_add( acc_write );
|
||||
break;
|
||||
|
||||
case ( VREG_C_ACC_HOSU_L ):
|
||||
case ( VREG_C_ACC_HOSU_M ):
|
||||
case ( VREG_C_ACC_HOSU_H ):
|
||||
vreg_ctr[adrs] = data;
|
||||
break;
|
||||
|
||||
case ( VREG_C_ACC_HOSU_SETTING ):
|
||||
if( ( data & 0x01 ) != 0 )
|
||||
{
|
||||
clear_hosu_hist(); // 履歴クリア
|
||||
}
|
||||
break;
|
||||
|
||||
case ( VREG_C_COMMAND3 ):
|
||||
vreg_ctr[adrs] = data;
|
||||
switch ( data )
|
||||
{
|
||||
case ( 'r' ):
|
||||
// 割り込みルーチンからFSLライブラリを呼ぶのは禁止のため
|
||||
// renge_task_immed_add( tski_mcu_reset );
|
||||
// break;
|
||||
|
||||
case ( 'w' ):
|
||||
// WDTで再起動(テスト向け)
|
||||
WDTE = 0xAA;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ********************************************************
|
||||
// I2C仮想レジスタから読みます。
|
||||
// 戻り: xx データ
|
||||
// 注意:次のアドレスの準備で呼ばれる ので、
|
||||
// リードされたらクリアなどは気をつける
|
||||
u8 vreg_ctr_read( u8 adrs )
|
||||
{
|
||||
static u16 rsub_temp;
|
||||
|
||||
// RTCは読み出し途中に繰り上がるのを避けるため
|
||||
if( ( VREG_C_RTC_SEC <= adrs ) && ( adrs <= VREG_C_RTC_YEAR ) )
|
||||
{
|
||||
rtc_buf_reflesh( );
|
||||
}
|
||||
else if( adrs == VREG_C_MCU_STATUS )
|
||||
{
|
||||
return( vreg_ctr[ VREG_C_MCU_STATUS ] | ( ( vreg_twl[ REG_TWL_INT_ADRS_MODE ] & 0x03 ) << 6 ) );
|
||||
}
|
||||
else if( adrs == VREG_C_ACC_HOSU_HIST )
|
||||
{
|
||||
return( hosu_read() );
|
||||
}
|
||||
else if( adrs == VREG_C_RTC_SEC_FINE_L )
|
||||
{
|
||||
rsub_temp = RSUBC;
|
||||
return( (u8)( rsub_temp & 0xFF ) );
|
||||
}
|
||||
else if( adrs == VREG_C_RTC_SEC_FINE_H )
|
||||
{
|
||||
return( (u8)( ( rsub_temp >> 8 ) & 0xFF ) );
|
||||
}
|
||||
else if( adrs == VREG_C_INFO )
|
||||
{
|
||||
renge_task_immed_add( tski_mcu_info_read );
|
||||
IICAMK = 1;
|
||||
return( 0x4A );
|
||||
}
|
||||
|
||||
#if 1
|
||||
if( adrs >= VREG_C_ENDMARK_ )
|
||||
{
|
||||
// VREG_C_INFO > VREG_C_ENDMARK_ なので
|
||||
// いじるときは注意
|
||||
return( 0xEE );
|
||||
}
|
||||
#endif
|
||||
return ( vreg_ctr[adrs] );
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ********************************************************
|
||||
// I2C仮想レジスタから読まれて何かするレジスタ
|
||||
void vreg_ctr_after_read( u8 adrs )
|
||||
{
|
||||
|
||||
// 割り込みフラグはリードでクリア
|
||||
switch( adrs )
|
||||
{
|
||||
case VREG_C_IRQ0:
|
||||
case VREG_C_IRQ1:
|
||||
case VREG_C_IRQ2:
|
||||
case VREG_C_IRQ3:
|
||||
case VREG_C_IRQ4:
|
||||
vreg_ctr[ adrs ] = 0;
|
||||
irq_readed = 1;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
割り込みを入れる
|
||||
割り込みマスクが必要と言うことでこんな事をする羽目になりました
|
||||
*****************************************************************************/
|
||||
#if 0
|
||||
// マスクされてたら、フラグは立てるが、割り込みは入れない。
|
||||
#define set_irq( irqreg, bitpos ) \
|
||||
{ \
|
||||
vreg_ctr[ irqreg ] |= bitpos; \
|
||||
if( ( vreg_ctr[ irqreg+8 ] & bitpos ) == 0 ){ \
|
||||
IRQ0_ast; \
|
||||
} \
|
||||
}
|
||||
#endif
|
||||
|
||||
// マスクされてたら、フラグも立てず、割り込みも入れない。
|
||||
void set_irq( u8 irqreg, u8 irq_flg )
|
||||
{
|
||||
u8 tot;
|
||||
|
||||
DI();
|
||||
if( ( vreg_ctr[ irqreg + 8 ] & irq_flg ) == 0 ){
|
||||
vreg_ctr[ irqreg ] |= irq_flg;
|
||||
IRQ0_neg; // 一瞬上げて落とし直す。
|
||||
// EI();
|
||||
tot = 0;
|
||||
while( !IRQ0 && ( ++tot != 0 ) ){;} // O.D.なのでちゃんとあがるのを待つ & IRQ_mcu がLに縛られてると困る(基板不良)
|
||||
IRQ0_ast;
|
||||
}
|
||||
EI();
|
||||
}
|
||||
@ -0,0 +1,272 @@
|
||||
#ifndef __vreg_ctr__
|
||||
#define __vreg_ctr__
|
||||
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#define REG_BIT__SYS_MODE0 0b01000000
|
||||
#define REG_BIT_MCU_FIRMBROKEN 0b10000000
|
||||
|
||||
|
||||
// VREG_C_MCU_STATUS
|
||||
#define REG_BIT_STATUS_WDT_RESET ( 1 << 1 )
|
||||
#define REG_BIT_RTC_BLACKOUT ( 1 << 0 )
|
||||
|
||||
|
||||
// VREG_C_STATUS,
|
||||
#define REG_BIT_LCD_POW ( 1 << 7 )
|
||||
#define REG_BIT_BL_U ( 1 << 6 )
|
||||
#define REG_BIT_BL_L ( 1 << 5 )
|
||||
#define REG_BIT_BATT_CHARGE ( 1 << 4 )
|
||||
#define REG_BIT_POW_SUPPLY ( 1 << 3 )
|
||||
// 未使用 ( 1 << 2 )
|
||||
#define REG_BIT_ST_SHELL_OPEN ( 1 << 1 )
|
||||
// 未使用 ( 1 << 0 )
|
||||
|
||||
|
||||
// VREG_C_STATUS_X
|
||||
// 未使用 ( 1 << 6 )
|
||||
// 未使用 ( 1 << 5 )
|
||||
// 未使用 ( 1 << 4 )
|
||||
// 未使用 ( 1 << 3 )
|
||||
// 未使用 ( 1 << 2 )
|
||||
#define REG_BIT_ACCERO_ERR ( 1 << 1 )
|
||||
#define REG_BIT_GASGAUGE_ERR ( 1 << 0 )
|
||||
|
||||
|
||||
|
||||
// VREG_C_IRQ0
|
||||
#define REG_BIT_VR_SNDVOL_CHANGE ( 1 << 7 )
|
||||
#define REG_BIT_IRQ_WDT_RESET ( 1 << 7 )
|
||||
#define REG_BIT_SHELL_OPEN ( 1 << 6 )
|
||||
#define REG_BIT_SHELL_CLOSE ( 1 << 5 )
|
||||
#define REG_BIT_SW_WIFI_CLICK ( 1 << 4 )
|
||||
#define REG_BIT_SW_HOME_HOLD ( 1 << 3 )
|
||||
#define REG_BIT_SW_HOME_CLICK ( 1 << 2 )
|
||||
#define REG_BIT_SW_POW_HOLD ( 1 << 1 )
|
||||
#define REG_BIT_SW_POW_CLICK ( 1 << 0 )
|
||||
|
||||
// VREG_C_IRQ1
|
||||
#define REG_BIT_BT_CHG_START ( 1 << 7 )
|
||||
#define REG_BIT_BT_CHG_STOP ( 1 << 6 )
|
||||
#define REG_BIT_BT_REMAIN ( 1 << 5 )
|
||||
#define REG_BIT_ACC_DAT_RDY ( 1 << 4 )
|
||||
#define REG_BIT_ACC_ACK ( 1 << 3 )
|
||||
#define REG_BIT_RTC_ALARM ( 1 << 2 )
|
||||
#define REG_BIT_BT_DC_CONNECT ( 1 << 1 )
|
||||
#define REG_BIT_BT_DC_DISC ( 1 << 0 )
|
||||
|
||||
// VREG_C_IRQ2
|
||||
#define REG_BIT_TWL_SNDVOL_CHANGE ( 1 << 6 )
|
||||
#define REG_BIT_TWL_BL_U_ON ( 1 << 5 )
|
||||
#define REG_BIT_TWL_BL_U_OFF ( 1 << 4 )
|
||||
#define REG_BIT_TWL_BL_L_ON ( 1 << 3 )
|
||||
#define REG_BIT_TWL_BL_L_OFF ( 1 << 2 )
|
||||
#define REG_BIT_TWL_OFF_REQ ( 1 << 1 )
|
||||
#define REG_BIT_TWL_RESET_REQ ( 1 << 0 )
|
||||
|
||||
// VREG_C_IRQ3
|
||||
#define REG_BIT_BL_U_ON ( 1 << 5 )
|
||||
#define REG_BIT_BL_U_OFF ( 1 << 4 )
|
||||
#define REG_BIT_BL_L_ON ( 1 << 3 )
|
||||
#define REG_BIT_BL_L_OFF ( 1 << 2 )
|
||||
#define REG_BIT_LCD_ON ( 1 << 1 )
|
||||
#define REG_BIT_LCD_OFF ( 1 << 0 )
|
||||
|
||||
|
||||
// そのうちどこかに...
|
||||
//#define REG_BIT_VR_TUNE_CHANGE ( 1 << 7 )
|
||||
|
||||
|
||||
|
||||
// VREG_C_COMMAND0
|
||||
//#define REG_BIT_CMD_LCD_ON ( 1 << 7 )
|
||||
//#define REG_BIT_CMD_LCD_OFF ( 1 << 6 )
|
||||
//#define REG_BIT_CMD_BL_ON ( 1 << 5 )
|
||||
//#define REG_BIT_CMD_BL_OFF ( 1 << 4 )
|
||||
#define REG_BIT_FCRAM_RESET_REQ ( 1 << 3 )
|
||||
#define REG_BIT_RESET2_REQ ( 1 << 2 )
|
||||
#define REG_BIT_RESET1_REQ ( 1 << 1 )
|
||||
#define REG_BIT_OFF_REQ ( 1 << 0 )
|
||||
|
||||
// VREG_C_COMMAND1 (TWLに割り込みを入れる)
|
||||
// 未使用 ( 1 << 7 )
|
||||
// 未使用 ( 1 << 6 )
|
||||
#define REG_BIT_SEND_TWL_VOL_CLICK ( 1 << 5 )
|
||||
#define REG_BIT_SEND_TWL_BATT_EMPTY ( 1 << 4 )
|
||||
#define REG_BIT_SEND_TWL_BATT_LOW ( 1 << 3 )
|
||||
#define REG_BIT_SEND_TWL_OFF_DET ( 1 << 2 )
|
||||
#define REG_BIT_SEND_TWL_RESET_DET ( 1 << 1 )
|
||||
#define REG_BIT_SEND_TWL_PWSW_DET ( 1 << 0 )
|
||||
|
||||
// VREG_C_COMMAND2 液晶関係
|
||||
#define REG_BIT_CMD_BL_U_ON ( 1 << 5 )
|
||||
#define REG_BIT_CMD_BL_U_OFF ( 1 << 4 )
|
||||
#define REG_BIT_CMD_BL_L_ON ( 1 << 3 )
|
||||
#define REG_BIT_CMD_BL_L_OFF ( 1 << 2 )
|
||||
#define REG_BIT_CMD_LCD_ON ( 1 << 1 )
|
||||
#define REG_BIT_CMD_LCD_OFF ( 1 << 0 )
|
||||
#define REG_BITS_CMD_BL ( REG_BIT_CMD_BL_U_ON | REG_BIT_CMD_BL_U_OFF | REG_BIT_CMD_BL_L_ON | REG_BIT_CMD_BL_L_OFF )
|
||||
|
||||
|
||||
// ↑TWLに通知するIRQレジスタ
|
||||
#define REG_BIT_TWL_IRQ_PWSW_DET 0x08
|
||||
#define REG_BIT_TWL_IRQ_RESET 0x01
|
||||
#define REG_BIT_TWL_IRQ_OFF 0x02
|
||||
#define REG_BIT_TWL_IRQ_BT_LOW 0x20
|
||||
#define REG_BIT_TWL_IRQ_BT_EMPTY 0x10
|
||||
#define REG_BIT_TWL_IRQ_VOL_CHANGE 0x40
|
||||
|
||||
|
||||
// CODEC上のPMIC NTR の代理レジスタ
|
||||
#define REG_BIT_TWL_REQ_OFF ( 1 << 6 )
|
||||
#define REG_BIT_TWL_REQ_BL_U ( 1 << 3 )
|
||||
#define REG_BIT_TWL_REQ_BL_L ( 1 << 2 )
|
||||
#define REG_BIT_TWL_REQ_RESET ( 1 << 0 )
|
||||
|
||||
|
||||
/*
|
||||
テンプレ
|
||||
#define REG_BIT_ ( 1 << 7 )
|
||||
#define REG_BIT_ ( 1 << 6 )
|
||||
#define REG_BIT_ ( 1 << 5 )
|
||||
#define REG_BIT_ ( 1 << 4 )
|
||||
#define REG_BIT_ ( 1 << 3 )
|
||||
#define REG_BIT_ ( 1 << 2 )
|
||||
#define REG_BIT_ ( 1 << 1 )
|
||||
#define REG_BIT_ ( 1 << 0 )
|
||||
*/
|
||||
|
||||
|
||||
|
||||
/*============================================================================*/
|
||||
extern u8 vreg_ctr[];
|
||||
|
||||
/*============================================================================*/
|
||||
enum VREG_C
|
||||
{ // 未定義アドレスへ書き込んだ際の動作は不定
|
||||
VREG_C_MCU_VER_MAJOR = 0x00,
|
||||
VREG_C_MCU_VER_MINOR,
|
||||
VREG_C_MCU_STATUS,
|
||||
|
||||
VREG_C_VCOM_T = 0x03,
|
||||
VREG_C_VCOM_B,
|
||||
|
||||
VREG_C_DBG1 = 0x05,
|
||||
VREG_C_DBG2,
|
||||
VREG_C_DBG3,
|
||||
|
||||
VREG_C_TUNE = 0x08,
|
||||
VREG_C_SND_VOL,
|
||||
VREG_C_BT_TEMP,
|
||||
VREG_C_BT_REMAIN,
|
||||
VREG_C_BT_REMAIN_FINE,
|
||||
VREG_C_BT_VOLTAGE,
|
||||
|
||||
VREG_C_STATUS_1 = 0x0E,
|
||||
VREG_C_STATUS = 0x0F,
|
||||
|
||||
VREG_C_IRQ0 = 0x10,
|
||||
VREG_C_IRQ1,
|
||||
VREG_C_IRQ2,
|
||||
VREG_C_IRQ3,
|
||||
VREG_C_IRQ4,
|
||||
|
||||
VREG_C_IRQ_MASK0 = 0x18,
|
||||
VREG_C_IRQ_MASK1,
|
||||
VREG_C_IRQ_MASK2,
|
||||
VREG_C_IRQ_MASK3,
|
||||
VREG_C_IRQ_MASK4,
|
||||
|
||||
VREG_C_COMMAND0 = 0x20,
|
||||
VREG_C_COMMAND1,
|
||||
VREG_C_COMMAND2,
|
||||
VREG_C_COMMAND3, // 'r' でマイコンリセット
|
||||
|
||||
VREG_C_DBG20 = 0x24,
|
||||
VREG_C_DBG21,
|
||||
VREG_C_DBG22,
|
||||
VREG_C_DBG23,
|
||||
|
||||
VREG_C_LED_BRIGHT = 0x28,
|
||||
VREG_C_LED_POW,
|
||||
VREG_C_LED_WIFI,
|
||||
VREG_C_LED_CAM,
|
||||
VREG_C_LED_TUNE,
|
||||
VREG_C_LED_NOTIFY,
|
||||
|
||||
VREG_C_RTC_SEC = 0x30,
|
||||
VREG_C_RTC_MIN,
|
||||
VREG_C_RTC_HOUR,
|
||||
VREG_C_RTC_YOBI,
|
||||
VREG_C_RTC_DAY,
|
||||
VREG_C_RTC_MONTH,
|
||||
VREG_C_RTC_YEAR,
|
||||
|
||||
VREG_C_RTC_COMP,
|
||||
|
||||
VREG_C_RTC_ALARM_MIN = 0x38,
|
||||
VREG_C_RTC_ALARM_HOUR,
|
||||
VREG_C_RTC_ALARM_DAY,
|
||||
VREG_C_RTC_ALARM_MONTH,
|
||||
VREG_C_RTC_ALARM_YEAR,
|
||||
|
||||
VREG_C_RTC_SEC_FINE_L,
|
||||
VREG_C_RTC_SEC_FINE_H,
|
||||
|
||||
VREG_C_ACC_CONFIG = 0x40,
|
||||
VREG_C_ACC_R_ADRS,
|
||||
VREG_C_ACC_RESERVE,
|
||||
VREG_C_ACC_W_ADRS,
|
||||
VREG_C_ACC_W_BUF,
|
||||
|
||||
VREG_C_ACC_XL = 0x45,
|
||||
VREG_C_ACC_XH,
|
||||
VREG_C_ACC_YL,
|
||||
VREG_C_ACC_YH,
|
||||
VREG_C_ACC_ZL,
|
||||
VREG_C_ACC_ZH,
|
||||
|
||||
VREG_C_ACC_HOSU_L = 0x4B,
|
||||
VREG_C_ACC_HOSU_M,
|
||||
VREG_C_ACC_HOSU_H,
|
||||
VREG_C_ACC_HOSU_SETTING,
|
||||
VREG_C_ACC_HOSU_HIST = 0x4F,
|
||||
|
||||
// VREG_C_AMBIENT_BRIGHTNESS = 0x60,
|
||||
|
||||
// 歩数計の評価のため...
|
||||
VREG_C_FREE_0 = 0x50,
|
||||
VREG_C_FREE_1,
|
||||
VREG_C_FREE_2,
|
||||
VREG_C_FREE_3,
|
||||
VREG_C_FREE_4,
|
||||
VREG_C_FREE_5,
|
||||
VREG_C_FREE_6,
|
||||
VREG_C_FREE_7,
|
||||
VREG_C_FREE_8,
|
||||
VREG_C_FREE_9,
|
||||
VREG_C_FREE_A,
|
||||
VREG_C_FREE_B,
|
||||
VREG_C_FREE_C,
|
||||
VREG_C_FREE_D,
|
||||
VREG_C_FREE_E,
|
||||
VREG_C_FREE_F,
|
||||
|
||||
VREG_C_ENDMARK_
|
||||
};
|
||||
#define VREG_C_INFO 0x7F
|
||||
|
||||
/*
|
||||
VREG_C_PM_INFO, // 未使用
|
||||
VREG_C_BT_INFO, // 未使用
|
||||
*/
|
||||
|
||||
/*============================================================================*/
|
||||
void vreg_ctr_init( );
|
||||
void vreg_ctr_write( u8 adrs, u8 data );
|
||||
u8 vreg_ctr_read( u8 phy_adrs );
|
||||
void vreg_ctr_after_read( u8 adrs );
|
||||
void set_irq( u8 irqreg, u8 irq_flg );
|
||||
|
||||
#endif
|
||||
@ -0,0 +1,146 @@
|
||||
/* ========================================================
|
||||
|
||||
TWL互換側のI2Cレジスタ
|
||||
|
||||
======================================================== */
|
||||
#include "incs.h"
|
||||
#include "jhl_defs.h"
|
||||
#include "vreg_twl.h"
|
||||
|
||||
#include "vreg_ctr.h"
|
||||
#include "renge\renge_task_intval.h"
|
||||
|
||||
// ========================================================
|
||||
#define TWL_REG_VER_INFO 0x35
|
||||
#define NON_EXIST_REG 0xFF
|
||||
|
||||
// ========================================================
|
||||
u8 vreg_twl[_REG_TWL_INT_ADRS_ENDMARK];
|
||||
|
||||
|
||||
/* ========================================================
|
||||
仮想レジスタの初期化
|
||||
======================================================== */
|
||||
void vreg_twl_init( )
|
||||
{
|
||||
vreg_twl[ REG_TWL_INT_ADRS_MODE ] = 0x03;
|
||||
}
|
||||
|
||||
|
||||
// ========================================================
|
||||
// I2C仮想レジスタに書く・何かアクションする
|
||||
// 引数 adrs は内部アドレス
|
||||
// 存在しないアドレスにアクセスした場合、何もしません。
|
||||
void vreg_twl_write( u8 adrs, u8 data )
|
||||
{
|
||||
switch ( adrs )
|
||||
{
|
||||
case ( REG_TWL_INT_ADRS_VOL ):
|
||||
{
|
||||
set_irq( VREG_C_IRQ2, REG_BIT_TWL_SNDVOL_CHANGE );
|
||||
break;
|
||||
}
|
||||
|
||||
case ( REG_TWL_INT_ADRS_MODE ):
|
||||
vreg_twl[adrs] = ( data & 0x03 );
|
||||
break;
|
||||
|
||||
case ( REG_TWL_INT_ADRS_CAM ):
|
||||
vreg_twl[adrs] = ( data & 0x03 );
|
||||
tsk_led_cam(); // todo 大丈夫?
|
||||
break;
|
||||
|
||||
case ( REG_TWL_INT_ADRS_TEMP0 ):
|
||||
vreg_twl[adrs] = data;
|
||||
break;
|
||||
|
||||
case ( REG_TWL_INT_ADRS_COMMAND ):
|
||||
/*
|
||||
if( data <= 2 ){
|
||||
if( ( data & REG_BIT_TWL_OFF_REQ ) != 0 )
|
||||
{
|
||||
set_irq( VREG_C_IRQ2, REG_BIT_TWL_OFF_REQ ); // OFFも実装していたらしい。
|
||||
break;
|
||||
}
|
||||
else if( ( data & REG_BIT_TWL_RESET_REQ ) != 0 )
|
||||
{
|
||||
set_irq( VREG_C_IRQ2, REG_BIT_TWL_RESET_REQ ); //リセットしかない。他のは、SPIから来ます。
|
||||
break;
|
||||
}
|
||||
}
|
||||
*/
|
||||
if( data == REG_BIT_TWL_RESET_REQ )
|
||||
{
|
||||
set_irq( VREG_C_IRQ2, REG_BIT_TWL_RESET_REQ ); //リセットしかない。他のは、SPIから来ます。
|
||||
break;
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ========================================================
|
||||
// I2C仮想レジスタから読みます。
|
||||
// 引数 adrs 外から見たときの、アドレス
|
||||
// 戻り xx データ
|
||||
// 存在しないアドレスにアクセスした場合、戻り値は0x5A
|
||||
u8 vreg_twl_read( u8 phy_adrs )
|
||||
{
|
||||
u8 temp;
|
||||
|
||||
switch( phy_adrs ){
|
||||
case( REG_TWL_INT_ADRS_VER_INFO ):
|
||||
return( TWL_REG_VER_INFO );
|
||||
|
||||
case( REG_TWL_INT_ADRS_POWER_INFO ):
|
||||
if( vreg_ctr[ VREG_C_BT_REMAIN ] > 90 ){
|
||||
vreg_twl[ REG_TWL_INT_ADRS_POWER_INFO ] = 0x0F;
|
||||
}else if( vreg_ctr[ VREG_C_BT_REMAIN ] > 75 ){
|
||||
vreg_twl[ REG_TWL_INT_ADRS_POWER_INFO ] = 0x0B;
|
||||
}else if( vreg_ctr[ VREG_C_BT_REMAIN ] > 50 ){
|
||||
vreg_twl[ REG_TWL_INT_ADRS_POWER_INFO ] = 0x07;
|
||||
}else if( vreg_ctr[ VREG_C_BT_REMAIN ] > 25 ){
|
||||
vreg_twl[ REG_TWL_INT_ADRS_POWER_INFO ] = 0x03;
|
||||
}else if( vreg_ctr[ VREG_C_BT_REMAIN ] > 5 ){
|
||||
vreg_twl[ REG_TWL_INT_ADRS_POWER_INFO ] = 0x01;
|
||||
}else{
|
||||
vreg_twl[ REG_TWL_INT_ADRS_POWER_INFO ] = 0x00;
|
||||
}
|
||||
|
||||
return( vreg_twl[ REG_TWL_INT_ADRS_POWER_INFO ] | ( !BT_CHG_n ? 0x80: 0x00 ) ); // アダプタbit
|
||||
|
||||
case( REG_TWL_INT_ADRS_IRQ ):
|
||||
temp = vreg_twl[ REG_TWL_INT_ADRS_IRQ ];
|
||||
vreg_twl[ REG_TWL_INT_ADRS_IRQ ]= 0;
|
||||
return( temp );
|
||||
|
||||
default:
|
||||
return( vreg_twl[ phy_adrs ] );
|
||||
|
||||
case( REG_TWL_ADRS_NON_EXIST ):
|
||||
return( 0x00 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// ========================================================
|
||||
// 外部から見える虫食いアドレスを、内部の連続アドレスに読み替える
|
||||
// 0xFFは存在しないアドレス。
|
||||
u8 adrs_table_twl_ext2int( u8 img )
|
||||
{
|
||||
switch( img ){
|
||||
case( REG_TWL_ADRS_IRQ ): return( REG_TWL_INT_ADRS_IRQ );
|
||||
case( REG_TWL_ADRS_COMMAND ): return( REG_TWL_INT_ADRS_COMMAND );
|
||||
case( REG_TWL_ADRS_POWER_INFO ): return( REG_TWL_INT_ADRS_POWER_INFO );
|
||||
case( REG_TWL_ADRS_CAM ): return( REG_TWL_INT_ADRS_CAM );
|
||||
case( REG_TWL_ADRS_VOL ): return( REG_TWL_INT_ADRS_VOL );
|
||||
case( REG_TWL_ADRS_TEMP0 ): return( REG_TWL_INT_ADRS_TEMP0 );
|
||||
case( REG_TWL_ADRS_VER_INFO ): return( REG_TWL_INT_ADRS_VER_INFO );
|
||||
case( REG_TWL_ADRS_MODE ): return( REG_TWL_INT_ADRS_MODE );
|
||||
default: return( REG_TWL_ADRS_NON_EXIST );
|
||||
// 0が読めればよい、書けなくて良い
|
||||
// case( REG_TWL_ADRS_WIFI ): return( REG_TWL_INT_ADRS_WIFI );
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,129 @@
|
||||
#ifndef __vreg_twl__
|
||||
#define __vreg_twl__
|
||||
/* ========================================================================= */
|
||||
extern u8 vreg_twl[];
|
||||
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* 外から見たときのマイコンレジスタアドレス。
|
||||
* 拡張性などを考えて飛び飛びにしてある。
|
||||
*/
|
||||
/*
|
||||
* 割り込み要因フラグは
|
||||
* MSB:外部電源供給有り/なし変化 (未実装)
|
||||
* 6:Volキー操作(変更に限らず。MAX時に+でも。)
|
||||
* 5:電池電圧 少 検出
|
||||
* 4: 僅
|
||||
* 3:電源スイッチ 押され検出
|
||||
* 2:(未設定)
|
||||
* 1:電源スイッチ OFF 時間押され検出
|
||||
* LSB: リセット
|
||||
*/
|
||||
enum REG_TWL_ADRS
|
||||
{ // 未定義アドレスへ書き込んだ際は無視
|
||||
REG_TWL_ADRS_VER_INFO = 0x00,
|
||||
REG_TWL_ADRS_PMIC_INFO,
|
||||
REG_TWL_ADRS_BATT_INFO,
|
||||
REG_TWL_ADRS_IRQ = 0x10,
|
||||
REG_TWL_ADRS_COMMAND,
|
||||
REG_TWL_ADRS_MODE,
|
||||
REG_TWL_ADRS_POWER_INFO = 0x20,
|
||||
REG_TWL_ADRS_POWER_SAVE,
|
||||
REG_TWL_ADRS_WIFI = 0x30,
|
||||
REG_TWL_ADRS_CAM,
|
||||
REG_TWL_ADRS_VOL = 0x40,
|
||||
REG_TWL_ADRS_BL,
|
||||
REG_TWL_ADRS_CODEC_MIC_GAIN = 0x50,
|
||||
REG_TWL_ADRS_ADC_CALIB = 0x60,
|
||||
REG_TWL_ADRS_ADC_CALIB_STATUS,
|
||||
REG_TWL_ADRS_ADC_CALIB_VALUE,
|
||||
REG_TWL_ADRS_POWER_LED,
|
||||
REG_TWL_ADRS_TEMP0 = 0x70,
|
||||
REG_TWL_ADRS_TEMP1,
|
||||
REG_TWL_ADRS_TEMP2,
|
||||
REG_TWL_ADRS_TEMP3,
|
||||
REG_TWL_ADRS_TEMP4,
|
||||
REG_TWL_ADRS_TEMP5,
|
||||
REG_TWL_ADRS_TEMP6,
|
||||
REG_TWL_ADRS_TEMP7,
|
||||
REG_TWL_ADRS_TIME_PWSW_DELAY = 0x80,
|
||||
REG_TWL_ADRS_TIME_PWSW_THRESHOLD
|
||||
};
|
||||
|
||||
#define REG_TWL_ADRS_NON_EXIST 0xFF
|
||||
|
||||
/*
|
||||
* マイコン内部でのレジスタの実装
|
||||
* もちろんつめてある
|
||||
*/
|
||||
enum REG_TWL_ADRS_INT
|
||||
{
|
||||
REG_TWL_INT_ADRS_VER_INFO = 0x00,
|
||||
// REG_TWL_INT_ADRS_PMIC_INFO,
|
||||
// REG_TWL_INT_ADRS_BATT_INFO,
|
||||
REG_TWL_INT_ADRS_IRQ, // 0x10,
|
||||
REG_TWL_INT_ADRS_COMMAND,
|
||||
REG_TWL_INT_ADRS_MODE,
|
||||
REG_TWL_INT_ADRS_POWER_INFO, // 0x20,
|
||||
// REG_TWL_INT_ADRS_POWER_SAVE,
|
||||
// REG_TWL_INT_ADRS_WIFI, // 0x30,
|
||||
REG_TWL_INT_ADRS_CAM,
|
||||
REG_TWL_INT_ADRS_VOL, // 0x40,
|
||||
// REG_TWL_INT_ADRS_BL,
|
||||
// REG_TWL_INT_ADRS_CODEC_MIC_GAIN, // 0x50,
|
||||
// REG_TWL_INT_ADRS_CODEC_MIC_GAIN_RELOAD,
|
||||
// REG_TWL_INT_ADRS_ADC_CALIB, // 0x60,
|
||||
// REG_TWL_INT_ADRS_ADC_CALIB_STATUS,
|
||||
// REG_TWL_INT_ADRS_ADC_CALIB_VALUE,
|
||||
// REG_TWL_INT_ADRS_POWER_LED,
|
||||
REG_TWL_INT_ADRS_TEMP0, // 0x70 - 0x77
|
||||
REG_TWL_INT_ADRS_TEMP1,
|
||||
REG_TWL_INT_ADRS_TEMP2,
|
||||
REG_TWL_INT_ADRS_TEMP3,
|
||||
REG_TWL_INT_ADRS_TEMP4,
|
||||
REG_TWL_INT_ADRS_TEMP5,
|
||||
REG_TWL_INT_ADRS_TEMP6,
|
||||
REG_TWL_INT_ADRS_TEMP7,
|
||||
// REG_TWL_INT_ADRS_TIME_PWSW_DELAY,
|
||||
// REG_TWL_INT_ADRS_TIME_PWSW_THRESHOLD
|
||||
_REG_TWL_INT_ADRS_ENDMARK,
|
||||
};
|
||||
|
||||
|
||||
|
||||
/* ========================================================================= */
|
||||
#define is_TWL ( vregs[ REG_TWL_INT_ADRS_MODE ] & 0x01 )
|
||||
#define with_NAND ( vregs[ REG_TWL_INT_ADRS_MODE ] & 0x02 )
|
||||
#define volSteps32 ( vregs[ REG_TWL_INT_ADRS_MODE ] & 0x80 )
|
||||
|
||||
#define reg_wifi_led ( vregs[ REG_TWL_INT_ADRS_WIFI ] & 0x01 )
|
||||
#define reg_wifi_led_blink ( vregs[ REG_TWL_INT_ADRS_WIFI ] & 0x02 )
|
||||
|
||||
|
||||
typedef enum twl_camLed_mode_{
|
||||
TWL_CAMLED_OFF,
|
||||
TWL_CAMLED_ON,
|
||||
TWL_CAMLED_BLINK,
|
||||
TWL_CAMLED_DEF_ON
|
||||
}camLed_mode;
|
||||
|
||||
|
||||
/* ========================================================================= */
|
||||
void vreg_twl_init( );
|
||||
void vreg_twl_write( u8 adrs, u8 data );
|
||||
u8 adrs_table_twl_ext2int( u8 img );
|
||||
u8 vreg_twl_read( u8 phy_adrs );
|
||||
|
||||
task_status_immed command_from_twl( );
|
||||
|
||||
|
||||
// 読んだらクリアなどの処理
|
||||
#define vreg_twl_after_read( reg_adrs ); \
|
||||
if( reg_adrs == REG_TWL_INT_ADRS_IRQ ) \
|
||||
{ \
|
||||
vreg_twl[ REG_TWL_INT_ADRS_IRQ ]= 0;\
|
||||
}
|
||||
|
||||
#endif
|
||||
Binary file not shown.
@ -0,0 +1,20 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 10.00
|
||||
# Visual C++ Express 2008
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "yav-mcu-basara_sdk0.9", "yav-mcu-basara_sdk0.9\yav-mcu-basara_sdk0.9.vcproj", "{266AA0C8-5E7F-431C-B1C8-C77746E8CE8A}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Win32 = Debug|Win32
|
||||
Release|Win32 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{266AA0C8-5E7F-431C-B1C8-C77746E8CE8A}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{266AA0C8-5E7F-431C-B1C8-C77746E8CE8A}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{266AA0C8-5E7F-431C-B1C8-C77746E8CE8A}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{266AA0C8-5E7F-431C-B1C8-C77746E8CE8A}.Release|Win32.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
EndGlobal
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,373 @@
|
||||
<?xml version="1.0" encoding="shift_jis"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
Name="yav-mcu-basara_sdk0.9"
|
||||
ProjectGUID="{266AA0C8-5E7F-431C-B1C8-C77746E8CE8A}"
|
||||
RootNamespace="yavmcubasara_sdk09"
|
||||
TargetFrameworkVersion="196613"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
PreprocessorDefinitions="_PMIC_TWL_"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="3"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
GenerateDebugInformation="true"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
|
||||
IntermediateDirectory="$(ConfigurationName)"
|
||||
ConfigurationType="1"
|
||||
CharacterSet="2"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="2"
|
||||
EnableIntrinsicFunctions="true"
|
||||
RuntimeLibrary="2"
|
||||
EnableFunctionLevelLinking="true"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="3"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
GenerateDebugInformation="true"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<Filter
|
||||
Name="ソース ファイル"
|
||||
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
|
||||
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\..\accero.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\adc.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\i2c_ctr.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\i2c_mcu.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\i2c_twl.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\ini_VECT.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\led.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\loader.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\magic.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\main.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\pedo_alg_thre_det2.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\pm.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\reboot.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\rtc.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\self_flash.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\sw.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\task_debug.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\task_misc.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\task_sys.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\vreg_ctr.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\vreg_twl.c"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\WDT.c"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="ヘッダー ファイル"
|
||||
Filter="h;hpp;hxx;hm;inl;inc;xsd"
|
||||
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
|
||||
>
|
||||
<File
|
||||
RelativePath="..\..\accero.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\adc.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\batt_params.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\bsr_system.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\config.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\fsl.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\fsl_user.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\i2c_ctr.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\i2c_mcu.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\i2c_twl.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\i2c_twl_defs.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\incs.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\incs_loader.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\jhl_defs.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\led.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\loader.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\pedometer.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\pm.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\reboot.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\rtc.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\sw.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\user_define.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\vreg_ctr.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\vreg_twl.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="..\..\WDT.h"
|
||||
>
|
||||
</File>
|
||||
</Filter>
|
||||
<Filter
|
||||
Name="リソース ファイル"
|
||||
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
|
||||
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
|
||||
>
|
||||
</Filter>
|
||||
<File
|
||||
RelativePath="..\..\bsr_mcu.dr"
|
||||
>
|
||||
</File>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
||||
@ -0,0 +1,65 @@
|
||||
<?xml version="1.0" encoding="shift_jis"?>
|
||||
<VisualStudioUserFile
|
||||
ProjectType="Visual C++"
|
||||
Version="9.00"
|
||||
ShowAllFiles="false"
|
||||
>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<DebugSettings
|
||||
Command="$(TargetPath)"
|
||||
WorkingDirectory=""
|
||||
CommandArguments=""
|
||||
Attach="false"
|
||||
DebuggerType="3"
|
||||
Remote="1"
|
||||
RemoteMachine="REDPC2232"
|
||||
RemoteCommand=""
|
||||
HttpUrl=""
|
||||
PDBPath=""
|
||||
SQLDebugging=""
|
||||
Environment=""
|
||||
EnvironmentMerge="true"
|
||||
DebuggerFlavor=""
|
||||
MPIRunCommand=""
|
||||
MPIRunArguments=""
|
||||
MPIRunWorkingDirectory=""
|
||||
ApplicationCommand=""
|
||||
ApplicationArguments=""
|
||||
ShimCommand=""
|
||||
MPIAcceptMode=""
|
||||
MPIAcceptFilter=""
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<DebugSettings
|
||||
Command="$(TargetPath)"
|
||||
WorkingDirectory=""
|
||||
CommandArguments=""
|
||||
Attach="false"
|
||||
DebuggerType="3"
|
||||
Remote="1"
|
||||
RemoteMachine="REDPC2232"
|
||||
RemoteCommand=""
|
||||
HttpUrl=""
|
||||
PDBPath=""
|
||||
SQLDebugging=""
|
||||
Environment=""
|
||||
EnvironmentMerge="true"
|
||||
DebuggerFlavor=""
|
||||
MPIRunCommand=""
|
||||
MPIRunArguments=""
|
||||
MPIRunWorkingDirectory=""
|
||||
ApplicationCommand=""
|
||||
ApplicationArguments=""
|
||||
ShimCommand=""
|
||||
MPIAcceptMode=""
|
||||
MPIAcceptFilter=""
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
</VisualStudioUserFile>
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,19 @@
|
||||
[ProjectManager]
|
||||
FrameMax=0
|
||||
FrameX=255
|
||||
FrameY=34
|
||||
FrameCX=1299
|
||||
FrameCY=1044
|
||||
OpenFile1=renge\renge.h,0,502,637,1746,1394,0,31,0,0
|
||||
OpenFile2=pm.c,0,260,57,1261,685,2,844,18,0
|
||||
OpenFile3=ProjectWindow
|
||||
PrjPos=0,2,754,3,253
|
||||
OpenFile4=accero.c,0,44,44,1045,672,0,250,0,0
|
||||
OpenFile5=led.c,0,66,66,1067,694,0,1,0,0
|
||||
OpenFile6=config.h,0,88,88,1089,716,0,27,0,0
|
||||
OpenFile7=sw.h,0,264,264,1265,892,9,4,9,0
|
||||
OpenFile8=OutputWindow
|
||||
OutputPos=0,572,1038,46,1104
|
||||
ActivePRJ=yav_mcu_bsr.prj
|
||||
[ProjectWindow]
|
||||
ProjectWindowDispType=0
|
||||
@ -0,0 +1,8 @@
|
||||
[System]
|
||||
System1=default
|
||||
[default]
|
||||
Project1=yav_mcu_bsr.prj
|
||||
[BATCH_BUILD]
|
||||
Build1=yav_mcu_bsr.prj,Debug Build,1
|
||||
Build2=yav_mcu_bsr.prj,Release Build,0
|
||||
Build3=yav_mcu_bsr.prj,BSR_WM0,0
|
||||
@ -0,0 +1,234 @@
|
||||
[SdbInfo]
|
||||
Ver=5
|
||||
[loader.c]
|
||||
T=4bebac1d
|
||||
1=incs_loader.h
|
||||
2=fsl.h
|
||||
3=fsl_user.h
|
||||
4=i2c_ctr.h
|
||||
5=i2c_mcu.h
|
||||
6=pm.h
|
||||
7=rtc.h
|
||||
8=reboot.h
|
||||
[pm.c]
|
||||
T=4beb9bf9
|
||||
1=incs.h
|
||||
2=adc.h
|
||||
3=led.h
|
||||
4=pm.h
|
||||
5=renge\renge.h
|
||||
6=batt_params.h
|
||||
7=..\..\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r\fsl.h
|
||||
8=fsl_user.h
|
||||
[i2c_ctr.c]
|
||||
T=4beb9bf9
|
||||
1=incs.h
|
||||
2=accero.h
|
||||
[main.c]
|
||||
T=4beb9bf9
|
||||
1=incs_loader.h
|
||||
2=WDT.h
|
||||
3=rtc.h
|
||||
4=pm.h
|
||||
5=accero.h
|
||||
6=led.h
|
||||
7=adc.h
|
||||
[magic.c]
|
||||
T=4bebafab
|
||||
1=config.h
|
||||
[WDT.c]
|
||||
T=4beb9bf9
|
||||
1=incs_loader.h
|
||||
[i2c_mcu.c]
|
||||
T=4beb9bf9
|
||||
1=incs.h
|
||||
2=i2c_mcu.h
|
||||
[i2c_twl.c]
|
||||
T=4beb9bf9
|
||||
1=incs.h
|
||||
2=i2c_twl_defs.h
|
||||
[ini_VECT.c]
|
||||
T=4beb9bf9
|
||||
1=config.h
|
||||
[led.c]
|
||||
T=4beb9bf9
|
||||
1=incs.h
|
||||
2=led.h
|
||||
[rtc.c]
|
||||
T=4beb9bf9
|
||||
1=incs.h
|
||||
[vreg_ctr.c]
|
||||
T=4beb9bf9
|
||||
1=incs.h
|
||||
2=vreg_ctr.h
|
||||
3=rtc.h
|
||||
4=led.h
|
||||
5=accero.h
|
||||
6=pm.h
|
||||
7=..\..\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r\fsl.h
|
||||
8=fsl_user.h
|
||||
[vreg_twl.c]
|
||||
T=4beb9bf9
|
||||
1=incs.h
|
||||
2=jhl_defs.h
|
||||
3=vreg_twl.h
|
||||
4=vreg_ctr.h
|
||||
5=renge\renge_task_intval.h
|
||||
[adc.c]
|
||||
T=4beb9bf9
|
||||
1=incs.h
|
||||
2=adc.h
|
||||
3=pm.h
|
||||
4=led.h
|
||||
[renge\renge.c]
|
||||
T=4beb9bf7
|
||||
1=renge\renge.h
|
||||
2=renge\renge_task_intval.h
|
||||
3=renge\renge_task_immediate.h
|
||||
4=WDT.h
|
||||
5=config.h
|
||||
6=user_define.h
|
||||
7=bsr_system.h
|
||||
[accero.c]
|
||||
T=4beb9bf9
|
||||
1=incs.h
|
||||
2=..\..\Program Files\NEC Electronics Tools\CC78K0R\W2.10\inc78k0r\math.h
|
||||
[self_flash.c]
|
||||
T=4beb9bf9
|
||||
1=incs_loader.h
|
||||
2=..\..\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r\fsl.h
|
||||
3=fsl_user.h
|
||||
4=i2c_ctr.h
|
||||
[reboot.c]
|
||||
T=4beb9bf9
|
||||
1=incs_loader.h
|
||||
[sw.c]
|
||||
T=4bebafa0
|
||||
1=incs.h
|
||||
2=i2c_twl.h
|
||||
3=i2c_ctr.h
|
||||
4=led.h
|
||||
5=accero.h
|
||||
6=pm.h
|
||||
7=rtc.h
|
||||
[task_debug.c]
|
||||
T=4bebaa50
|
||||
1=incs.h
|
||||
2=renge\renge.h
|
||||
3=pm.h
|
||||
4=accero.h
|
||||
[task_misc.c]
|
||||
T=4beb9bf9
|
||||
1=incs.h
|
||||
2=renge\renge.h
|
||||
3=pm.h
|
||||
4=accero.h
|
||||
5=adc.h
|
||||
6=i2c_mcu.h
|
||||
[task_sys.c]
|
||||
T=4beb9bf9
|
||||
1=incs.h
|
||||
2=i2c_twl.h
|
||||
3=i2c_ctr.h
|
||||
4=led.h
|
||||
5=accero.h
|
||||
6=pm.h
|
||||
7=rtc.h
|
||||
8=sw.h
|
||||
9=adc.h
|
||||
[pedo_alg_thre_det2.c]
|
||||
T=4beb9bf9
|
||||
1=incs.h
|
||||
2=..\..\Program Files\NEC Electronics Tools\CC78K0R\W2.10\inc78k0r\math.h
|
||||
3=accero.h
|
||||
4=pedometer.h
|
||||
[incs_loader.h]
|
||||
T=4beb9bf9
|
||||
1=jhl_defs.h
|
||||
2=user_define.h
|
||||
3=bsr_system.h
|
||||
4=renge\renge.h
|
||||
5=vreg_ctr.h
|
||||
6=vreg_twl.h
|
||||
7=loader.h
|
||||
8=i2c_mcu.h
|
||||
9=WDT.h
|
||||
[jhl_defs.h]
|
||||
T=4beb9bf9
|
||||
1=config.h
|
||||
[config.h]
|
||||
T=4bebac3c
|
||||
[user_define.h]
|
||||
T=4beb9bf9
|
||||
[bsr_system.h]
|
||||
T=4beb9bf9
|
||||
[renge\renge.h]
|
||||
T=4beb9bf7
|
||||
1=renge\renge_defs.h
|
||||
2=renge\renge_task_immediate.h
|
||||
[renge\renge_defs.h]
|
||||
T=4beb9bf7
|
||||
[renge\renge_task_immediate.h]
|
||||
T=4beb9bf7
|
||||
1=renge\renge_defs.h
|
||||
[vreg_ctr.h]
|
||||
T=4beb9bf9
|
||||
1=config.h
|
||||
[vreg_twl.h]
|
||||
T=4beb9bf9
|
||||
[loader.h]
|
||||
T=4beb9bf9
|
||||
1=jhl_defs.h
|
||||
[i2c_mcu.h]
|
||||
T=4beb9bf9
|
||||
[WDT.h]
|
||||
T=4beb9bf9
|
||||
[fsl.h]
|
||||
T=4beb9bf9
|
||||
[fsl_user.h]
|
||||
T=4beb9bf9
|
||||
[i2c_ctr.h]
|
||||
T=4beb9bf9
|
||||
[pm.h]
|
||||
T=4beb9bf9
|
||||
[rtc.h]
|
||||
T=4beb9bf9
|
||||
[reboot.h]
|
||||
T=4beb9bf9
|
||||
[incs.h]
|
||||
T=4beb9bf9
|
||||
1=jhl_defs.h
|
||||
2=user_define.h
|
||||
3=bsr_system.h
|
||||
4=renge\renge.h
|
||||
5=vreg_ctr.h
|
||||
6=vreg_twl.h
|
||||
7=i2c_mcu.h
|
||||
8=rtc.h
|
||||
9=accero.h
|
||||
[accero.h]
|
||||
T=4beb9bf9
|
||||
1=jhl_defs.h
|
||||
2=pedometer.h
|
||||
[pedometer.h]
|
||||
T=4beb9bf9
|
||||
[adc.h]
|
||||
T=4beb9bf9
|
||||
1=jhl_defs.h
|
||||
[led.h]
|
||||
T=4beb9bf9
|
||||
[batt_params.h]
|
||||
T=4beb9bf9
|
||||
[..\..\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r\fsl.h]
|
||||
T=49a3bd4e
|
||||
[i2c_twl_defs.h]
|
||||
T=4beb9bf9
|
||||
[renge\renge_task_intval.h]
|
||||
T=4beb9bf7
|
||||
1=renge\renge_defs.h
|
||||
[..\..\Program Files\NEC Electronics Tools\CC78K0R\W2.10\inc78k0r\math.h]
|
||||
T=45f12258
|
||||
[i2c_twl.h]
|
||||
T=4beb9bf9
|
||||
[sw.h]
|
||||
T=4bebafb5
|
||||
265
branches/0.15(sdk0.9_E3_fix_vol)/accero.c
Normal file
265
branches/0.15(sdk0.9_E3_fix_vol)/accero.c
Normal file
@ -0,0 +1,265 @@
|
||||
/* ========================================================
|
||||
加速度センサ関係
|
||||
・データ更新完了でデータを吸い上げ手レジスタを更新、CPUに割り込み
|
||||
・フラグが立っていれば歩数カウント
|
||||
・加速度センサ割り込みからタスクを登録して下さい。(I2Cの競合回避などがあるので)
|
||||
|
||||
======================================================== */
|
||||
#pragma SFR
|
||||
#pragma NOP
|
||||
#pragma HALT
|
||||
#pragma STOP
|
||||
#pragma ROT
|
||||
// rorb, rolb, rorw, rolw
|
||||
#pragma MUL
|
||||
#pragma BCD
|
||||
|
||||
|
||||
|
||||
#include "config.h"
|
||||
#ifdef _MCU_BSR_
|
||||
#pragma interrupt INTP23 intp23_ACC_ready RB3 // 加速度センサ、データ準備完了
|
||||
#endif
|
||||
|
||||
|
||||
#include "incs.h"
|
||||
|
||||
#include <math.h>
|
||||
|
||||
// ========================================================
|
||||
// レジスタ名
|
||||
#define ACC_REG_WHOAMI 0x0F
|
||||
#define ACC_REG_CTRL1 0x20
|
||||
#define ACC_REG_CTRL5 0x24
|
||||
#define ACC_REG_X 0x28
|
||||
|
||||
// ビット位置
|
||||
#define ACC_bP_PM0 5
|
||||
#define ACC_bP_DR0 3
|
||||
|
||||
// ビット設定値
|
||||
#define ACC_BITS_PM_PDN 0
|
||||
#define ACC_BITS_PM_NORM 1
|
||||
#define ACC_BITS_PM_LP0R5 2
|
||||
#define ACC_BITS_PM_LP1 3
|
||||
#define ACC_BITS_PM_LP2 4
|
||||
#define ACC_BITS_PM_LP5 5
|
||||
#define ACC_BITS_PM_LP10 6
|
||||
|
||||
#define ACC_BITS_DR_50Hz 0
|
||||
#define ACC_BITS_DR_100Hz 1
|
||||
#define ACC_BITS_DR_400Hz 2
|
||||
#define ACC_BITS_DR_1000Hz 3
|
||||
|
||||
#define ACC_BITS_ALL_AXIS_ON 7
|
||||
|
||||
|
||||
#define VREG_BITMASK_ACC_CONF_ACQ ( 1 << 0 )
|
||||
#define VREG_BITMASK_ACC_CONF_HOSU ( 1 << 1 )
|
||||
|
||||
|
||||
|
||||
|
||||
// ========================================================
|
||||
task_status tsk_soft_int( );
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
・割り込みを確認してデータを吸い上げ、レジスタに書き出します
|
||||
・本当であればコールバック関数を登録しておけばいいじゃんとなるのですが、
|
||||
I2Cが使用中だったら?とか考えると私ではそこまでできないのです。
|
||||
・自動歩数計とかでも結局
|
||||
======================================================== */
|
||||
task_status_immed tsk_cbk_accero( )
|
||||
{ // (疑似)isrから登録されます
|
||||
|
||||
|
||||
// 加速度センサデータレジスタへの反映
|
||||
if( iic_mcu_read( IIC_SLA_ACCEL, ( ACC_REG_X | 0x80 ), 6, &vreg_ctr[VREG_C_ACC_XL] )
|
||||
!= ERR_SUCCESS )
|
||||
{
|
||||
// 加速度センサが異常になったので止める
|
||||
vreg_ctr[ VREG_C_ACC_CONFIG ] &= ~( VREG_BITMASK_ACC_CONF_HOSU | VREG_BITMASK_ACC_CONF_ACQ );
|
||||
acc_hosu_set();
|
||||
vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_ACCERO_ERR;
|
||||
return ( ERR_SUCCESS ); // タスクの削除は必要
|
||||
}
|
||||
else
|
||||
{
|
||||
// 正常時パス //
|
||||
// 加速度更新&割り込み
|
||||
if( (( vreg_ctr[VREG_C_ACC_CONFIG] & VREG_BITMASK_ACC_CONF_ACQ ) != 0 ) &&
|
||||
( system_status.pwr_state == ON )
|
||||
)
|
||||
{
|
||||
set_irq( VREG_C_IRQ1, REG_BIT_ACC_DAT_RDY );
|
||||
// ゴミデータのカラ読み
|
||||
if( ACC_VALID == 1 )
|
||||
{
|
||||
u8 temp[6];
|
||||
iic_mcu_read( IIC_SLA_ACCEL, ( ACC_REG_X | 0x80 ), 6, temp );
|
||||
}
|
||||
}
|
||||
if(( system_status.pwr_state != OFF ) &&
|
||||
( system_status.pwr_state != BT_CHARGE ) &&
|
||||
( ( vreg_ctr[VREG_C_ACC_CONFIG] & VREG_BITMASK_ACC_CONF_HOSU ) != 0 )
|
||||
)
|
||||
{
|
||||
DBG_LED_on;
|
||||
pedometer(); // 歩数計
|
||||
DBG_LED_off;
|
||||
}
|
||||
}
|
||||
return ( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*=======================================================
|
||||
加速度センサ透過アクセス リード
|
||||
========================================================*/
|
||||
task_status_immed acc_read( )
|
||||
{
|
||||
vreg_ctr[VREG_C_ACC_W_BUF] = iic_mcu_read_a_byte( IIC_SLA_ACCEL, vreg_ctr[VREG_C_ACC_R_ADRS] );
|
||||
// vreg_ctr[ VREG_C_ACC_R_BUF ] = iic_mcu_read_a_byte( IIC_SLA_ACCEL, vreg_ctr[VREG_C_ACC_R_ADRS] );
|
||||
vreg_ctr[VREG_C_IRQ1] |= REG_BIT_ACC_ACK;
|
||||
if( ( vreg_ctr[VREG_C_IRQ_MASK1] & REG_BIT_ACC_ACK ) == 0 )
|
||||
{
|
||||
IRQ0_ast;
|
||||
}
|
||||
return ( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*=========================================================
|
||||
加速度センサ透過アクセス ライト
|
||||
========================================================*/
|
||||
task_status_immed acc_write( )
|
||||
{
|
||||
iic_mcu_write_a_byte( IIC_SLA_ACCEL, vreg_ctr[VREG_C_ACC_W_ADRS], vreg_ctr[VREG_C_ACC_W_BUF] );
|
||||
vreg_ctr[VREG_C_IRQ1] |= REG_BIT_ACC_ACK;
|
||||
if( ( vreg_ctr[VREG_C_IRQ_MASK1] & REG_BIT_ACC_ACK ) == 0 )
|
||||
{
|
||||
IRQ0_ast;
|
||||
}
|
||||
return ( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*=========================================================
|
||||
加速度センサの設定
|
||||
========================================================*/
|
||||
task_status_immed acc_hosu_set( )
|
||||
{
|
||||
u8 str_send_buf[4];
|
||||
|
||||
iic_mcu_read_a_byte( IIC_SLA_ACCEL, ACC_REG_WHOAMI );
|
||||
if( iic_mcu_bus_status == ERR_NOSLAVE )
|
||||
{
|
||||
vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_ACCERO_ERR;
|
||||
#ifdef _MCU_BSR_
|
||||
// PMK23 = 1;
|
||||
#endif
|
||||
return ( ERR_SUCCESS ); // とりあえず、タスクは削除しなくてはならない
|
||||
}else{
|
||||
vreg_ctr[ VREG_C_STATUS_1 ] &= ~REG_BIT_ACCERO_ERR;
|
||||
}
|
||||
|
||||
|
||||
str_send_buf[1] = 0x00; // ctrl2 HPF:normal, filterd, HPF for IRQ : dis/dis, HPF coeff:norm
|
||||
#ifdef _MODEL_WM0_
|
||||
# ifdef _MODEL_WM0_TEG2_CTRC_
|
||||
str_send_buf[2] = 0x02; // 回路が一部違う
|
||||
# else
|
||||
|
||||
str_send_buf[2] = 0x10; // 3 IRQ pol :Active HI, Drive:Pushpull,
|
||||
/// IRQ2flg latch: auto clear after read, IRQ2 conf: IRQ( fall,shock,...)
|
||||
/// 1 : auto clear after read, conf: data ready
|
||||
# endif
|
||||
|
||||
#else
|
||||
# ifdef _MODEL_CTR_
|
||||
/*
|
||||
if( system_status.model == MODEL_TS_BOARD )
|
||||
{
|
||||
// TS Final SoC
|
||||
str_send_buf[2] = 0x02; // 3 IRQ pol :Active HI, Drive:Pushpull,
|
||||
}
|
||||
else
|
||||
{
|
||||
// 実機&派生種、白箱
|
||||
str_send_buf[2] = 0x10; // 3 IRQ pol :Active HI, Drive:Pushpull,
|
||||
}
|
||||
*/
|
||||
str_send_buf[2] = 0x12; // 面倒なので両方...。
|
||||
# else
|
||||
// TS( type T )
|
||||
str_send_buf[2] = 0x02; // 3 IRQ pol :Active HI, Drive:Pushpull,
|
||||
/// IRQ2flg latch: auto clear after read, IRQ2 conf: IRQ( fall,shock,...)
|
||||
/// 1 : auto clear after read, conf: data ready
|
||||
# endif
|
||||
#endif
|
||||
|
||||
str_send_buf[3] = 0x80; // ctrl3 block update:enable, MSB first, scale: +-2G(default), selftest: dis
|
||||
|
||||
if( ( vreg_ctr[VREG_C_ACC_CONFIG] &
|
||||
( VREG_BITMASK_ACC_CONF_HOSU | VREG_BITMASK_ACC_CONF_ACQ ) ) == 0 )
|
||||
{
|
||||
#ifdef _MCU_BSR_
|
||||
PMK23 = 1;
|
||||
#endif
|
||||
// 完全停止
|
||||
str_send_buf[0] =
|
||||
( ACC_BITS_PM_PDN << ACC_bP_PM0 | 0 << ACC_bP_DR0 | ACC_BITS_ALL_AXIS_ON );
|
||||
}
|
||||
else
|
||||
{
|
||||
#ifdef _MCU_BSR_
|
||||
PMK23 = 0;
|
||||
#endif
|
||||
// 100Hz 自動取り込み
|
||||
str_send_buf[0] =
|
||||
( ACC_BITS_PM_NORM << ACC_bP_PM0
|
||||
| ACC_BITS_DR_100Hz << ACC_bP_DR0
|
||||
| ACC_BITS_ALL_AXIS_ON );
|
||||
}
|
||||
iic_mcu_write( IIC_SLA_ACCEL, ( ACC_REG_CTRL1 | 0x80 ), 4, str_send_buf );
|
||||
|
||||
// カラ読み
|
||||
if( ACC_VALID == 1 )
|
||||
{
|
||||
if( system_status.pwr_state == ON )
|
||||
{
|
||||
u8 temp[6];
|
||||
iic_mcu_read( IIC_SLA_ACCEL, ( ACC_REG_X | 0x80 ), 6, temp );
|
||||
}
|
||||
}
|
||||
return ( ERR_SUCCESS );
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
加速度センサ割り込み
|
||||
I2Cが使用中かもしれないので、読み出しタスクの登録を行うのみ
|
||||
======================================================== */
|
||||
__interrupt void intp23_ACC_ready( )
|
||||
{
|
||||
EI();
|
||||
if( ( vreg_ctr[VREG_C_ACC_CONFIG] & 0x03 ) != 0x00 )
|
||||
{
|
||||
if( ( system_status.pwr_state == ON ) || ( system_status.pwr_state == SLEEP ) )
|
||||
{
|
||||
if( ACC_VALID == 1 )
|
||||
{
|
||||
// todo
|
||||
// renge_task_immed_add( tsk_cbk_accero );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
14
branches/0.15(sdk0.9_E3_fix_vol)/accero.h
Normal file
14
branches/0.15(sdk0.9_E3_fix_vol)/accero.h
Normal file
@ -0,0 +1,14 @@
|
||||
#ifndef _accero_
|
||||
#define _accero_
|
||||
|
||||
|
||||
#include "jhl_defs.h"
|
||||
#include "pedometer.h"
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
task_status_immed tsk_cbk_accero( );
|
||||
task_status_immed acc_hosu_set( );
|
||||
|
||||
|
||||
#endif
|
||||
352
branches/0.15(sdk0.9_E3_fix_vol)/adc.c
Normal file
352
branches/0.15(sdk0.9_E3_fix_vol)/adc.c
Normal file
@ -0,0 +1,352 @@
|
||||
/* ========================================================
|
||||
藤田@開技
|
||||
nintendo
|
||||
'09 Apr
|
||||
======================================================== */
|
||||
#include "incs.h"
|
||||
#include "adc.h"
|
||||
#include "pm.h"
|
||||
|
||||
#include "led.h"
|
||||
|
||||
|
||||
//#define _4db_
|
||||
#define _15db_
|
||||
|
||||
// ===================================================== //
|
||||
bit adc_updated;
|
||||
|
||||
u8 adc_raw_vol;
|
||||
u8 adc_raw_dep;
|
||||
|
||||
|
||||
|
||||
// ===================================================== //
|
||||
extern void nop8();
|
||||
|
||||
|
||||
|
||||
// ===================================================== //
|
||||
#define INTERVAL_TSK_ADC 15
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
ADC設定と、開始
|
||||
|
||||
以下のピンは主にここで操作・監視されます。
|
||||
・BT_TEMP,_P
|
||||
・ADIN1
|
||||
・VOL
|
||||
|
||||
関係ありそうですが別のところで管理しています
|
||||
・PM_BT_DET,_P BT_init
|
||||
|
||||
・8tics毎に呼ばれ、3チャンネル分取り込むとADCを停止します。
|
||||
タスク起動時、レジスタには前回の取り込み値が入っています。
|
||||
======================================================== */
|
||||
|
||||
#ifdef _15db_
|
||||
// max -15db
|
||||
const u8 slider_to_codec[64] =
|
||||
{
|
||||
127, 127, 127, 126, 125, 124, 123, 122,
|
||||
121, 120, 119, 118, 117, 116, 115, 114,
|
||||
113, 112, 111, 110, 109, 108, 107, 106,
|
||||
105, 104, 103, 102, 101, 100, 99, 98,
|
||||
97, 96, 95, 94, 93, 92, 91, 90,
|
||||
89, 88, 87, 86, 85, 84, 83, 82,
|
||||
81, 80, 79, 78, 77, 76, 75, 74,
|
||||
73, 72, 71, 70, 69, 68, 67, 66
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef _4db_
|
||||
// max -4db
|
||||
const u8 slider_to_codec[64] =
|
||||
{
|
||||
127, 127, 126, 125, 123, 122, 121, 119,
|
||||
118, 117, 115, 114, 112, 111, 110, 108,
|
||||
107, 106, 104, 103, 101, 100, 99, 97,
|
||||
96, 94, 93, 92, 90, 89, 88, 86,
|
||||
85, 83, 82, 81, 79, 78, 77, 75,
|
||||
74, 72, 71, 70, 68, 67, 66, 64,
|
||||
64, 63, 61, 60, 59, 57, 56, 54,
|
||||
53, 52, 50, 49, 48, 46, 44, 44
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
void tsk_adc( )
|
||||
{
|
||||
static u8 task_interval = 0;
|
||||
static u8 old_tune;
|
||||
static u8 sndvol_codec;
|
||||
static u8 bt_temp_old;
|
||||
|
||||
if( task_interval-- != 0 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
task_interval = (u8)( INTERVAL_TSK_ADC / SYS_INTERVAL_TICK );
|
||||
}
|
||||
|
||||
|
||||
if( adc_updated )
|
||||
{
|
||||
if( system_status.pwr_state == ON )
|
||||
{
|
||||
// Tune ///////////////////////////////////////
|
||||
{
|
||||
// 似非ヒステリシス V2
|
||||
// ガリオームには適さない
|
||||
#define KIKAN 32
|
||||
static u8 old_value;
|
||||
static s8 diffs;
|
||||
u8 temp;
|
||||
|
||||
if( abs( adc_raw_dep - old_value ) >= 2 )
|
||||
{
|
||||
// 大きく離れた
|
||||
vreg_ctr[ VREG_C_TUNE ] = adc_raw_dep;
|
||||
old_value = adc_raw_dep;
|
||||
#if 0
|
||||
割り込み入れない;
|
||||
割り込みを入れるようであれば、ちゃんと変化チェックする;
|
||||
|
||||
set_irq( VREG_C_IRQ0, REG_BIT_VR_TUNE_CHANGE );
|
||||
#endif
|
||||
diffs = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
// 近所の値でも、ある期間でいっぱい偏っていたらそっちに寄せる
|
||||
static u8 kikan_count = KIKAN;
|
||||
if( old_value < adc_raw_dep )
|
||||
{
|
||||
diffs += 1;
|
||||
}
|
||||
else if( old_value > adc_raw_dep )
|
||||
{
|
||||
diffs -= 1;
|
||||
}
|
||||
|
||||
if( --kikan_count == 0 )
|
||||
{
|
||||
if( diffs >= KIKAN && ( diffs < 64 ))
|
||||
{
|
||||
old_value += 1;
|
||||
}
|
||||
else if( ( diffs <= ( 256 - KIKAN )) && ( diffs > ( 128 + 64 ) )) // あらー?
|
||||
{
|
||||
old_value -= 1;
|
||||
}
|
||||
vreg_ctr[ VREG_C_TUNE ] = old_value;
|
||||
kikan_count = KIKAN;
|
||||
diffs = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Volume /////////////////////////////////////
|
||||
{
|
||||
static u8 vol_old;
|
||||
static u8 force_update_vol;
|
||||
|
||||
if( ( abs( adc_raw_vol - vol_old ) >= 2 ) // 生値でこれくらいずれたら更新(似非ヒステリシス)
|
||||
|| ( --force_update_vol == 0 ) ) // ポーリング
|
||||
{
|
||||
vol_old = adc_raw_vol;
|
||||
// レジスタ更新
|
||||
vreg_twl[ REG_TWL_INT_ADRS_VOL ] = vol_old / ( 256 / 32 ); // ←adc値でよい
|
||||
vreg_ctr[ VREG_C_SND_VOL ] = ( vol_old / 4 ); // 64段
|
||||
|
||||
// codecに伝える
|
||||
iic_mcu_write_a_byte( IIC_SLA_CODEC, CODEC_REG_VOL, slider_to_codec[ vol_old / 4 ] );
|
||||
#ifndef _MODEL_CTR_
|
||||
iic_mcu_write_a_byte( IIC_SLA_DCP, 0, slider_to_codec[ ( 255 - vol_old ) / 4 ] );
|
||||
#endif
|
||||
// set_irq( VREG_C_IRQ0, REG_BIT_VR_SNDVOL_CHANGE ); // 割り込み廃止
|
||||
force_update_vol = 10;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// TUNE_LED ///////////////////////////////////
|
||||
// ここで?仕様?
|
||||
{
|
||||
switch ( vreg_ctr[VREG_C_LED_TUNE] )
|
||||
{
|
||||
case LED_TUNE_ILM_ON:
|
||||
LED_duty_3d = vreg_ctr[VREG_C_LED_BRIGHT];
|
||||
break;
|
||||
|
||||
case LED_TUNE_ILM_SVR:
|
||||
LED_duty_3d = vreg_ctr[VREG_C_TUNE] / 16;
|
||||
break;
|
||||
|
||||
case LED_TUNE_ILM_OFF:
|
||||
default:
|
||||
LED_duty_3d = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
adc_updated = 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ADCEN = 1;
|
||||
ADM = 0b00001011; // セレクトモード、昇圧、fCLK/6 ///ここから ↓
|
||||
|
||||
ADPC = 0x06; // ADCポートのセレクト
|
||||
ADS = ADC_SEL_TUNE;
|
||||
nop8();
|
||||
ADCS = 1; // AD開始。 /// ここまで ↑ までに1us=8clk以上開ける
|
||||
|
||||
ADIF = 0;
|
||||
ADMK = 0;
|
||||
|
||||
}
|
||||
|
||||
|
||||
/* ========================================================
|
||||
過去3つのminでもMAXでもない値を返す
|
||||
突発的なノイズを除く。
|
||||
根本対策ではないが、これはこれで使い道がある。
|
||||
======================================================== */
|
||||
static u8 getmean3( u8 * hist )
|
||||
{
|
||||
if( *hist > *( hist + 1 ) )
|
||||
{
|
||||
if( *hist > *( hist + 2 ) )
|
||||
{
|
||||
return( ( *( hist + 1 ) > *( hist + 2 ) ) ? *( hist + 1 ) : *( hist + 2 ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
return( *hist );
|
||||
}
|
||||
}else{
|
||||
if( *hist > *( hist + 2 ) )
|
||||
{
|
||||
return( *hist );
|
||||
}
|
||||
else
|
||||
{
|
||||
return( ( *( hist + 1 ) < *( hist + 2 ) ) ? *( hist + 1 ) : *( hist + 2 ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
自前で次のチャンネル
|
||||
一通り終わったら止める
|
||||
// todo 値が飛ぶことがある?
|
||||
======================================================== */
|
||||
__interrupt void int_adc( )
|
||||
{
|
||||
static u8 hist_tune[3];
|
||||
static u8 hist_snd_vol[3];
|
||||
static u8 hist_bt_temp[3];
|
||||
static u8 index;
|
||||
|
||||
// EI( );
|
||||
switch ( ADS )
|
||||
{
|
||||
/*
|
||||
case ( ADC_SEL_AMB_BRIT ): // 環境明るさ
|
||||
vreg_ctr[ VREG_C_AMBIENT_BRIGHTNESS ] = ADCRH;
|
||||
break;
|
||||
*/
|
||||
|
||||
case ( ADC_SEL_TUNE ):
|
||||
hist_tune[index] = ADCRH;
|
||||
#ifdef _MODEL_WM0_
|
||||
adc_raw_dep = 255 - getmean3( hist_tune );
|
||||
#else
|
||||
adc_raw_dep = getmean3( hist_tune );
|
||||
#endif
|
||||
break;
|
||||
|
||||
case ( ADC_SEL_VOL ):
|
||||
hist_snd_vol[index] = ADCRH;
|
||||
#ifdef _MODEL_CTR_
|
||||
if( system_status.model == MODEL_TS_BOARD )
|
||||
{
|
||||
adc_raw_vol = getmean3( hist_snd_vol );
|
||||
}
|
||||
else
|
||||
{
|
||||
adc_raw_vol = ( 255 - getmean3( hist_snd_vol ));
|
||||
}
|
||||
#else
|
||||
adc_raw_vol = getmean3( hist_snd_vol );
|
||||
#endif
|
||||
if( adc_raw_vol == 0 )
|
||||
{
|
||||
NOP();
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case ( ADC_SEL_BATT_TEMP ):
|
||||
hist_bt_temp[index] = ADCRH;
|
||||
raw_adc_temperature = getmean3( hist_bt_temp );
|
||||
renge_task_immed_add( BT_temp_update );
|
||||
break;
|
||||
|
||||
case ( ADC_SEL_BATT_DET ):
|
||||
// 呼ばれない
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
// もっとまともな書き方がありそうだ
|
||||
// if( ADS == ADC_SEL_BATT_DET ){
|
||||
if( ADS != ADC_SEL_BATT_TEMP )
|
||||
{ // 電池判別は電源投入の一回のみ
|
||||
ADS += 1; // 次のチャンネル
|
||||
ADIF = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
ADCEN = 0; // 止めてしまう
|
||||
adc_updated = 1;
|
||||
index = ( index == 2 ) ? 0 : ( index + 1 );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* ========================================================
|
||||
tsk_adcと競合することを考慮していません。
|
||||
======================================================== */
|
||||
u8 get_adc( u8 ch )
|
||||
{
|
||||
u8 temp;
|
||||
|
||||
ADMK = 1;
|
||||
ADIF = 0;
|
||||
|
||||
ADCEN = 1;
|
||||
ADM = 0b00001011; // セレクトモード、昇圧、fCLK/6 ///ここから↓
|
||||
|
||||
ADPC = 0x06; // ADCポートのセレクト
|
||||
ADS = ch;
|
||||
|
||||
nop8();
|
||||
|
||||
ADCS = 1; // AD開始。 /// ここまで↑ に、1us以上開ける
|
||||
|
||||
while( ADIF == 0 ){;}
|
||||
temp = ADCRH;
|
||||
ADCEN = 0;
|
||||
|
||||
ADMK = 0;
|
||||
return ( temp );
|
||||
}
|
||||
43
branches/0.15(sdk0.9_E3_fix_vol)/adc.h
Normal file
43
branches/0.15(sdk0.9_E3_fix_vol)/adc.h
Normal file
@ -0,0 +1,43 @@
|
||||
#ifndef __adc__
|
||||
#define __adc__
|
||||
|
||||
#include "jhl_defs.h"
|
||||
|
||||
///////////////////////////////////////
|
||||
// ANI2 P22
|
||||
#define ADC_SEL_AMB_BRIT 0x02
|
||||
|
||||
/*
|
||||
// ANI3 P23
|
||||
#define ADC_SEL_GYRO_YAW 0x03
|
||||
// ANI4 P24
|
||||
#define ADC_SEL_GYRO_PITCH 0x04
|
||||
// ANI5 P25
|
||||
#define ADC_SEL_GYRO_ROLL 0x05
|
||||
*/
|
||||
|
||||
// ANI6 P26
|
||||
#define ADC_SEL_TUNE 0x06
|
||||
// ANI7 P27
|
||||
#define ADC_SEL_VOL 0x07
|
||||
|
||||
// ANI8 P150
|
||||
#define ADC_SEL_BATT_TEMP 0x08
|
||||
// ANI9 P151
|
||||
#define ADC_SEL_BATT_DET 0x09
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////
|
||||
#define CODEC_REG_VOL 0x13
|
||||
|
||||
|
||||
|
||||
///////////////////////////////////////
|
||||
|
||||
|
||||
///////////////////////////////////////
|
||||
u8 get_adc( u8 ch );
|
||||
|
||||
|
||||
#endif
|
||||
76
branches/0.15(sdk0.9_E3_fix_vol)/batt_params.h
Normal file
76
branches/0.15(sdk0.9_E3_fix_vol)/batt_params.h
Normal file
@ -0,0 +1,76 @@
|
||||
#ifndef _bt_params_h_
|
||||
#define _bt_params_h_
|
||||
|
||||
/* ========================================================
|
||||
各社バッテリーパラメータ
|
||||
======================================================== */
|
||||
const u8 BT_PARAM[][64] = {
|
||||
// ID = 0 GND マクセル
|
||||
{
|
||||
0xAD, 0x30, 0xAE, 0x70, 0xB0, 0x00, 0xB3, 0x00,
|
||||
0xB4, 0x70, 0xB5, 0xA0, 0xB7, 0x80, 0xBA, 0x00,
|
||||
|
||||
0xBB, 0x90, 0xBD, 0x00, 0xBE, 0x00, 0xBF, 0xF0,
|
||||
0xC3, 0x00, 0xC5, 0xC0, 0xC8, 0x00, 0xCA, 0xC0,
|
||||
|
||||
0x04, 0x00, 0x12, 0x00, 0x0C, 0x10, 0x24, 0x00,
|
||||
0x10, 0xD0, 0x1B, 0xF0, 0x0A, 0xF0, 0x08, 0xE0,
|
||||
|
||||
0x0C, 0xF0, 0x08, 0xC0, 0x08, 0xB0, 0x07, 0xF0,
|
||||
0x0B, 0x00, 0x05, 0xD0, 0x02, 0x00, 0x09, 0x00
|
||||
},
|
||||
{ // ID = 1 120 ohm
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
},
|
||||
{ // ID = 2 360 hom
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
},
|
||||
{ // ID = 3 750 ohm
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
},
|
||||
{ // ID = 4 1.3kohm
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
},
|
||||
{ // ID = 5 2.7kohm パナ
|
||||
0xAD, 0x30, 0xAE, 0x70, 0xB0, 0x00, 0xB3, 0x00,
|
||||
0xB4, 0x70, 0xB5, 0xA0, 0xB7, 0x80, 0xBA, 0x00,
|
||||
|
||||
0xBB, 0x90, 0xBD, 0x00, 0xBE, 0x00, 0xBF, 0xF0,
|
||||
0xC3, 0x00, 0xC5, 0xC0, 0xC8, 0x00, 0xCA, 0xC0,
|
||||
|
||||
0x04, 0x00, 0x12, 0x00, 0x0C, 0x10, 0x24, 0x00,
|
||||
0x10, 0xD0, 0x1B, 0xF0, 0x0A, 0xF0, 0x08, 0xE0,
|
||||
|
||||
0x0C, 0xF0, 0x08, 0xC0, 0x08, 0xB0, 0x07, 0xF0,
|
||||
0x0B, 0x00, 0x05, 0xD0, 0x02, 0x00, 0x09, 0x00
|
||||
},
|
||||
{ // ID = 6 8.2kohm
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
||||
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||
}
|
||||
// ID = 7 白箱
|
||||
/// パラメータ無し
|
||||
};
|
||||
|
||||
const unsigned char BT_PANA_RCOMP = 135;
|
||||
// static const float BT_PANA_TEMPCOUP = 0.3;
|
||||
// static const float BT_PANA_TEMPCODN = 0.5;
|
||||
// 256倍してある
|
||||
const unsigned char BT_PANA_TEMPCOUP = 77;
|
||||
const unsigned char BT_PANA_TEMPCODN = 128;
|
||||
|
||||
#endif
|
||||
BIN
branches/0.15(sdk0.9_E3_fix_vol)/bin/mcu_C2_0B_1215.bin
Normal file
BIN
branches/0.15(sdk0.9_E3_fix_vol)/bin/mcu_C2_0B_1215.bin
Normal file
Binary file not shown.
BIN
branches/0.15(sdk0.9_E3_fix_vol)/bin/mcu_C2_0B_1215_2.bin
Normal file
BIN
branches/0.15(sdk0.9_E3_fix_vol)/bin/mcu_C2_0B_1215_2.bin
Normal file
Binary file not shown.
BIN
branches/0.15(sdk0.9_E3_fix_vol)/bin/mcu_C2_0B_1215_3.bin
Normal file
BIN
branches/0.15(sdk0.9_E3_fix_vol)/bin/mcu_C2_0B_1215_3.bin
Normal file
Binary file not shown.
BIN
branches/0.15(sdk0.9_E3_fix_vol)/bin/mcu_T_0B_1215_3.bin
Normal file
BIN
branches/0.15(sdk0.9_E3_fix_vol)/bin/mcu_T_0B_1215_3.bin
Normal file
Binary file not shown.
48
branches/0.15(sdk0.9_E3_fix_vol)/bsr_mcu.dr
Normal file
48
branches/0.15(sdk0.9_E3_fix_vol)/bsr_mcu.dr
Normal file
@ -0,0 +1,48 @@
|
||||
;;; 領域の定義
|
||||
;32kB = 0x7FFF
|
||||
MEMORY BCL0: (00000H, 01000H )
|
||||
;MEMORY BCL1: (01000H, 01000H ) ; バックアップ領域
|
||||
MEMORY ROM : (02000H, 03000H )
|
||||
;MEMORY ROM_BKUP:(05000H, 03000H ) ; バックアップ領域
|
||||
;MEMORY OCD :(0FC00H, 00400H ) ; OCDが使っているらしい
|
||||
|
||||
|
||||
;;; セグメントの割当先設定
|
||||
; ブートブロック0に割り当てる
|
||||
MERGE LDR_CODE : =BCL0
|
||||
MERGE LDR_CODL : =BCL0
|
||||
MERGE @@LCODE : =BCL0 ; スタートアップルーチン
|
||||
MERGE FSL_CODE : =BCL0 ; =FSL ; 謹製フラッシュライブラリ
|
||||
;MERGE @@LCODEL : =BCL0
|
||||
|
||||
;MERGE LDR_RINT:=BCL0
|
||||
;MERGE LDR_CNST:=BCL0
|
||||
MERGE LDR_CNSL:=BCL0
|
||||
|
||||
|
||||
|
||||
; 通常領域に置く
|
||||
MERGE ROM_CODE:=ROM
|
||||
MERGE @@CNST: =ROM
|
||||
MERGE @@R_INIT: =ROM ; ROM以外に置きたいならスタートアップルーチンを要修正
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
; マジックナンバー
|
||||
;; magic.cの中で指定
|
||||
|
||||
|
||||
;--- RAM領域 -------------------------------------------------------
|
||||
;
|
||||
; RAM1,RAM2領域はユーザープログラムで使用しても良いですが、セルフプログラム時は
|
||||
; セルフプログラムのライブラリが使用するため、値は破壊されます。
|
||||
;
|
||||
memory RAM2 : (0FFE20H, 00C0H) ; セルフプログラム時、使用禁止領域
|
||||
;memory SLF_RAM : (0FFE00H, 0020H) ; Slef Program予約領域[使用禁止]
|
||||
memory RAM : (0FF900H, 0500H) ; ユーザーRAM領域
|
||||
;memory SLF_RAM : (0FF900H, 0020H) ; Slef Program予約領域[使用禁止]
|
||||
|
||||
|
||||
56
branches/0.15(sdk0.9_E3_fix_vol)/bsr_system.h
Normal file
56
branches/0.15(sdk0.9_E3_fix_vol)/bsr_system.h
Normal file
@ -0,0 +1,56 @@
|
||||
#ifndef __bsr_system__
|
||||
#define __bsr_system__
|
||||
|
||||
// イベントループのステート
|
||||
enum pwr_state_
|
||||
{
|
||||
OFF_TRIG = 0,
|
||||
OFF,
|
||||
ON_TRIG,
|
||||
ON,
|
||||
SLEEP_TRIG,
|
||||
SLEEP,
|
||||
// WAKE,
|
||||
BT_CHARGE,
|
||||
};
|
||||
|
||||
enum poweron_reason_
|
||||
{
|
||||
NONE = 0,
|
||||
PWSW,
|
||||
RTC_ALARM,
|
||||
EXT_POWER
|
||||
};
|
||||
|
||||
|
||||
enum model_
|
||||
{
|
||||
MODEL_JIKKI = 0,
|
||||
MODEL_TS_BOARD,
|
||||
MODEL_SHIROBAKO,
|
||||
MODEL_JIKKI_NOBATT,
|
||||
MODEL_RESERVED1,
|
||||
MODEL_RESERVED2,
|
||||
MODEL_RESERVED3,
|
||||
};
|
||||
|
||||
// タスクシステムの状態情報など
|
||||
typedef struct
|
||||
{
|
||||
enum pwr_state_ pwr_state;
|
||||
enum poweron_reason_ poweron_reason;
|
||||
unsigned char dipsw0:1;
|
||||
unsigned char dipsw1:1;
|
||||
unsigned char dipsw2:1;
|
||||
unsigned char reboot:1;
|
||||
unsigned char info_fullcolor:1;
|
||||
enum model_ model;
|
||||
}
|
||||
system_status_;
|
||||
|
||||
|
||||
extern system_status_ system_status;
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
66
branches/0.15(sdk0.9_E3_fix_vol)/config.h
Normal file
66
branches/0.15(sdk0.9_E3_fix_vol)/config.h
Normal file
@ -0,0 +1,66 @@
|
||||
#ifndef __config__
|
||||
#define __config__
|
||||
|
||||
//#define _debug_
|
||||
//#define _debug_led_
|
||||
|
||||
|
||||
#define MCU_VER_MAJOR 0x00
|
||||
#define MCU_VER_MINOR 0x14
|
||||
|
||||
//#define PM_CCIC_TIM
|
||||
|
||||
|
||||
//#define _MODEL_TEG2_
|
||||
// <20>ªTEG2 CPU <20>{ Type-T
|
||||
|
||||
//#define _MODEL_WM0_
|
||||
//#define _MODEL_WM0_TEG2_CTRC_
|
||||
|
||||
//#define _MODEL_TS0_
|
||||
// <20>ªTEG2 CPU <20>{ Type-C
|
||||
|
||||
//#define _MODEL_CTR_
|
||||
// <20>ªTS board, WM1,1 TS-CTRC
|
||||
|
||||
#define _MODEL_CTR_NOTIFY_FULLCOLOR_
|
||||
// <20>ªTS board, WM1,1 TS-CTRC
|
||||
|
||||
|
||||
// “ÁŽêŽd—l //
|
||||
//#define _SW_HOME_ENABLE_
|
||||
#define _FOR_E3_
|
||||
|
||||
// ---------------------------------- //
|
||||
#ifdef _MODEL_TEG2_
|
||||
#define _PMIC_TWL_
|
||||
#define _MCU_KE3_
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef _MODEL_WM0_
|
||||
#define _PMIC_TWL_
|
||||
#define _MCU_BSR_
|
||||
#define _SW_HOME_ENABLE_
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef _MODEL_TS0_
|
||||
#define _PMIC_CTR_
|
||||
#define _MCU_BSR_
|
||||
#endif
|
||||
|
||||
#ifdef _MODEL_CTR_
|
||||
#define _PMIC_CTR_
|
||||
#define _MCU_BSR_
|
||||
#define _SW_HOME_ENABLE_
|
||||
#endif
|
||||
|
||||
#ifdef _MODEL_CTR_NOTIFY_FULLCOLOR_
|
||||
#define _MODEL_CTR_
|
||||
#define _PMIC_CTR_
|
||||
#define _MCU_BSR_
|
||||
#define _SW_HOME_ENABLE_
|
||||
#endif
|
||||
|
||||
#endif
|
||||
362
branches/0.15(sdk0.9_E3_fix_vol)/fsl.h
Normal file
362
branches/0.15(sdk0.9_E3_fix_vol)/fsl.h
Normal file
@ -0,0 +1,362 @@
|
||||
/*==============================================================================================*/
|
||||
/* Project = Selfprogramming library for 78K0R/Ix3/Kx3-L Single Voltage SST (MF2) Flash */
|
||||
/* Module = fsl.h */
|
||||
/* Version = V1.01 */
|
||||
/* Date = 28.03.2008 11:45:42 */
|
||||
/*==============================================================================================*/
|
||||
/* COPYRIGHT */
|
||||
/*==============================================================================================*/
|
||||
/* Copyright (c) 2007 by NEC Electronics (Europe) GmbH, */
|
||||
/* a company of the NEC Electronics Corporation */
|
||||
/*==============================================================================================*/
|
||||
/* Purpose: */
|
||||
/* constant, type and function prototype definitions used by the FSL */
|
||||
/* */
|
||||
/*==============================================================================================*/
|
||||
/* */
|
||||
/* Warranty Disclaimer */
|
||||
/* */
|
||||
/* Because the Product(s) is licensed free of charge, there is no warranty of any kind */
|
||||
/* whatsoever and expressly disclaimed and excluded by NEC, either expressed or implied, */
|
||||
/* including but not limited to those for non-infringement of intellectual property, */
|
||||
/* merchantability and/or fitness for the particular purpose. NEC shall not have any obligation */
|
||||
/* to maintain, service or provide bug fixes for the supplied Product(s) and/or the Application.*/
|
||||
/* */
|
||||
/* Each User is solely responsible for determining the appropriateness of using the Product(s) */
|
||||
/* and assumes all risks associated with its exercise of rights under this Agreement, */
|
||||
/* including, but not limited to the risks and costs of program errors, compliance with */
|
||||
/* applicable laws, damage to or loss of data, programs or equipment, and unavailability or */
|
||||
/* interruption of operations. */
|
||||
/* */
|
||||
/* Limitation of Liability */
|
||||
/* */
|
||||
/* In no event shall NEC be liable to the User for any incidental, consequential, indirect, */
|
||||
/* or punitive damage (including but not limited to lost profits) regardless of whether */
|
||||
/* such liability is based on breach of contract, tort, strict liability, breach of warranties, */
|
||||
/* failure of essential purpose or otherwise and even if advised of the possibility of */
|
||||
/* such damages. NEC shall not be liable for any services or products provided by third party */
|
||||
/* vendors, developers or consultants identified or referred to the User by NEC in connection */
|
||||
/* with the Product(s) and/or the Application. */
|
||||
/* */
|
||||
/*==============================================================================================*/
|
||||
/* Environment: PM plus (V6.30) */
|
||||
/* RA78K0(V1.20) */
|
||||
/* CC78K0(V2.00) */
|
||||
/*==============================================================================================*/
|
||||
|
||||
#ifndef __FSL_H_INCLUDED
|
||||
#define __FSL_H_INCLUDED
|
||||
|
||||
|
||||
/*==============================================================================================*/
|
||||
/* FSL type definitions */
|
||||
/*==============================================================================================*/
|
||||
typedef unsigned char fsl_u08;
|
||||
typedef unsigned int fsl_u16;
|
||||
typedef unsigned long int fsl_u32;
|
||||
|
||||
|
||||
/*==============================================================================================*/
|
||||
/* constant definitions */
|
||||
/*==============================================================================================*/
|
||||
|
||||
/*status code definitions returned by the FSL functions */
|
||||
#define FSL_OK 0x00
|
||||
#define FSL_ERR_FLMD0 0x01
|
||||
#define FSL_ERR_PARAMETER 0x05
|
||||
#define FSL_ERR_PROTECTION 0x10
|
||||
#define FSL_ERR_ERASE 0x1A
|
||||
#define FSL_ERR_BLANKCHECK 0x1B
|
||||
#define FSL_ERR_IVERIFY 0x1B
|
||||
#define FSL_ERR_WRITE 0x1C
|
||||
#define FSL_ERR_EEP_IVERIFY 0x1D
|
||||
#define FSL_ERR_EEP_BLANKCHECK 0x1E
|
||||
#define FSL_ERR_INTERRUPTION 0x1F
|
||||
|
||||
|
||||
/*==============================================================================================*/
|
||||
/* global function prototypes */
|
||||
/*==============================================================================================*/
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: initialization of selfprogramming environment */
|
||||
/* After initialization: */
|
||||
/* - the pointer to the data-buffer is stored */
|
||||
/* - all timing data are re-calculated according to the used system clock */
|
||||
/* */
|
||||
/* CAUTION: */
|
||||
/* The FSL_Init(&data_buffer) function is interruptible. Please use the */
|
||||
/* FSL_Init_cont(&data_buffer) to recall it as long return status is 0x1F. */
|
||||
/* */
|
||||
/* Input: data_buffer_pu08 - pointer to a data buffer of N...256 bytes */
|
||||
/* (used for data exchange between firmware and application) */
|
||||
/* Output: - */
|
||||
/* Returned: u08, status_code */
|
||||
/* = 0x00(FSL_OK), normal and means initialization OK */
|
||||
/* = 0x1F(FSL_ERR_INTERRUPTION), initialization interrupted by user interrupt*/
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_Init( fsl_u08 * data_buffer_pu08 );
|
||||
extern fsl_u08 FSL_Init_cont( fsl_u08 * data_buffer_pu08 );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: checks the voltage level (high or low) at FLMD0 pin */
|
||||
/* Input: - */
|
||||
/* Output: - */
|
||||
/* Returned: fsl_u08, status_code */
|
||||
/* = 0x00(FSL_OK), normal and means FLMD0=HIGH */
|
||||
/* = 0x01(FSL_ERR_FLMD0), error, FLMD0=LOW */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_ModeCheck( void );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: checks if specified block is blank */
|
||||
/* Input: block_u16 - block number has to be checked */
|
||||
/* Output: - */
|
||||
/* Returned: fsl_u08, status_code */
|
||||
/* = 0x00(FSL_OK), normal and means "block is blank" */
|
||||
/* = 0x05(FSL_ERR_PARAMETER), parameter error */
|
||||
/* = 0x1B(FSL_ERR_BLANKCHECK), blank-check error, means "block not blank" */
|
||||
/* = 0x1F(FSL_ERR_INTERRUPTION), blank-check interrupted by user interrupt */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_BlankCheck( fsl_u16 block_u16 );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: erase specified block */
|
||||
/* Input: block_u16 - block number has to be erase */
|
||||
/* Output: - */
|
||||
/* Returned: fsl_u08, status_code */
|
||||
/* = 0x00(FSL_OK), normal and means "block erased successfully" */
|
||||
/* = 0x05(FSL_ERR_PARAMETER), parameter error */
|
||||
/* = 0x10(FSL_ERR_PROTECTION), tried to erase protected area */
|
||||
/* = 0x1A(FSL_ERR_ERASE), erase error, retry up to max. 255 times */
|
||||
/* = 0x1F(FSL_ERR_INTERRUPTION), erasing interrupted by user interrupt */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_Erase( fsl_u16 block_u16 );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: performs internal verify on specified block */
|
||||
/* Input: block_u16 - block number has to be verified */
|
||||
/* Output: - */
|
||||
/* Returned: fsl_u08, status_code */
|
||||
/* = 0x00(FSL_OK), normal and means "block is verified" */
|
||||
/* = 0x05(FSL_ERR_PARAMETER), parameter error */
|
||||
/* = 0x1B(FSL_ERR_IVERIFY), internal verify error */
|
||||
/* = 0x1F(FSL_ERR_INTERRUPTION), verify interrupted by user interrupt */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_IVerify( fsl_u16 block_u16 );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: writes N words from the data buffer into flash */
|
||||
/* Input: s_address_u32 - starting flash address the data has to be written */
|
||||
/* See Condition 2) please. */
|
||||
/* my_wordcount_u08 - number of words (4 bytes) has to be written */
|
||||
/* Output: - */
|
||||
/* Condition: 1) (s_address_u32 MOD 4 == 0) */
|
||||
/* 2) most significant byte (MSB) of s_address_u32 has to be 0x00. */
|
||||
/* Means: 0x00abcdef 24 bit flash address allowed */
|
||||
/* 3) (word_count_u08 <= sizeof(data buffer)) NOT CHECKED BY LIBRARY !!!!! */
|
||||
/* Changed: - */
|
||||
/* Returned: fsl_u08, status code */
|
||||
/* = 0x00(FSL_OK), normal */
|
||||
/* = 0x05(FSL_ERR_PARAMETER), parameter error */
|
||||
/* = 0x10(FSL_ERR_PROTECTION), protection error */
|
||||
/* = 0x1C(FSL_ERR_WRITE), write error */
|
||||
/* = 0x1F(FSL_ERR_INTERRUPTION), write interrupted by user interrupt */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_Write( fsl_u32 s_address_u32, fsl_u08 word_count_u08 );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: writes N words from the data buffer into flash */
|
||||
/* Before "writing" a N-word blankcheck is performed. */
|
||||
/* After "writing" a N-Word internal verify is performed. */
|
||||
/* Input: s_address_u32 - starting destination address has to be written */
|
||||
/* my_wordcount_u08 - number of words (4 bytes) has to be written */
|
||||
/* Output: - */
|
||||
/* Condition: 1) (s_address_u32 MOD 4 == 0) */
|
||||
/* 2) (word_count_u08 <= sizeof(data buffer)) NOT CHECKED BY FIRMWARE !!!!! */
|
||||
/* Changed: - */
|
||||
/* Returned: fsl_u08, status code */
|
||||
/* = 0x00(FSL_OK), normal */
|
||||
/* = 0x05(FSL_ERR_PARAMETER), parameter error */
|
||||
/* = 0x10(FSL_ERR_PROTECTION), protection error */
|
||||
/* = 0x1C(FSL_ERR_WRITE), write error */
|
||||
/* = 0x1D(FSL_ERR_EEP_IVERIFY), verify error */
|
||||
/* = 0x1E(FSL_ERR_EEP_BLANKCHECK), blankcheck error */
|
||||
/* = 0x1F(FSL_ERR_INTERRUPTION), write interrupted by user interrupt */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_EEPROMWrite( fsl_u32 s_address_u32,
|
||||
fsl_u08 word_count_u08 );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: reads the security information */
|
||||
/* Input: destination_pu16 - destination address of the security info */
|
||||
/* The format of the security info is: "unsigned short int" */
|
||||
/* */
|
||||
/* Format of the security info: */
|
||||
/* bit_0 = 0 -> chip erase command disabled, otherwise enabled */
|
||||
/* bit_1 = 0 -> block erase command disabled, otherwise enabled */
|
||||
/* bit_2 = 0 -> write command disabled, otherwise enabled */
|
||||
/* bit_4 = 0 -> boot-area re-programming disabled, otherwise enabled */
|
||||
/* bit_8...bit_15 = 03H -> last block of the boot-area */
|
||||
/* other bits = 1 */
|
||||
/* Output: - */
|
||||
/* Changed: content of the data_buffer */
|
||||
/* Returned: fsl_u08, status code */
|
||||
/* = 0x00(FSL_OK), normal */
|
||||
/* = 0x05(FSL_ERR_PARAMETER), parameter error */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_GetSecurityFlags( fsl_u16 * destination_pu16 );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: read the boot flag i */
|
||||
/* Input: destination_pu08 - destination address of the bootflag info */
|
||||
/* The format of the boot-flag info is: "unsigned char" */
|
||||
/* The value of the boot info is 0x00 for cluster 0 and 0x01 for cluster 1. */
|
||||
/* Output: - */
|
||||
/* Changed: content of the data_buffer */
|
||||
/* Returned: fsl_u08, status code */
|
||||
/* = 0x00(FSL_OK), normal */
|
||||
/* = 0x05(FSL_ERR_PARAMETER), parameter error */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_GetActiveBootCluster( fsl_u08 * destination_pu08 );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: puts the last address of the specified block into *destination_pu32 */
|
||||
/* Input: *destination_pu32 - destination where the last-block-address */
|
||||
/* should be stored */
|
||||
/* block_u16 - block number of the last address is needed */
|
||||
/* Changed: - */
|
||||
/* Returned: fsl_u08, status code */
|
||||
/* = 0x00(FSL_OK), normal */
|
||||
/* = 0x05(FSL_ERR_PARAMETER), parameter error */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_GetBlockEndAddr( fsl_u32 * destination_pu32,
|
||||
fsl_u16 block_u16 );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: puts the information about the protected flash area into the function parameter */
|
||||
/* Input: *start_block_pu16 - destination where the FSW start block should be stored */
|
||||
/* *end_block_pu16 - destination where the FSW end block should be stored */
|
||||
/* Changed: - */
|
||||
/* Returned: fsl_u08, status code */
|
||||
/* = 0x00(FSL_OK), normal */
|
||||
/* = 0x05(FSL_ERR_PARAMETER), parameter error */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_GetFlashShieldWindow( fsl_u16 * start_block_pu16,
|
||||
fsl_u16 * end_block_pu16 );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: defines a new Flash-Shield-Window area inside the flash memory */
|
||||
/* Input: start_block_u16 - starting block of the Flash-Shield-Window (FSW) */
|
||||
/* end_block_u16 - ending block of the flash-Shield-Window (FSW) */
|
||||
/* Changed: - */
|
||||
/* Returned: fsl_u08, status code */
|
||||
/* = 0x00(FSL_OK), normal */
|
||||
/* = 0x05(FSL_ERR_PARAMETER), parameter error */
|
||||
/* = 0x10(FSL_ERR_PROTECTION), protection error */
|
||||
/* = 0x1A(FSL_ERR_ERASE), erase error */
|
||||
/* = 0x1B(FSL_ERR_IVERIFY), internal verify error */
|
||||
/* = 0x1F(FSL_ERR_INTERRUPTION), write interrupted by user interrupt */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_SetFlashShieldWindow( fsl_u16 start_block_u16,
|
||||
fsl_u16 end_block_u16 );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: Swapping of bootcluster 0 and 1 */
|
||||
/* */
|
||||
/* CAUTION !!!! */
|
||||
/* After this function the boot cluster are immediately swapped */
|
||||
/* Input: - */
|
||||
/* Output: - */
|
||||
/* Returned: fsl_u08, status code */
|
||||
/* = 0x00(FSL_OK), normal */
|
||||
/* = 0x05(FSL_ERR_PARAMETER), parameter error */
|
||||
/* = 0x10(FSL_ERR_PROTECTION), protection error */
|
||||
/* = 0x1A(FSL_ERR_ERASE), erase error */
|
||||
/* = 0x1B(FSL_ERR_IVERIFY), internal verify error */
|
||||
/* = 0x1F(FSL_ERR_INTERRUPTION), write interrupted by user interrupt */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_SwapBootCluster( void );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL command function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: sets specified security flag by dedicated command-function. */
|
||||
/* */
|
||||
/* There are following security levels: */
|
||||
/* a) chip-erase protection (cannot be reset by programmer !!!) */
|
||||
/* b) block-erase protection (can be reset by chip-erase on programmer) */
|
||||
/* c) write protection (can be reset by chip-erase on programmer) */
|
||||
/* d) boot-cluster protection (cannot be reset by programmer !!!) */
|
||||
/* */
|
||||
/* CAUTION !!!! */
|
||||
/* Each security flag can be written by the application only once */
|
||||
/* */
|
||||
/* Input: - */
|
||||
/* Output: - */
|
||||
/* Returned: fsl_u08, status code */
|
||||
/* = 0x00(FSL_OK), normal */
|
||||
/* = 0x05(FSL_ERR_PARAMETER), parameter error */
|
||||
/* = 0x10(FSL_ERR_PROTECTION), protection error */
|
||||
/* = 0x1A(FSL_ERR_ERASE), erase error */
|
||||
/* = 0x1B(FSL_ERR_IVERIFY), internal verify error */
|
||||
/* = 0x1F(FSL_ERR_INTERRUPTION), write interrupted by user interrupt */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern fsl_u08 FSL_SetChipEraseProtectFlag( void );
|
||||
extern fsl_u08 FSL_SetBlockEraseProtectFlag( void );
|
||||
extern fsl_u08 FSL_SetWriteProtectFlag( void );
|
||||
extern fsl_u08 FSL_SetBootClusterProtectFlag( void );
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Block type: FSL function */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* Purpose: defines the firmware operation method after interrupt service (ISR) execution. */
|
||||
/* Input: mode_u08 = 0x00, after RETI the firmware is continuing the interrupted command.*/
|
||||
/* = other, after RETI the firmware is interrupted with status 0x1F. */
|
||||
/* Changed: - */
|
||||
/* Returned: - */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
extern void FSL_SetInterruptMode( fsl_u08 mode_u08 );
|
||||
|
||||
#endif
|
||||
108
branches/0.15(sdk0.9_E3_fix_vol)/fsl_user.h
Normal file
108
branches/0.15(sdk0.9_E3_fix_vol)/fsl_user.h
Normal file
@ -0,0 +1,108 @@
|
||||
/*==============================================================================================*/
|
||||
/* Project = Selfprogramming library for 78K0R/Ix3/Kx3-L Single Voltage SST (MF2) Flash */
|
||||
/* Module = fsl_user.h */
|
||||
/* Version = V1.01 */
|
||||
/* Date = 28.03.2008 11:45:55 */
|
||||
/*==============================================================================================*/
|
||||
/* COPYRIGHT */
|
||||
/*==============================================================================================*/
|
||||
/* Copyright (c) 2007 by NEC Electronics (Europe) GmbH, */
|
||||
/* a company of the NEC Electronics Corporation */
|
||||
/*==============================================================================================*/
|
||||
/* Purpose: */
|
||||
/* user configurable constant/macros of the selfprogramming library */
|
||||
/* */
|
||||
/*==============================================================================================*/
|
||||
/* */
|
||||
/* Warranty Disclaimer */
|
||||
/* */
|
||||
/* Because the Product(s) is licensed free of charge, there is no warranty of any kind */
|
||||
/* whatsoever and expressly disclaimed and excluded by NEC, either expressed or implied, */
|
||||
/* including but not limited to those for non-infringement of intellectual property, */
|
||||
/* merchantability and/or fitness for the particular purpose. NEC shall not have any obligation */
|
||||
/* to maintain, service or provide bug fixes for the supplied Product(s) and/or the Application.*/
|
||||
/* */
|
||||
/* Each User is solely responsible for determining the appropriateness of using the Product(s) */
|
||||
/* and assumes all risks associated with its exercise of rights under this Agreement, */
|
||||
/* including, but not limited to the risks and costs of program errors, compliance with */
|
||||
/* applicable laws, damage to or loss of data, programs or equipment, and unavailability or */
|
||||
/* interruption of operations. */
|
||||
/* */
|
||||
/* Limitation of Liability */
|
||||
/* */
|
||||
/* In no event shall NEC be liable to the User for any incidental, consequential, indirect, */
|
||||
/* or punitive damage (including but not limited to lost profits) regardless of whether */
|
||||
/* such liability is based on breach of contract, tort, strict liability, breach of warranties, */
|
||||
/* failure of essential purpose or otherwise and even if advised of the possibility of */
|
||||
/* such damages. NEC shall not be liable for any services or products provided by third party */
|
||||
/* vendors, developers or consultants identified or referred to the User by NEC in connection */
|
||||
/* with the Product(s) and/or the Application. */
|
||||
/* */
|
||||
/*==============================================================================================*/
|
||||
/* Environment: PM plus (V6.30) */
|
||||
/* RA78K0(V1.20) */
|
||||
/* CC78K0(V2.00) */
|
||||
/*==============================================================================================*/
|
||||
|
||||
|
||||
#ifndef __FSL_USER_H_INCLUDED
|
||||
#define __FSL_USER_H_INCLUDED
|
||||
|
||||
|
||||
/*==============================================================================================*/
|
||||
/* constant definitions */
|
||||
/*==============================================================================================*/
|
||||
|
||||
|
||||
/* specify the CPU frequency in [Hz], only 2MHz....20MHz allowed */
|
||||
#define FSL_SYSTEM_FREQUENCY 4000000
|
||||
|
||||
/* define whether low-voltage mode is used or not */
|
||||
/* #define FSL_LOW_VOLTAGE_MODE */
|
||||
|
||||
/* size of the common data buffer expressed in [bytes] */
|
||||
/* the data buffer is used for data-exchange between the firmware and the selflib. */
|
||||
//#define FSL_DATA_BUFFER_SIZE 256
|
||||
#define FSL_DATA_BUFFER_SIZE 0
|
||||
|
||||
|
||||
/* customizable interrupt controller configuration during selfprogramming period */
|
||||
/* Bit --7-------6-------5-------4-------3-------2-------1-------0---------------------- */
|
||||
/* MK0L: PMK5 PMK4 PMK3 PMK2 PMK1 PMK0 LVIMK WDTIMK */
|
||||
/* MK0H: SREMK0 SRMK0* STMK0* DMAMK1 DMAMK0 SREMK3 SRMK3 STMK3 */
|
||||
/* MK1L: TMMK03 TMMK02 TMMK01 TMMK00 IICMK0 SREMK1 SRMK1 STMK1* */
|
||||
/* MK1H: TMMK04 SREMK2 SRMK2 STMK2* KRMK RTCIMK RTCMK ADMK */
|
||||
/* MK2L: PMK10 PMK9 PMK8 PMK7 PMK6 TMMK07 TMMK06 TMMK05 */
|
||||
/* MK2H: 1 1 1 1 1 1 1 PMK11 */
|
||||
/*------------------------------------------------------------------------------------------ */
|
||||
/* */
|
||||
/* Examples: */
|
||||
/* ========= */
|
||||
/*#define FSL_MK0L_MASK 0xF7 -> allow INTP1 interrupt during selfprogramming */
|
||||
/*#define FSL_MK0H_MASK 0xEF -> allow DMA1 interrupt during selfprogramming */
|
||||
/*#define FSL_MK1L_MASK 0xBF -> allow TM02 interrupt during selfprogramming */
|
||||
/*#define FSL_MK1H_MASK 0xFF -> all interrupts disabled during selfprogramming */
|
||||
/*#define FSL_MK2L_MASK 0xF7 -> allow INTP6 interrupt during selfprogramming */
|
||||
/*#define FSL_MK2H_MASK 0xFF -> all interrupts disabled during selfprogramming */
|
||||
/*------------------------------------------------------------------------------------------ */
|
||||
#define FSL_MK0L_MASK 0xFF /* all interrupts disabled during selfprogramming */
|
||||
#define FSL_MK0H_MASK 0xFF /* all interrupts disabled during selfprogramming */
|
||||
#define FSL_MK1L_MASK 0xFF /* all interrupts disabled during selfprogramming */
|
||||
#define FSL_MK1H_MASK 0xFF /* all interrupts disabled during selfprogramming */
|
||||
#define FSL_MK2L_MASK 0xFF /* all interrupts disabled during selfprogramming */
|
||||
#define FSL_MK2H_MASK 0xFF /* all interrupts disabled during selfprogramming */
|
||||
|
||||
|
||||
/* FLMD0 control bit */
|
||||
#define FSL_FLMD0_HIGH {BECTL.7 = 1;}
|
||||
#define FSL_FLMD0_LOW {BECTL.7 = 0;}
|
||||
|
||||
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* switch interrupt backu functionality ON/OFF using #define/#undef */
|
||||
/*----------------------------------------------------------------------------------------------*/
|
||||
/* #define FSL_INT_BACKUP */
|
||||
#undef FSL_INT_BACKUP
|
||||
|
||||
|
||||
#endif
|
||||
4163
branches/0.15(sdk0.9_E3_fix_vol)/hex/bsr_V0.1_090819.hex
Normal file
4163
branches/0.15(sdk0.9_E3_fix_vol)/hex/bsr_V0.1_090819.hex
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user