From 7258d5bf5ae993b5e8f3bee861abcd2f431c5eb2 Mon Sep 17 00:00:00 2001 From: n2232 Date: Fri, 2 Sep 2011 01:41:57 +0000 Subject: [PATCH] =?UTF-8?q?=E2=96=A02.0E=20=E3=82=BF=E3=82=B0=E3=81=86?= =?UTF-8?q?=E3=81=A1=E3=80=80SDK3.1=E3=81=AB=E5=8F=8E=E9=8C=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@404 013db118-44a6-b54f-8bf7-843cb86687b1 --- tags/2.03_SDK-3.1/OMakefile | 159 ++ tags/2.03_SDK-3.1/OMakeroot | 4 + tags/2.03_SDK-3.1/WDT.c | 2 + tags/2.03_SDK-3.1/WDT.h | 20 + tags/2.03_SDK-3.1/accero.c | 263 +++ tags/2.03_SDK-3.1/accero.h | 14 + tags/2.03_SDK-3.1/adc.c | 450 ++++++ tags/2.03_SDK-3.1/adc.h | 48 + tags/2.03_SDK-3.1/batt_params.c | 84 + tags/2.03_SDK-3.1/batt_params.h | 49 + tags/2.03_SDK-3.1/bsr.hex | 995 ++++++++++++ tags/2.03_SDK-3.1/bsr.lmf | Bin 0 -> 179864 bytes tags/2.03_SDK-3.1/bsr_k0r.map | 830 ++++++++++ tags/2.03_SDK-3.1/bsr_mcu.dr | 46 + tags/2.03_SDK-3.1/bsr_system.h | 67 + tags/2.03_SDK-3.1/config.h | 94 ++ tags/2.03_SDK-3.1/fsl.h | 362 +++++ tags/2.03_SDK-3.1/fsl_user.h | 113 ++ tags/2.03_SDK-3.1/hal.c | 177 +++ tags/2.03_SDK-3.1/hal.h | 16 + tags/2.03_SDK-3.1/hoge.bin | Bin 0 -> 16387 bytes tags/2.03_SDK-3.1/i2c_ctr.c | 297 ++++ tags/2.03_SDK-3.1/i2c_ctr.h | 210 +++ tags/2.03_SDK-3.1/i2c_mcu.c | 657 ++++++++ tags/2.03_SDK-3.1/i2c_mcu.h | 40 + tags/2.03_SDK-3.1/i2c_twl.c | 231 +++ tags/2.03_SDK-3.1/i2c_twl.h | 7 + tags/2.03_SDK-3.1/i2c_twl_defs.h | 196 +++ tags/2.03_SDK-3.1/incs.h | 58 + tags/2.03_SDK-3.1/incs_loader.h | 47 + tags/2.03_SDK-3.1/ini_VECT.c | 383 +++++ tags/2.03_SDK-3.1/jhl_defs.h | 29 + tags/2.03_SDK-3.1/led.c | 354 +++++ tags/2.03_SDK-3.1/led.h | 142 ++ tags/2.03_SDK-3.1/led_cam.c | 151 ++ tags/2.03_SDK-3.1/led_pow.c | 269 ++++ tags/2.03_SDK-3.1/loader.c | 406 +++++ tags/2.03_SDK-3.1/loader.h | 7 + tags/2.03_SDK-3.1/magic.c | 29 + tags/2.03_SDK-3.1/magic.h | 24 + tags/2.03_SDK-3.1/main.c | 91 ++ tags/2.03_SDK-3.1/nec_s_2_bsrbin2.rb | 82 + tags/2.03_SDK-3.1/pedo_alg_thre_det2.c | 575 +++++++ tags/2.03_SDK-3.1/pedo_lpf_coeff.c | 83 + tags/2.03_SDK-3.1/pedo_lpf_coeff.h | 84 + tags/2.03_SDK-3.1/pedometer.h | 36 + tags/2.03_SDK-3.1/pm.c | 1390 ++++++++++++++++ tags/2.03_SDK-3.1/pm.h | 216 +++ tags/2.03_SDK-3.1/pool.h | 24 + tags/2.03_SDK-3.1/reboot.c | 24 + tags/2.03_SDK-3.1/reboot.h | 6 + tags/2.03_SDK-3.1/renge/renge.c | 312 ++++ tags/2.03_SDK-3.1/renge/renge.h | 26 + tags/2.03_SDK-3.1/renge/renge_defs.h | 55 + tags/2.03_SDK-3.1/renge/renge_task_config.rb | 59 + .../2.03_SDK-3.1/renge/renge_task_immediate.h | 25 + tags/2.03_SDK-3.1/renge/renge_task_intval.h | 37 + tags/2.03_SDK-3.1/renge/renge_tasks.txt | 11 + tags/2.03_SDK-3.1/rtc.c | 177 +++ tags/2.03_SDK-3.1/rtc.h | 21 + tags/2.03_SDK-3.1/self_flash.c | 608 +++++++ tags/2.03_SDK-3.1/self_flash.h | 9 + tags/2.03_SDK-3.1/sw.c | 188 +++ tags/2.03_SDK-3.1/sw.h | 20 + tags/2.03_SDK-3.1/task_debug.c | 112 ++ tags/2.03_SDK-3.1/task_misc.c | 399 +++++ tags/2.03_SDK-3.1/task_status.c | 79 + tags/2.03_SDK-3.1/task_sys.c | 654 ++++++++ tags/2.03_SDK-3.1/user_define.h | 209 +++ tags/2.03_SDK-3.1/voltable.c | 48 + tags/2.03_SDK-3.1/voltable.h | 57 + tags/2.03_SDK-3.1/vreg_ctr.c | 591 +++++++ tags/2.03_SDK-3.1/vreg_ctr.h | 302 ++++ tags/2.03_SDK-3.1/vreg_twl.c | 156 ++ tags/2.03_SDK-3.1/vreg_twl.h | 127 ++ tags/2.03_SDK-3.1/yav_mcu_bsr.plg | 44 + tags/2.03_SDK-3.1/yav_mcu_bsr.pri | 1028 ++++++++++++ tags/2.03_SDK-3.1/yav_mcu_bsr.prj | 1407 +++++++++++++++++ tags/2.03_SDK-3.1/yav_mcu_bsr.prk | 23 + tags/2.03_SDK-3.1/yav_mcu_bsr.prw | 8 + tags/2.03_SDK-3.1/yav_mcu_bsr.sdb | 312 ++++ tags/2.03_SDK-3.1/ベースからの変更.xls | Bin 0 -> 26624 bytes 82 files changed, 17045 insertions(+) create mode 100644 tags/2.03_SDK-3.1/OMakefile create mode 100644 tags/2.03_SDK-3.1/OMakeroot create mode 100644 tags/2.03_SDK-3.1/WDT.c create mode 100644 tags/2.03_SDK-3.1/WDT.h create mode 100644 tags/2.03_SDK-3.1/accero.c create mode 100644 tags/2.03_SDK-3.1/accero.h create mode 100644 tags/2.03_SDK-3.1/adc.c create mode 100644 tags/2.03_SDK-3.1/adc.h create mode 100644 tags/2.03_SDK-3.1/batt_params.c create mode 100644 tags/2.03_SDK-3.1/batt_params.h create mode 100644 tags/2.03_SDK-3.1/bsr.hex create mode 100644 tags/2.03_SDK-3.1/bsr.lmf create mode 100644 tags/2.03_SDK-3.1/bsr_k0r.map create mode 100644 tags/2.03_SDK-3.1/bsr_mcu.dr create mode 100644 tags/2.03_SDK-3.1/bsr_system.h create mode 100644 tags/2.03_SDK-3.1/config.h create mode 100644 tags/2.03_SDK-3.1/fsl.h create mode 100644 tags/2.03_SDK-3.1/fsl_user.h create mode 100644 tags/2.03_SDK-3.1/hal.c create mode 100644 tags/2.03_SDK-3.1/hal.h create mode 100644 tags/2.03_SDK-3.1/hoge.bin create mode 100644 tags/2.03_SDK-3.1/i2c_ctr.c create mode 100644 tags/2.03_SDK-3.1/i2c_ctr.h create mode 100644 tags/2.03_SDK-3.1/i2c_mcu.c create mode 100644 tags/2.03_SDK-3.1/i2c_mcu.h create mode 100644 tags/2.03_SDK-3.1/i2c_twl.c create mode 100644 tags/2.03_SDK-3.1/i2c_twl.h create mode 100644 tags/2.03_SDK-3.1/i2c_twl_defs.h create mode 100644 tags/2.03_SDK-3.1/incs.h create mode 100644 tags/2.03_SDK-3.1/incs_loader.h create mode 100644 tags/2.03_SDK-3.1/ini_VECT.c create mode 100644 tags/2.03_SDK-3.1/jhl_defs.h create mode 100644 tags/2.03_SDK-3.1/led.c create mode 100644 tags/2.03_SDK-3.1/led.h create mode 100644 tags/2.03_SDK-3.1/led_cam.c create mode 100644 tags/2.03_SDK-3.1/led_pow.c create mode 100644 tags/2.03_SDK-3.1/loader.c create mode 100644 tags/2.03_SDK-3.1/loader.h create mode 100644 tags/2.03_SDK-3.1/magic.c create mode 100644 tags/2.03_SDK-3.1/magic.h create mode 100644 tags/2.03_SDK-3.1/main.c create mode 100755 tags/2.03_SDK-3.1/nec_s_2_bsrbin2.rb create mode 100644 tags/2.03_SDK-3.1/pedo_alg_thre_det2.c create mode 100644 tags/2.03_SDK-3.1/pedo_lpf_coeff.c create mode 100644 tags/2.03_SDK-3.1/pedo_lpf_coeff.h create mode 100644 tags/2.03_SDK-3.1/pedometer.h create mode 100644 tags/2.03_SDK-3.1/pm.c create mode 100644 tags/2.03_SDK-3.1/pm.h create mode 100644 tags/2.03_SDK-3.1/pool.h create mode 100644 tags/2.03_SDK-3.1/reboot.c create mode 100644 tags/2.03_SDK-3.1/reboot.h create mode 100644 tags/2.03_SDK-3.1/renge/renge.c create mode 100644 tags/2.03_SDK-3.1/renge/renge.h create mode 100644 tags/2.03_SDK-3.1/renge/renge_defs.h create mode 100644 tags/2.03_SDK-3.1/renge/renge_task_config.rb create mode 100644 tags/2.03_SDK-3.1/renge/renge_task_immediate.h create mode 100644 tags/2.03_SDK-3.1/renge/renge_task_intval.h create mode 100644 tags/2.03_SDK-3.1/renge/renge_tasks.txt create mode 100644 tags/2.03_SDK-3.1/rtc.c create mode 100644 tags/2.03_SDK-3.1/rtc.h create mode 100644 tags/2.03_SDK-3.1/self_flash.c create mode 100644 tags/2.03_SDK-3.1/self_flash.h create mode 100644 tags/2.03_SDK-3.1/sw.c create mode 100644 tags/2.03_SDK-3.1/sw.h create mode 100644 tags/2.03_SDK-3.1/task_debug.c create mode 100644 tags/2.03_SDK-3.1/task_misc.c create mode 100644 tags/2.03_SDK-3.1/task_status.c create mode 100644 tags/2.03_SDK-3.1/task_sys.c create mode 100644 tags/2.03_SDK-3.1/user_define.h create mode 100644 tags/2.03_SDK-3.1/voltable.c create mode 100644 tags/2.03_SDK-3.1/voltable.h create mode 100644 tags/2.03_SDK-3.1/vreg_ctr.c create mode 100644 tags/2.03_SDK-3.1/vreg_ctr.h create mode 100644 tags/2.03_SDK-3.1/vreg_twl.c create mode 100644 tags/2.03_SDK-3.1/vreg_twl.h create mode 100644 tags/2.03_SDK-3.1/yav_mcu_bsr.plg create mode 100644 tags/2.03_SDK-3.1/yav_mcu_bsr.pri create mode 100644 tags/2.03_SDK-3.1/yav_mcu_bsr.prj create mode 100644 tags/2.03_SDK-3.1/yav_mcu_bsr.prk create mode 100644 tags/2.03_SDK-3.1/yav_mcu_bsr.prw create mode 100644 tags/2.03_SDK-3.1/yav_mcu_bsr.sdb create mode 100644 tags/2.03_SDK-3.1/ベースからの変更.xls diff --git a/tags/2.03_SDK-3.1/OMakefile b/tags/2.03_SDK-3.1/OMakefile new file mode 100644 index 0000000..42baad6 --- /dev/null +++ b/tags/2.03_SDK-3.1/OMakefile @@ -0,0 +1,159 @@ +############################################################ +# 環境設定 +############################################################ + +# マイコン開発環境のインストール先を環境変数で指定する +NECEL_ROOT = + if $(defined-env NECEL_ROOT) + value $(absname $"$(getenv NECEL_ROOT)") + else + value "C:\Program Files (x86)\NEC Electronics Tools" + +# cygwinのインストール先を環境変数で指定する +CYGWIN_ROOT = + if $(defined-env CYGWIN_ROOT) + value $(absname $"$(getenv CYGWIN_ROOT)") + else + value "C:\cygwin" + +# GCCバージョンを環境変数で指定する +CYGWIN_GCC = + if $(defined-env CYGWIN_GCC) + value $(CYGWIN_ROOT)/bin/$"$(getenv CYGWIN_GCC)" + else + value $(CYGWIN_ROOT)/bin/gcc-4 + +#デバイスファイルは NECEL_ROOT/dev に置くこと +#自己アップデート用ライブラリは CC_LIBS_ROOT/以下に置くこと + +SUBDIR_INTER_ASM = $(dir inter_asm) + +CC_ROOT = $(NECEL_ROOT)/CC78K0R +CC_VER = W2.13 +CC = $(CC_ROOT)/$(CC_VER)/bin/cc78k0r.exe +RA = $(NECEL_ROOT)/RA78K0R/W1.33/bin/ra78k0r.exe +LK = $(NECEL_ROOT)/RA78K0R/W1.33/bin/lk78k0r.exe +OC = $(NECEL_ROOT)/RA78K0R/W1.33/bin/oc78k0r.exe +LCNV = $(NECEL_ROOT)/RA78K0R/W1.33/bin/lc78k0r.exe +DEVFILE_ROOT = $(NECEL_ROOT)/dev + +CC_LIBS_ROOT = $(CC_ROOT)/$(CC_VER)/lib78k0r +CC_INCLUDES_ROOT = $(CC_ROOT)/$(CC_VER)/inc78k0r +S0RM = s0rm.rel + +# セキュリティID +GIVALUE = 1B339499E033F240BFAAh + +# ユーザオプションバイト +GBValue = 7EFBFFh + +DEVICE_NAME = 9F0104 + +FSL_LIB = fsl.lib + +TARGET_NAME = bsr +TARGET_LMF = $(TARGET_NAME).lmf +TARGET_HEX = $(TARGET_NAME).hex + +# ここまで +############################################################ + +############################################################ +# ソースを追加したら編集する箇所 +############################################################ + +SRC_FILES[] = + loader + pm + i2c_ctr + main + magic + WDT + i2c_mcu + i2c_twl + led + rtc + vreg_ctr + vreg_twl + adc + renge\renge + accero + self_flash + sw + task_debug + task_misc + task_sys + pedo_alg_thre_det2 + ini_VECT + task_status + led_cam + led_pow + hal + batt_params + voltable + pedo_lpf_coeff + +INCLUDES[] = + ./ + renge + +# ここまで +############################################################ + +.PHONY: clean BeforeBuild + +AddRel(files) = + file_names = $(addsuffix .rel, $(files)) + return $(file_names) + +# *.cからinter_asm/*.asmを作るための関数 +AsmProgram(files) = + foreach(filename, $(files)) + asm_name = $(addprefix $(SUBDIR_INTER_ASM)/, $(addsuffix .asm, $(basename $(filename)))) + c_name = $(addsuffix .c, $(filename)) + + .SCANNER: $(asm_name): $(c_name) + $(CYGWIN_GCC) -MM -w -I$(CC_INCLUDES_ROOT) $(c_name) | sed 's/$(filename)\.o/$(SUBDIR_INTER_ASM)\/$(filename)\.asm/g' + + $(asm_name): $(c_name) + $(CC) -c$(DEVICE_NAME) -y$(DEVFILE_ROOT) -_msgoff -irenge -i$(CC_INCLUDES_ROOT) -ms -qvjl2w -sa$(SUBDIR_INTER_ASM) -zpb -no $(c_name) + + return $(addsuffix .c, $(files)) + +# inter_asm/*.asm から *.relを作るための関数 +RelProgram(files) = + foreach(filename, $(files)) + rel_name = $(addsuffix .rel, $(basename $(filename))) + asm_name = $(addprefix $(SUBDIR_INTER_ASM)/, $(addsuffix .asm, $(basename $(filename)))) + asm_win_name = $(addprefix $(SUBDIR_INTER_ASM)\\, $(addsuffix .asm, $(basename $(filename)))) + c_name = $(addsuffix .c, $(filename)) + + .SCANNER: $(rel_name): $(asm_win_name) + $(CYGWIN_GCC) -MM -w -I$(CC_INCLUDES_ROOT) $(c_name) | sed 's/\.o/\.rel/g' + + $(rel_name): $(asm_name) + $(RA) -c$(DEVICE_NAME) -y$(DEVFILE_ROOT) -_msgoff $(asm_win_name) + + return $(addsuffix .rel, $(basename $(files))) + +$(TARGET_LMF): $(RelProgram $(SRC_FILES)) $(AsmProgram $(SRC_FILES)) + $(LK) -y$(DEVFILE_ROOT) -_msgoff -o$(TARGET_LMF) $(CC_LIBS_ROOT)/$(S0RM) -gi$(GIVALUE) -pbsr_k0r.map -nkd -gb$(GBValue) -b$(CC_LIBS_ROOT)/$(FSL_LIB) -bcl0rdm.lib -bcl0rm.lib -bcl0rmf.lib -i$(CC_LIBS_ROOT) -dbsr_mcu.dr -s -w0 $(AddRel $(basename $(SRC_FILES))) + +$(TARGET_HEX) : $(TARGET_LMF) + $(OC) -y$(DEVFILE_ROOT) -_msgoff -o.\\$(TARGET_HEX) -nu -ki $(TARGET_LMF) + +BeforeBuild: +# ビルド前に必ず実行したい処理 +# OMakeがタイムスタンプではなくMD5でファイルの状態を管理しているので +# 残念ながら cleanしてからビルドしなおす必要がある + C:\Windows\system32\cmd.exe /c $(CYGWIN_ROOT)\bin\touch magic.c + if $(not $(file-exists $(SUBDIR_INTER_ASM))) + mkdir $(SUBDIR_INTER_ASM) + +hoge.bin: BeforeBuild $(TARGET_HEX) + C:\Windows\system32\cmd.exe /c ruby nec_s_2_bsrbin2.rb $(TARGET_HEX) + +clean: + rm -rf *.prn *.rel $(SUBDIR_INTER_ASM)/*.asm *.omc .omakedb .omakedb.lock + +.DEFAULT: hoge.bin diff --git a/tags/2.03_SDK-3.1/OMakeroot b/tags/2.03_SDK-3.1/OMakeroot new file mode 100644 index 0000000..16f4b11 --- /dev/null +++ b/tags/2.03_SDK-3.1/OMakeroot @@ -0,0 +1,4 @@ +# +# Include the OMakefile in this directory. +# +.SUBDIRS: . diff --git a/tags/2.03_SDK-3.1/WDT.c b/tags/2.03_SDK-3.1/WDT.c new file mode 100644 index 0000000..436a51c --- /dev/null +++ b/tags/2.03_SDK-3.1/WDT.c @@ -0,0 +1,2 @@ +#include "incs_loader.h" + diff --git a/tags/2.03_SDK-3.1/WDT.h b/tags/2.03_SDK-3.1/WDT.h new file mode 100644 index 0000000..2e28e9d --- /dev/null +++ b/tags/2.03_SDK-3.1/WDT.h @@ -0,0 +1,20 @@ +#ifndef _WDT_ +#define _WDT_ + + + +//========================================================= +#define WDT_RESTART_MAGIC 0xAC + + + +//========================================================= +// EHb`hbO^C}̃X^[g +// void WDT_Restart( void ); +#define WDT_Restart() WDTE = WDT_RESTART_MAGIC + +// KlȊOƗOŃZbg +#define mcu_wdt_reset WDTE = 0x0 + + +#endif diff --git a/tags/2.03_SDK-3.1/accero.c b/tags/2.03_SDK-3.1/accero.c new file mode 100644 index 0000000..fc1f98b --- /dev/null +++ b/tags/2.03_SDK-3.1/accero.c @@ -0,0 +1,263 @@ +/* ======================================================== +@xZT֌W +Ef[^XVŃf[^zグ背WX^XVACPUɊ荞 +EtOĂΕJEg +ExZT荞݂^XNo^ĉBiI2C̋Ȃǂ̂Łj + + ======================================================== */ +#ifndef _WIN32 + +#pragma SFR +#pragma NOP +#pragma HALT +#pragma STOP +#pragma ROT +// rorb, rolb, rorw, rolw +#pragma MUL +#pragma BCD + +#endif + +#include "config.h" +#ifndef _WIN32 + +#pragma interrupt INTP23 intp23_ACC_ready RB3 // xZTAf[^ + +#endif + + +#include "incs.h" + +#ifndef _WIN32 +#include +#endif +// ======================================================== +// WX^ +#define ACC_REG_WHOAMI 0x0F +#define ACC_REG_CTRL1 0x20 +#define ACC_REG_CTRL5 0x24 +#define ACC_REG_X 0x28 + +#define ACC_REG_FLG_BURST_ACCESS 0x80 + +// rbgʒu +#define ACC_bP_PM0 5 +#define ACC_bP_DR0 3 + +// rbgݒl +#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 ) + + + +// ======================================================== +#define ACC_RAW_DATA_SIZE 6 + + + +// ======================================================== +task_status tsk_soft_int( ); + +extern void DI_wt_chk(); + + + +/* ======================================================== +@E荞݂mFăf[^zグAWX^ɏo܂ + E{ł΃R[obN֐o^Ă΂ƂȂ̂łA + I2CgpHƂlƎł͂܂łłȂ̂łB + EvƂł + ======================================================== */ +task_status_immed tski_cbk_accero( ) +{ // i^jisro^܂ + static u8 err_count; + u8 acc_dat_buff[ ACC_RAW_DATA_SIZE ]; + + // xZTf[^WX^ւ̔f + if( iic_mcu_read( IIC_SLA_ACCEL, ( ACC_REG_X | ACC_REG_FLG_BURST_ACCESS ), ACC_RAW_DATA_SIZE, acc_dat_buff ) + != ERR_SUCCESS ) + { + err_count ++; + if( err_count < 8 ) + { + // gC + return( ERR_CONTINUE ); + } + else + { + // xZTُɂȂ̂Ŏ~߂ + vreg_ctr[ VREG_C_ACC_CONFIG ] &= ~( VREG_BITMASK_ACC_CONF_HOSU | VREG_BITMASK_ACC_CONF_ACQ ); + tski_acc_setup(); + vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_ACCERO_ERR; + return ( ERR_FINISED ); // ^XN̍폜͕Kv + } + } + else + { + memcpy( &vreg_ctr[VREG_C_ACC_XL], acc_dat_buff, ACC_RAW_DATA_SIZE ); + + err_count = 0; + // 펞pX // + // xXV荞 + 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 ); + // S~f[^̃Jǂ + if( ACC_VALID ) + { + u8 temp[ACC_RAW_DATA_SIZE]; + iic_mcu_read( IIC_SLA_ACCEL, ( ACC_REG_X | ACC_REG_FLG_BURST_ACCESS ), ACC_RAW_DATA_SIZE, temp ); + } + } + if(( system_status.pwr_state == ON ) + ||( system_status.pwr_state == SLEEP ) + ) + { + pedometer(); // v + } + } + return ( ERR_FINISED ); +} + + + + + +/*======================================================= +@xZT߃ANZX@[h + ========================================================*/ +task_status_immed tski_acc_read( ) +{ + vreg_ctr[VREG_C_ACC_W_BUF] = iic_mcu_read_a_byte( IIC_SLA_ACCEL, vreg_ctr[VREG_C_ACC_R_ADRS] ); + set_irq( VREG_C_IRQ1, REG_BIT_ACC_ACK ); + return ( ERR_FINISED ); +} + + + +/*========================================================= +@xZT߃ANZX@Cg + ========================================================*/ +task_status_immed tski_acc_write( ) +{ + iic_mcu_write_a_byte( IIC_SLA_ACCEL, vreg_ctr[VREG_C_ACC_W_ADRS], vreg_ctr[VREG_C_ACC_W_BUF] ); + set_irq( VREG_C_IRQ1, REG_BIT_ACC_ACK ); + return ( ERR_FINISED ); +} + + + +/*========================================================= +@xZT̐ݒ + ========================================================*/ +task_status_immed tski_acc_setup( ) +{ + + // x on/offݒ肷 + { + u8 str_send_buf[4]; + + str_send_buf[1] = 0x00; // ctrl2 HPF:normal, filterd, HPF for IRQ : dis/dis, HPF coeff:norm + + // sŝ߁ATSƂȊOiHႢjʂĐݒ + if( system_status.model == MODEL_TS_BOARD ) + { + str_send_buf[2] = bits8(0,0,0,0, 0,0,1,0); + } + else + { + str_send_buf[2] = bits8(0,0,0,1, 0,0,0,0); + } + str_send_buf[3] = 0x80; // ctrl3 block update:enable, MSB first, scale: +-2G(default), selftest: dis + + { + u8 acc_setting_sent = ( vreg_ctr[VREG_C_ACC_CONFIG] & + ( VREG_BITMASK_ACC_CONF_HOSU | VREG_BITMASK_ACC_CONF_ACQ )); + + do{ + EI(); + if( acc_setting_sent == 0 ) + { + PMK23 = 1; + // S~ + str_send_buf[0] = + ( ACC_BITS_PM_PDN << ACC_bP_PM0 | 0 << ACC_bP_DR0 | ACC_BITS_ALL_AXIS_ON ); + } + else + { + PMK23 = 0; + // 100Hz 荞 + str_send_buf[0] = + ( ACC_BITS_PM_NORM << ACC_bP_PM0 + | ACC_BITS_DR_100Hz << ACC_bP_DR0 + | ACC_BITS_ALL_AXIS_ON ); + } + + // ݌AʐMłtOXV + if( iic_mcu_write( IIC_SLA_ACCEL, ( ACC_REG_CTRL1 | ACC_REG_FLG_BURST_ACCESS ), 4, str_send_buf ) == I2C_ERR_NOSLAVE ) + { + vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_ACCERO_ERR; + }else{ + vreg_ctr[ VREG_C_STATUS_1 ] &= ~REG_BIT_ACCERO_ERR; + } + + // Jǂ݁BÕS~ǂݎ̂ + if( ACC_VALID ) + { + if( system_status.pwr_state == ON ) + { + u8 temp[ACC_RAW_DATA_SIZE]; + iic_mcu_read( IIC_SLA_ACCEL, ( ACC_REG_X | ACC_REG_FLG_BURST_ACCESS ), 6, temp ); + } + } + + // ZTɏɂĂŒSoC܂Ă܂Ȃ + DI_wt_chk(); + }while( acc_setting_sent != ( vreg_ctr[VREG_C_ACC_CONFIG] & + ( VREG_BITMASK_ACC_CONF_HOSU | VREG_BITMASK_ACC_CONF_ACQ )) ); + + } + } + + // DIԂ̂܂܋A + return ( ERR_FINISED ); +} + + + +/* ======================================================== + xZT荞 + I2CgpȂ̂ŁAǂݏo^XN̓o^ŝ + ======================================================== */ +__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( tski_cbk_accero ); + } + } + } +} diff --git a/tags/2.03_SDK-3.1/accero.h b/tags/2.03_SDK-3.1/accero.h new file mode 100644 index 0000000..fbf80d6 --- /dev/null +++ b/tags/2.03_SDK-3.1/accero.h @@ -0,0 +1,14 @@ +#ifndef _accero_ +#define _accero_ + + +#include "jhl_defs.h" +#include "pedometer.h" + + +/////////////////////////////////////////////////////////// +task_status_immed tski_cbk_accero( ); +task_status_immed tski_acc_setup( ); + + +#endif diff --git a/tags/2.03_SDK-3.1/adc.c b/tags/2.03_SDK-3.1/adc.c new file mode 100644 index 0000000..73a1cb6 --- /dev/null +++ b/tags/2.03_SDK-3.1/adc.c @@ -0,0 +1,450 @@ +/* ======================================================== + cJZ + nintendo + '09 Apr + ======================================================== */ +#include "incs.h" +#include "adc.h" +#include "pm.h" + +#include "led.h" + +#include "vreg_twl.h" + + +// ===================================================== // +static bit adc_updated; +static bit vol_changed_by_ctr; +bit vol_changed_by_twl; +static u8 vol_old; + +static u8 adc_raw_vol; +static u8 adc_raw_dep; + +u8 vol_polling; +u8 vol_level_twl; + +extern const u8 slider_to_codec[]; + + + +// ===================================================== // +typedef struct filter_work +{ + u8* value_used; + s8 diffs; // KIKAN̕΂ + s8 kikan; + u8 large_diff_count; +}filter_work; + + +static filter_work work_vr_3d = { + &vreg_ctr[ VREG_C_3D ] + // ͕̂slł悵Bconstɂ_ + }; + + +static u8 vol_data_ctr; +static u8 vol_data_ctr_tmp; +static filter_work work_vr_vol = { + &vol_data_ctr_tmp + // ͕̂slł悵Bconstɂ_ + }; + + +// twl 8iKvol̃jAl̋E +/* + twl32 -> 8 e[u + 0`1,`4,`8,`13,`18,`23,`28,31 + */ +static const u8 TWL_VOL_BOUNDARY[] = { + 1, 4, 8, 13, 18, 23, 28, 31 +}; + +// ===================================================== // +extern void nop8(); +static void adc_filter( u8 new_val, filter_work* work ); +static u8 adc_scaling( u8 ); +static void update_twl_vol( u8 sent_index ); + + + +// ===================================================== // +#define INTERVAL_TSK_ADC 15 + + + +/* ======================================================== + ADCݒƁAJn + + ȉ̃s͎ɂőEĎ܂B + EBT_TEMP,_P + EADIN1 + EVOL + + ֌W肻łʂ̂ƂŊǗĂ܂ + EPM_BT_DET,_P BT_chk + ======================================================== */ +void tsk_adc( ) +{ + if( adc_updated ) + { + adc_updated = false; + + // 3D ///////////////////////////////////////// + vreg_ctr[ VREG_C_3D ] = adc_raw_dep; // l + + // Volume ///////////////////////////////////// + { + vreg_ctr[ VREG_C_VOL_ADC_RAW ] = adc_raw_vol; + + adc_filter( adc_scaling( adc_raw_vol ), &work_vr_vol ); // ʂ*work_vr_volwvol_data_ctr ǂ݂ɂ... + vol_data_ctr = vol_data_ctr_tmp / 4; + + if( vol_old != vol_data_ctr ) + { + vol_changed_by_ctr = true; + vol_old = vol_data_ctr; + vol_polling = 3; +// renge_task_immed_add( tski_vol_update ); œo^ + } + } + + // obe /////////////////////////// + /* Ă΂܂ */ + } + + // YꂪƂȂ̂Ń|[O orz + if( vol_polling < 5 ) + { + renge_task_immed_add( tski_vol_update ); + vol_polling = (u8)(200 / SYS_INTERVAL_TICK) + 5; // 5/sec + } + vol_polling --; + + + ADCEN = 1; + ADM = bits8(0,0,0,0, 1,0,1,1); // ZNg[hAAfCLK/6 // + + ADPC = 0x06; // ADC|[g̃ZNg + ADS = ADC_SEL_3D; + nop8(); + ADCS = 1; // ADJnB // ܂Ł@@܂ł1us=8clkȏJ + + ADIF = 0; + ADMK = 0; +} + + + +void vol_reset() +{ + vol_old = vol_data_ctr; + vreg_ctr[ VREG_C_SND_VOL ] = vol_data_ctr; // 64i +} + + +/* ======================================================== +@VolXV܂B + @Ȏɓo^܂B +@@E[U[VolXC_𓮂 +@@EHorizonɋXVwꂽ@icodecZbgj +@@ETWLAvVol +======================================================== */ +task_status_immed tski_vol_update() +{ + static u8 sent_index, sent_index_twl; + static bit last_modifyer_is_twl; // false = ctr + + if( !( system_status.pwr_state == ON ) || + ( system_status.pwr_state == SLEEP )){ + return( ERR_FINISED ); + } + + // ǂ̉ʂɂ́H // + if( vol_changed_by_ctr ) + { + // XC_ + vol_changed_by_ctr = false; + last_modifyer_is_twl = false; + sent_index = vol_data_ctr; + } + else if( vol_changed_by_twl ) + { + // TWLAv + vol_changed_by_twl = false; + last_modifyer_is_twl = true; + if( vreg_twl[ REG_TWL_INT_ADRS_VOL ] == 0 ) + { + sent_index_twl = 0; + } + else + { + sent_index_twl = vreg_twl[ REG_TWL_INT_ADRS_VOL ] *2 +1; + } + sent_index = sent_index_twl; + } + else + { + // force_slider0ɂƂ & ܂Ƃ + // XC_TWL̍ŌɃZbgZbg + if( last_modifyer_is_twl ) + { + sent_index = sent_index_twl; + } + else + { + sent_index = vol_data_ctr; + } + } + + // WX^̍XV // + vreg_ctr[ VREG_C_SND_VOL ] = sent_index; + + // twlXV + update_twl_vol( sent_index ); + + // codecɓ` + /// lł + iic_mcu_write_a_byte_codec( CODEC_REG_VOL, slider_to_codec[ sent_index ] ); + + // set_irq( VREG_C_IRQ0, REG_BIT_VR_SNDVOL_CHANGE ); // 荞ݔp~ + return( ERR_FINISED ); +} + + +static void update_twl_vol( u8 sent_index ) +{ + // XP[O + if( sent_index == 0 ) + { + vreg_twl[ REG_TWL_INT_ADRS_VOL ] = 0; + } + else if( sent_index <= 4 ) + { + vreg_twl[ REG_TWL_INT_ADRS_VOL ] = 2; // P̓~bVOŐ + } + else + { + vreg_twl[ REG_TWL_INT_ADRS_VOL ] = sent_index/2 ; + } + + // 8iK̃xB@荞݂̂ɕKv + { + static u8 vol_twl_old; + + if( vol_twl_old != vreg_twl[ REG_TWL_INT_ADRS_VOL ] ) + { + // 8ixɕϊ + u8 new_level = 31; + u8 i; + + vol_twl_old = vreg_twl[ REG_TWL_INT_ADRS_VOL ]; + + for( i=0; i<=7; i++ ) + { + if( vreg_twl[ REG_TWL_INT_ADRS_VOL ] <= TWL_VOL_BOUNDARY[ i ] ) + { + new_level = i; + break; + } + } + vol_level_twl = new_level; + } + } +} + + + +/* ======================================================== +@OŎ̃`l +@@ʂI~߂ + ======================================================== */ +__interrupt void int_adc( ) +{ + volatile u8 adc_data = ADCRH; + + switch ( ADS ) + { +/* +case ( ADC_SEL_AMB_BRIT ): // ‹邳 + vreg_ctr[ VREG_C_AMBIENT_BRIGHTNESS ] = adc_data; + break; +*/ + + case ( ADC_SEL_3D ): + EI(); + adc_raw_dep = adc_data; + break; + + case ( ADC_SEL_VOL ): + EI(); + if( system_status.model == MODEL_TS_BOARD ) + { + adc_raw_vol = adc_data; + } + else + { + adc_raw_vol = 255 - adc_data; + } + + break; + + case ( ADC_SEL_BATT_TEMP ): + EI(); +#ifdef _ENABLE_HAL_ + if( vreg_ctr[ VREG_C_HAL_OVW_TEMPERATURE ] == 0xFF ) // HAL +#else + if( 1 ) +#endif + { + raw_adc_temperature = adc_data; + } + else + { + raw_adc_temperature = vreg_ctr[ VREG_C_HAL_OVW_TEMPERATURE ]; + } + + if(// (( vreg_ctr[ VREG_C_STATUS_1 ] & REG_BIT_MGIC_ERR ) == 0 ) && + (( system_status.pwr_state == ON ) || + ( system_status.pwr_state == SLEEP ) + ) + ) + { + renge_task_immed_add( tski_BT_temp_update ); + } + break; + +/* Ă΂܂ + case ( ADC_SEL_BATT_DET ): + break; +*/ + } + +// Ƃ܂Ƃȏ肻 + if( ADS < ADC_SEL_BATT_DET ) + { + ADS += 1; // ̃`l + } + else + { + ADCEN = 0; // ~߂Ă܂ + adc_updated = true; + } + ADIF = 0; // ȂƁAÕ`l̃f[^̊ŒɊ荞މ”\ +} + + + +/* ======================================================== + tsk_adcƋ邱ƂlĂ܂B + ======================================================== */ +u8 get_adc( u8 ch ) +{ + u8 temp; + + ADMK = 1; + ADIF = 0; + + ADCEN = 1; + ADM = bits8(0,0,0,0, 1,0,1,1); // ZNg[hAAfCLK/6 ///火 + + ADPC = 0x06; // ADC|[g̃ZNg + ADS = ch; + + nop8(); + + ADCS = 1; // ADJnB /// ܂Ł@ɁA1usȏJ + + ADIF = 0; + while( ADIF == 0 ){;} + temp = ADCRH; + ADCEN = 0; + + ADMK = 0; + return ( temp ); +} + + + + + +/* ======================================================== + VR̉“͈͂lăXP[O + + Volp@g񂷂Ȃ炻̂Ƃǂɂ +======================================================== */ +static u8 adc_scaling( u8 orig_val ) +{ + u16 temp; + + if( orig_val <= vreg_ctr[ VREG_C_VOL_CAL_MIN ] ) + { + return( 0 ); + } + if( orig_val >= vreg_ctr[ VREG_C_VOL_CAL_MAX ] ) + { + return( 255 ); + } + + temp = (u16)(( orig_val - vreg_ctr[ VREG_C_VOL_CAL_MIN ] ) * 256 ) / ( vreg_ctr[ VREG_C_VOL_CAL_MAX ] - vreg_ctr[ VREG_C_VOL_CAL_MIN ] ); + if( temp > 255 ) + { + temp = 255; + } + + return( (u8)( temp & 0xFF ) ); +} + + + + +/* ======================================================== + qXeVX V2 + ľܓIȓ܂ +======================================================== */ +#define KIKAN 16 +static void adc_filter( u8 new_val, filter_work *work ) +{ + if( abs( new_val - *( work -> value_used )) > 2 ) + { + // 傫ꂽ + work -> large_diff_count ++; + if( work -> large_diff_count > 16 ) + { + *( work -> value_used ) = new_val; + work -> diffs = 0; + work -> kikan = KIKAN; + } + } + else + { + work -> large_diff_count = 0; + // ߏ̒lłAԂłς΂Ă炻Ɋ񂹂 + if( *( work -> value_used ) < new_val ) + { + work -> diffs ++; + } + else if( *( work -> value_used ) > new_val ) + { + work -> diffs --; + } + + if( --( work -> kikan ) == 0 ) + { + if( ( work -> diffs ) == KIKAN ) +// if( ( work -> diffs ) > (s8)( KIKAN * 0.8 ) ) + { + *( work -> value_used ) = *( work -> value_used ) + 1; + } + else if( ( work -> diffs ) == ( -1 * KIKAN ) ) +// else if( ( work -> diffs ) < (s8)( -1 * KIKAN * 0.8 ) ) + { + *( work -> value_used ) = *( work -> value_used ) - 1; + } + work -> diffs = 0; + work -> kikan = KIKAN; + } + } +} + diff --git a/tags/2.03_SDK-3.1/adc.h b/tags/2.03_SDK-3.1/adc.h new file mode 100644 index 0000000..6f4ad04 --- /dev/null +++ b/tags/2.03_SDK-3.1/adc.h @@ -0,0 +1,48 @@ +#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_3D 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 + + + +/////////////////////////////////////// +extern u8 vol_polling; +extern u8 vol_level_twl; + + + +/////////////////////////////////////// +u8 get_adc( u8 ch ); +void vol_reset(); + + + +#endif diff --git a/tags/2.03_SDK-3.1/batt_params.c b/tags/2.03_SDK-3.1/batt_params.c new file mode 100644 index 0000000..74d87df --- /dev/null +++ b/tags/2.03_SDK-3.1/batt_params.c @@ -0,0 +1,84 @@ +#include "jhl_defs.h" + +#include "batt_params.h" + +/* ======================================================== + eЃobe[p[^ + ======================================================== */ +const bt_param_ bt_param[ _BT_PARAM_NUM_ ] = +{ + // ctr //////////////////////////////////////////////// + // BT_PARAM_CTR_MAXELL + { + { + 0xAE, 0xF0, 0xB4, 0x30, 0xB7, 0x40, 0xBA, 0x30, + 0xBB, 0x50, 0xBB, 0xB0, 0xBC, 0x50, 0xBD, 0x10, + 0xBD, 0x60, 0xBD, 0xB0, 0xBF, 0xE0, 0xC2, 0xB0, + 0xC4, 0x20, 0xC7, 0xB0, 0xCA, 0xE0, 0xCE, 0x10, + 0x01, 0xF0, 0x14, 0x10, 0x14, 0x20, 0x06, 0x30, + 0x63, 0x90, 0x49, 0x00, 0x6E, 0x00, 0x77, 0x70, + 0x7B, 0x00, 0x19, 0x00, 0x19, 0x00, 0x17, 0xF0, + 0x1C, 0x60, 0x12, 0x00, 0x12, 0x00, 0x12, 0x00 + }, + 2, + { 92, (u8)(-256* 0.79), (u8)(-256* 4.35) }, + 0xD800, + { 0xEA, 0xE8 } + }, + + // BT_PARAM_CTR_PANA + { + { + 0x8C, 0x30, 0x9C, 0x10, 0xA5, 0xE0, 0xB0, 0x40, + 0xB1, 0xC0, 0xB2, 0x00, 0xB2, 0x50, 0xB3, 0x10, + 0xB4, 0x90, 0xB6, 0x20, 0xB8, 0x60, 0xBA, 0x50, + 0xBF, 0xA0, 0xC6, 0xB0, 0xCE, 0x90, 0xD0, 0x20, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, + 0x7B, 0x30, 0x68, 0x60, 0x20, 0x00, 0x17, 0x00, + 0x17, 0x30, 0x12, 0xF0, 0x0D, 0xE0, 0x07, 0xF0, + 0x07, 0x00, 0x09, 0x30, 0x01, 0xC0, 0x01, 0xC0 + }, + 1, + { 171, (u8)(-256* 1.00), (u8)(-256* 2.60) }, + 0xDA20, + { 0x69, 0x67 }, + }, + + // spfl /////////////////////////////////////////////// + // BT_PARAM_SPFL_MAXELL + { + { + 0xA1, 0x20, 0xB7, 0x50, 0xB9, 0xD0, 0xBB, 0x00, + 0xBC, 0x30, 0xBC, 0x60, 0xBC, 0xA0, 0xBD, 0x10, + 0xBD, 0xC0, 0xBE, 0x70, 0xBF, 0xD0, 0xC2, 0xA0, + 0xC4, 0x00, 0xC8, 0x50, 0xCC, 0x80, 0xD0, 0xB0, + 0x01, 0xA0, 0x25, 0x10, 0x18, 0xB0, 0x17, 0xC0, + 0x95, 0x20, 0x6F, 0xE0, 0x7C, 0x60, 0x35, 0x10, + 0x35, 0x00, 0x37, 0xF0, 0x16, 0xF0, 0x1C, 0xA0, + 0x17, 0x30, 0x11, 0xD0, 0x11, 0xF0, 0x11, 0xF0 + }, + 2, + { 94, (u8)(-256* 0.35), (u8)(-256* 3.85) }, + 0xDAB0, + { 0xF5, 0xF3 } + }, + + // BT_PARAM_SPFL_PANA !!dummy!! + { + { + 0x8C, 0x30, 0x9C, 0x10, 0xA5, 0xE0, 0xB0, 0x40, + 0xB1, 0xC0, 0xB2, 0x00, 0xB2, 0x50, 0xB3, 0x10, + 0xB4, 0x90, 0xB6, 0x20, 0xB8, 0x60, 0xBA, 0x50, + 0xBF, 0xA0, 0xC6, 0xB0, 0xCE, 0x90, 0xD0, 0x20, + 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, 0x00, 0x20, + 0x7B, 0x30, 0x68, 0x60, 0x20, 0x00, 0x17, 0x00, + 0x17, 0x30, 0x12, 0xF0, 0x0D, 0xE0, 0x07, 0xF0, + 0x07, 0x00, 0x09, 0x30, 0x01, 0xC0, 0x01, 0xC0 + }, + 1, + { 171, (u8)(-256* 1.00), (u8)(-256* 2.60) }, + 0xDA20, + { 0x69, 0x67 }, + } +}; + diff --git a/tags/2.03_SDK-3.1/batt_params.h b/tags/2.03_SDK-3.1/batt_params.h new file mode 100644 index 0000000..343b3f4 --- /dev/null +++ b/tags/2.03_SDK-3.1/batt_params.h @@ -0,0 +1,49 @@ +#ifndef _bt_params_h_ +#define _bt_params_h_ + +#include "jhl_defs.h" +/* + dr CTR | SPFL | YBS + 0 ID = 0 maxell + 120 1 + 360 2 + 750 @ 3 + 1.3k@ 4 + 2.7k 5 pana + 8.2k@ 6 +*/ + + +typedef enum +{ + BT_PARAM_CTR_MAXELL = 0, + BT_PARAM_CTR_PANA, + BT_PARAM_SPFL_MAXELL, + BT_PARAM_SPFL_PANA, + BT_PARAM_SHRIMP_MAXELL, + BT_PARAM_SHRIMP_PANA, + _BT_PARAM_NUM_ +} BT_TYPE; + +typedef struct +{ + u8 rcomp; + s16 up,down; +} rcomp_; + +typedef struct +{ + u8 hi,low; +} verify_; + +typedef struct +{ + u8 mg_param[64]; + u8 v_scale; + rcomp_ rcomp; + u16 ocv; + verify_ verify; +} bt_param_; + + +#endif diff --git a/tags/2.03_SDK-3.1/bsr.hex b/tags/2.03_SDK-3.1/bsr.hex new file mode 100644 index 0000000..1afe94a --- /dev/null +++ b/tags/2.03_SDK-3.1/bsr.hex @@ -0,0 +1,995 @@ +:020000002C0DC5 +:040010002A472C4708 +:02001C00D848C2 +:020024007F4912 +:02002A00CA49C1 +:08003400F74A9A4AF34A724DA3 +:02004A002E473F +:02005A006847F5 +:02006200F74C59 +:060080008B4BC44B0E4C3B +:0400C0007EFBFF04C0 +:0A00C4001B339499E033F240BFAA09 +:1000CE00C7C1FBF8FFCEABACC736F00071F4C6610A +:1000DE00D8710006F98EA89C018C015C10D1DD0A46 +:1000EE007110A6FB710006F9EF0B8C015C80D161DB +:1000FE00E8710006F98F06F931030EF6B1BBF66111 +:10010E004900DD05618900EFF5FDDF01FD3101FDDF +:10011E008901FDF709FD2E09FD762FFD742CEFA543 +:10012E00C0C6D7C7360000674C09DE3F318E04F6D5 +:10013E000FC1317B9EFDC411897267318E04F64F5B +:10014E0014896142DF03F6EF01E660610667318EC6 +:10015E00124900207267318E04F64F14896142DF16 +:10016E0003F6EF01E660610687EFBC40F84F3A6197 +:10017E00E88666D161E8FD9806C6D751065B0C315C +:10018E001A9F08F94008F901DF05CD3705EF03CDB9 +:10019E0037078F06F95CE39F06F951035B04318E36 +:1001AE00E7240000DD1023DD0823DF0E712006F9A1 +:1001BE00D7713006F9D7714006F9D7717BFACEA008 +:1001CE0010CEA180E5F300000000CEA408F5AAFF32 +:1001DE00D78F06F9310508CD0003CD030FEF08CDFB +:1001EE00030EF690BFB401CD0408CD0508F521FF2E +:1001FE00CE22E9CE23F8CE24F3CE25FACE26FCCE9F +:10020E00275FCE2EFCCF1105F8CF120511CF35008A +:10021E0002CF370019CF530006CBEEFEFFCE38319A +:10022E00CE3970CF38050A308700BF1801BF1A01CA +:10023E00BF1C01BF1E01D7C7C1C1FBF8FFCEABACBF +:10024E008C02D1DD12616902305C03BBF66149009C +:10025E00DDEE618900EFF51004C6D7717BFAD7D7B2 +:10026E00C7F616FD9204FD6902313293087132937E +:10027E00717AFAEF0C717AFAA7F647DFE95203EFBB +:10028E0001F2C6D7C7C1C1FBF8FF17A1C1E0C18CEF +:10029E000A70C18C0270FDB3021006629D508C0173 +:1002AE00721004C6D7C7C1FBF8FFFD6E02D2DD0483 +:1002BE005203EF618B70FDDF03D2DD077133935272 +:1002CE0002EF528C0870FDFB03FD46048B6C01702F +:1002DE00FDFB03300400BF2401301740BF1C01306A +:1002EE000400BF22018C0A91DF04F6BF2A01710BB4 +:1002FE00E2CE44FF3182E202EFFAAC0C148E449946 +:10030E0061790C61690A8C0AD1DFDAFD6F04710B19 +:10031E00E2713393F2C0C6D7C7C1FBF8FFFD6E0280 +:10032E00D2DD045203EF25710AE68B70FDDF03D296 +:10033E00DD077133935202EF138C0870FDFB038CB3 +:10034E000A70FDFB03FD6F04713393F2C0C6D7C76D +:10035E00C1FBF8FFFD6E02D2DD045203EF70710A8D +:10036E00E6710BE28B70FDDF03D2DD077133935222 +:10037E0002EF5B710BE231229344C73422FBAC0CCB +:10038E001652048B99A5A792DFF9C68B9D4D8C084A +:10039E009D4E8C0A9D4F3184BD02EFFA717ABDCE0F +:1003AE00B144CBB422FB8C0A318EBEB8CEBB4871A1 +:1003BE004BE1714BE5710ABD8C089E44EF0F710B3A +:1003CE00E68C089E448C0A9D4CAC0CBD4AF2C0C60D +:1003DE00D7C716FD1E04AF0401BF0C0117FDFB03AA +:1003EE00D2DD07FD6F045202EF01F2C6D7C71671B8 +:1003FE000AE6710BE2669E443182E202EFFAF642A1 +:10040E000401DD09AF0401BF0C01E2EF01F2C6D712 +:10041E00AF2801085CFB08BF2801FD6D02AF280163 +:10042E005CFBBF2801300400BF2A01301780BF1CBF +:10043E0001300400BF2201D7AF2401086C0408BFAD +:10044E002401AF28016C0F086C0B08BF2801FD6D4D +:10045E0002AF2A01085CFB08BF2A01FD6D02ED1EEA +:10046E0004300400BF2401F6BF2A01300B0BBF2855 +:10047E0001FD6D02300B0FBF2801FD6D02300F0F15 +:10048E00BF2801D731449301D77132936A0E03719D +:10049E003B25713B23E0FD45027120F000FD6D020E +:1004AE00F6BF26015024BF1401CB440014300F0FA9 +:1004BE00BF2801712393710BE2710AE6FD1E04CE73 +:1004CE0044FF3182E202EFFAFD6F04AF0401BF0C6C +:1004DE0001713393714293D731349302EFFAFD4693 +:1004EE0004713A25713A235A0EFC7128F0007143BB +:1004FE0093D7C7880616FD6E02D2DD045203EF367F +:10050E00710AE650A4FDDF03D2DD07713393520268 +:10051E00EF2417FDFB036770FDFB03FD460450A49B +:10052E00FDFB035020FDFB03D851FDFB03A451FD41 +:10053E006F04713393F2C6D7C72008FBF8FFFD9600 +:10054E00085014C15008FDC807C0CC07048C074CD6 +:10055E0014DE0C8C07318EFD0E0A615907EFEECCBE +:10056E0007048C074C1461C8ED3406CC06008C06CB +:10057E004C0461C8ED1306300AF9BC02F6BBCEABD3 +:10058E00AC31B2D109C73641057184C6DEF3F1C76D +:10059E003641057184C661DC9C05713BD1AC0214F9 +:1005AE008F40059971505005617902617900F0E133 +:1005BE00614900DD09C73641057184C6DEC3F1C746 +:1005CE003641057184C661DC0E059C055040C18C18 +:1005DE0007318E31AD128C06318E318D03BDD8317F +:1005EE00FFBDDADADAADD8FDDA0CC0D2DD0C500878 +:1005FE00C15014FDC807C0FD970B8C05D1DF0661F5 +:10060E005906ED7C058C07318EFD120AD2DD0C5099 +:10061E0008C15014FDC807C0FD970B8C05D1DF062D +:10062E00615907ED700571605005CC0400CC0500D2 +:10063E008C054C09DE2B8C05318E04F61FC1317BE7 +:10064E009EFDC41189728C05318E04F64F1489619A +:10065E0042DF03F6EF01E6600E049C04615905EFDC +:10066E00CF41001140F81F3A61E86159048C04D162 +:10067E00DF08FD980BFDAA0CEF0C5008C15014FDBD +:10068E00C807C0FD970B1008C6D7C72004FBF8FF9C +:10069E00715B21CC0100F6BC02AC02440900DE3EC7 +:1006AE00AC0204F60F144100118972AC020C501406 +:1006BE00896142DF03F6EF01E6600E019C01AC0298 +:1006CE001249005072AC0204F67F14896142DF03B6 +:1006DE00F6EF01E6600E019C01617902EFBB40F678 +:1006EE007FFF61F86159018C01D161F8ED9607CC5D +:1006FE000100717AFAFD9204711300711B207103CF +:10070E0003710205E0C15003FD352BC05013FD45AA +:10071E0002500FC1E0FD352BC0CEABAC6159018C40 +:10072E000191DD068C014C03DF03E6EF01F66061FB +:10073E00FB7151018C014C0861F8CC01003132077C +:10074E0005A024FCEF03F524FC4024FC11DC0DF580 +:10075E0024FCF0C15003FD352BC0EF12E6BC02F6AF +:10076E00614902DDB400000000617902EFF1CE377D +:10077E0008CBE4FFFFCBE6FFF7CED4FFCF37000860 +:10078E00F5120561FDF5ABFFFD9608D25008C1507C +:10079E0014FDC807C0D2FD970B1004C6D73184BD17 +:1007AE0002EFFA717BBDCBE4FFFFCBE6FFFFCBD4AC +:1007BE00FFFF717ABED7717BBED7C7C1200CFBF885 +:1007CE00FF8C0C318E31ADC1317B9DD4C0BC068DFA +:1007DE00D49C088C149C0B8C14318E040C00128C3F +:1007EE000B318EBDD813FD690F61C8ED9108CEABEC +:1007FE00ACCC05068C0B318EFD0A0AD2DD158C0BA6 +:10080E00318EFD0E0A6169058C05D1DFE7FDC40747 +:10081E00E2EF71CC0A008C0A4C04DE54F6BC0230B6 +:10082E000AF9BBAC06148C089EFD118972AB1462DA +:10083E0099AC06A1BC06617900617902F0E16149CB +:10084E0002DFE05040C18C0B318E31AD128C0A317B +:10085E008E318D03BDD831FFBDDADADAADD8FDDACF +:10086E000CC0D2DD06FDC407E2EF1961590AEFA6EE +:10087E008C0B318EFD120AD2DD03E2EF0761590BAC +:10088E00EDE507F2100EC6D7C7717B9D717BFAFDA1 +:10089E00AB07300AF9FDBD0AFD480AC6D7FD96081A +:1008AE00FD970BFDC407F5ABFFF2D7C731049706D2 +:1008BE007110B3FBEF047118B3FB8FB3FB7B8A7619 +:1008CE00D1DD5B8FB3FB9D8A4004F903DF22665CAA +:1008DE0010D1DD1C8FB3FB5C10D1DD0B5080C150ED +:1008EE0011FD8534C0EF095040C15011FD8534C053 +:1008FE004004F903DD064004F904DF22665C02D1F0 +:10090E00DD1C8FB3FB5C02D1DD0B5040C15010FDDE +:10091E008534C0EF095020C15010FD8534C0C6D7B4 +:10092E00C7360000665C80D1DD10675C80D1DF05C4 +:10093E00713396EF0B713296EF0671040771319693 +:10094E00665C40D1DD10675C40D1DF05714396EFE8 +:10095E000B714296EF06711405714196665C01D1DA +:10096E00DD10675C01D1DF05715396EF0B71529666 +:10097E00EF06713407715196665C02D1DD10675C2B +:10098E0002D1DF05716396EF1D716296EF18400775 +:10099E00F901DF08710402716196EF0AC73610057E +:1009AE0071C4C6716196665C04D1DD10675C04D1BA +:1009BE00DF05717396EF0B717296EF067144077136 +:1009CE007196665C08D1DD10675C08D1DF05710396 +:1009DE0097EF0B710297EF06711407710197665C22 +:1009EE0010D161E8715AD1C6D7F5F6FBF5F8FBCFF9 +:0C09FE00FEFBFFCFFAFBFFCFFBFBFFD797 +:100A0A005208EF065203EF025206FEE600FE1B00F2 +:100A1A00DC16089F03088F0408089F040862FE2456 +:100A2A0000089F0408EEBF00EEBA00C1C514410ECB +:100A3A0011D9D0FF118FD1FF312E45C4C0D7F23161 +:100A4A00A2C401E2D79DE261DD4C09DF12717BFA93 +:100A5A00C18F06089F25FDC0CF060800EE2700318A +:100A6A00F2FA04CF0608004C00DF05D50008DD16AF +:100A7A0061DD717BFAD50608DD0ACDE31F61CD6120 +:100A8A00CDEE160061CDFED40061FFFE9A00FCF89F +:100A9A00FF0EFEB20061CDFED5004C09DF0EC18FFC +:100AAA0006086F25FD9F0608C0EE0400CF06080061 +:100ABA00F8E3D75200EF025202FE3700CF24FD00BE +:100ACA00CF060800BF0408C716629F00084100113C +:100ADA008F1A209B4100118F1B209F0108C65100CD +:100AEA00FE62FFEF025205CF060800C1510CFE0A52 +:100AFA0000C0D7C1511DFE0200C0D761DD717BFA6B +:100B0A0070CEC0A59EC47CFF9EC4609EC461CDD732 +:100B1A0061DD717BFAC18EC45C1BFED6FFCF06086D +:100B2A0001FED7FFC061CDD731F2FA1AC1AEE4BFD8 +:100B3A0016FDAEE6BF18FDAED4BF1AFD30FFFFBEEC +:100B4A00E4BEE6BED4C0D731F2FA11C1AF16FDBE7B +:100B5A00E4AF18FDBEE6AF1AFDBED4C0D7C1BF1CB4 +:100B6A00FD13BF1EFD15BF20FD17BF22FDC0D7AF65 +:100B7A001CFDDB1EFDEB20FDFB22FDD7534B305243 +:100B8A005430324E323030475631323000FFC15085 +:100B9A00FEFEAB0061DD717BFACF060800FE0A009B +:100BAA00FEA4FF61CDF8E3EECF00C7FB0408BF1631 +:100BBA00FD8FC0009C05C5C337040600BF18FD356C +:100BCA0036FC0B300000522BFE6600C2C4C630AAA7 +:100BDA000BB800300000B8022004AF18FDB800308E +:100BEA000F00B802AF16FD61FF520AFE3AFFECF899 +:100BFA00FF0E717BFAC1C7FB04088C05C65C80FE38 +:100C0A000200C0D761DD717BFA70CFC0FFA59FC01B +:100C1A00007CFF9FC000609FC00061CDD7618BFE42 +:100C2A00E2FF717BBE410011FB000017CEFC0061A0 +:100C3A00CB089EFDF31161C999A58392DFF7D7FE10 +:100C4A00B1FED524FDDF23C1CF0308035109FEF409 +:100C5A00FDC0D2DF37FE3800A20408CF03080751CF +:100C6A0009FEE1FDD2B20408DF22C7FB0408318382 +:100C7A0002C6D7C6510AFECCFD624C1FDF06CF243E +:100C8A00FD01EF04CF24FD00C0EE5BFEC0EE55FE71 +:100C9A00C7C1FB04088B31196C0161589BC0C6D7C8 +:100CAA00717BFAFE4DFEAF0408040600C114360E2D +:100CBA000C300000522DF3FE77FF8FC000FE2BFE92 +:100CCA0061CF5C807C8073C0041900CEFC0F61CBBD +:100CDA00C55404EF03C55417FE18FEC7360008BBF7 +:100CEA00629C0288089C03D1DD334C41DE2F70F1EF +:100CFA00312DB161090033081C000851FF612A41F6 +:100D0A000E118FD0FF613B118FD1FF6138DC0E8B42 +:100D1A005C03DF0964C6C4FE2BFDEECAFDC6C4EE41 +:020D2A00C3FD07 +:100D2C0061CF5100718C7109FECBF800FEFCC9013A +:100D3C0000F6BF00F953C0F693935820FEDFF9413B +:100D4C000036824D34CCFCEF05118B99A7A51744C6 +:100D5C00CC4DDFF53602F930CCFCEF04CC0000A70B +:100D6C0047DFF9410036CC4D3420FEEF05118B994D +:100D7C00A7A51744DC4DDFF53630FE3092FEEF04AC +:100D8C00CC0000A747DFF9FCCE0000EFFE61DD715F +:100D9C007BFABEF0ADD8BEF200AEF661CDD7C36122 +:100DAC00DD717BFABEF0ADD8BEF200DBF6FFADDC38 +:100DBC00BEF000AEF6BDD8AEF40312ADDABEF20052 +:100DCC00AEF661CD03BDDAC2D7C3F33174D9088353 +:100DDC00C1F626D8BDD8C031750683C312F623C21E +:100DEC00FDF70D93DF0312F623C2D7440000DD2676 +:100DFC0061DD717BFACFE80080BEF6F6BEF4BEF280 +:100E0C00ADD8BEF0CFE800818FE8003103FAAEF028 +:100E1C00F5E80061CDD7B1D7C3F33174D90883C1DC +:100E2C00F626D8BDD8C0317505C312F623C2FD45D0 +:100E3C000E93DF0312F623C2D7440000DD2761DDD9 +:100E4C00717BFACFE80080BEF6F6BEF4BEF2ADD8E8 +:100E5C00BEF0CFE800818FE8003103FAAFE000F577 +:100E6C00E80061CDD7ADD8D7C3F33174DB0F83C1A4 +:100E7C00F626D8BDD861317026DABDDAC031750DD1 +:100E8C0083C312F626DCBDDC61317023C2FDAD0ECE +:100E9C0093DF0CF626D8BDD861317026DABDDAC2E4 +:100EAC00D7C161686BDC6BDDC0DD2F61DD717BFA56 +:100EBC00CFE80080BEF4ADDCBEF6ADD8BEF0ADDA46 +:100ECC00BEF2CFE800818FE8003103FAAEF0BDD856 +:100EDC00AEF2BDDAF5E80061CDD7F6BDD8BDDAD7F4 +:100EEC008292DD2B61DD717BFACFE80080BEF0F6DB +:100EFC00BEF2BEF46208BEF6CFE800818FE8003186 +:100F0C0003FAAFE0006072AEF0F5E80061CDD76097 +:100F1C0072F6B1D706DABDDAADDC06D8BDD861D829 +:100F2C00A6DAD7D1DD17C1C3DAD89DD8ADDA311C1A +:100F3C0061EEB4D8DFF8BDDA13BDD8C2C0D7D1DDAD +:100F4C001BC1C3DADA9DDAADD8311E33311E3371D1 +:100F5C00F9B4DADFF4BDD813BDDAC2C0D746D8DD98 +:100F6C000771FF7177D971C0D75BDB9DDB605BDAF2 +:100F7C009DDAADDC5BD9085BD808BDD8D7C3C7F305 +:100F8C00728EFDC162314C410036784D1161A072F8 +:070F9C00C09EFD62C6C2D732 +:0A0FF60031303A33393A3335000048 +:0A20000031303A33393A333500002D +:10200A0005214F7B9EC5E9000104080D12171C1F0C +:10201A00080100001F003B005A0078009700B50035 +:10202A00D400F300110130014E01192634445362E1 +:10203A006E777D80807D776E625344342619100A4C +:10204A0008080808080808080A10AEF0B430B740B3 +:10205A00BA30BB50BBB0BC50BD10BD60BDB0BFE014 +:10206A00C2B0C420C7B0CAE0CE1001F014101420C8 +:10207A000630639049006E0077707B0019001900E2 +:10208A0017F01C6012001200120002005C003600F9 +:10209A00A70000D8EAE88C309C10A5E0B040B1C097 +:1020AA00B200B250B310B490B620B860BA50BFA014 +:1020BA00C6B0CE90D02000200020002000207B3027 +:1020CA00686020001700173012F00DE007F00700D3 +:1020DA00093001C001C00100AB000000670020DA2E +:1020EA006967A120B750B9D0BB00BC30BC60BCA0A6 +:1020FA00BD10BDC0BE70BFD0C2A0C400C850CC8045 +:10210A00D0B001A0251018B017C095206FE07C60F0 +:10211A003510350037F016F01CA0173011D011F029 +:10212A0011F002005E00A7002700B0DAF5F38C3048 +:10213A009C10A5E0B040B1C0B200B250B310B49048 +:10214A00B620B860BA50BFA0C6B0CE90D02000204A +:10215A000020002000207B30686020001700173024 +:10216A0012F00DE007F00700093001C001C00100BC +:10217A00AB000000670020DA696700000000000079 +:10218A000000000000000000000000000000000045 +:10219A000000000000000000000000000000000035 +:1021AA000000000000000000000000000000000025 +:1021BA000000000000000000000000000000000015 +:1021CA000000000000000000000000000000000005 +:1021DA0000000000000000000000000000000000F5 +:1021EA0000000000000000000000000000000000E5 +:1021FA0000000000000000000000000000000000D5 +:10220A0000000000000000000000000000000000C4 +:10221A0000007F7E7D7C7A7978777675747271702A +:10222A006F6E6D6C6A6968676665646261605F5E3D +:10223A005D5C5A5958575655535251504F4E4D4B53 +:10224A004A494948474645434241403F3E3D3B3A59 +:10225A00393801020203030200FEFBF7F3F0F0F340 +:10226A00FA041225384D5F6E777A776E5F4D3825FE +:10227A001204FAF3F0F0F3F7FBFE00020303020282 +:02228A00010051 +:10228C008D3AB43AD1DF26CD3A1EFD3E23FDE12234 +:10229C003132920D3104920931329605713304EFCB +:1022AC0003713204FD1223FDBA22FD0E26D77153A1 +:1022BC0092D432DD05B432715292312292037152B2 +:1022CC0092715492714102314402057140B3FBD7B3 +:1022DC007148B3FBD74A304BDC114A30B9DE0C4A9B +:1022EC003B28DE03A43BD7713392D74A303EDC0542 +:1022FC004A30BDDC0C4A3C28DE03A43CD771329238 +:10230C00D7F43BF43CD73142960C4A3D02DE03A491 +:10231C003DD7712392D73132041240AFFB3CDE0C17 +:10232C008FB2FB5C01D1DF04712392D7712292F43E +:10233C003DD7C7C1FBF8FF313296067130B3FBEFC6 +:10234C00047138B3FB714492713796DE4F71349639 +:10235C007141923132960E5002C15011FD8534C03C +:10236C00CD3229EF37E0C15011FD8534C0F432175E +:10237C00C15002FD1D2BC0D2DF0D8B318E318D086B +:10238C000E01081C00BD34AD3444009BDC05D5AFF8 +:10239C00FBDF095020C15011FD8534C0C0C6D7C722 +:1023AC008D2076FDEC23FD512BD507F9DD0571034E +:1023BC0092EF2B664B2061F83164921A716392FD97 +:1023CC009204664C07DD0381DF098F06F9310303A4 +:1023DC00FD7524FD8924710292306C256194C6D759 +:1023EC00C77162017172015003FD45025008FD0274 +:1023FC0037629D305009FD023762767163017118A6 +:10240C0006F94A30F1DC05E507F9EF224A3004DE23 +:10241C001ACF07F9025008C1506CFD9202C092DF2E +:10242C000DD450DF09711006F9EF03F507F94007D9 +:10243C00F901DF05710A22EF06710B22710302CD3F +:10244C0020075700674C08DE1073090A20614EDC28 +:10245C0005679D20EF0387EFEB4A2007DF09D507BF +:10246C00F961F8CF07F903C6D7500AFD4502304091 +:10247C0000C15006FD002BC05096ED4502C720064A +:10248C00FBF8FFD507F961E8ED6825304A57C150D4 +:10249C003EFD002BC0D2DD077100B2FBED6825714B +:1024AC0008B2FB17040200C15004C1500CC1506C9F +:1024BC00FDB3021006EA38AA48318D12AA48318EB3 +:1024CC00616B08616A08C1500EFD002BC0F690C10B +:1024DC00500CFD002BC0CC01008C014C04DE2831CB +:1024EC00349302EFFA712293EA388C015010D6051E +:1024FC00C15010C18C01D6044000C1506CFD5D036D +:10250C001006615901EFD250A5FD4502EA38AA48E0 +:10251C00318D12AA48318E616B08616A08C1500E68 +:10252C00FD002BC050A5FD45025004C1506CFD921E +:10253C0002C0629C01EA388A4B4E0161C3048A4A8C +:10254C004E0117040200C15004C1500CC1506CFD67 +:10255C005D031006F6C1503EFD002BC01006C6D719 +:10256C00C78D3E4B3061F8ED0B264A4028DE05A4A2 +:10257C0040ED0B26F4408D309D3E8D305070D612C0 +:10258C00307351230480001231FF318E039D3F9F25 +:10259C00AEFBF68D3F7C804C95DC1B8D3F318F2440 +:1025AC001400EA38BDD8AA44FD990D1231FF318EC2 +:1025BC0003318F16EF198D3F318F241400EA38BD8B +:1025CC00D8AA46FD990D1231FF318E03318F16EAD0 +:1025DC00388A427217F3031644000171FE61C83643 +:1025EC00FF001701DE02F61617BD78C7500CFD0070 +:1025FC002BC0D2DF068D309D3EEF047100B2FBF292 +:10260C00C6D7C72008FBF8FF4007F901DD064007D5 +:10261C00F902DF1C17040600FDF82BD2DF0A8C062A +:10262C009C058C079C04EF4ECC0563CC0400EF4654 +:10263C0017040600FDF82BD2DD0F7100B2FB7103FD +:10264C0092CC0500711293EF2D7108B2FB8C063100 +:10265C008E318D080E07081C00BBEA388A4072AB1D +:10266C00FDEC0EBB8C019C05D1DF08CC0501CC0424 +:10267C0000EF038B9C0417040600FD032CD2DD062F +:10268C00CC06C8CC07008C069FB1FB8C06318E3172 +:10269C008D080E07081C00BD34AD344401A5DC08C0 +:1026AC00CC0364F6BD42EF48AD3426424401A0DCB5 +:1026BC0008CC031EF6BD42EF37AD3444819DDC09D6 +:1026CC00CC030AC942F401EF27AD3444019BDC0969 +:1026DC00CC0305C942F401EF17AD34440191DC0978 +:1026EC00CC0300C942F401EF07711293C942F40103 +:1026FC003132040C31249208CC0564CC0400EF0D6B +:10270C008C034E05DE078C039C05CC04008C059FC6 +:10271C00AFFB8C049FB0FBFD852B8D444E05DD2853 +:10272C0040AFFB0BDE054A440BDE1440AFFB06DE6C +:10273C00054A4406DE09D5AFFBDF0DD444DD095054 +:10274C0020C15011FD8534C08FAFFB9D44FDC22BC1 +:10275C001008C6D7C75601D837C15002FD352BC05B +:10276C004008F90161F8712010055012FD45028DE9 +:10277C00376C0870C15002FD352BC05003FD45026B +:10278C008D376C1870C15002FD352BC05016FD45AD +:10279C00025003FD462B625C01D1DD0F7170B3FB5F +:1027AC005002C15013FD8534C056006672C6D7C79F +:1027BC005004FD462B625C03D1DD405014FD5228C1 +:1027CC0034B3FB895C9F998A0C7CFF50FF5C14D15D +:1027DC00DD228A0C7CFF5C147234B7FB89616A9928 +:1027EC007162075600316207058666D1DFF77163A7 +:1027FC0007716B2734C6FB895CEB99712810055067 +:10280C0002FD462BD2DD354008F901DF05500AFDEB +:10281C0045028D376C1070C15002FD352BC0E0FDA8 +:10282C004502D837C15002FD352BC05033FD45024F +:10283C00F0C15002FD352BC07178B3FBE0C15013D1 +:10284C00FD8534C0C6D7C7C12004FBF8FFCC0200FD +:10285C005004FD462B629C038C045C20D1DD0E8C55 +:10286C00036C019C038C026C209C02EF138C045CA7 +:10287C0010D1DD0C8C035CFE9C038C026C109C0252 +:10288C008C045C08D1DD0E8C036C029C038C026CF6 +:10289C00089C02EF138C045C04D1DD0C8C035CFDF2 +:1028AC009C038C026C049C028C03D1DD05501AFD38 +:1028BC0045028C0370C15004FD352BC08FB3FB5CFB +:1028CC009F728C03318E316D148C03318E314D61BE +:1028DC006D08616C5C606162629FB3FB8FBFFB7CB7 +:1028EC00FF50FF5E02D1DD278FBFFB7CFF5E0272C3 +:1028FC0034B7FB89616A99716207CC0100316207B8 +:10290C00086159018C01D1DFF4716307716B27F2F7 +:10291C001006C6D7D9A7FBC15006FD352BC0D9A8C8 +:10292C00FBC15007FD352BC0D7FD2029F2D7C7714D +:10293C001300711B20710303710205E0C15003FDEC +:10294C00352BC05013FD4502F0C15005FD352BC091 +:10295C00500FC1E0FD352BC0500AFD450271030537 +:10296C005008FD4502501FC1E0FD352BC05012FD33 +:10297C0045025003FD462B625C01D1DF03E2EF24DC +:10298C00F0FD462B629D363602F9C75008FD1D2B13 +:10299C00C05003C1FD352BC0710203711A20FDDD3F +:1029AC002AF431F2C6D75003FD462B625C01D1DD0F +:1029BC00155014FD5228FDBB275014FD4502E0C1F3 +:1029CC005003FD352BC0711300711B207103035094 +:1029DC0014FD4502F0C1E0FD352BC0F0C15003FDE4 +:1029EC00352BC0D7C72004FBF8FFCC02008D319CDF +:1029FC00035010C150A4FD9202C0629D31D450DD31 +:102A0C0004F2EDBA2A8C037B315C08D1DD0F8D31D9 +:102A1C005C08D1DF05CC0210EF03CC02208C037BC9 +:102A2C00315C04D1DD158D315C04D1DF088C026C76 +:102A3C00049C02EF068C026C089C028FB2FB5CF3C8 +:102A4C00728D315C0C6162629FB2FB8FBEFB7CFFAE +:102A5C0050FF5E029C02D1DD1F34B6FB896E0299D9 +:102A6C00716207CC0100316207086159018C01D1F8 +:102A7C00DFF4716307716B278D315C40D1DD095038 +:102A8C0002C15012FD8534C08D315C01D1DD08E0EE +:102A9C00C15012FD8534C0717AFA8D315C41D1DDA3 +:102AAC000C5A31BED831C15010FD0005C0F21004D3 +:102ABC00C6D7FD6027F2D7FDBB27F2D7C78FC6FB61 +:102ACC007617FD5228664FC6FBDFF2F5C6FBF2C641 +:102ADC00D75064FD4502FD0E2C6261FB711192F121 +:102AEC0071149261DC70C15012FD0005C0FD3336CB +:102AFC00CD5F03D7C7C1C1FBF8FFAC0ABB17C150F0 +:102B0C0002C18C0270C1506CFD5D0310061004C62E +:102B1C00D7C7C1FBF8FFAC08C15002C18B70C150C4 +:102B2C006CFDB3021006C0C6D7C78806166770C105 +:102B3C00C75084FD26031004C6D7C716C75084FDA2 +:102B4C009202C0C6D7C74A2004DE045600EF0256D4 +:102B5C00014008F901DF048686EF0A4008F902DF1C +:102B6C00045104610666318F12504CD633514CD649 +:102B7C00610A045420BD38C6D740AFFB3DDC05CFFD +:102B8C0004FC0FD740AFFB1FDC05CF04FC0BD74078 +:102B9C00AFFB0BDC05CF04FC07D740AFFB0661D8BD +:102BAC0031320405CF04FC03D7D5AFFBDD04E504BB +:102BBC00FCD7F504FCD7D504F9DF04717392D7FD6B +:102BCC000E2C6261FB71019371149271079361C8B1 +:102BDC0031729217717292710493711192F17104A6 +:102BEC009361DC70C15012FD0005C0D7C716C750E9 +:102BFC0004FD1D2BC0C6D7C716C75002FD1D2BC028 +:102C0C00C6D740AFFB0BDE02E2D7F2D7710001054D +:102C1C0071785005713AD5713BD18F10055CFC9FD2 +:102C2C001005CF54054AE54205711042057100426A +:102C3C0005714850057130500571205005CF530572 +:102C4C0005CF52050A7130510571205105713BD5E4 +:102C5C00717050058F11055CFC9F1105F422D77122 +:102C6C0078500571080105D7FD2D38FD9204717A55 +:102C7C00FAFDAB23F504F98F06F931051B5003FD62 +:102C8C00462B625C01D161E8CF04F902CFAFFB6443 +:102C9C00710407714192EF10F6710407611012F67E +:102CAC00B1236061FB714192FD5630FDD742712218 +:102CBC0095712BE7618461A461EDEFF8D77140F059 +:102CCC000071783002713AE6713BE2713BEA713B7C +:102CDC00EE8F10055CFC9F1005CF34024AE552FFC5 +:102CEC00711A52710A5271483002713030027120DF +:102CFC003002CF330205CF32020A71303102713B00 +:102D0C00E6717030028F11055CFC9F11057160300B +:102D1C0002D7717830027148F000D7C78806166662 +:102D2C00614FDD0967614EDE0396EF01866672C660 +:102D3C00D7C7161714AA0412A943DD29AA0412A98D +:102D4C0023FDDC4DC3AC02FDDC4D13C2BDD813FD1D +:102D5C00690FDE0C1714AA0212AA0403BA04EF05B9 +:102D6C001714A9BA04AC041231FF319E03317F0849 +:102D7C007208C6D77100F200304400BFB6013001B2 +:102D8C0088BF9001300984BF9E01BF9C01BF9A018E +:102D9C00BF9801BF9601BF9401BF9201F53CFF3073 +:102DAC00FE00BFBE01F6BFBC01BFB80150EEBFBAFA +:102DBC0001A1BFB201C918FE008F06F9310507F554 +:102DCC00CDFBCB6CFF00717393716293D730EF0026 +:102DDC00BFB401F6BFBA017108F20071230471533C +:102DEC0007BE6EBE64BE6A712304715307715BD15A +:102DFC00F453F452716393D78D54B454D1DF6931C9 +:102E0C00D4D105715BD1E453D453DD2E7140B2FBA8 +:102E1C00D852F1E734020023DD0625DD0325DF055A +:102E2C00F6BE66EF06D9CCFBF1BE66A4524A522020 +:102E3C00DF04F452B453CD5419D7CD541E7148B29B +:102E4C00FBD5CEFBDF04F6BE66D7D9CCFBF14266D0 +:102E5C00FFDD15D9CCFBF112AE6643DE05A266FF91 +:102E6C00EF03B266FFCD5403D7C7161714F6B9AAF1 +:102E7C000412F6231231FF31AE03316FBA02C6D7FA +:102E8C00C7C1FBF8FF8C085080D612AB1413B9AB3A +:102E9C0014AA0412A92312D927FBF133BDD813FDB0 +:102EAC00D50DBA02C0C6D731049401D74004F9023B +:102EBC00DF10F6BE64BE6EBE6ABF8EFBBF94FBBF56 +:102ECC009AFB31749314308AFBFD752E3090FBFD08 +:102EDC00752E3096FBFD752EEF713114940D711318 +:102EEC00947108D2FBF456F455EF60D455DF5A8F29 +:102EFC0026FB9D554A561FDC177100D2FB4028FB60 +:102F0C00FFDD1CA4578F28FB4B57DE13F456EF0F35 +:102F1C00D856F1A1605C1F9D567108D2FBF457E89E +:102F2C0056092AFB70C1308AFBFD8C2EC0E856096D +:102F3C004AFB70C13090FBFD8C2EC0E856096AFB31 +:102F4C0070C13096FBFD8C2EC0B455308AFBFD3D14 +:102F5C002DF313BE6E3090FBFD3D2DF313BE6A3086 +:102F6C0096FBFD3D2DF313BE64D7C736F00071F40C +:102F7C00DC297170F000CE9D08CE9EC0CE9F80F5EE +:102F8C0094FFF593FFF592FFE597FFE596FFE59526 +:102F9C00FFE598FFCE9C7F7100A6FB711BE3712BA4 +:102FAC00E3711AE7712BE7717A9D710A9E31929E3B +:102FBC0002EFFA710B9E712394713394714394C692 +:102FCC00D7C73122941E712294710A9E31929E02AF +:102FDC00EFFA34D4FB3692FF52078B99A5A792DFF8 +:102FEC00F9710B9EC6D7C78806163132941571320B +:102FFC0094C7349CFB3092FF1652078B99A5A7926D +:10300C00DFF9C6667367189CFBC6D7C7712394316A +:10301C0034941E713394710A9E31929E02EFFA34ED +:10302C0092FF369CFB52078B99A5A792DFF9710B87 +:10303C009E31449413714394717B9E8FDCFB9E9A5A +:10304C008FDDFB9E9B717A9EC6D7CFA7FB5CCFA86A +:10305C00FB5FCFC8FB5DCFFCFB36CFFDFBC9E5D3D7 +:10306C00FBD7C7CFA4FB12CFA5FB0ECFCCFBFFF534 +:10307C00CDFBF5CEFBF5CFFBF5D0FB5600664C64D3 +:10308C00DE08723826FB0086EFF3C6D7C788061613 +:10309C0017F1E73403002361E3EDBD332361F8ED51 +:1030AC008931B12361E3ED93312561F8EDA131B1A3 +:1030BC00240D0061D8EDBD33240B0061F8EDC13156 +:1030CC002361F8ED04322361F8EDD4312361F8ED7E +:1030DC00B83324060061F8ED6D32B12561D8ED8965 +:1030EC003224000061F8ED96322361F8EDBD3323F4 +:1030FC0061F8ED9633B12361E3EDB9322361F8ED5C +:10310C00CA322361F8EDDB322361F8EDCA32236158 +:10311C00F8EDEC322361F8EDFD322361F8ED0C3360 +:10312C002361F8ED2E332361F8ED3A332361F8ED8A +:10313C0046332361F8ED4E332402002361E3EDBDE9 +:10314C003324020061F8ED56332361F8ED61332529 +:10315C0061F8ED6C33B124060061D8EDBD33240069 +:10316C000061F8EDBF332561F8ED7733241200616F +:10317C00F8ED91332361F8ED8233EDBF3334A6FBC8 +:10318C0089615F99EDC9333035296194667367188D +:10319C00A4FBEDC93340A9FB6ADF1340AAFB68DF2F +:1031AC000D674C6CDF083014406194713AD5679F01 +:1031BC00ABFBEDC93367D1DD0C30443B619434C4B7 +:1031CC00FB89616F99EDC933675C02D1DD0730BEB5 +:1031DC002A6194EF0B675C01D1DD0530C32A619441 +:1031EC00675C3CD1DD0F30C82A6194675C3C726629 +:1031FC00736218A4FBEDC93367D1DD625C01D1DDCC +:10320C0005300800EF01F6609F01FC675C02D1DD20 +:10321C0003E6EF01F63401FC89616899675C04D11F +:10322C00DD04E6A1EF01F63401FC89616899675C65 +:10323C0008D1DD05302000EF01F63401FC8961680E +:10324C0099675C10D1DD05301000EF01F63401FCFC +:10325C0089616899675C20D161E8716001FCEDC9F6 +:10326C0033D446DF08679FCDFBA446EF0D4A4605D5 +:10327C00DE08E846671811FDA446EDC933675C0FFC +:10328C007266736218A4FBEDC9334A4664DE1B4AAE +:10329C004601DF0667D161F85701E846671826FB3F +:1032AC00A4464A460561C8711294EDC933675C7F28 +:1032BC0070C117F1243000FDF22FC0EDC933675CEB +:1032CC003F70C117F1243000FDF22FC0EDC93367F8 +:1032DC005C0770C117F1243000FDF22FC0EDC9332B +:1032EC00675C1F70C117F1243000FDF22FC0EDC9CF +:1032FC00336770C117F1243000FDF22FC0EDC933D4 +:10330C00CEABAC710A9E31929E02EFFAD592FFDFE2 +:10331C0005710B9EEFED679E99710B9E9FDBFBED8C +:10332C00C933714294675C7F9FDCFBEDC9337142FA +:10333C0094675C3F9FDDFBEDC933675C3F9FDEFB11 +:10334C00EF7B675C1F9FDFFBEF7330033961946782 +:10335C009FE4FBEF6830D0386194679FE5FBEF5D2D +:10336C0030E9386194679FE8FBEF52675C01D1DD6F +:10337C004CFDD742EF474A58C8DE42E85867185A06 +:10338C00FAA458EF38679D58EF33675C01D1DD051F +:10339C00711202EF03711302675C02D1DD05712219 +:1033AC0002EF03712302679FD3FBEF1167318EEF9E +:1033BC000CEF0A664C5BDE05736718A4FBC6D7C717 +:1033CC0016664C30DC094C37DE05FDCD2FEF6B66F5 +:1033DC004C02DF1F8FA6FB5C03728F03FC5C033176 +:1033EC008E316D08616A08128F03FC5C80312A6192 +:1033FC0062EF56664C3DDF08AE90BD5AF85AEF4965 +:10340C00664C3EDF04F85BEF40664C4FDF05FDFF7A +:10341C0042EF36664C61DF08E858095AFA72EF2918 +:10342C00664C7FDF05FDBA3BEF1F664C4EDF0B3160 +:10343C000496045210EF12F2EF0F664C5BDC045250 +:10344C00FFEF06667309A4FB72C6D7C7880616176A +:10345C00F1241000240500DC07244C00DD17EF17C5 +:10346C00FD690217F104A4FB1489617F99717AFA42 +:10347C00715294EF02A458C6D7C7C1C1FBF8FF40E4 +:10348C0004F903DD064004F904DF38717BFA8C0281 +:10349C007309ACFB5E0AD1DF278C02318E04A4FBCE +:1034AC0014896E0A99716207717AFACC0100316243 +:1034BC0007086159018C01D1DFF4716307716B2727 +:1034CC00717AFA1004C6D7CF03FC03F501FCF5059D +:1034DC00FCF507FCD7C788061617F1E73402002560 +:1034EC00DD3D23DD1725DD1C23DD0523DD2BEF3B27 +:1034FC00710295679F06FCCD5F03EF2F675C839F7E +:10350C0003FCEF27675C039F05FC675C034C0261BF +:10351C00F8712296FDED44EF12679F07FCEF0C67E4 +:10352C0091DF08E0C15012FD8534C0C6D7C716170D +:10353C00F1E7240000DD2A23DD1E240300DD07242F +:10354C00FB00DD24EF2531329605308000EF01F6CB +:10355C00086F04FC7208EF198F01FCF501FC72EF87 +:10356C00107152955235EF09F2EF0666730900FCA3 +:10357C0072C6D7C71617F1E7240000DD38241000F7 +:10358C00DD1C23DD1C23DD30240E00DD182411008E +:10359C00DD1B240F00DD12243000DD15EF1EE2EFE1 +:1035AC001D5202EF195204EF155206EF115205EF9E +:1035BC000D5207EF09F2EF065203EF0252FFC6D786 +:1035CC00C7316494377163948D5E9FACFB8D5D9FA6 +:1035DC00CBFB36D2FCC7D85DFD3337618A70618A6C +:1035EC00FD7837C0D862F1312F609D618D5C4B61E5 +:1035FC00DD0A7172948D619D5CCD5F034A5F05DEBF +:10360C0008303D366194CD5F6BB45F7150F000CEE5 +:10361C00300BCF170006CE3106FD6D02717A30717A +:10362C000BE3710BE7C6D78D619D5C8D619FADFB84 +:10363C00D74004F903DF064004F904DF02F2D73166 +:10364C0074940C7173947113958D619D63EF31318A +:10365C0004951F710395711295D506FCDF04F46473 +:10366C00EF0A8F06FC5002D6A1609D648D649D63A9 +:10367C00EF0E311495068D649D63EF048D619D638F +:10368C008D639FADFBD863FDA536E863091C2270E2 +:10369C00C15013FD0005C0F2D7C7C1C1FBF8FF8CA8 +:1036AC0002D1DF05F506FCEF1A8C024C05DE06CFC5 +:1036BC0006FC02EF0E8C02318E1231FE03311F60BC +:1036CC009F06FC8D654F06FCDD28CC011F8F06FC88 +:1036DC009D65CC00008B4C08DE148B730912204FB7 +:1036EC0006FCDC058B9C01EF05615900EFE78C01B2 +:1036FC009D601004C6D7C716710AE7710BE37150B1 +:10370C00F000CE300BCF170006669E31FD6D0271B6 +:10371C007A30710BE33182E302EFFA8D1F7158F0AE +:10372C0000710BE772C6D7C7C1C1FBF8FF8FFCFB5A +:10373C004E02DC03F2EF318C024FFDFBDC0452FF36 +:10374C00EF268C022FFCFB706131318D128FFDFB4B +:10375C002FFCFB70613133BDD813FDF70DBB44005A +:10376C0001DC03F690BB8B721004C6D7C7C1FBF803 +:10377C00FFAC0814A91489708B6128706131FDDCD1 +:10378C004D1344030071FEDC23AC08148A04819AA7 +:10379C0004AC08148A044C11DC10A9148B99AC08E5 +:1037AC0014CA0200AC0814CA0310EF72AC0814CA95 +:1037BC000400AC0814A914894DDE0AAC08148A0262 +:1037CC00819A02EF12AC0814A914894D61D308AC8C +:1037DC0008148A02919A02AC08148A03919A03D1B4 +:1037EC00DF3CAC08148A024C10DF10A91489318E0E +:1037FC00A112AC0814A9146299EF17AC08148A0230 +:10380C004CF0DF0EA91489318EB112AC0814A91436 +:10381C006299AC0814CA0200AC0814CA0310C0C6E2 +:10382C00D7ED3038C75600664C0ADE0BF0317E12ED +:10383C00F67810FC86EFF0C6D7C7200CFBF8FF1704 +:10384C00040600C15006C150A8C15030FDB302108F +:10385C0006D2DD1BA4684A6808DE03E2EF6234E49A +:10386C00FB895CFC99FD03397110B2FBF2EF51300E +:10387C000600C117040600C130E9FBFDE44D10043D +:10388C00F4688FE4FB5C01D1DD264004F903DF20F2 +:10389C005010C180FD8534C0C736100571D4C6DE0A +:1038AC000F17C15006C150A8C15030FDB30210060D +:1038BC004004F903DD064004F90461F8FD1940F2F7 +:1038CC00100CC6D7D9E5FBC15030FD9202C0629FE7 +:1038DC00E8FB5008C15011FD8534C0F2D7D9E8FB84 +:1038EC00C1D9E7FBC15030FD260310045008C1506C +:1038FC0011FD8534C0F2D7C7200CFBF8FFCC0900B2 +:10390C004007F901DF05CC0A02EF03CC0A10CC0BFF +:10391C00808FE4FB5C039C07717AFA8C07D1DF087B +:10392C00717AD5CC0807EF06717BD5CC082F17041C +:10393C000800C15004C150A0C15030FD5D031006F9 +:10394C00624C02DF067110B2FBEF047118B2FBC7B8 +:10395C0036100571D4C6DE164004F903DF1017A12A +:10396C00C15006C150A8C15030FDB3021006FD690C +:10397C00028FE4FB5C034E07DF9EF2100CC6D7D51A +:10398C0004F9DF03F6BD6A4004F901DD0AD474DDE5 +:10399C0003B474D7CD74038F04F9318FE723DD0B97 +:1039AC0024020024030061C8EDB03A8F06F93123DC +:1039BC003E301B00466ADF0AE0C15010FD8534C062 +:1039CC00EF1D307701466ADF165002C15010FD859D +:1039DC0034C0F64670DF088FC8FB5010D6BD70F6A9 +:1039EC004670DD36B6704670DF30711293EF2B30B7 +:1039FC001B00466ADF13F64672DF18E0C15010FD5B +:103A0C008534C0C9725307EF0A307701466A61F8F2 +:103A1C00711293F6467261E8B6723154960871438E +:103A2C0095F6BD6AEF1431449505F6BD6AEF0BA609 +:103A3C006AF6466A61F8C96AFFFF316296194A6CE8 +:103A4C0005DE16A46C4A6C05DF0FA46C5004C15043 +:103A5C0010FD8534C0EF02F46C316496194A6E0582 +:103A6C00DE16A46E4A6E05DF0FA46E5008C150100E +:103A7C00FD8534C0EF02F46ED46FDD03B46FD73123 +:103A8C007296174A6D05DE14A46D4A6D05DF0DA400 +:103A9C006D5010C1FD8534C0EF02F46D4A6D0661A6 +:103AAC00F8CD6F25D7C736100571D4DE06304538F2 +:103ABC006194D24004F903DF1C3122070530F02950 +:103ACC0061943154950C7153955080C15012FD8501 +:103ADC0034C0FDF03AFD163B31749506717395FDBB +:103AEC00D141C6D78F03FC5C01D1DD1DD477DD033A +:103AFC00B477D7CD77098D604B76DD0D8D609D76D3 +:103B0C005040C15012FD8534C0D74004F903DD0488 +:103B1C00F6BD1AD7D5D0FBDF08F6461ADD19B61A52 +:103B2C00D7D9CCFBF1461ADD0ED9CCFB12AD1A431A +:103B3C00DE03A61AD7B61AD7C7FD69028FC4FB7667 +:103B4C00F5C4FB717AFA5C10D161E8716295665C20 +:103B5C000FD1DD57665C01D1DD05F504F9EF4C663C +:103B6C005C02D1DD11E0C15003FD352BC071130097 +:103B7C00711B20710303665C04D1DD11711300719C +:103B8C001B20D503FC61F8710303FDD334665C087C +:103B9C00D161E87103035005FD4502710203500326 +:103BAC00C1FD352BC0711A20FDDD2AF2C6D7C756D0 +:103BBC00FF4A461361C8ED943C8F06F93115053068 +:103BCC000400EF0F8F06F9314505300500EF04D9DD +:103BDC0007F9F1609F28FC8D789F29FC713492E6DF +:103BEC0061301271049261DC31196162629F2AFCAE +:103BFC00E52BFC31140205308000EF01F6C1314495 +:103C0C009605304000EF01F6C2616B08616A08C18D +:103C1C0031340405302000EF01F6C2616B08616A93 +:103C2C0008C131240205300800EF01F6C2616B08AF +:103C3C00616A08C131749605300400EF01F6C26167 +:103C4C006B08616A08C131649604E6A1EF01F6C203 +:103C5C00616B08616A08C131549603E6EF01F6C244 +:103C6C00616B08616A9F2CFCF171240461DC9F2656 +:103C7C00FCF171540761DC9F27FCD846F10104EC80 +:103C8C00FC14A9148976A4466672C6D7C7FD2E0902 +:103C9C008F04F9318FE724000061F8ED723E23DDCB +:103CAC001B2361F8ED7C3D2361F8EDF83D2361F8B1 +:103CBC00ED413E2361F8ED153FED6F3EF6BD7071A1 +:103CCC0013934005F901DF2C3134961B466ADD0451 +:103CDC00F424EF02A4244A2465DC0FF6BD6AF50433 +:103CEC00F9712295ED973FFDAB23AD6A440A006153 +:103CFC00D8ED973F714295FD9204716392FDAB2311 +:103D0C004007F903DF09712295F504F9ED973FFDA2 +:103D1C000E2640B1FB9BDE09712295F504F9ED9757 +:103D2C003F714A277140110571301105713A2271AA +:103D3C005A2271501105FD3A29D2DD09712295F5EF +:103D4C0004F9ED973F71103500CF37001D7140120B +:103D5C00054005F901DD064005F903DF05F5CDFB4E +:103D6C00EF04CFCDFB03CF04F902FD2029ED973FE3 +:103D7C00FD182CFDC92C714A9DFDD334FD6E30F518 +:103D8C0037FF712BE0F505F9712295CBE43FEFCBB2 +:103D9C00E6F6F0FD9204713BD47112027123028F8E +:103DAC0006F93105285004FD462B625C03318E3137 +:103DBC005D34B3FB896168995002FD462BD2DD0658 +:103DCC007170B3FBEF047178B3FBFDAB23FD802D59 +:103DDC00710806F9CF04F9038FA6FB5C02D1DD094B +:103DEC005080C15010FD8534C0ED973FFD993F3197 +:103DFC0064952FA47AD47ADD0831A4E00A31020C40 +:103E0C0006712BE0FD054031A4E01731040C137151 +:103E1C002BE05027C15005FD352BC0CF04F90471A0 +:103E2C002295FDFA3F8F06F931250731349603F5BB +:103E3C0004F9ED973FFD993F31020C14F0C1500588 +:103E4C00FD352BC05005FD4502FD0540CF04F9039F +:103E5C00FDFA3F8F06F931250731349603F504F945 +:103E6C00ED973FF504F9CFCDFB03F5CEFBF5D0FB79 +:103E7C00717293F6426CFF61E8ED973FF6BD70717D +:103E8C001393F5E4FBFD0339717AFAFDD92DFD6B23 +:103E9C002CFD1E2D714B9D71130271230231349335 +:103EAC0002EFFACE3708CBE4BFFFCBE6FFF3CED45C +:103EBC00FFF5B4FBF5B5FBF5B6FBF5B7FBCF37005B +:103ECC000971481205F6BEE0BEE2BED0716A27FD4C +:103EDC00B229714307714B277148100571481105C0 +:103EEC007138100571381105713302713B22715311 +:103EFC0002715B227158100571581105CF04F90538 +:103F0C00714295F6BD6AFDF709F505F9F4243134D3 +:103F1C009604D432DD20E505F9E504F98F06F93174 +:103F2C002569F5F8FBF5F6FB502EFD4502CF05F99A +:103F3C0003E504F9EF55FDE604FD3E2371730171B1 +:103F4C00320471430271039271629231949E02EFBA +:103F5C00FA712AE7CEA409F5F3003104070261FDDA +:103F6C00CFF30080F466FD2E09CEA40831329606FC +:103F7C00CF04F905EF09714395E505F9E504F971ED +:103F8C002BE78F06F9312503F504F9C6D7D47BDF6F +:103F9C0019310200585003FD462B625C01D1DF073A +:103FAC00F504F9712295D7E47BD74A7BF0DF073112 +:103FBC0004003AF47BD74A7BC8DF0AF504F9712276 +:103FCC0095CD7BF0D7310200084A7BFFDD1FA47B27 +:103FDC00D7F0C15004FD352BC08FB3FB5C9F9FB352 +:103FEC00FB7110C4FB30443B6194CD7BF0D7311492 +:103FFC009306F504F9712295D7716395F47A717271 +:10400C0007FD6D02717307D7FD4605F2D7C7200C6B +:10401C00FBF8FFFD69028FEAFBF0F9E9FBF303FD06 +:10402C00DC4D13BC048FECFBF0F9EBFBF303FDDC74 +:10403C004D13BC028FEEFBF0F9EDFBF303FDDC4DF1 +:10404C0013BB717AFAAC04BDD8F6BDDAAC04311EE0 +:10405C00BDDCF6BDDEFDAA0DADD8BDDCADDABDDE36 +:10406C00AC02BDD8F6BDDAAC02311EDADCC3DADE46 +:10407C00C3BDDCF6BDDEFDAA0DC0BDDEC0BDDCAD32 +:10408C00DEFD200FADD8BDDCADDABDDEABBDD8F6A4 +:10409C00BDDAAB311EDADCC3DADEC3BDDCF6BDDE65 +:1040AC00FDAA0DC0BDDEC0BDDCADDEFD200FDADA31 +:1040BC00ADD8FDE843C3C58D885C3FF0317E04402C +:1040CC00FC14C2C0B9A488F6BC08BC0A9C078C07B7 +:1040DC004C2EDD3D8D880E0770F161DC605C3FF08D +:1040EC00317E127940FCBDD8F6BDDA8C0773095CC1 +:1040FC0022318FBDDC70BDDEFDAA0DAC08BDDCAC81 +:10410C000AFD200FADDABC0AADD8BC08615907EF27 +:10411C00BDAC08BDD8AC0ABDDAC9DC0004F6FD7430 +:10412C000EC9DCFFFFF6FD750FADD8BD82AF3AFCB2 +:10413C004682DD11AF3CFCBF3EFCAF3AFCBF3CFC01 +:10414C00AD82BF3AFCAF3CFC423EFCDC46AF3AFCD5 +:10415C00423CFCDE3EAD26423AFCDE374A2A16DCF7 +:10416C001A4A2AA0DE138D844B2ADE0DAF3AFC26A8 +:10417C008644691061C8FDD141F42AAF3AFC445120 +:10418C0046DC0AAF3AFC241027BD28EF0DC928F8ED +:10419C002AEF074A2AFF61E8A42AAF3EFC423CFC06 +:1041AC00DC18AF3CFC423AFCDE10AF3AFC4628DE91 +:1041BC0009F484AF3AFCBD86EF074A84FF61E8A49A +:1041CC0084100CC6D7C7FD6902710A9E31929E02FB +:1041DC00EFFA8E949F34FC8E969F35FC8E979F360B +:1041EC00FC8E989F37FC8E939F38FC8E929F39FCE7 +:1041FC00710B9E717AFA8F37FCFD890F76FD664341 +:10420C0013BD80D5EFFBDF0AD5F0FBDF05D5F1FB45 +:10421C00DD25F6B14680DF11C9803722665C03913B +:10422C00DF060A80181A81009617FD894413FDA930 +:10423C004231049602EF61520692926934FC682E68 +:10424C00FCDFF6AD80BD7EF87CF3311C790AF944B5 +:10425C00FEFFDD44D87CF101040AF914A944FFFFE8 +:10426C00DF04E6B9EF0BD87CF101040AF914A9A11B +:10427C00B9FD6902A0EFFBD5EFFBDF1CA0F0FBD56D +:10428C00F0FBDF14A0F1FBD5F1FBDF0CCFEFFBFF54 +:10429C00CFF0FBFFCFF1FBFFC6717AFAD7C716D868 +:1042AC007CF10744A800DC05710296EF1CF647DD93 +:1042BC0018A47C4A7CA8DC05710296EF0CF87CF300 +:1042CC00311CF6780AF9B7EFE4C6D7C756A896663C +:1042DC00F0317E12F6B1780AF966D1DFF1FD690290 +:1042EC00F5EFFBF5F0FBF5F1FBF47C710396C67171 +:1042FC007AFAD7C72004FBF8FFD446DF168D7C9DD5 +:10430C0089FD690252069292692EFC68C0FCDFF6A8 +:10431C00717AFA4A4606DE0EE84609C0FC9C03A4F4 +:10432C00468C0372EF30F889F3311C790AF9BB31F2 +:10433C001296058B9C03EF0F8C019C03D489DF052F +:10434C00CD89A7EF02B489718071179661DC61FB8E +:10435C007111968C03721004C6D7C72008FBF8FFA6 +:10436C008F37FCFD890F9C078F36FCFD890F9C064F +:10437C008F35FCFD890F9C058F34FCFD890F9C0447 +:10438C008F38FC9C038F39FC9C028C06318E0112F9 +:10439C00791A20BB8C075C03D1DF098C064C0361B6 +:1043AC00C86179008C05318EB1610900BB313D12B9 +:1043BC000103BB8B0E04708C011C00BB8FF4FB4EF5 +:1043CC0003DC0E8C034FF4FBDC0B8C024FF5FBDC97 +:1043DC0004AB12EF03ABB1121008C6D7C7C3C12090 +:1043EC0008FBF8FFF661490A61F8614908DF07F735 +:1043FC00340000ED8544E6BC04F6BC06AC0ABC02F5 +:10440C00AC08BBAC06614902AC0461F8614900DE42 +:10441C0028AC04BDD8AC06BDDAE1FD2F0FADDABC7B +:10442C0006ADD8BC04ABBDD8AC02BDDAE1FD4A0F79 +:10443C00ADDABC02ADD8BBEFCAAC06BC02AC04BB57 +:10444C00AC08BDD8AC0ABDDAAC04BDDCAC06FDAD25 +:10445C000EAC04BDDCAC06FD200FE1FD4A0FADDA5D +:10446C00BC06ADD8BC04AC06614902AC0461F86171 +:10447C004900DCC5AC0214AB12100CC6D7C7C12066 +:10448C0004FBF8FF8F31FCFD890F9C034E04DF1CED +:10449C00AD7E4680DE07AD80267E12EF40F646806C +:1044AC00DF07467EDD03E7EF34F7EF318C04318E06 +:1044BC00B1128C03318E43DF18303822267E0680F1 +:1044CC00BB8C045C0391DF05AB041800BBAB12EF93 +:1044DC000C8C034E04DE0532A900EF01F71006C662 +:1044EC00D7FD69023122960BF6468CDD06B68C712F +:1044FC007AFAD7712396717AFA4004F904DF0671BF +:10450C005307F42CD7D9CFFBF1E7240000DD0F23A0 +:10451C00DD1823DD0F23DD4C23DD2423DD33715324 +:10452C0007F42CD7715207F42CD7D42CDF07715217 +:10453C0007E42CEF05715307F42CC98CFA00D7D47F +:10454C002CDF0A715207E42CC98CFA00D7F5CFFB8B +:10455C00D7D42CDF0A715307E42CC98CFA00D7CFBF +:10456C00CFFB02D7FD7445D7D905FCF1E724000039 +:10457C00DD0923DD2123DD0923EF1B715307F42C07 +:10458C00D7D42CDF07715207E42CEF05715307F4D5 +:10459C002CC98C2D01D7715207E42CD731629301B1 +:1045AC00D7710394D9CDFBF1E7240000DD1223DD94 +:1045BC001923DD1123DD2623DD3423DD3923DD3FF3 +:1045CC00FD3446EF3DFD5546EF38D9CCFBC1AE6C02 +:1045DC00FD272DC0F313BE6C712304EF25F0C1AE83 +:1045EC006CFD272DC0F313BE6C712304EF14F6BEC3 +:1045FC006C712204EF0CCB6CFF00712304EF03FDF4 +:10460C00C9464004F905DD064004F901DF067123B3 +:10461C00047103943104940FF6BE64BE6A31220413 +:10462C0002EF02F690BE6ED7CD2E47F48EAE6C31F3 +:10463C007DBFCAFCFD9E46D2DF0ED9CCFBC1AE6C51 +:10464C00FD272DC0F313BE6CD7FD9E46D2DD0DCDDC +:10465C002E47F48EAE6C317DBFCAFCD7E88E093480 +:10466C00205080D6BFC6FC22CAFCBDD8304700FD06 +:10467C00D50DBFC8FC30C6FCFD3D2DF313BE6CB48C +:10468C002ED42EDF0CCD2E47A48E4A8E1F61C8F47B +:10469C008ED740AFFB0BDC05712304F2D740AFFB88 +:1046AC000661D831229211F0C1AE6CFD272DC0F3FA +:1046BC0013BE6C712204EF03FDC946E2D77102945C +:1046CC00F0C1AE6CFD272DC0F313BE6CA48F4A8FC6 +:1046DC0040DC37F48FD890F1313F0412FD14D890A0 +:1046EC00F1BDD85008FD240E087208E6D2DD040195 +:1046FC0092DFFC896158D1DD05712204EF0371232F +:10470C0004A4904A902061C8F490D7C73026FDC607 +:0E471C00D77180717DFADE035201D75200D7AB +:10472A0061FC61FCC1C3C5C7520C929269D4FEC137 +:10473A00DFF88EFD708EFCC1717AFA4004F903DF4E +:10474A000530F0296194C09EFC609EFD34D4FE526F +:10475A0006C0B9A5A592DFF9C6C4C2C061FC61DF73 +:10476A00520C929269D4FEC1DFF88EFD708EFCC1A4 +:10477A008F4105775C04D1DD06675C01D1DD5031DC +:10478A005494367162077153948FB4FB5FBCFBD1AA +:10479A00DF1B8FB5FB5FBDFBD1DF128FB6FB5FBEA0 +:1047AA00FBD1DF098FB7FB5FBFFBD1DD0C3162079D +:1047BA0002EFFA716307716B27711396FD1730F4D4 +:1047CA00227148500571605005717AFAEDC4486744 +:1047DA005C02D1DD16D422DD124A2202DD0DF4225A +:1047EA007148500571605005717AFA717AFA8D2212 +:1047FA00318FE7240000DD0823DD1423DD2CEF4A86 +:10480A00F4467140500571505005E422EDC4488FBA +:10481A0040059D47715050058D479D49D847FDCBAE +:10482A0033629D48CD2202EDC448675C02D1DD1790 +:10483A00675C10D1DD05CD2203EF0F714850057179 +:10484A00605005F422EF73CD22044A2203DF108D53 +:10485A00489F4005D848C1D847FD5734C0EF1F8F3D +:10486A00400576717447DC054A4702DE06716050DE +:10487A0005EF47C7D847FD9830C071505005D84951 +:10488A00F1242900DD27240400DD22242200DD1D75 +:10489A00241100DD0C240100DD13241E00DD0EEFBF +:1048AA000A4A4760DF07CD4761EF02A4474A22035D +:1048BA00DF08D847FDCB33629D48C09EFC609EFD51 +:1048CA0034D4FE5206C0B9A5A592DFF961FCC1C372 +:1048DA00C5C7520C929269D4FEC1DFF88EFD708E64 +:1048EA00FCC1717AFA51405F0401D1DD06F616A7C0 +:1048FA0047DFF2300400BF2401F6BF2A01300B0B58 +:10490A00BF2801FD6D02300B0FBF2801FD6D02307B +:10491A000F0FBF2801710AE6F6420C01DD33AF041E +:10492A0001BF0C0131529329715293710BE2D84D98 +:10493A00FDDF033184BD02EFFACBB422FBD84FF17D +:10494A00BEB8714BE1714BE5710ABD8D4E9E44EFC5 +:10495A000C715393714AE5717BBD713393C09EFC10 +:10496A00609EFD34D4FE5206C0B9A5A592DFF9C6F1 +:10497A00C4C2C061FCC1C5717AFAD44CDD0BEA4AE3 +:10498A00899E44A64AB44CEF33710AE6300400BF4C +:10499A002401F6BF2A01300B0BBF280100000000DA +:1049AA0000000000510FBF280100000000000000B5 +:1049BA0000500FBF2801712393713393C4C061FC67 +:1049CA0061EF520C929269D4FEC1DFF88EFD708EAF +:1049DA00FCC12006FBF8FF71503002CEABACCC0410 +:1049EA0000F6BB31B2E210617900F6614900DFF3EB +:1049FA0071603002ED844A8E519C03713BE28C0354 +:104A0A005C02D1DD1E8C035C08D1DF0971503002D3 +:104A1A00CC0400EFCC8C0570FD3935629E50CC0475 +:104A2A0002EFBE8C035C03D1DF408E509C027150B2 +:104A3A0030028C04D1DF0E8C0270FD7F35629C053A +:104A4A00CC0401EF328C044C02DF0671603002EFB5 +:104A5A0029CF34025A716030028C0270C18C057001 +:104A6A00FDE134C0CF34024AEF108C035C01D1DD82 +:104A7A000671603002EF03EDEB491006C09EFC6040 +:104A8A009EFD34D4FE5206C0B9A5A592DFF961FC99 +:104A9A00C1C3C5C7520C929269D4FEC1DFF88EFD1C +:104AAA00708EFCC1710A9E31929E02EFFA8FDEFB74 +:104ABA004F96FFDF198FDFFB4F97FFDF118FE0FB68 +:104ACA004F98FFDF095004C15011FD8534C0710BA6 +:104ADA009EC09EFC609EFD34D4FE5206C0B9A5A5B8 +:104AEA0092DFF9C6C4C2C061FCE46661FCC1C3C5F9 +:104AFA00C7520C929269D4FEC1DFF88EFD708EFC0B +:104B0A00C1C1FBF8FF8D1F9C018E31318EE724064F +:104B1A0000DD0823DD0E23DD22EF38717AFA8C01DD +:104B2A009D5EEF2F717AFA4007F901DF068C019D2D +:104B3A005DEF2051FF2E019D5DEF18717AFA8C010D +:104B4A009D304004F903DD064004F904DF05306CAA +:104B5A002561944031FF09DE05A031FFEF07715846 +:104B6A00F000716294710BE3C0C09EFC609EFD343C +:104B7A00D4FE5206C0B9A5A592DFF9C6C4C2C06167 +:104B8A00FCC7FD6902D46661F83124952771239523 +:104B9A00D466DD05B466CEABAC717AFA5600664CC3 +:104BAA000ADD1172F3311C79D8FCCEFC0061CA61AE +:104BBA00A486EFEA717AFAF2C6D7C7C1C1FBF8FF39 +:104BCA00CC01008C014C0ADE36FD69028C01F03101 +:104BDA007E0410FC14A96168DF09AC02B9717AFA83 +:104BEA00F2EF1D8C01F0317E127910FC614902DF6F +:104BFA0006717AFAE2EF09717AFA615901EFC4E2B1 +:104C0A001004C6D7C72004FBF8FFF64210FC61F86F +:104C1A00EDF14CFD6902CC03008C034C0ADE3C8C9E +:104C2A0003F0317E0410FC14A96168DF05717AFA79 +:104C3A00EF29717AFA8C0372F3311C7910FCCEFCDD +:104C4A000061CA629C02D1DF0A8C03F0317E12E64F +:104C5A007810FCFD6902615903EFBECC0200CC0159 +:104C6A00018C02F0317E0410FC14A96168DD788C95 +:104C7A0002F0317E127910FCE743DF658C014C0AA1 +:104C8A00DE5F8C01F0317E127910FCE743DD4DFDC9 +:104C9A0069028C01F0317E0410FC14A96168DF18E6 +:104CAA006169018C01F0317E12F67810FC8C024E9B +:104CBA0001DCED717AFAEF2F8C01F0317E0410FCE1 +:104CCA0014A9128C02F0317E337810FC8C01F03179 +:104CDA007E12E67810FC615902717AFA615901EF85 +:104CEA009B615902ED6B4C00F21004C6D761FF526A +:104CFA000C929269D4FEC1DFF88EFD708EFCC171F0 +:104D0A007AFA8FE4FB5C03D1DD184004F903DD066F +:104D1A004004F904DF0C36100571D4DE053045383D +:104D2A006194C09EFC609EFD34D4FE5206C0B9A5B3 +:104D3A00A592DFF961FC61FC61FC61FC61FC61FC2C +:104D4A0061FC61FC61FC61FC61FC61FC61FC61FC71 +:104D5A0061FC61FC61FC61FC61FC61FC61FC61FC61 +:0E4D6A0061FC61FC61FC61FC61FC61FC61FCB0 +:0A4D780000060C12181E242A303623 +:104D8200ACFB0000000062FE000000008B39CC3555 +:104D92008C22A845042EB32EED44B13AB908983CB2 +:104DA20028FC36FE20FE02F903F929FC30FE2AFC1B +:104DB2002BFC08F926FC6CFF1AFF6EFF6AFF64FFEA +:0A4DC20027FC66FF2CFC55555555E3 +:104DCC00FF0000000000983AF82AFF00000047009E +:104DDC00317503F7332312D714AEF8C716AC06128D +:104DEC00C5AC0416F643DD078B99A7A5B3EFF5C246 +:024DFC00C6D718 +:024FF400323E4B +:0A4FF60031303A33393A3335000008 +:00000001FF + \ No newline at end of file diff --git a/tags/2.03_SDK-3.1/bsr.lmf b/tags/2.03_SDK-3.1/bsr.lmf new file mode 100644 index 0000000000000000000000000000000000000000..d15044e6dbf2eee391b3b79b8a4df133b6765d9a GIT binary patch literal 179864 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 NN@#b|+5C5M{67=Vg#`cr literal 0 HcmV?d00001 diff --git a/tags/2.03_SDK-3.1/bsr_k0r.map b/tags/2.03_SDK-3.1/bsr_k0r.map new file mode 100644 index 0000000..9284d37 --- /dev/null +++ b/tags/2.03_SDK-3.1/bsr_k0r.map @@ -0,0 +1,830 @@ + + + +78K0R Linker W1.33 Date: 2 Sep 2011 Page: 1 + +Command: -yc:\program files (x86)\nec electronics tools\dev -_msgoff - + obsr.lmf ..\..\..\Program Files (x86)\NEC Electronics Tools\C + C78K0R\W2.13\lib78k0r\s0rm.rel -gi1B339499E033F240BFAAh -pbsr + _k0r.map -nkd -gb7EFBFFh -bC:\Program Files (x86)\NEC Electro + nics Tools\CC78K0R\W2.13\lib78k0r\fsl.lib -bcl0rdm.lib -bcl0r + m.lib -bcl0rmf.lib -iC:\Program Files (x86)\NEC Electronics T + ools\CC78K0R\W2.13\lib78k0r -dbsr_mcu.dr -s -w2 loader.rel pm + .rel i2c_ctr.rel main.rel magic.rel WDT.rel i2c_mcu.rel i2c_t + wl.rel led.rel rtc.rel vreg_ctr.rel vreg_twl.rel adc.rel reng + e.rel accero.rel self_flash.rel sw.rel task_debug.rel task_mi + sc.rel task_sys.rel pedo_alg_thre_det2.rel ini_VECT.rel task_ + status.rel led_cam.rel led_pow.rel hal.rel batt_params.rel vo + ltable.rel pedo_lpf_coeff.rel kanaria.rel kanaria_c.rel get_e + i.rel +Para-file: +Out-file: bsr.lmf +Map-file: bsr_k0r.map +Direc-file:bsr_mcu.dr + + +*** Link information *** + + 71 output segment(s) + 3D17H byte(s) real data + 6305 symbol(s) defined + + +*** Memory map *** + + + SPACE=REGULAR + + MEMORY=BCL0 + BASE ADDRESS=00000H SIZE=01000H + OUTPUT INPUT INPUT BASE SIZE + SEGMENT SEGMENT MODULE ADDRESS + @@VECT00 00000H 00002H CSEG AT + @@VECT00 @cstart 00000H 00002H + LDR_CNSL 00002H 00000H CSEG PAGE64KP + LDR_CNSL 00002H 00000H CSEG PAGE64KP + LDR_CNSL loader 00002H 00000H + LDR_CNSL 00002H 00000H CSEG PAGE64KP + LDR_CNSL WDT 00002H 00000H + LDR_CNSL 00002H 00000H CSEG PAGE64KP + LDR_CNSL i2c_mcu 00002H 00000H + LDR_CNSL 00002H 00000H CSEG PAGE64KP + LDR_CNSL self_flash + 00002H 00000H + LDR_CNSL 00002H 00000H CSEG PAGE64KP + LDR_CNSL task_debug + 00002H 00000H + LDR_CNSL 00002H 00000H CSEG PAGE64KP + LDR_CNSL task_status + 00002H 00000H + LDR_CNSL 00002H 00000H CSEG PAGE64KP + LDR_CNSL hal 00002H 00000H +* gap * 00002H 0000EH + @@VECT10 00010H 00004H CSEG AT + @@VECT10 ini_VECT 00010H 00004H +* gap * 00014H 00008H + @@VECT1C 0001CH 00002H CSEG AT + @@VECT1C ini_VECT 0001CH 00002H +* gap * 0001EH 00006H + @@VECT24 00024H 00002H CSEG AT + @@VECT24 ini_VECT 00024H 00002H +* gap * 00026H 00004H + @@VECT2A 0002AH 00002H CSEG AT + @@VECT2A i2c_twl 0002AH 00002H +* gap * 0002CH 00008H + @@VECT34 00034H 00008H CSEG AT + @@VECT34 ini_VECT 00034H 00008H +* gap * 0003CH 0000EH + @@VECT4A 0004AH 00002H CSEG AT + @@VECT4A ini_VECT 0004AH 00002H +* gap * 0004CH 0000EH + @@VECT5A 0005AH 00002H CSEG AT + @@VECT5A i2c_ctr 0005AH 00002H +* gap * 0005CH 00006H + @@VECT62 00062H 00002H CSEG AT + @@VECT62 accero 00062H 00002H +* gap * 00064H 0001CH + @@CALT 00080H 00006H CSEG CALLT0 + @@CALT @cstart 00080H 00000H + @@CALT loader 00080H 00000H + @@CALT pm 00080H 00000H + @@CALT i2c_ctr 00080H 00000H + @@CALT main 00080H 00000H + @@CALT magic 00080H 00000H + @@CALT WDT 00080H 00000H + @@CALT i2c_mcu 00080H 00000H + @@CALT i2c_twl 00080H 00000H + @@CALT led 00080H 00000H + @@CALT rtc 00080H 00000H + @@CALT vreg_ctr 00080H 00000H + @@CALT vreg_twl 00080H 00000H + @@CALT adc 00080H 00000H + @@CALT renge 00080H 00006H + @@CALT accero 00086H 00000H + @@CALT self_flash + 00086H 00000H + @@CALT sw 00086H 00000H + @@CALT task_debug + 00086H 00000H + @@CALT task_misc + 00086H 00000H + @@CALT task_sys 00086H 00000H + @@CALT pedo_alg_thre_det2 + 00086H 00000H + @@CALT ini_VECT 00086H 00000H + @@CALT task_status + 00086H 00000H + @@CALT led_cam 00086H 00000H + @@CALT led_pow 00086H 00000H + @@CALT hal 00086H 00000H + @@CALT batt_params + 00086H 00000H + @@CALT voltable 00086H 00000H + @@CALT pedo_lpf_coeff + 00086H 00000H + @@CALT kanaria_c + 00086H 00000H +* gap * 00086H 0003AH + ?CSEGOB0 000C0H 00004H CSEG OPT_BYTE + @@CODE 000C4H 00000H CSEG BASE + @@CODE magic 000C4H 00000H + @@CODE ini_VECT 000C4H 00000H + @@CODE batt_params + 000C4H 00000H + LDR_CODL 000C4H 00000H CSEG + LDR_CODL loader 000C4H 00000H + LDR_CODL WDT 000C4H 00000H + LDR_CODL i2c_mcu 000C4H 00000H + LDR_CODL self_flash + 000C4H 00000H + LDR_CODL task_debug + 000C4H 00000H + LDR_CODL task_status + 000C4H 00000H + LDR_CODL hal 000C4H 00000H + ?CSEGSI 000C4H 0000AH CSEG + LDR_CODE 000CEH 0093CH CSEG + LDR_CODE loader 000CEH 0019FH + LDR_CODE WDT 0026DH 00000H + LDR_CODE i2c_mcu 0026DH 002D9H + LDR_CODE self_flash + 00546H 00373H + LDR_CODE task_debug + 008B9H 00000H + LDR_CODE task_status + 008B9H 00075H + LDR_CODE hal 0092EH 000DCH + FSL_CODE 00A0AH 00322H CSEG + FSL_CODE fsl_block_cmd + 00A0AH 0002BH + FSL_CODE fsl_block_check + 00A35H 00013H + FSL_CODE fsl_common + 00A48H 0014FH + FSL_CODE fsl_reset + 00B97H 00001H + FSL_CODE fsl_si_ibf + 00B98H 00064H + FSL_CODE fsl_phySwap + 00BFCH 0004DH + FSL_CODE fsl_si_common + 00C49H 00061H + FSL_CODE fsl_swap 00CAAH 00030H + FSL_CODE fsl_write + 00CDAH 00052H + @@LCODE 00D2CH 00277H CSEG + @@LCODE @cstart 00D2CH 0006DH + @@LCODE @imul 00D99H 00011H + @@LCODE @lumul 00DAAH 0002BH + @@LCODE @isdiv 00DD5H 00022H + @@LCODE @iudiv 00DF7H 0002DH + @@LCODE @isrem 00E24H 00021H + @@LCODE @iurem 00E45H 0002FH + @@LCODE @lsdiv 00E74H 00039H + @@LCODE @ludiv 00EADH 0003FH + @@LCODE @divuw 00EECH 00034H + @@LCODE @ladd 00F20H 0000FH + @@LCODE @llsh 00F2FH 0001BH + @@LCODE @lursh 00F4AH 0001FH + @@LCODE @iscmp 00F69H 0000CH + @@LCODE @lband 00F75H 00014H + @@LCODE @bcdtob 00F89H 0001AH +* gap * 00FA3H 00053H + MGC_LOAD 00FF6H 0000AH CSEG AT + MGC_LOAD magic 00FF6H 0000AH + + MEMORY=ROM + BASE ADDRESS=02000H SIZE=03000H + OUTPUT INPUT INPUT BASE SIZE + SEGMENT SEGMENT MODULE ADDRESS + MGC_MIMI 02000H 0000AH CSEG AT + MGC_MIMI magic 02000H 0000AH + @@CNST 0200AH 00282H CSEG + @@CNST @cstart 0200AH 00000H + @@CNST loader 0200AH 00000H + @@CNST pm 0200AH 00008H + @@CNST i2c_ctr 02012H 00000H + @@CNST main 02012H 00000H + @@CNST magic 02012H 00000H + @@CNST WDT 02012H 00000H + @@CNST i2c_mcu 02012H 00000H + @@CNST i2c_twl 02012H 00000H + @@CNST led 02012H 00000H + @@CNST rtc 02012H 00000H + @@CNST vreg_ctr 02012H 00000H + @@CNST vreg_twl 02012H 00000H + @@CNST adc 02012H 00008H + @@CNST renge 0201AH 00000H + @@CNST accero 0201AH 00000H + @@CNST self_flash + 0201AH 00002H + @@CNST sw 0201CH 00000H + @@CNST task_debug + 0201CH 00000H + @@CNST task_misc + 0201CH 00000H + @@CNST task_sys 0201CH 00000H + @@CNST pedo_alg_thre_det2 + 0201CH 00018H + @@CNST ini_VECT 02034H 00000H + @@CNST task_status + 02034H 00000H + @@CNST led_cam 02034H 00000H + @@CNST led_pow 02034H 00020H + @@CNST hal 02054H 00000H + @@CNST batt_params + 02054H 001C8H + @@CNST voltable 0221CH 00040H + @@CNST pedo_lpf_coeff + 0225CH 00030H + @@CNST kanaria_c + 0228CH 00000H + ROM_CODE 0228CH 0249EH CSEG + ROM_CODE pm 0228CH 0098CH + ROM_CODE i2c_ctr 02C18H 0005CH + ROM_CODE main 02C74H 00055H + ROM_CODE i2c_twl 02CC9H 0005EH + ROM_CODE led 02D27H 0024FH + ROM_CODE rtc 02F76H 000E0H + ROM_CODE vreg_ctr 03056H 0047DH + ROM_CODE vreg_twl 034D3H 000F9H + ROM_CODE adc 035CCH 00261H + ROM_CODE renge 0382DH 00018H + ROM_CODE accero 03845H 00146H + ROM_CODE sw 0398BH 00126H + ROM_CODE task_misc + 03AB1H 001E7H + ROM_CODE task_sys 03C98H 00381H + ROM_CODE pedo_alg_thre_det2 + 04019H 004D4H + ROM_CODE led_cam 044EDH 000BBH + ROM_CODE led_pow 045A8H 0016FH + ROM_CODE voltable 04717H 00000H + ROM_CODE pedo_lpf_coeff + 04717H 00000H + ROM_CODE kanaria_c + 04717H 00006H + ROM_CODE get_ei 0471DH 0000DH + @@BASE 0472AH 0064EH CSEG BASE + @@BASE loader 0472AH 00000H + @@BASE pm 0472AH 0003EH + @@BASE i2c_ctr 04768H 00170H + @@BASE main 048D8H 00000H + @@BASE magic 048D8H 00000H + @@BASE WDT 048D8H 00000H + @@BASE i2c_mcu 048D8H 000F2H + @@BASE i2c_twl 049CAH 000D0H + @@BASE led 04A9AH 00000H + @@BASE rtc 04A9AH 0005DH + @@BASE vreg_ctr 04AF7H 00000H + @@BASE vreg_twl 04AF7H 00000H + @@BASE adc 04AF7H 00094H + @@BASE renge 04B8BH 0016CH + @@BASE accero 04CF7H 00049H + @@BASE self_flash + 04D40H 00000H + @@BASE sw 04D40H 00000H + @@BASE task_debug + 04D40H 00000H + @@BASE task_misc + 04D40H 00000H + @@BASE task_sys 04D40H 00000H + @@BASE pedo_alg_thre_det2 + 04D40H 00000H + @@BASE ini_VECT 04D40H 00038H + @@BASE task_status + 04D78H 00000H + @@BASE led_cam 04D78H 00000H + @@BASE led_pow 04D78H 00000H + @@BASE hal 04D78H 00000H + @@BASE batt_params + 04D78H 00000H + @@BASE voltable 04D78H 00000H + @@BASE pedo_lpf_coeff + 04D78H 00000H + @@BASE kanaria_c + 04D78H 00000H + @@CNSTL 04D78H 00000H CSEG PAGE64KP + @@CNSTL @cstart 04D78H 00000H + @@CNSTL 04D78H 00000H CSEG PAGE64KP + @@CNSTL pm 04D78H 00000H + @@CNSTL 04D78H 00000H CSEG PAGE64KP + @@CNSTL i2c_ctr 04D78H 00000H + @@CNSTL 04D78H 00000H CSEG PAGE64KP + @@CNSTL main 04D78H 00000H + @@CNSTL 04D78H 00000H CSEG PAGE64KP + @@CNSTL i2c_twl 04D78H 00000H + @@CNSTL 04D78H 00000H CSEG PAGE64KP + @@CNSTL led 04D78H 00000H + @@CNSTL 04D78H 00000H CSEG PAGE64KP + @@CNSTL rtc 04D78H 00000H + @@CNSTL 04D78H 00000H CSEG PAGE64KP + @@CNSTL vreg_ctr 04D78H 00000H + @@CNSTL 04D78H 00000H CSEG PAGE64KP + @@CNSTL vreg_twl 04D78H 00000H + @@CNSTL 04D78H 00000H CSEG PAGE64KP + @@CNSTL adc 04D78H 00000H + @@CNSTL 04D78H 00000H CSEG PAGE64KP + @@CNSTL renge 04D78H 00000H + @@CNSTL 04D78H 00000H CSEG PAGE64KP + @@CNSTL accero 04D78H 00000H + @@CNSTL 04D78H 00000H CSEG PAGE64KP + @@CNSTL sw 04D78H 00000H + @@CNSTL 04D78H 00000H CSEG PAGE64KP + @@CNSTL task_misc + 04D78H 00000H + @@CNSTL 04D78H 00000H CSEG PAGE64KP + @@CNSTL task_sys 04D78H 00000H + @@CNSTL 04D78H 00000H CSEG PAGE64KP + @@CNSTL pedo_alg_thre_det2 + 04D78H 00000H + @@CNSTL 04D78H 00000H CSEG PAGE64KP + @@CNSTL ini_VECT 04D78H 00000H + @@CNSTL 04D78H 00000H CSEG PAGE64KP + @@CNSTL led_cam 04D78H 00000H + @@CNSTL 04D78H 00000H CSEG PAGE64KP + @@CNSTL led_pow 04D78H 00000H + @@CNSTL 04D78H 00000H CSEG PAGE64KP + @@CNSTL batt_params + 04D78H 00000H + @@CNSTL 04D78H 00000H CSEG PAGE64KP + @@CNSTL voltable 04D78H 00000H + @@CNSTL 04D78H 00000H CSEG PAGE64KP + @@CNSTL pedo_lpf_coeff + 04D78H 00000H + @@CNSTL 04D78H 00000H CSEG PAGE64KP + @@CNSTL kanaria_c + 04D78H 00000H + @@CNSTL 04D78H 0000AH CSEG PAGE64KP + @@CNSTL @bcdtob 04D78H 0000AH + @@R_INIT 04D82H 0004AH CSEG UNIT64KP + @@R_INIT @cstart 04D82H 00000H + @@R_INIT loader 04D82H 00000H + @@R_INIT pm 04D82H 00000H + @@R_INIT i2c_ctr 04D82H 00000H + @@R_INIT main 04D82H 00000H + @@R_INIT magic 04D82H 00000H + @@R_INIT WDT 04D82H 00000H + @@R_INIT i2c_mcu 04D82H 00000H + @@R_INIT i2c_twl 04D82H 00000H + @@R_INIT led 04D82H 00000H + @@R_INIT rtc 04D82H 00000H + @@R_INIT vreg_ctr 04D82H 00000H + @@R_INIT vreg_twl 04D82H 00000H + @@R_INIT adc 04D82H 0000CH + @@R_INIT renge 04D8EH 00014H + @@R_INIT accero 04DA2H 00000H + @@R_INIT self_flash + 04DA2H 00000H + @@R_INIT sw 04DA2H 00000H + @@R_INIT task_debug + 04DA2H 00000H + @@R_INIT task_misc + 04DA2H 00026H + @@R_INIT task_sys 04DC8H 00000H + @@R_INIT pedo_alg_thre_det2 + 04DC8H 00000H + @@R_INIT ini_VECT 04DC8H 00000H + @@R_INIT task_status + 04DC8H 00000H + @@R_INIT led_cam 04DC8H 00000H + @@R_INIT led_pow 04DC8H 00004H + @@R_INIT hal 04DCCH 00000H + @@R_INIT batt_params + 04DCCH 00000H + @@R_INIT voltable 04DCCH 00000H + @@R_INIT pedo_lpf_coeff + 04DCCH 00000H + @@R_INIT kanaria_c + 04DCCH 00000H + @@R_INIT @rom 04DCCH 00000H + @@R_INIS 04DCCH 00010H CSEG UNIT64KP + @@R_INIS @cstart 04DCCH 00000H + @@R_INIS loader 04DCCH 00000H + @@R_INIS pm 04DCCH 00002H + @@R_INIS i2c_ctr 04DCEH 00002H + @@R_INIS main 04DD0H 00000H + @@R_INIS magic 04DD0H 00000H + @@R_INIS WDT 04DD0H 00000H + @@R_INIS i2c_mcu 04DD0H 00000H + @@R_INIS i2c_twl 04DD0H 00000H + @@R_INIS led 04DD0H 00000H + @@R_INIS rtc 04DD0H 00000H + @@R_INIS vreg_ctr 04DD0H 00000H + @@R_INIS vreg_twl 04DD0H 00000H + @@R_INIS adc 04DD0H 00000H + @@R_INIS renge 04DD0H 00000H + @@R_INIS accero 04DD0H 00000H + @@R_INIS self_flash + 04DD0H 00000H + @@R_INIS sw 04DD0H 00000H + @@R_INIS task_debug + 04DD0H 00000H + @@R_INIS task_misc + 04DD0H 00000H + @@R_INIS task_sys 04DD0H 00002H + @@R_INIS pedo_alg_thre_det2 + 04DD2H 00006H + @@R_INIS ini_VECT 04DD8H 00000H + @@R_INIS task_status + 04DD8H 00000H + @@R_INIS led_cam 04DD8H 00002H + @@R_INIS led_pow 04DDAH 00002H + @@R_INIS hal 04DDCH 00000H + @@R_INIS batt_params + 04DDCH 00000H + @@R_INIS voltable 04DDCH 00000H + @@R_INIS pedo_lpf_coeff + 04DDCH 00000H + @@R_INIS kanaria_c + 04DDCH 00000H + @@R_INIS @rom 04DDCH 00000H + @@RLINIT 04DDCH 00000H CSEG UNIT64KP + @@RLINIT loader 04DDCH 00000H + @@RLINIT pm 04DDCH 00000H + @@RLINIT i2c_ctr 04DDCH 00000H + @@RLINIT main 04DDCH 00000H + @@RLINIT magic 04DDCH 00000H + @@RLINIT WDT 04DDCH 00000H + @@RLINIT i2c_mcu 04DDCH 00000H + @@RLINIT i2c_twl 04DDCH 00000H + @@RLINIT led 04DDCH 00000H + @@RLINIT rtc 04DDCH 00000H + @@RLINIT vreg_ctr 04DDCH 00000H + @@RLINIT vreg_twl 04DDCH 00000H + @@RLINIT adc 04DDCH 00000H + @@RLINIT renge 04DDCH 00000H + @@RLINIT accero 04DDCH 00000H + @@RLINIT self_flash + 04DDCH 00000H + @@RLINIT sw 04DDCH 00000H + @@RLINIT task_debug + 04DDCH 00000H + @@RLINIT task_misc + 04DDCH 00000H + @@RLINIT task_sys 04DDCH 00000H + @@RLINIT pedo_alg_thre_det2 + 04DDCH 00000H + @@RLINIT ini_VECT 04DDCH 00000H + @@RLINIT task_status + 04DDCH 00000H + @@RLINIT led_cam 04DDCH 00000H + @@RLINIT led_pow 04DDCH 00000H + @@RLINIT hal 04DDCH 00000H + @@RLINIT batt_params + 04DDCH 00000H + @@RLINIT voltable 04DDCH 00000H + @@RLINIT pedo_lpf_coeff + 04DDCH 00000H + @@RLINIT kanaria_c + 04DDCH 00000H + @@RLINIT @rom 04DDCH 00000H + @@CODEL 04DDCH 00000H CSEG + @@CODEL pm 04DDCH 00000H + @@CODEL i2c_ctr 04DDCH 00000H + @@CODEL main 04DDCH 00000H + @@CODEL magic 04DDCH 00000H + @@CODEL i2c_twl 04DDCH 00000H + @@CODEL led 04DDCH 00000H + @@CODEL rtc 04DDCH 00000H + @@CODEL vreg_ctr 04DDCH 00000H + @@CODEL vreg_twl 04DDCH 00000H + @@CODEL adc 04DDCH 00000H + @@CODEL renge 04DDCH 00000H + @@CODEL accero 04DDCH 00000H + @@CODEL sw 04DDCH 00000H + @@CODEL task_misc + 04DDCH 00000H + @@CODEL task_sys 04DDCH 00000H + @@CODEL pedo_alg_thre_det2 + 04DDCH 00000H + @@CODEL ini_VECT 04DDCH 00000H + @@CODEL led_cam 04DDCH 00000H + @@CODEL led_pow 04DDCH 00000H + @@CODEL batt_params + 04DDCH 00000H + @@CODEL voltable 04DDCH 00000H + @@CODEL pedo_lpf_coeff + 04DDCH 00000H + @@CODEL kanaria_c + 04DDCH 00000H + @@LCODEL 04DDCH 00022H CSEG + @@LCODEL abs 04DDCH 00008H + @@LCODEL memcpy_n 04DE4H 0001AH +* gap * 04DFEH 001F6H + MGC_VER 04FF4H 00002H CSEG AT + MGC_VER magic 04FF4H 00002H + MGC_TAIL 04FF6H 0000AH CSEG AT + MGC_TAIL magic 04FF6H 0000AH + + MEMORY=RAM + BASE ADDRESS=FF900H SIZE=00500H + OUTPUT INPUT INPUT BASE SIZE + SEGMENT SEGMENT MODULE ADDRESS + @@DATA FF900H 003CCH DSEG BASEP + @@DATA @cstart FF900H 00002H + @@DATA loader FF902H 00000H + @@DATA pm FF902H 00002H + @@DATA i2c_ctr FF904H 00000H + @@DATA main FF904H 0021EH + @@DATA magic FFB22H 00000H + @@DATA WDT FFB22H 00000H + @@DATA i2c_mcu FFB22H 00004H + @@DATA i2c_twl FFB26H 00000H + @@DATA led FFB26H 00076H + @@DATA rtc FFB9CH 00008H + @@DATA vreg_ctr FFBA4H 0005CH + @@DATA vreg_twl FFC00H 00010H + @@DATA adc FFC10H 00000H + @@DATA renge FFC10H 00014H + @@DATA accero FFC24H 00000H + @@DATA self_flash + FFC24H 00002H + @@DATA sw FFC26H 00000H + @@DATA task_debug + FFC26H 00000H + @@DATA task_misc + FFC26H 00008H + @@DATA task_sys FFC2EH 00000H + @@DATA pedo_alg_thre_det2 + FFC2EH 00098H + @@DATA ini_VECT FFCC6H 00000H + @@DATA task_status + FFCC6H 00000H + @@DATA led_cam FFCC6H 00000H + @@DATA led_pow FFCC6H 00006H + @@DATA hal FFCCCH 00000H + @@DATA batt_params + FFCCCH 00000H + @@DATA voltable FFCCCH 00000H + @@DATA pedo_lpf_coeff + FFCCCH 00000H + @@DATA kanaria FFCCCH 00000H + @@DATA kanaria_c + FFCCCH 00000H + @@DATA @rom FFCCCH 00000H + @@INIT FFCCCH 0004AH DSEG BASEP + @@INIT @cstart FFCCCH 00000H + @@INIT loader FFCCCH 00000H + @@INIT pm FFCCCH 00000H + @@INIT i2c_ctr FFCCCH 00000H + @@INIT main FFCCCH 00000H + @@INIT magic FFCCCH 00000H + @@INIT WDT FFCCCH 00000H + @@INIT i2c_mcu FFCCCH 00000H + @@INIT i2c_twl FFCCCH 00000H + @@INIT led FFCCCH 00000H + @@INIT rtc FFCCCH 00000H + @@INIT vreg_ctr FFCCCH 00000H + @@INIT vreg_twl FFCCCH 00000H + @@INIT adc FFCCCH 0000CH + @@INIT renge FFCD8H 00014H + @@INIT accero FFCECH 00000H + @@INIT self_flash + FFCECH 00000H + @@INIT sw FFCECH 00000H + @@INIT task_debug + FFCECH 00000H + @@INIT task_misc + FFCECH 00026H + @@INIT task_sys FFD12H 00000H + @@INIT pedo_alg_thre_det2 + FFD12H 00000H + @@INIT ini_VECT FFD12H 00000H + @@INIT task_status + FFD12H 00000H + @@INIT led_cam FFD12H 00000H + @@INIT led_pow FFD12H 00004H + @@INIT hal FFD16H 00000H + @@INIT batt_params + FFD16H 00000H + @@INIT voltable FFD16H 00000H + @@INIT pedo_lpf_coeff + FFD16H 00000H + @@INIT kanaria FFD16H 00000H + @@INIT kanaria_c + FFD16H 00000H + @@INIT @rom FFD16H 00000H + FSL_DATA FFD16H 00010H DSEG UNITP + FSL_DATA fsl_common + FFD16H 00010H + @@INITL FFD26H 00000H DSEG UNIT64KP + @@INITL loader FFD26H 00000H + @@INITL pm FFD26H 00000H + @@INITL i2c_ctr FFD26H 00000H + @@INITL main FFD26H 00000H + @@INITL magic FFD26H 00000H + @@INITL WDT FFD26H 00000H + @@INITL i2c_mcu FFD26H 00000H + @@INITL i2c_twl FFD26H 00000H + @@INITL led FFD26H 00000H + @@INITL rtc FFD26H 00000H + @@INITL vreg_ctr FFD26H 00000H + @@INITL vreg_twl FFD26H 00000H + @@INITL adc FFD26H 00000H + @@INITL renge FFD26H 00000H + @@INITL accero FFD26H 00000H + @@INITL self_flash + FFD26H 00000H + @@INITL sw FFD26H 00000H + @@INITL task_debug + FFD26H 00000H + @@INITL task_misc + FFD26H 00000H + @@INITL task_sys FFD26H 00000H + @@INITL pedo_alg_thre_det2 + FFD26H 00000H + @@INITL ini_VECT FFD26H 00000H + @@INITL task_status + FFD26H 00000H + @@INITL led_cam FFD26H 00000H + @@INITL led_pow FFD26H 00000H + @@INITL hal FFD26H 00000H + @@INITL batt_params + FFD26H 00000H + @@INITL voltable FFD26H 00000H + @@INITL pedo_lpf_coeff + FFD26H 00000H + @@INITL kanaria FFD26H 00000H + @@INITL kanaria_c + FFD26H 00000H + @@INITL @rom FFD26H 00000H + @@DATAL FFD26H 00000H DSEG UNIT64KP + @@DATAL loader FFD26H 00000H + @@DATAL pm FFD26H 00000H + @@DATAL i2c_ctr FFD26H 00000H + @@DATAL main FFD26H 00000H + @@DATAL magic FFD26H 00000H + @@DATAL WDT FFD26H 00000H + @@DATAL i2c_mcu FFD26H 00000H + @@DATAL i2c_twl FFD26H 00000H + @@DATAL led FFD26H 00000H + @@DATAL rtc FFD26H 00000H + @@DATAL vreg_ctr FFD26H 00000H + @@DATAL vreg_twl FFD26H 00000H + @@DATAL adc FFD26H 00000H + @@DATAL renge FFD26H 00000H + @@DATAL accero FFD26H 00000H + @@DATAL self_flash + FFD26H 00000H + @@DATAL sw FFD26H 00000H + @@DATAL task_debug + FFD26H 00000H + @@DATAL task_misc + FFD26H 00000H + @@DATAL task_sys FFD26H 00000H + @@DATAL pedo_alg_thre_det2 + FFD26H 00000H + @@DATAL ini_VECT FFD26H 00000H + @@DATAL task_status + FFD26H 00000H + @@DATAL led_cam FFD26H 00000H + @@DATAL led_pow FFD26H 00000H + @@DATAL hal FFD26H 00000H + @@DATAL batt_params + FFD26H 00000H + @@DATAL voltable FFD26H 00000H + @@DATAL pedo_lpf_coeff + FFD26H 00000H + @@DATAL kanaria FFD26H 00000H + @@DATAL kanaria_c + FFD26H 00000H + @@DATAL @rom FFD26H 00000H +* gap * FFD26H 000DAH + + MEMORY=RAM2 + BASE ADDRESS=FFE20H SIZE=000C0H + OUTPUT INPUT INPUT BASE SIZE + SEGMENT SEGMENT MODULE ADDRESS + @@INIS FFE20H 00010H DSEG SADDRP + @@INIS @cstart FFE20H 00000H + @@INIS loader FFE20H 00000H + @@INIS pm FFE20H 00002H + @@INIS i2c_ctr FFE22H 00002H + @@INIS main FFE24H 00000H + @@INIS magic FFE24H 00000H + @@INIS WDT FFE24H 00000H + @@INIS i2c_mcu FFE24H 00000H + @@INIS i2c_twl FFE24H 00000H + @@INIS led FFE24H 00000H + @@INIS rtc FFE24H 00000H + @@INIS vreg_ctr FFE24H 00000H + @@INIS vreg_twl FFE24H 00000H + @@INIS adc FFE24H 00000H + @@INIS renge FFE24H 00000H + @@INIS accero FFE24H 00000H + @@INIS self_flash + FFE24H 00000H + @@INIS sw FFE24H 00000H + @@INIS task_debug + FFE24H 00000H + @@INIS task_misc + FFE24H 00000H + @@INIS task_sys FFE24H 00002H + @@INIS pedo_alg_thre_det2 + FFE26H 00006H + @@INIS ini_VECT FFE2CH 00000H + @@INIS task_status + FFE2CH 00000H + @@INIS led_cam FFE2CH 00002H + @@INIS led_pow FFE2EH 00002H + @@INIS hal FFE30H 00000H + @@INIS batt_params + FFE30H 00000H + @@INIS voltable FFE30H 00000H + @@INIS pedo_lpf_coeff + FFE30H 00000H + @@INIS kanaria_c + FFE30H 00000H + @@INIS @rom FFE30H 00000H + @@DATS FFE30H 00062H DSEG SADDRP + @@DATS @cstart FFE30H 00000H + @@DATS loader FFE30H 00000H + @@DATS pm FFE30H 00016H + @@DATS i2c_ctr FFE46H 00004H + @@DATS main FFE4AH 00000H + @@DATS magic FFE4AH 00000H + @@DATS WDT FFE4AH 00000H + @@DATS i2c_mcu FFE4AH 00008H + @@DATS i2c_twl FFE52H 00000H + @@DATS led FFE52H 00006H + @@DATS rtc FFE58H 00000H + @@DATS vreg_ctr FFE58H 00004H + @@DATS vreg_twl FFE5CH 00000H + @@DATS adc FFE5CH 0000AH + @@DATS renge FFE66H 00002H + @@DATS accero FFE68H 00002H + @@DATS self_flash + FFE6AH 00000H + @@DATS sw FFE6AH 0000CH + @@DATS task_debug + FFE76H 00000H + @@DATS task_misc + FFE76H 00004H + @@DATS task_sys FFE7AH 00002H + @@DATS pedo_alg_thre_det2 + FFE7CH 0000EH + @@DATS ini_VECT FFE8AH 00000H + @@DATS task_status + FFE8AH 00002H + @@DATS led_cam FFE8CH 00002H + @@DATS led_pow FFE8EH 00004H + @@DATS hal FFE92H 00000H + @@DATS batt_params + FFE92H 00000H + @@DATS voltable FFE92H 00000H + @@DATS pedo_lpf_coeff + FFE92H 00000H + @@DATS kanaria_c + FFE92H 00000H + @@DATS @rom FFE92H 00000H + @@BITS FFE92H 00006H BSEG + @@BITS @cstart FFE92H.0 00000H.0 + @@BITS loader FFE92H.0 00000H.0 + @@BITS pm FFE92H.0 00001H.1 + @@BITS i2c_ctr FFE93H.1 00000H.0 + @@BITS main FFE93H.1 00000H.1 + @@BITS magic FFE93H.2 00000H.0 + @@BITS WDT FFE93H.2 00000H.0 + @@BITS i2c_mcu FFE93H.2 00000H.4 + @@BITS i2c_twl FFE93H.6 00000H.0 + @@BITS led FFE93H.6 00000H.4 + @@BITS rtc FFE94H.2 00000H.3 + @@BITS vreg_ctr FFE94H.5 00000H.1 + @@BITS vreg_twl FFE94H.6 00000H.0 + @@BITS adc FFE94H.6 00000H.4 + @@BITS renge FFE95H.2 00000H.2 + @@BITS accero FFE95H.4 00000H.0 + @@BITS self_flash + FFE95H.4 00000H.0 + @@BITS sw FFE95H.4 00000H.1 + @@BITS task_debug + FFE95H.5 00000H.0 + @@BITS task_misc + FFE95H.5 00000H.3 + @@BITS task_sys FFE96H.0 00000H.0 + @@BITS pedo_alg_thre_det2 + FFE96H.0 00000H.2 + @@BITS ini_VECT FFE96H.2 00000H.0 + @@BITS task_status + FFE96H.2 00000H.0 + @@BITS led_cam FFE96H.2 00000H.1 + @@BITS led_pow FFE96H.3 00000H.0 + @@BITS hal FFE96H.3 00000H.6 + @@BITS batt_params + FFE97H.1 00000H.0 + @@BITS voltable FFE97H.1 00000H.0 + @@BITS pedo_lpf_coeff + FFE97H.1 00000H.0 + @@BITS kanaria_c + FFE97H.1 00000H.0 +* gap * FFE98H 0003CH + @@SEGREG FFED4H 00004H DSEG AT + @@SEGREG @SEGREG FFED4H 00004H + @@RTARG0 FFED8H 00008H DSEG AT + @@RTARG0 @RTARG0 FFED8H 00008H + + + Target chip : uPD79F0104 + Device file : E1.00b + \ No newline at end of file diff --git a/tags/2.03_SDK-3.1/bsr_mcu.dr b/tags/2.03_SDK-3.1/bsr_mcu.dr new file mode 100644 index 0000000..81aeecc --- /dev/null +++ b/tags/2.03_SDK-3.1/bsr_mcu.dr @@ -0,0 +1,46 @@ +;;; ̈̒` +;32kB = 0x7FFF +MEMORY BCL0: (00000H, 01000H ) +;MEMORY BCL1: (01000H, 01000H ) ; obNAbv̈ +MEMORY ROM : (02000H, 03000H ) +;MEMORY ROM_BKUP:(05000H, 03000H ) ; obNAbv̈ +;MEMORY OCD :(0FC00H, 00400H ) ; OCDgĂ炵 + + +;;; ZOg̊ݒ +; u[gubN0Ɋ蓖Ă +MERGE LDR_CODE : =BCL0 +MERGE LDR_CODL : =BCL0 +MERGE FSL_CODE : =BCL0 ; =FSL ; ސtbVCu +MERGE @@LCODE : =BCL0 ; X^[gAbv[` +;MERGE @@LCODEL : =BCL0 + +;MERGE LDR_RINT:=BCL0 +;MERGE LDR_CNST:=BCL0 +MERGE LDR_CNSL:=BCL0 + + + +; ʏ̈ɒu +MERGE ROM_CODE:=ROM +MERGE @@CNST: =ROM +MERGE @@R_INIT: =ROM ; ROMȊOɒuȂX^[gAbv[`vC + + + + + + +; }WbNio[ +;; magic.c̒Ŏw + + +;--- RAM̈ ------------------------------------------------------- +; +; RAM1,RAM2̈̓[U[vOŎgpĂǂłAZtvO +; ZtvÕCugp邽߁Al͔j󂳂܂B +; +memory RAM : (0FF900H, 0500H) ; [U[q`l̈ +;memory SLF_RAM : (0FF900H, 0020H) ; Slef Program\̈[gp֎~] +memory RAM2 : (0FFE20H, 00C0H) ; ZtvOAgp֎~̈ +;memory SLF_RAM : (0FFE00H, 0020H) ; Slef Program\̈[gp֎~] diff --git a/tags/2.03_SDK-3.1/bsr_system.h b/tags/2.03_SDK-3.1/bsr_system.h new file mode 100644 index 0000000..bb6105f --- /dev/null +++ b/tags/2.03_SDK-3.1/bsr_system.h @@ -0,0 +1,67 @@ +#ifndef __bsr_system__ +#define __bsr_system__ + +// Cxg[ṽXe[g +enum pwr_state_ +{ + OFF_TRIG = 0, + ON_CHECK, + ON_TRIG, + ON, +// SLEEP_TRIG, + SLEEP, +// WAKE, + OFF, +}; + +enum poweron_reason_ +{ + NONE = 0, + RSN_PWSW, + RSN_RTC_ALARM, + RSN_TRIAL, // ̌ + RSN_RSV4, + RSN_RSV5 +}; + + +enum model_ +{ + MODEL_JIKKI, + MODEL_TS_BOARD, + MODEL_SHIROBAKO, + MODEL_JIKKI_NOBATT, + MODEL_CAPTURE_BOX, + MODEL_ISBAKO, // Asystem_status.model MODEL_JIKKI ɂĂ̂Ŗgp + MODEL_RESERVED3, +}; + +enum family_ +{ + FAMILY_CTR, + FAMILY_SPFL, + FAMILY_SHRIMP +}; + +// ^XNVXȅԏȂ +typedef struct _system_status_ +{ + enum pwr_state_ pwr_state; + enum poweron_reason_ poweron_reason; + unsigned char reboot:1; +// unsigned char info_fullcolor:1; + unsigned char captureBox:1; // Lv` SDKɂ͎@ƕԂ + unsigned char taikendai:1; + unsigned char taikendai_nbd:1; + unsigned char is_dev:1; + enum model_ model; + enum family_ family; +}system_status_; + +extern bit force_off; + +extern system_status_ system_status; + + + +#endif diff --git a/tags/2.03_SDK-3.1/config.h b/tags/2.03_SDK-3.1/config.h new file mode 100644 index 0000000..71320cf --- /dev/null +++ b/tags/2.03_SDK-3.1/config.h @@ -0,0 +1,94 @@ +#ifndef __config__ +#define __config__ + + +#define MCU_VER_MAJOR 0x02 +#define MCU_VER_MINOR 0x0E + + +// fobOXCb` + +//#define _debug_led_ // LED print fobOƂ +//#define _ALLOW_NOBATT_ // @drȂi=A_v^̂݁jł̋N +//#define _DBG_LED_PRINT_ // LED print fobOƂ(ȃAbvf[gp) +//#define _ENABLE_COMMAND3_ // mcuZbgwdtR}hLɂ +//#define _FORCE_TAIKENDAI_ +//#define _FORCE_TAIKENDAI_NBD_ + +//#define _DBG_CHK_OFF_LEAK_ // OFF[Nd̃`FbN(fobKŊmF) +//#define _DBG_NOP_ // u[N\邽߂NOP()LɂƂ + +//#define _ENABLE_HAL_ // fobOpHALLɂBRgAEgŃX[ɂȂB +//#define _ENABLE_PRESS_SEL_TO_WDT_ // SEL WDT + +//#define _DI_WITH_CHECK_ // 荞݋֎~dɊ|Ȃ`FbN + +#ifdef _DBG_NOP_ // R[hKvNOPƋʂ邽 +# define dbg_nop() NOP() +#else +# define dbg_nop() ; +#endif + + +#define _I2C_ERR_ABORT_ // *Won* I2CŌ돑݂炵ȍ~@ + //. u[NĂSRȂȂ܂... + +// dlt@[ +//#define _TAIKENDAI_ +// homej[ɓĂ܂̂t@[‚BROMȂ̂œdrp[^pX +//#define _TAIKENDAI_SEISAN_SPECIAL_ +// Yɑ̌gpǂƁAA_v^ȂƓd炸ɌɎxႪ̂ňꎞt@[ +//#define _RVD_ +// fobKA^b`Ƀ^[QbgZbgœd؂Ă܂̂ + + +// ̎́C‚ȂƑ̌̐YłȂˁI +#ifdef _TAIKENDAI_SEISAN_SPECIAL_ +#define MCU_VER_MINOR 0x80 +#endif + + +#ifdef _TAIKENDAI_ +#define MCU_VER_MINOR 0x92 +// 0x90 1.31 @HOMEɓĂ܂̂XCb`̃}XNő΍ +// ROMŝ߁Adrp[^폜 + +#endif + + +#define _firm_format_v3_ + +//#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 board, WM1,1 TS-CTRC, @ + + +// ---------------------------------- // +#ifdef _MODEL_TEG2_ +unsupported! +#endif + + +#ifdef _MODEL_WM0_ +unsupported! +#endif + + +#ifdef _MODEL_TS0_ +unsupported! +#endif + +#ifdef _MODEL_CTR_ +#define _PMIC_CTR_ +#define _MCU_BSR_ +#endif + +#endif diff --git a/tags/2.03_SDK-3.1/fsl.h b/tags/2.03_SDK-3.1/fsl.h new file mode 100644 index 0000000..0e806b5 --- /dev/null +++ b/tags/2.03_SDK-3.1/fsl.h @@ -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 diff --git a/tags/2.03_SDK-3.1/fsl_user.h b/tags/2.03_SDK-3.1/fsl_user.h new file mode 100644 index 0000000..1018689 --- /dev/null +++ b/tags/2.03_SDK-3.1/fsl_user.h @@ -0,0 +1,113 @@ +/*==============================================================================================*/ +/* 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 8000000 + +/* 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 */ +#ifndef _WIN32 +#define FSL_FLMD0_HIGH {BECTL.7 = 1;} +#define FSL_FLMD0_LOW {BECTL.7 = 0;} +#else +#define FSL_FLMD0_HIGH {BECTL_7 = 1;} +#define FSL_FLMD0_LOW {BECTL_7 = 0;} +#endif + + +/*----------------------------------------------------------------------------------------------*/ +/* switch interrupt backu functionality ON/OFF using #define/#undef */ +/*----------------------------------------------------------------------------------------------*/ +/* #define FSL_INT_BACKUP */ +#undef FSL_INT_BACKUP + + +#endif diff --git a/tags/2.03_SDK-3.1/hal.c b/tags/2.03_SDK-3.1/hal.c new file mode 100644 index 0000000..e321719 --- /dev/null +++ b/tags/2.03_SDK-3.1/hal.c @@ -0,0 +1,177 @@ +#ifndef _WIN32 +#pragma SFR +#endif + +#include "incs_loader.h" + + +#define WIFI_txLatch PIF21 // dgMpX { led.h Œ` + + +// HALłԂ //////////////////////////////////////// +// ȎȂ琳_ɂr...≽łȂ +bit PM_EXTDC_n; +bit BT_IN_CHG_n; +bit SW_POW_n; +bit SW_HOME_n; +bit SW_WIFI_n; +bit SHELL_OPEN; + +/* +#define REG_BIT_HAL0_PM_EXTDC_n ( 1 << 7 ) +#define REG_BIT_HAL0_BT_IN_CHG_n ( 1 << 6 ) +//#define REG_BIT_HAL0_PM_IRQ_n ( 1 << 5 ) // gȂ +#define REG_BIT_HAL0_WL_TX ( 1 << 4 ) +#define REG_BIT_HAL0_SHELL_OPEN ( 1 << 3 ) +#define REG_BIT_HAL0_SW_WIFI_n ( 1 << 2 ) +#define REG_BIT_HAL0_SW_HOME_n ( 1 << 1 ) +#define REG_BIT_HAL0_SW_POW_n ( 1 << 0 ) + +#define REG_BIT_HAL1_DIPSW_1 ( 1 << 3 ) +#define REG_BIT_HAL1_DIPSW_0 ( 1 << 2 ) +#define REG_BIT_HAL1_HW_DET_1 ( 1 << 1 ) +#define REG_BIT_HAL1_HW_DET_0 ( 1 << 0 ) +*/ + + +// ڂւ +// `^OȂ炱ł(ԃJEg͕) +void hal_update() +{ +#ifdef _ENABLE_HAL_ + u8 temp_conf = vreg_ctr[ VREG_C_HAL_OVW_CONT0 ]; + u8 temp_dat = vreg_ctr[ VREG_C_HAL_OVW_DAT0 ]; +#else + u8 temp_conf = 0x00; + u8 temp_dat = 0; // łǂ +#endif + + // A_v^L + if( temp_conf & REG_BIT_HAL0_PM_EXTDC_n ) + { + // O͂Ȃ񂾂傫Ȃ肪 + if(( temp_dat & REG_BIT_HAL0_PM_EXTDC_n ) == 0 ) + { + PM_EXTDC_n = 0; + } + else + { + PM_EXTDC_n = 1; + } + } + else + { + PM_EXTDC_n = PM_EXTDC_n_RAW; + } + + // [dH + if( temp_conf & REG_BIT_HAL0_BT_IN_CHG_n ) + { + if(( temp_dat & REG_BIT_HAL0_BT_IN_CHG_n ) == 0 ) + { + BT_IN_CHG_n = 0; + } + else + { + BT_IN_CHG_n = 1; + } + } + else + { + BT_IN_CHG_n = BT_IN_CHG_n_RAW; + } + + // dt + if( temp_conf & REG_BIT_HAL0_SW_POW_n ) + { + if(( temp_dat & REG_BIT_HAL0_SW_POW_n ) == 0 ) + { + SW_POW_n = 0 ; + } + else + { + SW_POW_n = 1; + } + } + else + { + SW_POW_n = SW_POW_n_RAW; + } + + // Ɩt + if( temp_conf & REG_BIT_HAL0_SW_HOME_n ) + { + if(( temp_dat & REG_BIT_HAL0_SW_HOME_n ) == 0 ) + { + SW_HOME_n = 0; + } + else + { + SW_HOME_n = 1; + } + } + else + { + if( system_status.model == MODEL_TS_BOARD )// ڑ̃|[gႤ + { + SW_HOME_n = SW_HOME_n_TSBOARD_RAW; + } + else + { + SW_HOME_n = SW_HOME_n_JIKKI_RAW; + } + } + + // J + if( temp_conf & REG_BIT_HAL0_SW_WIFI_n ) + { + if(( temp_dat & REG_BIT_HAL0_SW_WIFI_n ) == 0 ) + { + SW_WIFI_n = 0; + } + else + { + SW_WIFI_n = 1; + } + } + else + { + SW_WIFI_n = SW_WIFI_n_RAW; + } + + // + if( temp_conf & REG_BIT_HAL0_SHELL_OPEN ) + { + if(( temp_dat & REG_BIT_HAL0_SHELL_OPEN ) == 0 ) + { + SHELL_OPEN = 0; + } + else + { + SHELL_OPEN = 1; + } + } + else + { + SHELL_OPEN = SHELL_OPEN_RAW; + } + + // dg + if( temp_conf & REG_BIT_HAL0_WL_TX ) + { + WIFI_txLatch = 1; + } + +} + + + +void hal_reset() +{ + vreg_ctr[ VREG_C_HAL_OVW_CONT0 ] = 0; + vreg_ctr[ VREG_C_HAL_OVW_CONT1 ] = 0; + vreg_ctr[ VREG_C_HAL_OVW_TEMPERATURE ] = 0xFF; + vreg_ctr[ VREG_C_HAL_OVW_BT_FUEL ] = 0xFF; + vreg_ctr[ VREG_C_HAL_OVW_BT_VOLTAGE ] = 0xFF; +} + diff --git a/tags/2.03_SDK-3.1/hal.h b/tags/2.03_SDK-3.1/hal.h new file mode 100644 index 0000000..245be75 --- /dev/null +++ b/tags/2.03_SDK-3.1/hal.h @@ -0,0 +1,16 @@ +#ifndef _hal_h_ +#define _hal_h_ + + +extern bit PM_EXTDC_n; +extern bit BT_IN_CHG_n; +extern bit SW_POW_n; +extern bit SW_HOME_n; +extern bit SW_WIFI_n; +extern bit SHELL_OPEN; + +// ======================================================== +void hal_update(); +void hal_reset(); + +#endif diff --git a/tags/2.03_SDK-3.1/hoge.bin b/tags/2.03_SDK-3.1/hoge.bin new file mode 100644 index 0000000000000000000000000000000000000000..35836957ead87e2c35bf092a8ea41beed556bd5f GIT binary patch literal 16387 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�yaA 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 R|9>(6dlr~F>u%Kle*@TwgAxD$ literal 0 HcmV?d00001 diff --git a/tags/2.03_SDK-3.1/i2c_ctr.c b/tags/2.03_SDK-3.1/i2c_ctr.c new file mode 100644 index 0000000..f37a4f9 --- /dev/null +++ b/tags/2.03_SDK-3.1/i2c_ctr.c @@ -0,0 +1,297 @@ +/* ======================================================== + SoC VK`l I2CʐM + cJZ.nintendo + '09 Apr + ======================================================== */ + +#include "config.h" + +// TS̓}U{ŃeRAWM͉H}eRŌLjvc + +#ifndef _WIN32 +#pragma interrupt INTIICA1 int_iic_ctr RB1 +#endif + + +#include "incs.h" + +#ifdef _MCU_BSR_ +// #ifdef _MODEL_TS0_ || _MODEL_WM0_ + +// [LOfI2Ct +// TEG͉H}ŃeR +#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 + + + +// ============================================== +enum en_IIC_STATE +{ + IIC_IDLE = 0, + IIC_RCV_REG_ADRS, + IIC_TX_OR_RX, + IIC_TX, + IIC_RX +}; + + + +// ============================================== +extern bit irq_readed; // ꂩIRQWX^ǂ܂ꂽ + +u8 iic_burst_state; +static enum en_IIC_STATE state = IIC_IDLE; + +#define bit_iics_spd (i2c_stat & (1<<0)) +#define bit_iics_std (i2c_stat & (1<<1)) +#define bit_iics_ackd (i2c_stat & (1<<2)) +#define bit_iics_trc (i2c_stat & (1<<3)) +#define bit_iics_coi (i2c_stat & (1<<4)) + +// ============================================== +__interrupt void int_iic_ctr( ) +{ + static u8 reg_adrs; + static u8 tx_buf; + u8 rx_buf; + static u8 adrs_access_from; // o[XgANZX̎Ɏg + + u8 i2c_stat = IICS1; // volatilê + + // ǂݏoI + if( !bit_iics_ackd // 荞ݗvNAKif[^M̍Ōj + || bit_iics_spd ) // XgbvRfBV(!ACKD ɗƂ͊荞ݗȂ (SPIE = 0)) + { + /* + I2C̔xẴtOOSTDĂ܂Ƃ + ǁAȂ삷‚ + */ + + // WX^[hŁA荞݃slQ[g + // ܂ǂ܂ĂȂ荞݂΁AēxAT[g + if( irq_readed ) + { + IRQ0_neg; + irq_readed = false; + if( !( (( vreg_ctr[VREG_C_IRQ0] & vreg_ctr[VREG_C_IRQ_MASK0 ] ) == 0 ) + && (( vreg_ctr[VREG_C_IRQ1] & vreg_ctr[VREG_C_IRQ_MASK1 ] ) == 0 ) + && (( vreg_ctr[VREG_C_IRQ2] & vreg_ctr[VREG_C_IRQ_MASK2 ] ) == 0 ) + && (( vreg_ctr[VREG_C_IRQ3] & vreg_ctr[VREG_C_IRQ_MASK3 ] ) == 0 ) )) + { + while( !IRQ0 ){;} // ԉ҂sv + IRQ0_ast; + } + } + + // I2CIɉ镨 // + hosu_read_end( ); // vǂݏoI + rtc_unlock( ); + + state = IIC_IDLE; + SPIE = 0; + LREL = 1; + EI(); + return; + } + + if( bit_iics_std ) // 荞ݗvFX^[gRfBV + { + if( !( state == IIC_IDLE || state == IIC_TX_OR_RX )) + { + // sp/nack 葹˂ +// dbg_nop(); // Ȃ͂... +/* + // pPbg̐擪stƌȂB + // ʂɑs + state = IIC_IDLE; +/*/ + // gCĂ炤 + state = IIC_IDLE; + SPIE = 0; + LREL = 1; + EI(); +//*/ + } + // ʏ + } + + EI(); + + switch ( state ) + { + case ( IIC_IDLE ): + // njĂяoɉB + // Ȃ + iic_burst_state = 0; + SPIE = 1; + WREL = 1; // EFCg + state = IIC_RCV_REG_ADRS; + return; + + case ( IIC_RCV_REG_ADRS ): // QoCgځiWX^AhXjMɗ + // WX^AhXM + reg_adrs = IICA; + + WREL = 1; + adrs_access_from = reg_adrs; + tx_buf = vreg_ctr_read( reg_adrs ); // f[^̏Ă + state = IIC_TX_OR_RX; + return; + + case ( IIC_TX_OR_RX ): // ̎ɗ銄荞݁BSTȂ瑗MAf[^珑܂ + // if( TRC ) // MtO ŋʂ̂́A荞ݒxɕsN肦 + if( bit_iics_std ) + { // X^[gRfBVotO + // [h + if( bit_iics_coi ) + { // AhXvtO + state = IIC_TX; + // no break, no return // + } + else + { + // X^[gňႤfoCXĂ΂ꂽI + SPIE = 0; + LREL = 1; // EFCg? + state = IIC_IDLE; // I + return; + } + } + else + { + state = IIC_RX; // f[^1oCgM̊荞݂ + // no break, no return // + } + /* FALLTHROUGH */ + + default: // o[Xg R/W łĂ΂邱ƂɂȂ + if( state == IIC_TX ) + { // M + IICA = tx_buf; + vreg_ctr_after_read( reg_adrs, tx_buf ); // ǂ񂾂NAȂǂ̏ + } + else + { // M + rx_buf = IICA; + +#ifdef _I2C_ERR_ABORT_ + if( reg_adrs >= 0x80 || reg_adrs <= 1 ) + { + LREL = 1; // Ȃ񂩃f[^̂ŒʐMI nakԂ̂Ȃc + return; + } +#endif + vreg_ctr_write( reg_adrs, rx_buf ); + WREL = 1; + } + + // WX^AhX̃CNg + /// ANZX|C^i߂ȂȃWX^ + switch( adrs_access_from ) + { + case( VREG_C_ACC_HOSU_HIST ): + case( VREG_C_LED_NOTIFY_DATA ): + case( VREG_C_LED_POW ): + case( VREG_CX_INFO ): + case( VREG_CX_FREE_DATA ): + break; + case( VREG_CX_FREE_ADRS ): + if( reg_adrs == VREG_CX_FREE_ADRS ) + { + reg_adrs = VREG_CX_FREE_DATA; + } + break; + default: + reg_adrs ++; + } + + if( state == IIC_TX ) + { // ɂ‚ɑf[^̏VeINBSPĎgȂȂ + 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 */ X^bNs + + P20 &= ~0x3; + + SVA = IIC_C_SLAVEADDRESS; + IICF = 0x01; + + STCEN = 1; // X^[g̋ + IICRSV = 1; // ʐM\Ȃ:X[uɓO + + SPIE = 0; // XgbvRfBVł̊荞݂֎~ + WTIM = 1; // ACKԂclkLɌŒ肷 + ACKE = 1; + + IICWH = 5; + IICWL = 10; // LԂ̒ + + SMC = 1; // [h + DFC = 1; // fW^tB^on (@fast mode) + + IICAMK = 0; // 荞݂ + + IICE = 1; + + PM20 &= ~0x3; /* set clock pin for IICA */ + + state = IIC_IDLE; +} + + + +// ======================================================== +void IIC_ctr_Stop( void ) +{ + IICE = 0; /* IICA disable */ + IICAEN = 0; +} + + + diff --git a/tags/2.03_SDK-3.1/i2c_ctr.h b/tags/2.03_SDK-3.1/i2c_ctr.h new file mode 100644 index 0000000..16234ff --- /dev/null +++ b/tags/2.03_SDK-3.1/i2c_ctr.h @@ -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 diff --git a/tags/2.03_SDK-3.1/i2c_mcu.c b/tags/2.03_SDK-3.1/i2c_mcu.c new file mode 100644 index 0000000..cae7314 --- /dev/null +++ b/tags/2.03_SDK-3.1/i2c_mcu.c @@ -0,0 +1,657 @@ +/* ======================================================== + ȈI2CiytFgpjʐM + de JHL cJZ + '09 Feb - + ======================================================== */ +#ifndef _WIN32 +#pragma sfr +#pragma di +#pragma ei +#pragma nop +#pragma inline // memcpy()CCWJ(̕I) +#endif + +#include "incs_loader.h" +#include "i2c_mcu.h" + + +// ======================================================== +// WX^̃rbg +// vtBbNXbAꕔ̃rbgWX^ɂԂ邽... +// 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 0x0B0B; + +// 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 i2c_err iic_mcu_send_a_byte( u8 ); +static i2c_err iic_mcu_call_slave( u8 slave ); +extern void DI_wt_chk(); + + + + +// ======================================================== +bit iic_mcu_wo_dma; +volatile bit iic_mcu_busy; +static volatile bit iic_mcu_initialized; + + +static u8 iic_send_work[4]; +static u8 *p_iic_send_wo_dma_dat; +static u8 iic_send_wo_dma_len; + +// f[^G[iROHMxZTjgĈ +/// Ƃ肠ADMAgp}`oCgCg ̎ɂ@\Ȃ +static u8 last_slave, last_reg_adrs, last_size; + +i2c_err iic_mcu_result; // ꕶ[h̎̓f[^ԂB + +#ifdef i2c_timeout_test +extern bit i2c_mcu_time_out_error; +#endif + +// ======================================================== +void nop8() +{ + // ɗ call 3clk, return 6clk +} + + +static i2c_err iic_mcu_wait_free() +{ + u16 tot = 0; + + iic_mcu_start( ); + while( 1 ) + { + DI_wt_chk(); + if( !iic_mcu_busy ) + { + iic_mcu_busy = true; + EI(); + break; + } + EI(); + if( ++tot == 0 ) + { +#ifdef i2c_timeout_test + i2c_mcu_time_out_error = true; +#endif + return( I2C_ERR_TIMEOUT ); + } + } + return( I2C_ERR_OK ); +} + + +/* ======================================================== + X[u w1x [h + Ԓlf[^̂̂łB + ======================================================== */ +u8 iic_mcu_read_a_byte( u8 SLA, u8 adrs ) +{ + u8 dat; + + iic_mcu_result = iic_mcu_read( SLA, adrs, 1, &dat ); + + return ( dat ); +} + + + +/* ======================================================== + X[ũ[h + 0 I + 1 X[uȂ + 2 oXNɐLĂă^CAEg + 3 ӖsG[ + yz + X[uEFCgRfBVoƂ͋֎~łB + ̏ꍇłG[oȂǂł܂ + ======================================================== */ +i2c_err iic_mcu_read( u8 slave, u8 adrs, u8 len, u8 * dest ) +{ + +#if 1 + if( iic_mcu_wait_free() != I2C_ERR_OK ) + { + // (^CAEg) + return( I2C_ERR_TIMEOUT ); + } +#else + // gpȂA +#endif + + // X^[gRfBVƃX[ǔĂяoAWX^AhX̑M + if( iic_mcu_call_slave( slave ) != 0 ) + { + iic_mcu_busy = false; + return ( I2C_ERR_NOSLAVE ); + } + + // WX^AhX̑M + iic_mcu_send_a_byte( adrs ); // I܂ŋAĂȂ + + // ΂NAKAĂȂO + + // f[^M // + iic_mcu_send_re_st( ); // X^[gRfBV + iic_mcu_send_a_byte( slave | 0x01 ); // M܂Ŗ߂Ă܂B + + // f[^M + ST0 = 0x0004; // M[hɐݒς̂ŃWbN~ + SCR02 = RXE0 | 1 << SLC02 | 7 << DLS02; // Mݒ + SS0 = 0x0004; // ʐMҋ@ + + do + { + if( len == 1 ) + { + SOE0 = 0x0000; // ŌNAK + } + IICIF10 = 0; + SIO10 = 0xFF; // _~[f[^ƎMJn + while( IICIF10 == 0 ) + {;} // M҂ + + *dest = SIO10; + dest++; + len--; + } + while( len != 0 ); + + iic_mcu_send_sp( ); + + IICIF10 = 0; + iic_mcu_busy = false; + return ( I2C_ERR_OK ); +} + + + + +/* ======================================================== + X[u wPoCgx Cg + O̓]Î҂āACg܂B + Ԓl@iic_mcu_write@ɓ + ======================================================== */ +i2c_err iic_mcu_write_a_byte( u8 SLA, u8 adrs, u8 dat ) +{ + // P̎DMAƂNȂłƏI点 + if( iic_mcu_wait_free() != I2C_ERR_OK ) + { + return( I2C_ERR_TIMEOUT ); + } + + // X^[gRfBVƃX[ǔĂяo... + IICMK10 = 1; + if( iic_mcu_call_slave( SLA ) != I2C_ERR_OK ) + { + iic_mcu_busy = false; + return( I2C_ERR_NOSLAVE ); + } + iic_mcu_send_a_byte( adrs ); + iic_mcu_send_a_byte( dat ); + iic_mcu_send_sp( ); + iic_mcu_busy = false; + return ( I2C_ERR_OK ); +} + + + +/* ======================================================== + X[uփCg + WX^ adrs 擪ɁA + *str + len܂B + + I2C_ERR_OK I + I2C_ERR_NAK X[uȂ + I2C_ERR_TIMEOUT dCȈŁH^CAEg + // I2C_ERR_ OɎwꂽʐM܂IĂȂ + yz + X[uEFCgRfBVoƂ͋֎~łB + ̏ꍇłG[oȂǂł܂ + DMA1gp܂B + ******************************************************************************/ +i2c_err iic_mcu_write( u8 slave, u8 adrs, u8 len, void * src ) +{ + if( iic_mcu_wait_free() != I2C_ERR_OK ) + { + return( I2C_ERR_TIMEOUT ); + } +#if 0 // renge^̃}`^XNɂȂłɂ + // gpȂA +#endif + + // X^[gRfBVƃX[ǔĂяo... + IICMK10 = 1; + IICIF10 = 0; + if( iic_mcu_call_slave( slave ) != I2C_ERR_OK ) + { + iic_mcu_busy = false; + return ( I2C_ERR_NOSLAVE ); + } + + IICIF10 = 0; + if( !iic_mcu_wo_dma ) + { + // DMAgpiʏj// + + // WX^AhX𑗂Af[^̏ + memcpy( iic_send_work, src, 4 ); //obt@Ƃ4oCgpӂĖ߁B + + // gĈ + last_slave = slave; + last_reg_adrs = adrs; + last_size = len; + + // DMAZbg + while( DST1 ) + {;} + + DEN1 = 1; + DSA1 = (u8)( &SIO10 ); + DRA1 = (u16)( &iic_send_work[0] ); + DBC1 = len; + DMC1 = DRS | 8; // RAM -> SFR, 8bit, IRQ, IIC10 + + DMAIF1 = 0; + DMAMK1 = 0; + DST1 = 1; // DEN1 = 12clkȏJ + + SIO10 = adrs; // ςȂI 荞݂DMAX^[g + // c͊荞݃[` + } + else + { + // DMAgpȂ // + + // WX^AhX̑M + IICMK10 = 0; + SIO10 = adrs; + + iic_send_wo_dma_len = len; + p_iic_send_wo_dma_dat = (u8*)src; + // c͊荞݃[` + } + + return ( I2C_ERR_OK ); +} + + + + +/* ======================================================== + DMAP]I荞 + IIC_mcu ̑MR[obN֐̂悤Ȃ + FDMA]IŁAI2C̓]͏IĂ܂ +@ 荞ݒȂǂŁADMA1̏xꍇA + IIC10̊荞݂̏łɁA荞݂𔭐ȂȂ + ꂪ܂B܂A@ɂ܂B + @̂߁ADMAdl̍ق́AŌ̃oCg͑M + tÕ|[OŊmF܂B + ======================================================== */ +__interrupt void int_dma1( ) +{ + static bit in_retry; + + EI(); + + // Ō̃oCg̑M҂ + while( ( SSR02L & TSF0 ) != 0 ) + { + u16 i = 0; + if( ++i == 0 ) // ^CAEgH + { + break; + } + } + + // XgbvRfBVs +// iic_mcu_send_sp(); // ISRŊO̊֐ĂԂ͓̂siėpWX^ҔĵœWJ + { + ST0 = 0x0004; + SOE0 = 0; // M̎͂ƑOɁuvݒ肵ĂB(NACKo) + SO0 = 0x0000 | TAUS_MASK; // SCL + nop8(); //. |ȂBO̊֐Ă +/* + NOP(); NOP(); NOP(); NOP(); + NOP(); NOP(); NOP(); NOP(); +*/ + SO0 = 0x0400 | TAUS_MASK; // SCL + nop8(); +/* + NOP(); NOP(); NOP(); NOP(); + NOP(); NOP(); NOP(); NOP(); +*/ + SO0 = 0x0404 | TAUS_MASK; + } + + IICMK10 = 1; + + // f[^̓r NAK AxgCB + /// 蔲 + if( SIR02 != 0 ) + { + SIR02 = SSR02; + + if( !in_retry ) + { + in_retry = true; + + IICIF10 = 0; + iic_mcu_call_slave( last_slave ); // NAK͍mPA + + while( DST1 ){;} + DRA1 = (u16)( &iic_send_work[0] ); // CNgĂ܂Ă̂ōăZbg + DBC1 = last_size; // fNgĂ܂Ă̂ōăZbg + // ق̐ݒ͑Ô܂ + + DMAIF1 = 0; + DMAMK1 = 0; + DST1 = 1; + + SIO10 = last_reg_adrs; // ςȂI 荞݂DMAX^[g + return; + // ܂@܂ˁI // + } + else + { + // G[xځBmȂ + dbg_nop(); + // ̂܂܏I + } + } + + // I + in_retry = false; + DMAMK1 = 1; + DEN1 = 0; + iic_mcu_busy = false; +} + + + +/* ======================================================== + IIC MCŨoCgo荞 + DMAgp͎gp܂B + @̊荞ݏDMÅ荞݂ɂ΂ȂꍇA + @IIC荞݂̃ZbgԂɍ킸邱Ƃ܂B + ======================================================== */ +__interrupt void int_iic10( ) +{ + EI(); + if( iic_send_wo_dma_len != 0 ) // ܂MĂȂH + { + SIO10 = *p_iic_send_wo_dma_dat; + p_iic_send_wo_dma_dat ++; + iic_send_wo_dma_len --; + return; + // ܂ // + } + + // Ō̃oCgMAXgbvRfBVs + IICMK10 = 1; +// iic_mcu_send_sp(); // ISRŊO̊֐ĂԂ͓̂siėpWX^ҔĵœWJ + { + ST0 = 0x0004; + SOE0 = 0; // M̎͂ƑOɁuvݒ肵ĂB(NACKo) + SO0 = 0x0000 | TAUS_MASK; // clear SCL + NOP(); NOP(); NOP(); NOP(); // NOP8Ăł͂ + NOP(); NOP(); NOP(); NOP(); + SO0 = 0x0400 | TAUS_MASK; // set SCL + NOP(); NOP(); NOP(); NOP(); + NOP(); NOP(); NOP(); NOP(); + SO0 = 0x0404 | TAUS_MASK; // set CSL adn SDA + } + + iic_mcu_wo_dma = false; + iic_mcu_busy = false; +} + + + +/* ======================================================== + X[ǔĂяo +@X[uAhXĂŁAACK̊mFB + ACK@@@@@@@@@@@@@@@@@@ԁF0 +@NACK @XgbvRfBVoB@ԁF1 + ======================================================== */ +static i2c_err iic_mcu_call_slave( u8 slave ) +{ + iic_mcu_send_st( ); + +/* +// dbg + if( SSR02 != 0 ) + { + P1.5 = P1.0 = P1.3 = 1; + } +*/ + + SIR02 = SSR02; // NAKG[̃tONA + if( iic_mcu_send_a_byte( slave ) != I2C_ERR_OK ) + { + iic_mcu_send_sp( ); + return ( I2C_ERR_NOSLAVE ); // w̃X[uȂ + } + + return ( I2C_ERR_OK ); +} + + + +/* ======================================================== + قƂɂPoCĝ + I܂ŋA܂ + ======================================================== */ +static i2c_err iic_mcu_send_a_byte( u8 dat ) +{ + IICMK10 = 1; + IICIF10 = 0; + SIO10 = dat; + while( IICIF10 == 0 ) + { +// NOP( ); + } // ʐM + + if( SSR02 != 0 ) // 炩G[? + { + SIR02 = SSR02; // G[NA + return( I2C_ERR_NAK ); + } + return( I2C_ERR_OK ); +} + + + +/* ======================================================== + X^[gRfBV𔭍s + \tgEFA + ======================================================== */ +static void iic_mcu_send_st( ) +{ + SO0 &= ~0x0004; // SDA + nop8(); + + SO0 &= ~0x0400; // SCL + SOE0 = 0x0004; // n[h + + SCR02 = TXE0 | 1 << SLC02 | 7 << DLS02; // MAf[^͂WrbgP + SS0 = 0x0004; // ʐMҋ@ +} + + + +/* ======================================================== + X^[gs + ======================================================== */ +static void iic_mcu_send_re_st( ) +{ + ST0 |= 0x0004; + SO0 |= 0x0400 | TAUS_MASK; // ( SDA = H ), SCL -> H + nop8(); + + SOE0 &= ~0x0004; // ( SCL = H ), SDA -> L + nop8(); + + iic_mcu_send_st( ); +} + + + +/* ======================================================== + XgbvRfBVs + ̑OɁAuŌ̃oCg̑Mv̎ɑOKvłB + ======================================================== */ +static void iic_mcu_send_sp( ) +{ + ST0 = 0x0004; + SOE0 = 0; // M̎͂ƑOɁuvݒ肵ĂB(NACKo) + SO0 = 0x0000 | TAUS_MASK; // SCL + nop8(); + + SO0 = 0x0400 | TAUS_MASK; // SCL + nop8(); + + SO0 = 0x0404 | TAUS_MASK; +} + + + + +/* ======================================================== + ytFW[̏ + ======================================================== */ +void iic_mcu_start( ) +{ + if( iic_mcu_initialized ) + { + return; + } + + iic_mcu_busy = true; +// DST1 = 0; + + I2C_PU_on(); +// DEN1 = 0; // DST1 = 0 2clḱADSTn==0|[OĂ + + wait_ms( 1 ); // オ̂50usʂ + + SAU0EN = 1; + nop8(); + + SPS0 = 0x0000; // VAjbg̃NbNOB(8M/2)/1 + SMR02 = bSMR0n_FIXEDBIT | bMD0n2; // ȈI2Cɐݒ + SDR02 = 10 << 9; // {[[gݒ 8M/1/(x+1)/2 + + SO0 = 0x0404 | TAUS_MASK; // ŏHH + iic_mcu_wo_dma = false; + + + // oX̃Zbg + { + IICIF10 = 0; + IICMK10 = 1; + + iic_mcu_send_st(); + + SIO10 = 0xFF; + while( IICIF10 == 0 ){;} // ʐM + iic_mcu_send_sp(); + + SIR02 = SSR02; + } + + iic_mcu_busy = false; + iic_mcu_initialized = true; +} + + + +/* ======================================================== + W[̒~ + ēxgƂ͏Kv + ======================================================== */ +void iic_mcu_stop( ) +{ + while( iic_mcu_busy ) + {;} // DMA쒆͂҂ + iic_mcu_send_re_st( ); // SCL,SDALLɂ + I2C_PU_off(); + SAU0EN = 0; + iic_mcu_initialized = false; +} + + + + +/* ======================================================== + R[fbN wPoCgx Cg + iic_mcu_write_a_byte CODECs[NAEh + ======================================================== */ +i2c_err iic_mcu_write_a_byte_codec( u8 adrs, u8 dat ) +{ + static u8 count; + + // P̎DMAƂNȂłƏI点 + if( iic_mcu_wait_free() !=I2C_ERR_OK ) + { + return( I2C_ERR_TIMEOUT ); + } + + // X^[gRfBVƃX[ǔĂяo... + IICMK10 = 1; + if( iic_mcu_call_slave( IIC_SLA_CODEC ) != I2C_ERR_OK ) + { + iic_mcu_busy = false; + return ( I2C_ERR_NOSLAVE ); + } + iic_mcu_send_a_byte( adrs ); + iic_mcu_send_a_byte( dat ); + + // [NAEh + /// X^[gɂă_~[Cg + iic_mcu_send_re_st( ); + iic_mcu_send_a_byte( IIC_SLA_CODEC ); // _~[Cg + iic_mcu_send_a_byte( 0x20 ); // S~ĂȂAhX + iic_mcu_send_a_byte( count ); // ł悢̂BȂȂŒl + + count ++; + + iic_mcu_send_sp( ); + iic_mcu_busy = false; + return ( I2C_ERR_OK ); +} diff --git a/tags/2.03_SDK-3.1/i2c_mcu.h b/tags/2.03_SDK-3.1/i2c_mcu.h new file mode 100644 index 0000000..16eeba8 --- /dev/null +++ b/tags/2.03_SDK-3.1/i2c_mcu.h @@ -0,0 +1,40 @@ +#ifndef __ic2_mcu__ +#define __ic2_mcu__ + + +// ======================================================== +typedef enum{ + I2C_ERR_OK = 0, + I2C_ERR_NAK, + I2C_ERR_NOSLAVE, + I2C_ERR_TIMEOUT, + I2C_ERR_UNDEF = 0xFF +}i2c_err; + + + +// ======================================================== +extern volatile bit iic_mcu_busy; +extern bit iic_mcu_wo_dma; + +extern i2c_err iic_mcu_result; + + +// ======================================================== +i2c_err iic_mcu_read( u8 SLA, u8 adrs, u8 len, u8 * dest ); +u8 iic_mcu_read_a_byte( u8 SLA, u8 adrs ); + +i2c_err iic_mcu_write( u8 SLA, u8 adrs, u8 len, void * src ); +i2c_err iic_mcu_write_a_byte( u8 SLA, u8 adrs, u8 dat ); + +i2c_err iic_mcu_write_a_byte_codec( u8 adrs, u8 dat ); // codecoO@\t + + +// ̒ʐM܂B +#define iic_mcu_set_wo_dma() { while( iic_mcu_busy ){;} iic_mcu_wo_dma = true; } + +void iic_mcu_start( ); +void iic_mcu_stop( ); + + +#endif diff --git a/tags/2.03_SDK-3.1/i2c_twl.c b/tags/2.03_SDK-3.1/i2c_twl.c new file mode 100644 index 0000000..48c1447 --- /dev/null +++ b/tags/2.03_SDK-3.1/i2c_twl.c @@ -0,0 +1,231 @@ +#ifndef _WIN32 + +#pragma sfr /* @\WX^gp */ + +#endif + + +/*============================================================================*/ + +#include "config.h" + +#ifndef _WIN32 + +#pragma interrupt INTIICA0 int_iic_twl RB2 + +#endif + +#include "incs.h" +#include "i2c_twl_defs.h" +#include "i2c_twl.h" + +extern u8 vreg_twl[]; + +#ifdef _MCU_BSR_ +//#ifdef _MODEL_TS0_ || _MODEL_WM0_ + +// [LOfI2Ct +#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 +#define TRC TRC0 + +#endif // _MCU_BSR_ + +#ifndef _MCU_BSR_ + +// ke3̎̓_~[֐ +void IIC_twl_Stop( void ) +{ +} +void IIC_twl_Init( void ) +{ +} +#else // _MCU_BSR_ + + + +enum IIC_TWL_STATE{ + WAIT_ADRS = 0, + WAIT_DATA, + DATA_READED +}; + + + + +/*============================================================================*/ + +// I@̓}NȂ̂ŁAreturn̓C[vɖ߂܂B +#define wait_next { \ + tot = 0; \ + while( IICAIF != 1 ){ \ + tot ++; \ + if( tot == 0 ){ \ + LREL = 1; \ + return; \ + } \ + } \ +} + + +__interrupt void int_iic_twl( ) +{ + u8 vreg_adrs; + u8 state; + + // @ + WREL = 1; // EFCgĎ̃oCg҂ + WDT_Restart(); + state = WAIT_ADRS; + + while( 1 ) + { + u8 my_iics; + + { + u16 tot; + wait_next; // PoCgM҂ + } + + my_iics = IICS; + IICAIF = 0; + + if( my_iics & 0x02 ) // ( STD && !SPD ) + { + // X^[gRfBV + if( ( my_iics & 0x08 ) == 0 ) // ( TRC ) MtO 0:}CRM + { + // @f}CRłATWLgCƂƂ + // ɗ̂̓X[uĂяo̎ // + WREL = 1; + state = WAIT_ADRS; + /// WX^AhX̂҂ + } + else + { + // BR Rł̃X[uĂяo(X^[gRfBV) // + IICA = vreg_twl_read( vreg_adrs ); // f[^M + // Xgbv҂ALREL = 1 ɂȂƁAMobt@j󂳂邱Ƃ + state = DATA_READED; + } + } + else if( ( my_iics & 0x03 ) == 0 ) // ( !STD && !SPD ) + { + u8 rcvd; + + // 炩M + rcvd = IICA; + WREL = 1; + + if( state == WAIT_ADRS ) + { + // A + vreg_adrs = adrs_table_twl_ext2int( rcvd ); + /// f[^邩AX^[gœǂݏô҂ + state = WAIT_DATA; + } + else if( state == DATA_READED ) + { + // f[^1oCgM㔭 + LREL = 1; + return; + } + else + { + // BW + // f[^܂ + SVA = 0x5A; // _~[ + LREL = 1; // X^[gRfBV҂(AݖΉ̂) + vreg_twl_write( vreg_adrs, rcvd ); + SVA = IIC_T_SLAVEADDRESS; + return; // M܂ // + } + } + else if( my_iics & 0x01 ) // SPD + { + // I + LREL = 1; + return; + } + else + { + // NOP(); + } + } +} + + + +/*****************************************************/ +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; // X^[g̋ + IICRSV = 1; // ʐM\Ȃ:X[uɓO + + SPIE = 0; // XgbvRfBVł̊荞݂֎~ + WTIM = 1; // ACKԂclkLɌŒ肷 + ACKE = 1; // _CPU͖Ď̒ʐM͂߂邩ȂőclkJȂƂȂ + + IICWH = 5; + IICWL = 10; // LԂ̒iHj + + 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 diff --git a/tags/2.03_SDK-3.1/i2c_twl.h b/tags/2.03_SDK-3.1/i2c_twl.h new file mode 100644 index 0000000..0f608b0 --- /dev/null +++ b/tags/2.03_SDK-3.1/i2c_twl.h @@ -0,0 +1,7 @@ +#ifndef _iic_twl_ +#define _iic_twl_ + +void IIC_twl_Init( void ); +void IIC_twl_Stop( void ); + +#endif diff --git a/tags/2.03_SDK-3.1/i2c_twl_defs.h b/tags/2.03_SDK-3.1/i2c_twl_defs.h new file mode 100644 index 0000000..be5d566 --- /dev/null +++ b/tags/2.03_SDK-3.1/i2c_twl_defs.h @@ -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 diff --git a/tags/2.03_SDK-3.1/incs.h b/tags/2.03_SDK-3.1/incs.h new file mode 100644 index 0000000..cd33a79 --- /dev/null +++ b/tags/2.03_SDK-3.1/incs.h @@ -0,0 +1,58 @@ +#ifndef _WIN32 +#pragma SFR +#pragma di +#pragma ei +#pragma nop +#pragma stop +#pragma halt +#endif + +#ifndef _WIN32 +#pragma section @@CODE ROM_CODE +//#pragma section @@CNST ROM_CNST +#endif + +#ifdef _WIN32 +// VC̐Ԑǂɂ +#include "sim/simOnWin.h" +# endif + + + +//========================================================= +#ifndef _incs_h_ +#define _incs_h_ + +// v_pc_ƂŐ؂ւĂ܂ +#define _mcu_ + +#include "jhl_defs.h" +#include "user_define.h" + +#include "hal.h" + +#include "bsr_system.h" +#include "renge\renge.h" +#include "loader.h" + +#include "vreg_ctr.h" +#include "vreg_twl.h" + +#include "i2c_mcu.h" +#include "i2c_twl.h" + +#include "rtc.h" + +#include "accero.h" + +#include "pm.h" + +#include "sw.h" + +#include "adc.h" + +#include "wdt.h" + +//========================================================= + +#endif diff --git a/tags/2.03_SDK-3.1/incs_loader.h b/tags/2.03_SDK-3.1/incs_loader.h new file mode 100644 index 0000000..4bb13b5 --- /dev/null +++ b/tags/2.03_SDK-3.1/incs_loader.h @@ -0,0 +1,47 @@ +#ifndef _WIN32 +#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 // ƃX^[gAbv[`l +//#pragma section @@CNST FSL_CNST // ZbgĂȂ +#pragma section @@CNSTL LDR_CNSL + +#endif + +# ifdef _WIN32 +// VC̐Ԑǂɂ +#include "sim/simOnWin.h" +# endif + + +//========================================================= +#include "jhl_defs.h" +#include "user_define.h" + +#include "hal.h" + +#include "bsr_system.h" +#include "renge\renge.h" + +#include "vreg_ctr.h" +#include "vreg_twl.h" + +#include "loader.h" + +#include "i2c_mcu.h" + +#include "WDT.h" + + + +//========================================================= +void firm_update( ); +void firm_restore( ); diff --git a/tags/2.03_SDK-3.1/ini_VECT.c b/tags/2.03_SDK-3.1/ini_VECT.c new file mode 100644 index 0000000..10ea9ea --- /dev/null +++ b/tags/2.03_SDK-3.1/ini_VECT.c @@ -0,0 +1,383 @@ +#ifndef _WIN32 + +#pragma nop + +#endif + +#include "config.h" + +#ifndef _WIN32 +//#pragma interrupt INTWDTI fn_intwdti // gp +//#pragma interrupt INTLVI fn_intlvi // gp + +//#pragma interrupt INTP0 intp0_slp // SLP (CPUAv) |[O +//#pragma interrupt INTP1 fn_intp1 // (I2C) +//#pragma interrupt INTP2 fn_intp2 // (I2C) +//#pragma interrupt INTP3 fn_intp3 // +#pragma interrupt INTP4 intp4_extdc // EXTDC, doffN̂݁Bʏ̓|[O +#pragma interrupt INTP5 intp5_shell // SHELL_CLOSE, doffN̂݁Bʏ̓|[O +#pragma interrupt INTP6 intp6_PM_irq // CODECoRŋPMICւ̃R}h + +//#ifdef _MCU_BSR_ // 荞݂͎̂̂g܂ +//#pragma interrupt INTP21 intp21_RFTx // dgMpX +//#else +//#pragma interrupt INTP7 intp21_RFTx +//#endif + + +/* + + accero +#ifdef _MCU_BSR_ +#pragma interrupt INTP23 intp23_ACC_ready RB3 // xZTAf[^ +#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 + + +/* +// TS̓}U{ŃeRAWM͉H}eRŌLjvc +#pragma interrupt INTIICA1 int_iic_ctr RB1 + +#pragma interrupt INTIICA0 int_iic_twl RB2 +*/ + +//#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 + + +//#define _irq_debug_ +/****************************************************/ +/* gp̃_~[֐` */ +/****************************************************/ +__interrupt void fn_intwdti( ) +{ +#ifdef _irq_debug_ + while( 1 ) + { + NOP(); + } +#endif +} + +__interrupt void fn_intlvi( ) +{ +#ifdef _irq_debug_ + while( 1 ) + { + NOP(); + } +#endif +} + +__interrupt void fn_intp0(){ +#ifdef _irq_debug_ +while( 1 ) + { + NOP(); + } +#endif +} + +__interrupt void fn_intp1( ) +{ +#ifdef _irq_debug_ + while( 1 ) + { + NOP(); + } +#endif +} // +__interrupt void fn_intp2( ) +{ +#ifdef _irq_debug_ + while( 1 ) + { + NOP(); + } +#endif +} +__interrupt void fn_intp3( ) +{ +#ifdef _irq_debug_ + while( 1 ) + { + NOP(); + } +#endif +} + + +__interrupt void intp21_RFTx( ) +{ +#ifdef _irq_debug_ + while( 1 ) + { + NOP(); + } +#endif +} + + +//__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( ) +{ +#ifdef _irq_debug_ + while( 1 ) + { + NOP(); + } +#endif +} + +__interrupt void fn_intcmp1( ) +{ +#ifdef _irq_debug_ + while( 1 ) + { + NOP(); + } +#endif +} + +__interrupt void fn_intdma0( ) +{ +#ifdef _irq_debug_ + while( 1 ) + { + NOP(); + } +#endif +} + +//__interrupt void fn_intdma1(){} // i2c_mcu.cɂ + +__interrupt void fn_intst0( ) +{ +#ifdef _irq_debug_ + while( 1 ) + { + NOP(); + } +#endif +} + +/* __interrupt void fn_intcsi00(){} */ +__interrupt void fn_intsr0( ) +{ +#ifdef _irq_debug_ + while( 1 ) + { + NOP(); + } +#endif +} + +/* __interrupt void fn_intcsi01(){} */ +__interrupt void fn_intsre0( ) +{ +#ifdef _irq_debug_ + while( 1 ) + { + NOP(); + } +#endif +} + +__interrupt void fn_intst1( ) +{ +#ifdef _irq_debug_ + while( 1 ) + { + NOP(); + } +#endif +} + +/* __interrupt void fn_intcsi10(){} */ +//__interrupt void fn_intiic10(){ while(1){} } +__interrupt void fn_intsr1( ) +{ +#ifdef _irq_debug_ + while( 1 ) + { + NOP(); + } +#endif +} + +__interrupt void fn_intsre1( ) +{ +#ifdef _irq_debug_ + while( 1 ) + { + NOP(); + } +#endif +} + +//__interrupt void fn_intiica(){} // i2c.cɂ +/* __interrupt void fn_inttm00(){} *//* sub.cɂĒ` */ +__interrupt void fn_inttm01( ) +{ +#ifdef _irq_debug_ + while( 1 ) + { + NOP(); + } +#endif +} + +__interrupt void fn_inttm02( ) +{ +#ifdef _irq_debug_ + while( 1 ) + { + NOP(); + } +#endif +} +__interrupt void fn_inttm03( ) +{ +#ifdef _irq_debug_ + while( 1 ) + { + NOP(); + } +#endif +} + +//__interrupt void fn_intad(){ while(1){} } // adc.c +__interrupt void fn_intrtc( ) +{ +#ifdef _irq_debug_ + while( 1 ) + { + NOP(); + } +#endif +} + +//__interrupt void int_rtcint(){} // rtc.cɂ +//__interrupt void fn_intkr(){} // main.c +__interrupt void fn_intmd( ) +{ +#ifdef _irq_debug_ + while( 1 ) + { + NOP(); + } +#endif +} + +__interrupt void fn_inttm04( ) +{ +#ifdef _irq_debug_ + while( 1 ) + { + NOP(); + } +#endif +} + +__interrupt void fn_inttm05( ) +{ +#ifdef _irq_debug_ + while( 1 ) + { + NOP(); + } +#endif +} + +__interrupt void fn_inttm06( ) +{ +#ifdef _irq_debug_ + while( 1 ) + { + NOP(); + } +#endif +} + +__interrupt void fn_inttm07( ) +{ +#ifdef _irq_debug_ + while( 1 ) + { + NOP(); + } +#endif +} + + + +/* ======================================================== + L[^[荞 + ======================================================== */ +__interrupt void int_kr( ) +{ + // N邾 +} + + + +/* ======================================================== + ext dc + ======================================================== */ +__interrupt void intp4( ) +{ + // N邾 +} + + + +/* ======================================================== + shell close + ======================================================== */ +__interrupt void intp5( ) +{ + // N邾 +} + + +#else + +#include "sim/sim_interrupt_decrare.c" + +#endif + diff --git a/tags/2.03_SDK-3.1/jhl_defs.h b/tags/2.03_SDK-3.1/jhl_defs.h new file mode 100644 index 0000000..b0b36c6 --- /dev/null +++ b/tags/2.03_SDK-3.1/jhl_defs.h @@ -0,0 +1,29 @@ +#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 short ux16; +typedef signed short sx16; + +#define true 1 +#define false 0 + + +// typedef unsigned char err; + +#include "config.h" + +#define set_bit( cond, reg, pos ) \ +{ \ + if( cond ){ \ + reg |= pos; \ + }else{ \ + reg &= ~pos; \ + } \ +} + +#endif diff --git a/tags/2.03_SDK-3.1/led.c b/tags/2.03_SDK-3.1/led.c new file mode 100644 index 0000000..c21af05 --- /dev/null +++ b/tags/2.03_SDK-3.1/led.c @@ -0,0 +1,354 @@ +/* ======================================================== + LED.c + ======================================================== */ +#ifndef _WIN32 + +#pragma sfr + +#endif + +#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 + + + +// ======================================================== +bit ledInitialized; + + +// m点LED +uni_info_LED info_LED; // p^[f[^ +bit info_led_off; // doffȂǁAtO +bit info_led_override; // drcʋ͏_ŏ㏑rbg + +// wifi led Xe[g +static u8 state_wifi_tx; +static u8 flag_wifi_TX; + + +// [dۂ +extern bit BT_IN_CHG_delayed_n; + + +// ======================================================== +#define led_fade_to( now, goal ) now = fade_to( now, goal ) + +/* ======================================================== + reg_ledgoalɂȂ܂ŃOf[V + Ƃ肠AXebvŒ + ====================================================== */ +u8 fade_to( u8 now, u8 goal ) +{ + if( now != goal ) + { + if( now > goal ) + { + now --; + } + else + { + now ++; + } + } + return( now ); +} + + + + +// ======================================================== +#define led_fade_to2( led, status ) \ + led = fade_to2( status ) + + +u8 fade_to2( st_LED_dim_status* status ) +{ + if( status->now != status->to ) + { + if( abs(( status->to - status->now )) > abs(status->delta) ) + { + status->now += status->delta; + } + else + { + status->now = status->to; + } + } + return( status->now / 128 ); +} + + + + +// ======================================================== + + +// ======================================================== +void LED_init( ) +{ +/** + PWM̃ZbgAƂ肠S + + }X^`lFO@(P01:/reset2)@}X^[͋`lłȂ + X[u@@@@P@rksnB(Rc kdcH) + @@@@@@@@Q@J + @@@@@@@@R@WiFi + @@@@@@@@S@(s͂qsb32kHz out Ɏgp) + @@@@@@@@T@[d + @@@@@@@@U@d k + @@@@@@@@V@d g + */ + TAU0EN = 1; + TPS0 = BIT_PRS012 | BIT_PRS002; // }X^[NbNCK01,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 = 0x00FE; // o̓[hB4PWMo͂Ȃ1ɂȂTO5ȍ~ɃNbN͂Ȃ + + TOL0 = 0x0000; // o͂𔽓]邩tO + + TO0 = 0x0000; // ^C}[쒆ŁA^C}[o͂ɂĂȂƂ̃s̃b`B^C}[o͂gȂȂO + TOE0 = 0x00EE; // TOx^C}[W[H + + TS0 = 0x00EF; // Jn + + TDR00 = LED_BRIGHT_MAX - 1; // 10bit + +// system_status.info_fullcolor = 1; // m点1dlp~ + + if( system_status.reboot ) + { + vreg_ctr[VREG_C_LED_POW] = LED_POW_ILM_AUTO; + LED_duty_pow_blu = LED_BRIGHT_MAX; + } + info_led_off = false; + ledInitialized = true; +} + + + +void LED_stop( ) +{ + TT0 = 0x00EF; // Ē~iȂƂ߁j + TOE0 = 0x0000; // TOx^C}[W[H(GPIOɂȂ) + TAU0EN = 0; + LED_pow_red = 0; + LED_CAM = 0; + + LED_duty_notify_red = 0; + LED_duty_notify_blu = 0; + LED_duty_notify_grn = 0; + LED_pow_red = 0; + LED_CAM = 0; + + WIFI_txLatch = 0; + flag_wifi_TX = 0; + state_wifi_tx = 0; + + ledInitialized = false; +} + + + + + + + +/* ======================================================== + * 荞݂͎̂̂g܂ * + LED_Wifi 3 + ======================================================== */ +void tsk_led_wifi( ) +{ + static u8 task_interval; + + if( task_interval-- != 0 ) + { + return; + } + + // MpX̃b` + if( WIFI_txLatch ) // 荞݃tÔ̂gĂ܂ + { + WIFI_txLatch = 0; + flag_wifi_TX = 1; + } + + if( flag_wifi_TX != 0 ) + { + vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_WIFI_TX; + // Mp^[ + 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 ) // _ŌA_ĂԂ̒ + { + state_wifi_tx = 0; + flag_wifi_TX --; + } + task_interval = 25; + return; + } + else + { + task_interval = 30; + // MtO҂ + vreg_ctr[ VREG_C_STATUS_1 ] &= ~REG_BIT_WIFI_TX; + if( vreg_ctr[VREG_C_LED_WIFI] == WIFI_LED_OFF ) + { + LED_duty_WiFi = 0; + return; + } + else + { + if( LED_duty_WiFi == vreg_ctr[VREG_C_LED_BRIGHT] ) + { + return; + } + else if( LED_duty_WiFi < vreg_ctr[VREG_C_LED_BRIGHT] ) + { + LED_duty_WiFi ++; + } + else + { + LED_duty_WiFi --; + } + } + task_interval = 3; + return; + } +} + + + + +bit info_led_pattern_updated; +/* ======================================================== + m点LED + ======================================================== */ +// Of[VvZȂ +static void calc_info_led_fade_out( st_LED_dim_status* tgt_led ) +{ + tgt_led -> to = 0; + tgt_led -> delta = ( 0 - tgt_led -> now ) / 64; +} + + +static void calc_info_led_next_frame( st_LED_dim_status* tgt_led, u8 color ) +{ + tgt_led -> to = color * 128; + // Of[Ṽf^vZ + tgt_led -> delta = (( tgt_led -> to - tgt_led -> now ) ) / info_LED.info_LED.fade_time; +} + + +// { +void tsk_led_notify( ) +{ + static u8 time_to_next_frame; + static u8 frame; + static u8 loops; + static st_LED_dim_status LED_dim_status_info_R, LED_dim_status_info_G, LED_dim_status_info_B; + + if( info_led_override ) + { + // dr؂ꂪD悷 + return; + } + + if( system_status.pwr_state == ON_TRIG ) + { + LED_duty_notify_blu = 0; + LED_duty_notify_red = 0; + LED_duty_notify_grn = 0; + LED_dim_status_info_R.now = 0; + LED_dim_status_info_G.now = 0; + LED_dim_status_info_B.now = 0; + } + + if( info_led_off ) // doffȂNjoff + { + // tF[hAEg + calc_info_led_fade_out( &LED_dim_status_info_R ); + calc_info_led_fade_out( &LED_dim_status_info_G ); + calc_info_led_fade_out( &LED_dim_status_info_B ); + } + else + { + // ʏ^] + if( info_led_pattern_updated ) + { + info_led_pattern_updated = false; + vreg_ctr[ VREG_C_LED_NOTIFY_FLAG ] &= ~REG_BIT_IN_LOOP; + frame = 0; // Ə + time_to_next_frame = 0; + } + else + { + // ̃t[ɐi߂H + if( time_to_next_frame == 0 ) + { + time_to_next_frame = info_LED.info_LED.term; + + if( frame >= NOTIFY_LED_TERM -1 ) + { + vreg_ctr[ VREG_C_LED_NOTIFY_FLAG ] |= REG_BIT_IN_LOOP; + if( info_LED.info_LED.last_loop != 255 ) // 255:[v + { + loops ++; + if( loops > info_LED.info_LED.last_loop ) + { + frame = 0; + } + } + } + else + { + frame = (( frame + 1 ) & 0x1F ); // Ń}XNĂȂƍŏIt[`擪Ԃ̃OfȂ + vreg_ctr[ VREG_C_LED_NOTIFY_FLAG ] &= ~REG_BIT_IN_LOOP; + loops = 0; + } + + // Of[VvZ + calc_info_led_next_frame( &LED_dim_status_info_R, info_LED.info_LED.red[frame] ); + calc_info_led_next_frame( &LED_dim_status_info_G, info_LED.info_LED.grn[frame] ); + calc_info_led_next_frame( &LED_dim_status_info_B, info_LED.info_LED.blu[frame] ); + + } + time_to_next_frame --; + } + } + + led_fade_to2( LED_duty_notify_red, &LED_dim_status_info_R ); + led_fade_to2( LED_duty_notify_grn, &LED_dim_status_info_G ); + led_fade_to2( LED_duty_notify_blu, &LED_dim_status_info_B ); +} diff --git a/tags/2.03_SDK-3.1/led.h b/tags/2.03_SDK-3.1/led.h new file mode 100644 index 0000000..ce8541f --- /dev/null +++ b/tags/2.03_SDK-3.1/led.h @@ -0,0 +1,142 @@ +#ifndef __led__ +#define __led__ + + + +// ==================================== + +//#define LED_CHARGE P2.4 // PMŒ` + +// LED_DUTY +#define LED_duty_pow_blu TDR06 +#define LED_duty_WiFi TDR03 + +#define LED_duty_3d TDR01 +#define LED_duty_notify_red TDR07 +#define LED_duty_notify_grn TDR05 +#define LED_duty_notify_blu TDR02 + +// dutyς܂ +#ifndef _WIN32 +#define LED_pow_red P4.2 +#define LED_CAM P7.5 +#else +#define LED_pow_red mcuRegP[ _P4_2 ] +#define LED_CAM mcuRegP[ _P7_5 ] +#endif + +#define NOTIFY_LED_TERM 32 + + +#define LED_BRIGHT_MAX 0x00FF + +// ==================================== +#define WIFI_txLatch PIF21 // dgMpX + + + +// ==================================== +enum LED_ILUM_MODE +{ + LED_POW_ILM_AUTO = 0, + LED_POW_ILM_ON, + LED_POW_ILM_SLEEP, + LED_POW_ILM_OFF, + LED_POW_ILM_ONLY_RED, + LED_POW_ILM_ONLY_BLUE, + LED_POW_ILM_FORCE_BT_EMPTY +}; + + +enum LED_MODE_3D +{ + LED_3D_ILM_OFF = 0, + LED_3D_ILM_ON +}; + + +// VREG_C_WIFI_LED +enum WIFI_LED_MODE +{ + WIFI_LED_OFF = 0, + WIFI_LED_ON +}; + + +// VREG_C_WIFI_NOTIFY +enum NOTIFY_LED_MODE +{ + NOTIFY_LED_OFF = 0, + NOTIFY_LED_ON, + NOTIFY_LED_PTN0, + NOTIFY_LED_PTN1, + NOTIFY_LED_PTN2 +}; + + +// VREG_C_CAM_LED +enum CAM_LED_MODE +{ + CAM_LED_OFF = 0, + CAM_LED_BLINK, + CAM_LED_ON, + CAM_LED_BY_TWL, + CAM_LED_ON_PLUSE, + CAM_LED_OFF_PLUSE +}; + + + +// m点LED֌W // +typedef struct _st_info_LED +{ + u8 term; // 1t[`bNH + u8 fade_time; // `bNŎ̃t[̐FɒB邩 + u8 last_loop; // ŏIt[JԂH + u8 resv1; + u8 red[32]; + u8 grn[32]; + u8 blu[32]; +}st_info_LED; + +typedef union _uni_info_LED +{ + st_info_LED info_LED; + u8 bindata[ sizeof( st_info_LED ) ]; +}uni_info_LED; + +extern uni_info_LED info_LED; + + +// LED _Ō // +typedef struct _st_led_red_batt_empty +{ + u8 dats[4]; +}st_led_red_batt_empty; + +extern st_led_red_batt_empty led_red_batt_empty; + + +/* + m点LED +*/ +typedef struct _st_LED_dim_status +{ + sx16 to; + sx16 delta; + sx16 now; // _ȉoĂȂĂ͂ȂȂ +}st_LED_dim_status; + + + +// ==================================== +void LED_init( ); +void LED_stop( ); + + +// ==================================== +extern bit ledInitialized; +extern bit info_led_override; + + +#endif diff --git a/tags/2.03_SDK-3.1/led_cam.c b/tags/2.03_SDK-3.1/led_cam.c new file mode 100644 index 0000000..80224a7 --- /dev/null +++ b/tags/2.03_SDK-3.1/led_cam.c @@ -0,0 +1,151 @@ +/******************************************************//** + LED_Cam TO02 +\n BLINK,*_PLUSE ̎́A1͕K̏ԂɂȂ܂B +\n ̊Ԃ OFFBLINK ȂǂƁAOFF܂B + *********************************************************/ +#ifndef _WIN32 + +#pragma sfr + +#endif + +#include "incs.h" +#include "led.h" + + + +// ======================================================== +static u8 state_led_cam = 0; +static u16 task_interval; + +bit cam_led_update; + + + +// ======================================================== +static void cam_led_twl(); +extern void DI_wt_chk(); + + + + +// ======================================================== +// C^[os^XNƁAtwlWX^ւ݂̏̂QJ +// Ă΂܂B +void tsk_led_cam( ) +{ + DI_wt_chk(); // WX^ւ݂̏ŋN邱Ƃ邽 + if( !cam_led_update ) + { + if( task_interval != 0 ) + { + task_interval --; + EI(); + return; + } + } + + cam_led_update = false; // TWL ̃uNݒiꔭ_ĵ + EI(); + + if( system_status.pwr_state == SLEEP ) // sleepA + { + LED_CAM = 0; + state_led_cam = 0; + } + else + { + // uN̂悤ɑ҂ƂȊO͖TN + // (WX^̕ύXɂɔ) + switch ( vreg_ctr[VREG_C_LED_CAM] ) + { + case ( CAM_LED_OFF ): + default: + LED_CAM = 0; + state_led_cam = 0; + break; + + case ( CAM_LED_ON ): + LED_CAM = 1; + state_led_cam = 0; + break; + + case ( CAM_LED_BLINK ): + if( state_led_cam == 0 ) + { + LED_CAM = 1; + state_led_cam = 1; + } + else + { + LED_CAM = 0; + state_led_cam = 0; + } + task_interval = 250; + break; + + case ( CAM_LED_ON_PLUSE ): + if( state_led_cam == 0 ) + { + LED_CAM = 1; + state_led_cam = 1; + task_interval = 250; + } + else + { + vreg_ctr[VREG_C_LED_CAM] = CAM_LED_OFF; + } + break; + + case ( CAM_LED_OFF_PLUSE ): + if( state_led_cam == 0 ) + { + LED_CAM = 0; + state_led_cam = 1; + task_interval = 250; + } + else + { + vreg_ctr[VREG_C_LED_CAM] = CAM_LED_ON; + } + break; + + case( CAM_LED_BY_TWL ): + cam_led_twl(); + } + } // if( system_status.pwr_state == sleep ) ... else ... +} + + + +static void cam_led_twl() +{ + // TWL݊ // + switch ( vreg_twl[ REG_TWL_INT_ADRS_CAM ] ){ + case( TWL_CAMLED_OFF ): + LED_CAM = 0; + state_led_cam = 0; + break; + + case( TWL_CAMLED_BLINK ): + if( state_led_cam == 0 ) + { + LED_CAM = 1; + state_led_cam = 1; + } + else + { + LED_CAM = 0; + state_led_cam = 0; + } + task_interval = (u8)( 600 / SYS_INTERVAL_TICK ) + 250; + break; + + case( TWL_CAMLED_ON ): + case( TWL_CAMLED_DEF_ON ): + default: + LED_CAM = 1; + state_led_cam = 1; + break; + } +} diff --git a/tags/2.03_SDK-3.1/led_pow.c b/tags/2.03_SDK-3.1/led_pow.c new file mode 100644 index 0000000..5906ee8 --- /dev/null +++ b/tags/2.03_SDK-3.1/led_pow.c @@ -0,0 +1,269 @@ +/* ======================================================== + // dLED + LED_POW_B,R 6,7 + + TDR00@(0x03FFBTPS0250kHzŃJEgAbvB10bitȂ250HzʂɂȂ) + TDR0x@Duty 0ŏATDR00( =0x03FFȏ)œ_łB + + enum pwr_state_{ + OFF_TRIG = 0, + ON_CHECK, + ON_TRIG, + ON, + SLEEP +}; + +enum LED_ILUM_MODE{ + LED_POW_ILM_AUTO, + LED_POW_ILM_ON, + LED_POW_ILM_SLEEP, + LED_POW_ILM_CEOFF +}; + ======================================================== */ +#ifndef _WIN32 + +#pragma sfr + +#endif + +#include "incs.h" +#include "led.h" + + +// ======================================================== +// X[vł̃e[uB}WB +const u8 LED_PTN_SLEEP[] = { + 25, 38, 52, 68, 83, 98, 110, 119, + 125, 128, 128, 125, 119, 110, 98, 83, + 68, 52, 38, 25, 16, 10, 8, 8, + 8, 8, 8, 8, 8, 8, 10, 16 + }; + + +// LED̓drcLED̓_Ńp^[ +st_led_red_batt_empty led_red_batt_empty = { 0x55, 0x55, 0x55, 0x55 }; +#define LED_SLEEP_FRAME_LEN 71 +#define LED_SLEEP_DIM_LEN 71 +#define LED_SLEEP_FRAME_NUM 32 + + + +// ======================================================== +static void led_pow_normal( ); +static void led_pow_sleep( ); +static void led_pow_bt_empty(); +static u8 led_pow_batt_low(); + +#define led_fade_to( now, goal ) now = fade_to( now, goal ) +extern u8 fade_to( u8 now, u8 goal ); + +#define led_fade_to2( led, status ) led = fade_to2( status ) +extern u8 fade_to2( st_LED_dim_status* status ); + + + +// ======================================================== +// dLED̃X[vp^[̃Xe[^X +static u8 time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN; +static u8 frame_sleep; +static st_LED_dim_status LED_dim_status_sleep; + +extern bit ledInitialized; +extern bit BT_IN_CHG_delayed_n; + + + +// ======================================================== +void tsk_led_pow( ) +{ + if( ! ledInitialized ) + { + return; + // ܂ + } + + info_led_override = false; + + switch ( vreg_ctr[VREG_C_LED_POW] ) + { + case ( LED_POW_ILM_AUTO ): + default: + led_pow_normal( ); + break; + + case ( LED_POW_ILM_SLEEP ): + led_pow_sleep( ); + break; + + case ( LED_POW_ILM_ON ): + led_fade_to( LED_duty_pow_blu, vreg_ctr[VREG_C_LED_BRIGHT] ); + LED_pow_red = 0; + break; + + case ( LED_POW_ILM_OFF ): + led_fade_to( LED_duty_pow_blu, 0 ); + LED_pow_red = 0; + break; + + case ( LED_POW_ILM_ONLY_RED ): + LED_duty_pow_blu = 0; + LED_pow_red = 1; + break; + + case ( LED_POW_ILM_ONLY_BLUE ): + LED_duty_pow_blu = LED_BRIGHT_MAX; + LED_pow_red = 0; + break; + + case ( LED_POW_ILM_FORCE_BT_EMPTY ): + led_pow_bt_empty(); + break; + } + + if( system_status.pwr_state == OFF || system_status.pwr_state == ON_CHECK ) + { + LED_pow_red = 0; + info_led_override = false; + } + + if( info_led_override ) + { + LED_duty_notify_blu = 0; + LED_duty_notify_grn = 0; + LED_duty_notify_red = ( LED_pow_red == 0 )? 0 : 255; + } +} + + + +/* ======================================================== + drcʂŁA@ԁԓ_ + ======================================================== */ +static void led_pow_normal( ) +{ + time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN; + frame_sleep = 0; + LED_dim_status_sleep.now = (sx16)LED_duty_pow_blu * 128; + + if( led_pow_batt_low() != 0 ) // Ԃ̓_łĂ܂ + { + return; + // ܂ + } + + // “_ + led_fade_to( LED_duty_pow_blu, vreg_ctr[VREG_C_LED_BRIGHT] ); +} + + + +/* ======================================================== + z^p^[ + drcʂŐԁԓ_łɂ + ======================================================== */ +static void led_pow_sleep( ) +{ + if( led_pow_batt_low() != 0 ) // Ԃ̓_łĂ܂ + { + time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN; + frame_sleep = 0; + LED_dim_status_sleep.now = (sx16)LED_duty_pow_blu * 128; + return; + // ܂ + } + + LED_dim_status_sleep.to = LED_PTN_SLEEP[frame_sleep] * 128; + + // Of[Ṽf^vZ + LED_dim_status_sleep.delta = (( LED_dim_status_sleep.to - LED_dim_status_sleep.now ) ) / LED_SLEEP_DIM_LEN; + led_fade_to2( LED_duty_pow_blu, &LED_dim_status_sleep ); + + // ̃t[ɐi߂H + time_to_next_frame_sleep --; + if( time_to_next_frame_sleep == 0 ) + { + time_to_next_frame_sleep = LED_SLEEP_FRAME_LEN; + + frame_sleep ++; + if( frame_sleep >= LED_SLEEP_FRAME_NUM -1 ) + { + frame_sleep = 0; + } + } +} + + + +/* ======================================================== + drȂƂ̋ +@ԒlF@0@drȂȂ +@@@@@1@@@@Ȃ̂ŋʃp^[ɂ + ======================================================== */ +static u8 led_pow_batt_low() +{ + if( vreg_ctr[VREG_C_BT_REMAIN] > BATT_TH_LO ) + { + LED_pow_red = 0; + return 0; + // ܂ + } + + if(( vreg_ctr[VREG_C_BT_REMAIN] > BATT_TH_EMPTY ) || !BT_IN_CHG_delayed_n ) + // drcʂ5%i`10%j@܂́Aꖢł[d + { + // ԓ_ + led_fade_to( LED_duty_pow_blu, 0 ); + { + LED_pow_red = 1; + } + + } + else // dr5%@@A_v^Ȃ + { + led_pow_bt_empty(); + } + return 1; +} + + + + +/* ======================================================== +@drȂp^[ +@@wp^[𗬂 +@@m点㏑肷 + ======================================================== */ +static void led_pow_bt_empty() +{ + static u8 delay; + static u8 red_blink_poi; + + info_led_override = true; + + // ԓ_ + led_fade_to( LED_duty_pow_blu, 0 ); + + // Ԃ̓_Ńp^[wł + delay ++; + if( delay < 64 ) // t[̕ێԉ҂ + { + return; + } + delay = 0; + + if( led_red_batt_empty.dats[ red_blink_poi / 8 ] & ( 1 << ( red_blink_poi % 8 )) ) + { + LED_pow_red = 1; + } + else + { + LED_pow_red = 0; + } + red_blink_poi ++; + if( red_blink_poi >= 32 ) + { + red_blink_poi = 0; + } +} + + diff --git a/tags/2.03_SDK-3.1/loader.c b/tags/2.03_SDK-3.1/loader.c new file mode 100644 index 0000000..e820819 --- /dev/null +++ b/tags/2.03_SDK-3.1/loader.c @@ -0,0 +1,406 @@ +/* ======================================================== + MCU CTR BSR + 2009/03/30 + JZp c + + u[g[_[ + zXg̒ʐMƁAȏAt@[̃`FbNsB + + ======================================================== */ +#ifndef _WIN32 + +#pragma SFR +#pragma di +#pragma ei +#pragma nop +#pragma stop +#pragma halt +#pragma opc + +#endif +#include "incs_loader.h" + +#include +#include "fsl_user.h" + +#include "i2c_ctr.h" +#include "i2c_mcu.h" +#include "pm.h" +#include "rtc.h" + +#include "reboot.h" + +#include "magic.h" + + + +#define REG_BIT_RESF_WDT 0x10 +#define REG_BIT_RESF_TRAP 0x80 +#define REG_BIT_RESF_LVI 0x01 + + + +// ======================================================== +#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 + + + +// ======================================================== +void hdwinit(); +static void hdwinit2(); +static void chk_platform_type(); +static void chk_firm_broke(); + + +extern void main_loop(); + + + +// ======================================================== +void main( ) +{ + while( 1 ) + { + WDT_Restart( ); + + if( RTCEN ) // TRAP(update)ɂgȂBWDTł͗Ȃ + { + system_status.reboot = true; + } + + { + volatile u8 my_resf = RESF; // ǂނƏ + if( ( my_resf & REG_BIT_RESF_WDT ) != 0 ) + { + vreg_ctr[ VREG_C_MCU_STATUS ] |= REG_BIT_STATUS_WDT_RESET; + // set_irq( VREG_C_IRQ0, REG_BIT_IRQ_WDT_RESET ); + // I2C̏ɍs + system_status.reboot = true; + } + else if( ( my_resf & REG_BIT_RESF_TRAP ) != 0 ) // ( FSL_ForceReset, 'r' ) + { + system_status.reboot = true; + } +/* LVIgp + else if(( my_resf & REG_BIT_RESF_LVI ) != 0 ) + { + vreg_ctr[ VREG_C_MCU_STATUS ] |= ( 1 << 2 ); + } +*/ + } +//* ROMǂɂȂȂA]̏RgAEg + if( !system_status.reboot ) + { + // ʏ̓d + // drڑAƑ҂Ă݂(`^O΍) + u16 pwup_delay0; + for( pwup_delay0 = 0xFFFF; pwup_delay0 != 0; pwup_delay0 -- ){;}; + } +//*/ + hdwinit2( ); + +#ifndef _WIN32 + // t@[̐`FbN // + chk_firm_broke(); // ĂAĂȂ +#endif + + // V䔻 + chk_platform_type(); + + // HALfobOZbg + hal_reset(); + hal_update(); + + // RTC + RTC_init( ); // Ńu[g肵ď邩f܂ + + // ʏ^] + main_loop( ); + } +} + + + +void chk_firm_broke() +{ +#ifndef _ENABLE_HAL_ // ROMsׁ̈AfobÔ + u8 i; + u8 comp = 0; + + // [_[Ɩ{͓̂o[WH + /// ւ̃Abvf[g̓rŏIĂȂH + for( i = 0; i < sizeof( __TIME__ ); i++ ) // sizeof( __TIME__ ) = 8 炵 + { + comp += ( *( __far u8 * )( MGC_LOAD + i ) == *( u8 * )( MGC_FOOT + i ) ) ? 0 : 1; + comp += ( *( u8 * )( MGC_HEAD + i ) == *( u8 * )( MGC_FOOT + i ) ) ? 0 : 1; + } + + if( *( u8 * )( MGC_FOOT +2 ) != ':' ) // ς̂܂ + { + comp ++; + } + + if( comp != 0 ) + { + // t@[XgA݂ + firm_restore( ); + // AĂȂBZbgB + } +#endif +} + + +/* ======================================================== + fobK‚ȂłƏɔłȂƂ܂B +CTRt@~ + DEV_DET(P12.[2:1]) + +CTR̊J@ + P40,41 !! fobOLP40LMCUN܂I + HH @ + HL NBDV + LH X^hAV + LL ISfobK +======================================================== */ +void chk_platform_type() +{ + // CTRt@~ // + system_status.family = (enum family_)( DEV_DET >> 1 ); /// ... + if( system_status.family == FAMILY_SPFL ) + { + pm_reg_bit_vddlcd = PM_REG_BIT_VDDLCD_AMO; + } + else + { + pm_reg_bit_vddlcd = PM_REG_BIT_VDDLCD_CGS; + } + + // CTR̊J@ // + // ꉞ + system_status.is_dev = false; + system_status.taikendai = false; + system_status.taikendai_nbd = false; + + switch( DIPSW ) + { + case DIPSW_TAIKENDAI: + system_status.taikendai = true; + break; + + case DIPSW_TAIKENDAI_NBD: + system_status.taikendai_nbd = true; + break; + + case DIPSW_ISDEV: + system_status.is_dev = true; + break; + } +#ifdef _FORCE_TAIKENDAI_ + system_status.taikendai = true; +#endif + +#ifdef _FORCE_TAIKENDAI_NBD_ + system_status.taikendai_nbd = true; +#endif +} + + + + +// ======================================================== +void hdwinit( void ) +{ // X^[gAbv[`ɌĂт܂ + DI( ); /* }X^荞݋֎~ */ + + CMC = bits8(0,0,0,1, 0,0,0,0); /* X1U(̓|[g)AXT1gpAd͔U͕sɕtʏ */ + CSC = bits8(1,0,0,0, 0,0,0,0); /* X1UȂAXT1UAU */ + OSMC = 0x01; /* BWX^ */ + NOP();NOP();NOP(); // 3clkJ + CKC = bits8(0,0,0,0, 1,0,0,0); /* CPU/ӃNbN=fMAINAfMAIN=fMXAfCLK=fMX */ + + /*--- doH̐ݒ ---*/ + /* Zbg̃ftHǵAIvVEoCgɂĎw肳 */ + LVIS = 0x00; /* VLVI = 4.22}0.1V */ +// LVIM = 0x00; /* LVI֎~ */ + /* dd(VDD)od(VLVI)Ɋ */ + /* dd(VDD)od 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 + +### debug enable bit check ############# +# fobO‚ɂȂĂISfobKŋNȂiMCU삵Ȃj +p bindata[0xC3] +if( bindata[0xC3] != 0x04 ) + print( "!E debug enable!!" ) + exit( 1 ) +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" ) diff --git a/tags/2.03_SDK-3.1/pedo_alg_thre_det2.c b/tags/2.03_SDK-3.1/pedo_alg_thre_det2.c new file mode 100644 index 0000000..a7a13e2 --- /dev/null +++ b/tags/2.03_SDK-3.1/pedo_alg_thre_det2.c @@ -0,0 +1,575 @@ +/* ******************************************************** + v + 3x̃A^Cf[^AxNg̃moA + 臒l𒴂鎞ԁAԊuAm̑傫臒l؂ւȂ +********************************************************* */ +#ifndef _WIN32 + +#pragma mul +#pragma div +#pragma bcd + +#endif + +#include "incs.h" + +#ifndef _WIN32 +#include +#endif + +#include "accero.h" +#include "pedometer.h" + +#include "pool.h" + +// ======================================================== +// ̍ŏIL^ +// ̏Ԃ̓OǂݏȍԂł̂łȂł +// ԂɃAhX̎Ⴂ̂mۂ̂҂Ă܂... +typedef struct{ + u8 hour_bcd; + u8 day_bcd; + u8 month_bcd; + u8 year_bcd; + u8 min_bcd; + u8 sec_bcd; +}st_calender; + + + +// ======================================================== +static u16 get_long_hour(); +static u16 calc_hours_spend( u8 ); +extern void DI_wt_chk(); + + + +// ======================================================== +bit pedolog_overflow; // 192ԋL^ς݃tO(i2cœǂ߂) +extern uni_pool pool; // O͂̍\̂̒ +static u8 p_record; // Ȍ݈ʒu +static st_calender cal_log_latest; // ŌɕXV +static u16 last_hour_fny; // fny:from new year +static st_calender cal_temp; +static u16 now_longhour; + + + + + + +// ======================================================== +#define _use_my_sqrt_ +#ifdef _use_my_sqrt_ +static unsigned long my_sqrt( unsigned long ); +#endif + +// N͉[NH +#define is_leapyear( y ) (( y & 0x03 ) == 0 ) +// uNv͉[NH +#define is_firstyear( y ) (( y & 0x03 ) == 1 ) + + +// xZTlFIR-LPFɒʂB̌W +extern const s8 lpf_coeff[]; +#define TAP 64 +#define FIL_COEFF_QUANT 10 + + + +/*========================================================= +@v + ========================================================*/ +void pedometer() +{ + static s16 th_H = 15000; // 臒lBIύX܂ + static s16 th_L = 11000; + static u16 acc_norm[3]; // x̑傫̃qXgB傫 + static u16 acc_norm_temp; + static u8 interval_hh = 0xFF; // R-RԂ̎ԁBZ߂͂B + static u8 time_l; // Őɏ̌oߎ + static u16 peak_l; // J̐[ + static u16 norm_hist[TAP]; + + static u8 hist_indx; + + signed long filterd; + + u8 i; + + u16 sx16,sy16,sz16; + + DI_wt_chk(); + sx16 = abs( (u16)vreg_ctr[VREG_C_ACC_XH] * 256 + vreg_ctr[VREG_C_ACC_XL] ); + sy16 = abs( (u16)vreg_ctr[VREG_C_ACC_YH] * 256 + vreg_ctr[VREG_C_ACC_YL] ); + sz16 = abs( (u16)vreg_ctr[VREG_C_ACC_ZH] * 256 + vreg_ctr[VREG_C_ACC_ZL] ); + EI(); + + // xNg̃m +#ifdef _mcu_ +# ifndef _use_my_sqrt_ + norm_hist[ hist_indx & TAP-1 ] = sqrt( (long)sx16 * ( sx16 / 2 ) + + (long)sy16 * ( sy16 / 2 ) + + (long)sz16 * ( sz16 / 2 ) + ); +# else + norm_hist[ hist_indx & TAP-1 ] = my_sqrt( (long)sx16 * ( sx16 / 2 ) + + (long)sy16 * ( sy16 / 2 ) + + (long)sz16 * ( sz16 / 2 ) + ); +# endif +#endif + +#ifdef _pc_ + norm_hist[ hist_indx & TAP-1 ] = normh * 256 + norml; +#endif + + hist_indx ++; + + // qXgɃtB^(fir)|āA̒l߂ // + filterd = 0; +// for( i = 8; i != 55; i++ ) // WO΂̂ + for( i = 0; i != 46; i++ ) // We[u܂Bp[^ + { + filterd += (signed long)norm_hist[ ( hist_indx + i ) & TAP-1 ] * lpf_coeff[ i ]; + } + + filterd += (4096)*512; // DCZ...Ǝv + acc_norm_temp = (s16)( filterd /1024 & 0xFFFF ); // FIL_COEFF_QUANT琳K +/* + if( acc_norm[0] < acc_norm_temp ) + { + t_rise ++; + if( t_rise == 0 ) + t_rise == 254; + } + else + { + t_rise = 0; + } +*/ + if( acc_norm[0] != acc_norm_temp ) + { + acc_norm[2] = acc_norm[1]; // qXg + 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 ) + // ɑŁA臒l𒴂Ă + { + if( 21 < interval_hh ) + // Őɑ傩̊Ԋuقǂ悢 + { + if(( interval_hh < 160 ) && ( time_l < interval_hh )) + // Jł + { + if( acc_norm[0] - peak_l > 4200 ){ + // ܂ + hosu_increment_if_necessary(); + } + } + interval_hh = 0; + } + // Ȃ񂿂臒l̓IύX + if( acc_norm[0] > 18000 ) + { + th_L = acc_norm[0] - 10000; + } + else + { + th_L = 11000; + } + } + else + { + if( interval_hh != 255 ) // OaZĊyɏ炢̂ + { + interval_hh ++; + } + } + + // (2) ߂̋ɏ̎ + if( acc_norm[2] >= acc_norm[1] && acc_norm[1] < acc_norm[0] + && acc_norm[0] < th_L ) + { + // ɏo + time_l = 0; + peak_l = acc_norm[0]; + } + else + { + if( time_l != 255 ) + { + time_l ++; + } + } +} + + +/*========================================================= +@{P +@@ݐςCNg + @XV + *2011/01/20 + dlύX@OςɂȂ炻Ŏ~߂ + ========================================================*/ + + +#define HOSU_NODATA 0xFFFF +#define HOSU_MAX 0xFFFE + +void hosu_increment_if_necessary() +{ + u8 year_compd; // hourE␳ς݌ݔNBcomp(ensation -ed) + + // ݎ擾 + DI_wt_chk(); + RWAIT = 1; + while( !RWST ){;} + + cal_temp.hour_bcd = HOUR; + cal_temp.day_bcd = DAY; + cal_temp.month_bcd = MONTH; + cal_temp.year_bcd = YEAR; + cal_temp.min_bcd = MIN; + cal_temp.sec_bcd = SEC; + + RWAIT = 0; + EI(); + + year_compd = bcdtob( cal_temp.year_bcd ); + + now_longhour = get_long_hour(); + + // ݃|C^̍XV + if( ! ( vreg_ctr[ VREG_C_ACC_HOSU_L ] == 0 && // vonAŏ̈܂ł͑O񂩂̌oߎԂvZȂ + vreg_ctr[ VREG_C_ACC_HOSU_M ] == 0 && + vreg_ctr[ VREG_C_ACC_HOSU_H ] == 0 )) //. SrbgORŃ[肷̂̓fW^H݂̕ + { + // v~܂ĂԂlĕKvȂi߂ + // ␳vZ@U뎞ōɂȂꍇAA23ɏ㏑ + if( now_longhour == (u16)-1 ) // NA23䈵̂ƂAvZʂ -1 ɂȂĂ + { + now_longhour = 365 * 24 -1; + if( is_firstyear(year_compd) ) + { + now_longhour += 24; + } + year_compd --; + } + fill_hosu_hist_hours( calc_hours_spend( year_compd ) ); // ݃|C^̍XVs + + // OӂŋL^~H + if( pedolog_overflow ) + { + return; + // ܂BO̍XVȂB + } + } + + // CNgėǂ + cal_log_latest = cal_temp; // OXV + last_hour_fny = now_longhour; + + // O@CNg + if( pool.vreg_c_ext.pedo_log[ p_record ] == HOSU_MAX ) + { + // Ȃł܂ + //. v̍vƗ݌vȂȂ̂邽߂낤ǁAǂȂ́H + return; + } + else if( pool.vreg_c_ext.pedo_log[ p_record ] == HOSU_NODATA ) // ̎ԑэŏ̃JEg̎ + { // ꂵȂ1Ȃ + pool.vreg_c_ext.pedo_log[ p_record ] = 1; + } + else + { + // ʏpX + pool.vreg_c_ext.pedo_log[ p_record ] ++; + } + + // ݐς̍XV // + DI_wt_chk(); + if( ++vreg_ctr[ VREG_C_ACC_HOSU_L ] == 0 ) // JXg`FbN + { + 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; //. 낢뎸s... + vreg_ctr[ VREG_C_ACC_HOSU_M ] = 255; + vreg_ctr[ VREG_C_ACC_HOSU_H ] = 255; + } + } + } + EI(); +} + + + +/* ======================================================== +󔒂̎ԂK؂0ɂāA +܂ނPԂ̃f[^ʒuɃ|C^Hi߂ +======================================================== */ +static void fill_hosu_hist_hours( u16 hours ) +{ + // OӂH + if( (u16)p_record + hours >= PEDOMETER_LOG_SIZE ) + { + pedolog_overflow = true; + return; + } + + // 󔒂̐Ԃ̐ݒ + while( hours != 0 ) + { + // Vdl@ςŒ~ + p_record ++; +#if 1 // debug + if( p_record >= PEDOMETER_LOG_SIZE ) + { + pedolog_overflow = true; +// dbg_nop(); // ɗ悤ƃoO + break; + } + else +#endif + { + pool.vreg_c_ext.pedo_log[ p_record ] = 0; + } + hours --; + } + + return; +} + + + +/* ======================================================== +󔒂̎ԂK؂0ɂāA +܂ނPԂ̃f[^ʒuɃ|C^Hi߂ +======================================================== */ +void clear_hosu_hist() +{ + u8 hours = PEDOMETER_LOG_SIZE; + do + { + hours --; + pool.vreg_c_ext.pedo_log[ hours ] = 0xFFFF; + } + while( hours != 0 ); + + DI_wt_chk(); + vreg_ctr[ VREG_C_ACC_HOSU_L ] = 0; + vreg_ctr[ VREG_C_ACC_HOSU_M ] = 0; + vreg_ctr[ VREG_C_ACC_HOSU_H ] = 0; + p_record = 0; + pedolog_overflow = false; + EI(); +} + + +extern u8 iic_burst_state; +bit pedolog_read_msb; +/* ======================================================== + vqXgǂݏǒ㏈() + ǂݏo|C^̃NA +======================================================== */ +/* }Nɂ܂ +void hosu_read_end( ) +{ + pedolog_read_msb = 0; +} +*/ + + + +/* ======================================================== + ṽqXgԂB + PĂԓxɁAqXg̉ʁAʁAꎞԑkĉʏ... +======================================================== */ +u8 hosu_read( ) +{ + u8 rv; + static u8 p_record_buffer; + static st_calender cal_buff; // ꉞAAg~bN + + if( iic_burst_state == 0 ) + { + p_record_buffer = p_record; + DI_wt_chk(); + cal_buff = cal_log_latest; + EI(); + } + + if( iic_burst_state <= 5 ) + { + rv = *( (u8*)&cal_buff + iic_burst_state ); // + iic_burst_state ++; + return( rv ); + } + else + { + u16 temp; + // 16rbgŋL^Ă̂ł΂炵đ /// Ɗy@񂶂 + temp = pool.vreg_c_ext.pedo_log[ p_record_buffer ]; + if( !pedolog_read_msb ) + { + rv = (u8)( temp & 0x00FF ); + } + else + { + rv = (u8)(( temp >> 8 ) & 0x00FF ); + if( p_record_buffer == 0 ) + { + p_record_buffer = PEDOMETER_LOG_SIZE-1; + } + else + { + p_record_buffer --; + } + } + pedolog_read_msb ^= 1; + return( rv ); + } + +} + + + +/* ======================================================== + ŇǓoߎ(hour)ԂB + + Ԓl u16 long_hour +======================================================== */ +const u16 DAYS_FROM_HNY[] = { + 0, + 31, + 31+28, // =59B@cRO͂PTX + 31+28+31, + 31+28+31+30, + 31+28+31+30+31, + 31+28+31+30+31+30, + 31+28+31+30+31+30+31, + 31+28+31+30+31+30+31+31, + 31+28+31+30+31+30+31+31+30, + 31+28+31+30+31+30+31+31+30+31, + 31+28+31+30+31+30+31+31+30+31+30 + }; + +static u16 get_long_hour() +{ + u8 year = bcdtob( cal_temp.year_bcd ); + u8 month = bcdtob( cal_temp.month_bcd ); + u8 day = bcdtob( cal_temp.day_bcd ); + u8 hour = bcdtob( cal_temp.hour_bcd ); + u8 min_bcd = cal_temp.min_bcd; // 召rȂ̂bcd̂܂܂ł悢 + u8 sec_bcd = cal_temp.sec_bcd; + u16 long_hour; + + // ܂̕ + long_hour = DAYS_FROM_HNY[ month -1 ]; // -1̓CfbNX킹 + if( is_leapyear(year) && ( 3 <= month )) + { + // [NŁA[ + long_hour ++; + } + long_hour += day - 1; + long_hour *= 24; // + + long_hour += hour; + + // EȆOHH + if( ( min_bcd > vreg_ctr[ VREG_C_ACC_HOSU_HOUR_BOUNDARY ] ) + || ( ( min_bcd >= vreg_ctr[ VREG_C_ACC_HOSU_HOUR_BOUNDARY ] ) + && ( sec_bcd >= vreg_ctr[ VREG_C_ACC_HOSU_HOUR_BOUNDARY_SEC ] )) + ) + { + return( long_hour ); + } + else + { + return( long_hour -1 ); // 1ԑOɊ܂߂ ӁFUōNɂƂB-1 ɂȂ + } +} + + + +/* ======================================================== +@yʕB +@Kv\Ȑxőł؂ + pcŃV~[Vđv +======================================================== */ +static unsigned long my_sqrt(unsigned long x) +{ + unsigned long s, t; + + if (x <= 0) return 0; + + s = 1; + t = x; + while (s < t) + { + s <<= 1; + t >>= 1; + } + do + { + t = s; + s = (x / s + s) >> 1; + } while (s < t); + + return t; +} + + + + +/* ======================================================== +@‚ OĂ΂ꂽƁAݎ̍߂BԂ̂fill_hosu_hist_hours ɂ̂܂ܓn + //. year_bcd Ȃ̂Ƃ₾... +======================================================== */ +static u16 calc_hours_spend( u8 year ) +{ + u8 cal_log_latest_year = bcdtob( cal_log_latest.year_bcd ); + + // N̓ + if( cal_log_latest_year == year ) + { + if( now_longhour > last_hour_fny ) + { + return( now_longhour - last_hour_fny ); + } + else if( now_longhour == 0 && last_hour_fny != 0 ) + { + // N΂ŁAEzځBȂƍNŌɉZĂ܂B + return( 1 ); + } + else + { + return( 0 ); // ԑ(ƁA߂B@ǂȂĂmȂ) + } + } + else if( cal_log_latest_year == ( year -1 ) ) + { + // N܂łƂ + u16 temp = 365 * 24 - last_hour_fny + now_longhour; + if( is_firstyear(year) ) + { + temp += 24; + } + return( temp ); + } + else if( cal_log_latest_year < year ) + { + // Nu + return( PEDOMETER_LOG_SIZE +1 ); + } + else + { + // J_[߂Ȃ + // m[PAł悢cAslƂ킯ɂȂ + return( 0 ); + } +} diff --git a/tags/2.03_SDK-3.1/pedo_lpf_coeff.c b/tags/2.03_SDK-3.1/pedo_lpf_coeff.c new file mode 100644 index 0000000..2e16755 --- /dev/null +++ b/tags/2.03_SDK-3.1/pedo_lpf_coeff.c @@ -0,0 +1,83 @@ + +#include "incs.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 +*/ +}; diff --git a/tags/2.03_SDK-3.1/pedo_lpf_coeff.h b/tags/2.03_SDK-3.1/pedo_lpf_coeff.h new file mode 100644 index 0000000..f81d6c2 --- /dev/null +++ b/tags/2.03_SDK-3.1/pedo_lpf_coeff.h @@ -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 diff --git a/tags/2.03_SDK-3.1/pedometer.h b/tags/2.03_SDK-3.1/pedometer.h new file mode 100644 index 0000000..8760308 --- /dev/null +++ b/tags/2.03_SDK-3.1/pedometer.h @@ -0,0 +1,36 @@ +#ifndef _pedo_ +#define _pedo_ + +#ifdef WIN32 +typedef unsigned char bit; +typedef unsigned char u8; +typedef unsigned short u16; + + +#endif + + +// ========================================================= +extern bit pedolog_read_msb; + + + +// ========================================================= +//void hosu_read_end( ); }N +#define hosu_read_end() pedolog_read_msb = 0 + +u8 hosu_read( ); +void hosu_increment_if_necessary(); +void fill_hosu_hist_hours( u16 ); +void clear_hosu_hist(); +void pedometer(); + + + +// ========================================================= +#define PEDOMETER_LOG_SIZE ( 24 * 7 ) + + + +// ========================================================= +#endif diff --git a/tags/2.03_SDK-3.1/pm.c b/tags/2.03_SDK-3.1/pm.c new file mode 100644 index 0000000..4acc09a --- /dev/null +++ b/tags/2.03_SDK-3.1/pm.c @@ -0,0 +1,1390 @@ +/* ======================================================== + PMIC + cJZ + nintendo + '08 Dec + ======================================================== */ +#ifndef _WIN32 + +#pragma nop + +#endif + +#include "incs.h" +#include "adc.h" +#include "led.h" +#include "pm.h" +#include "renge\renge.h" + +#include "batt_params.h" + +#include +#include "fsl_user.h" + + + +// ======================================================== +u8 raw_adc_temperature; +BT_VENDER battery_manufacturer = BT_VENDER_NOT_CHECKED; +static u8 ntr_pm_reg_shadow; // NTR PMIC WX^~[ +bit bt_authorized; // obep[^MρB[dJn +u8 chg_led_override; // A_v^ƂA[d邵ȂɊւ炸΂炭_ + +static u16 bt_volt16; + +static bit ntr_pm_bt_low_old; + +bit BT_IN_CHG_delayed_n; +bit temp_zone_charge_disable; // xŏ[d~鎞ɃqXeVXt邽 + +u8 pmic_version; +u8 mgic_version[2]; + +u8 pm_reg_bit_vddlcd; + +static bt_param_* p_bt_param; +extern const bt_param_ bt_param[]; + +bit pm_extdc_old; // OA_v^`FbNƂhĂH + + + +// ======================================================== +static void BT_model_detect(); +static void BT_mgic_quick_start(); +static void BT_mgic_init(); +static void bt_chk_temparature(); +static void bt_get_charge_status(); +static void bt_param_select(); +static void bt_batt_update_twl(); +static void bt_batt_update_ntr(); +static void update_chg_led(); + + +// bp[ +static err send_cmd_mgic_2B( u8 reg, u16 dat ); +static err read_mgic_2B( u8 reg, u8* dat ); +static err read_BT_SOC( u8* dest ); +static err read_BT_voltage( u8* dest ); +static u8 conv_ctr_bt_to_twl_bt(); + + + +// ======================================================== +#define swap_endian_16( x ) (unsigned int)(( x << 8 ) | ( x >> 8 )) + + + +// ======================================================== +const u8 BT_MANUF_BORDER[] = { + 5, 33, 79, 123, 158, 197, 233 + }; + + + +/* ======================================================== + dr̊Ǘ + + ȉ̃s͎ɂőEĎ܂B + EPM_BT_AUTH AGPI in + EPM_CHARGE_n CCIC /CHG in + EPM_CHARGE_ERR_n /FLT in + EPM_EXTDC_n /DOK INTP4 in + EPM_CHARGE_EN_n /CEN out + + ȉ͊̕֌W肻łʂ̂ƂŎɊĎĂ܂B + ELED_Pow R, B, Charge tsk_LED + EBT_TEMP,_P tsk_ADC + + PM_EXTDC͊荞݃Cɂ邩 + ======================================================== */ +#define INTERVAL_TSK_BATT 60 +// 100Ə[dG[ɂ܂_łȂ̂ + +void tsk_batt( ) +{ + static u8 task_interval; + + if( task_interval -- != 0 ) + { + return; + } + else + { + task_interval = (u8)( INTERVAL_TSK_BATT / SYS_INTERVAL_TICK ); + } + + // A_v^Xe[^XXV // + pm_chk_adapter(); + + // [d // + bt_chk_temparature(); // x`FbN + if( !temp_zone_charge_disable && bt_authorized && !PM_EXTDC_n ) + { + BT_CHG_ENABLE(); // x͈OKŏ[dĊJ + } + else + { + BT_CHG_DISABLE(); // x댯I@[d~ + } + + bt_get_charge_status(); // [d󋵃`FbN + update_chg_led(); // chg ledXV + + // drc // + BT_get_left(); +} + + +/* ******************************************************* + [dLEDXV + CCIC[dƂΓ_B + łȂĂAA_v^h΂Ȃ5b_ + w^drΉʼnR[d̎Aq[Y؂iMGICNAKjȂ + ******************************************************* */ +static void update_chg_led() +{ + static bit temp_led_chg; + + temp_led_chg = false; + + // A_v^‚ȂuԁA[dłb킴Ɠ_BdĂ邱Ƃ킩点邽߁B + if( chg_led_override != 0 ) + { + chg_led_override --; + temp_led_chg = true; + } + + // CCIC [dƂ̂ł΁Aꂪԋ + if( ! BT_IN_CHG_delayed_n ) // bt_get_charge_status()ōXV܂B + { + temp_led_chg = true; + } + + LED_CHARGE = temp_led_chg; + + // WX^̏[drbgLEDɓ + set_bit( LED_CHARGE, vreg_ctr[VREG_C_STATUS], REG_BIT_BATT_CHARGE ); // set_bit̂݁B +} + + + +#define RAW_TEMP_LH 75 // 50 [degC] +#define RAW_TEMP_LL 61 // 55 +#define RAW_TEMP_HL 184 // 1 +#define RAW_TEMP_HH 189 // -1 +#define AVG_COUNT 40 + +/* ******************************************************* + x`FbN + xtqXeVX + ******************************************************* */ +void bt_chk_temparature() +{ + static u8 heikinka_h,heikinka_l; + + if(( RAW_TEMP_LH <= raw_adc_temperature ) + && ( raw_adc_temperature <= RAW_TEMP_HL )) + { + if( heikinka_h < AVG_COUNT ) + { + heikinka_h++; + } + else + { + temp_zone_charge_disable = false; // [d + } + } + else if(( raw_adc_temperature <= RAW_TEMP_LL ) + || ( RAW_TEMP_HH <= raw_adc_temperature )) + { + if( heikinka_l < AVG_COUNT ) + { + heikinka_l++; + } + else + { + temp_zone_charge_disable = true; // [d֎~ + } + } + else + { + // temp_zone_charge_disable ̂܂ + heikinka_h = 0; + heikinka_l = 0; + } +} + + + +void bt_get_charge_status() +{ + // CCIC̕s̂߁A/CHG̃lQ[gƒJɒx + static u8 anti_chatter; + + if( !BT_IN_CHG_n ) + { + // Ƀ`^O + if( anti_chatter < 2 ) // drŃA_v^āAdɂ킳 + { // Ə[dLED̂ + anti_chatter++; + } + else + { + BT_IN_CHG_delayed_n = 0; // [d + } + } + else + { + if( !BT_CHG_Ena_n + && ( vreg_ctr[ VREG_C_BT_REMAIN ] < 60 ) + && !( vreg_ctr[ VREG_C_STATUS_1 ] & REG_BIT_MGIC_ERR ) + ) + { + BT_IN_CHG_delayed_n = 0; // [dƈB[dIĂ͂Ȃ + } + else + { + BT_IN_CHG_delayed_n = 1; + anti_chatter = 0; + } + } +} + + + +/******************************************************** +A_v^̗L`FbN + doff̃A_v^ŊOĂ΂邽ߕ + ***********************************************************/ +void pm_chk_adapter() +{ + set_bit( !PM_EXTDC_n, vreg_ctr[VREG_C_STATUS], REG_BIT_POW_SUPPLY ); + + if( pm_extdc_old != PM_EXTDC_n ) // HAL ʂ߁A PM_EXTDC_n volatile ɂSzȂ + { + pm_extdc_old = PM_EXTDC_n; + if( !PM_EXTDC_n ) + { + // h + set_irq( VREG_C_IRQ1, REG_BIT_BT_DC_CONNECT ); + chg_led_override = (u8)( 2500 / INTERVAL_TSK_BATT ); // bt_chckwait_ms(5)̐ŐL΂Btoriaezu蓮 4.5 sec + } + else + { + u8 temp_v[2]; + + // + set_irq( VREG_C_IRQ1, REG_BIT_BT_DC_DISC ); + chg_led_override = 0; + + // drcʂ1%ŁAA_v^L̎ɂ͖{̂NAQ[ + // 1%ɉ񕜂OɃA_v^ƂA荞݂ȂƊҒʂ + // łȂBʑΉ̂߂ + if( read_mgic_2B( BT_GAUGE_REG_VCELL, temp_v ) == ERR_SUCCESS ) + { + bt_volt16 = ( temp_v[0] * 256 + temp_v[1] ); + } + + if(( bt_volt16 < V_TH_ZERO ) || ( vreg_ctr[ VREG_C_BT_REMAIN ] == 0 )) + { + set_irq( VREG_C_IRQ1, REG_BIT_BT_REMAIN ); + } + } + } +} + + + +/******************************************************** +dr֌W̏ + +@@@Q[W@@b@L@@@@@b@ +@@[[[[[[[[[[[[[[[[[[[[[[[ +@@@dr@Lb@@@@@@@b@H +@@[[[[[[[[[[[[[[[[[[[[[[[ +@@@@@@b@@@@@@b@sr +@@@@@@@@b@@dr@b +@@[[[[[[[[[[[[[[[[[[[[[[[ + +@@Q[WLAdr@̔^@ʂ́A +@drxŔ肷 + + ԒlF@dr 0xFF + drςĂȂ 0 + drς 1 + +***********************************************************/ +bit bt_force_update; + +void BT_chk() +{ + BT_VENDER battery_manufacturer_old; + + battery_manufacturer_old = battery_manufacturer; + + BT_model_detect(); + bt_param_select(); // obecʕ␳p[^ȂǃZbg @łAƂ肠̒l(pi)wɂĂB + // ʂrcompvZ邪A|C^QƂ̂₾A@ȂvZȂƂʓ| + + if( system_status.model != MODEL_JIKKI ) + { + bt_authorized = false; + return; + // ܂ + } + + if(( battery_manufacturer_old != battery_manufacturer ) || + bt_force_update ) + { + bt_force_update = false; + iic_mcu_start( ); // ŏtOĂ̂ŌĂт܂ėǂ@ȂƂɁcorz + if( (( battery_manufacturer_old == BT_VENDER_OPEN ) || + ( battery_manufacturer_old == BT_VENDER_NOT_CHECKED )) && + !system_status.reboot ) + { + BT_mgic_quick_start(); + } + BT_mgic_init(); // @픻s܂ + } + bt_authorized = true; + renge_task_immed_add( tski_BT_temp_update ); // drxĎ +} + + + + +void BT_model_detect() +{ + u8 temp; + + BT_DET_P = 1; + BT_TEMP_P = 1; + wait_ms( 3 ); // dオ̂ɎԂ| + + raw_adc_temperature = get_adc( ADC_SEL_BATT_TEMP ); + temp = get_adc( ADC_SEL_BATT_DET ); + BT_DET_P = 0; + + system_status.captureBox = 0; + // vbgtH[ // + if( raw_adc_temperature > 0xF0 ) + { + // TS // + system_status.model = MODEL_TS_BOARD; + } + else if( raw_adc_temperature < 4 ) + { + // // + system_status.model = MODEL_SHIROBAKO; + + // āFLv`{[h // + if(( iic_mcu_read_a_byte( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_VERSION ) == 0x01 ) && + ( iic_mcu_result == I2C_ERR_OK )) + { + system_status.captureBox = 1; + } + } + else + { + // @AcIC NACK( obe܂͎cIC̏ ) + system_status.model = MODEL_JIKKI; // obe̎́ŏ㏑ + } + + // TShome{^A@͖ڑȂ̂ŗv[q /// gndɂƂ΂悩c + if( system_status.model == MODEL_TS_BOARD ) + { + PM_SW_HOME_n_TSBOARD = 1; + } + else + { + PM_SW_HOME_n_TSBOARD = 0; + SW_HOME_n_TSBOARD_RAW = 0; /// @open ǂł񂾂 + } + + // dr[J[̎ // + { + u8 i; + + battery_manufacturer = BT_VENDER_OPEN; // ftHgl + for(i=0; i<=7; i++) + { + if( temp <= BT_MANUF_BORDER[ i ] ) + { + battery_manufacturer = (BT_VENDER)i; + break; + /* + BT_VENDER_MAXELL; // = 0 + BT_VENDER_1; + BT_VENDER_2; + BT_VENDER_3; + BT_VENDER_4; + BT_VENDER_PANA; + BT_VENDER_6; + + BT_VENDER_OPEN; + */ + } + } + } + + + if( ( battery_manufacturer == BT_VENDER_OPEN ) && + ( system_status.model == MODEL_JIKKI ) ) + { + system_status.model = MODEL_JIKKI_NOBATT; + } +} + + + +static void BT_mgic_quick_start() +{ + wait_ms( 10 ); // MGIC̋NɊ| + + // 0. obecIC NCbNX^[g + send_cmd_mgic_2B( BT_GAUGE_REG_MODE, swap_endian_16( 0x4000 ) ); + + wait_ms( 150 ); +} + + +#define MGIC_CMD_UNLOCK_KEY 0x4A57 +#define MGIC_CMD_RESET 0x5400 +static void BT_mgic_init() +{ + u8 origParam[4]; + + /* + // -1. ZbgĂ݂ + Ⴞ! + i2c_send_buff_2B._u16 = swap_endian_16( MGIC_CMD_RESET ); + send_cmd_mgic_2B( BT_GAUGE_REG_COMMAND ); // ‚NACKԂ + */ + + if( system_status.model != MODEL_JIKKI ) + { + return; + // ܂ + } + + // 1. bN + if( send_cmd_mgic_2B( BT_GAUGE_REG_LOCK, swap_endian_16( MGIC_CMD_UNLOCK_KEY ) ) != ERR_SUCCESS ) + { + // cIC NACK + vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_MGIC_ERR; + return; + // ܂ + } + + vreg_ctr[ VREG_C_STATUS_1 ] &= ~REG_BIT_MGIC_ERR; + + // wait_ms( 5 + 1 ); OɃEFCgĂ̂ŕsv + + // 2. p[^ꎞۑ + iic_mcu_read( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_RCOMP, 4, origParam ); + + // 3. ꎞIOCVύX + send_cmd_mgic_2B( BT_GAUGE_REG_OCV, swap_endian_16( p_bt_param->ocv )); // }WbNio[IȂ́B[J[w + + // 4. ꎞIRCOMPύX + send_cmd_mgic_2B( BT_GAUGE_REG_RCOMP, swap_endian_16( 0xFF00 ) ); + + // 5.[J[ʃp[^̃[h + { + u8 loop; + + // 16oCgƂɋ؂Ƃ̂Ɓ@imCY΍Ƃ񂾂ǁAӖ񂩁Hj + for( loop = 0; loop < 4; loop ++ ) + { + iic_mcu_set_wo_dma( ); + iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_BT_PARAM + loop*16, 16, p_bt_param->mg_param + loop*16 ); + } + } + + // 6. 150msȏ҂ + wait_ms( 150 + 15 ); + + // 7. OCVɁuƂlv + send_cmd_mgic_2B( BT_GAUGE_REG_OCV, swap_endian_16( p_bt_param->ocv ) ); // }WbNio[IȂ́B[J[w + + // 8. 150`600ms҂B600ms͌ + wait_ms( 150 + 15 ); + + // 9. SOCǂށBxt@Ĉ߁B + { u8 temp; + temp = iic_mcu_read_a_byte( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_SOC ); + + if(( p_bt_param->verify.low <= temp ) && ( temp <= p_bt_param->verify.hi )) + { + // JX^fOKI + }else{ + // s烊gĈH + // dbg_nop(); + } + } + + // 10.RCOMPOCV߂ + iic_mcu_write( IIC_SLA_BT_GAUGE, BT_GAUGE_REG_RCOMP, 4, origParam ); + + // 11. bN + send_cmd_mgic_2B( BT_GAUGE_REG_LOCK, swap_endian_16( 0x0000 ) ); // lock key +} + + + +extern u16 _dbg_rcomp; +/* ======================================================== + raw_adc_temperatureɓĂlɕϊƂƂɁA + EWX^ɃZbg + EcICɃZbg + ======================================================== */ +task_status_immed tski_BT_temp_update( ) +{ + static u8 rawdat_old; + static s8 temperature; + s16 newrcomp; + static u8 heikinka; + +/* + T[~X^ - 10k_̎A + pxł͕̃J[uقڃjAŁA + c T[] = 81.48 - 111.97 x ratio + TDK T = 81.406 - 111.81 x ratio +*/ + + if( rawdat_old != raw_adc_temperature ) + { + if( heikinka < 40 ) + { + heikinka ++; + } + else + { + heikinka = 0; + rawdat_old = raw_adc_temperature; + // temperature = 81.45 - 111.9 * raw_adc_temperature/256.0; + // ꂼ256{Ă + temperature = (u8)(( 20851 - 112 * raw_adc_temperature + (256/2) ) /256); + vreg_ctr[VREG_C_BT_TEMP] = temperature; + + newrcomp = 0; + if( temperature > 20 ) + { + newrcomp = ( ( temperature - 20 ) * p_bt_param->rcomp.up )/256; + } + else + { + newrcomp = ( ( temperature - 20 ) * p_bt_param->rcomp.down )/256; + } + newrcomp = p_bt_param->rcomp.rcomp + newrcomp; + + if( newrcomp > 255 ) + { + newrcomp = 255; + } + if( newrcomp < 0 ) + { + newrcomp = 0; + } + _dbg_rcomp = newrcomp; + + if( send_cmd_mgic_2B( BT_GAUGE_REG_RCOMP, newrcomp ) == ERR_SUCCESS ) // swapsv + { + rawdat_old = raw_adc_temperature; + } + else + { + vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_MGIC_ERR; + } + } + } + return ( ERR_FINISED ); +} + + + +/********************************************************** + drcICcʂ擾AWX^ɏށB + @drcICȄȂǂ̎͂Ƃ肠c99%ƂB + @@@@@@@@ status_1ŊmF”\BdɃ`FbNĂ܂B + @BT_chk()sĂKv܂B +**********************************************************/ +void BT_get_left(){ + u8 temp[2]; + u8 reg_volatile_temp_bt_remain,reg_volatile_temp_bt_remain_fine; // I2C̔񓯊ǂݍ݂ł̂‚h~ Lbv̏ + u8 fuel_cap_by_voltage; // dŃLbvɎg + + // drc + if( system_status.model == MODEL_TS_BOARD + || system_status.model == MODEL_SHIROBAKO ) + { + // TS & // + if( read_BT_SOC( temp ) == ERR_SUCCESS ) + { + reg_volatile_temp_bt_remain = temp[0]; + reg_volatile_temp_bt_remain_fine = temp[1]; + } + else + { + // G~[V@\ + // @œdf͕sւ邾낤 + reg_volatile_temp_bt_remain = 99; + reg_volatile_temp_bt_remain_fine = 0; + } + } + else + { + // @ // + // cʃ[h + if( read_BT_SOC( temp ) != ERR_SUCCESS ) + { + // cICNACK cobe͂ꂽ + vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_MGIC_ERR; + bt_authorized = false; + reg_volatile_temp_bt_remain = 0; + force_off = true; + } + else + { + u16 temp_u16; + + vreg_ctr[ VREG_C_STATUS_1 ] &= ~REG_BIT_MGIC_ERR; + // obep[^̊֌WŃrbgVtgKv + temp_u16 = temp[0] * 256 + temp[1]; + temp_u16 /= p_bt_param->v_scale; + reg_volatile_temp_bt_remain = (u8)(( temp_u16 >> 8 ) & 0xFF ); + if( reg_volatile_temp_bt_remain == 0 ) + { + // 0%̎1.00%ɏグ + // [dJn΂炭͓drcʂ̂ + // 0%ɓBĂ܂Ƃ̂ + reg_volatile_temp_bt_remain = 1; + reg_volatile_temp_bt_remain_fine = 0; + } + else + { + reg_volatile_temp_bt_remain_fine = (u8)(temp_u16 & 0xFF); + } + } + } + + // drd + { + if( read_BT_voltage( temp ) != ERR_SUCCESS ) // 2byte read + { + temp[0] = (u8)( V_BT_4000MV / 256 ); // drdǂ߂Ȃ4000mVƂɂĂB + temp[1] = 0; + } + vreg_ctr[ VREG_C_BT_VOLTAGE ] = temp[0]; + bt_volt16 = ( temp[0] * 256 + temp[1] ); + } + + + // dŃLbv...̏ + { + static u16 hysteresis; + + if( bt_volt16 > V_TH_30 ) + { + fuel_cap_by_voltage = 100; + hysteresis = 0; + } + else if( bt_volt16 - hysteresis > V_TH_LO ) + { + fuel_cap_by_voltage = 30; + hysteresis = 0; + } + else if( bt_volt16 > V_TH_EMPTY ) + { + fuel_cap_by_voltage = BATT_TH_LO; // + hysteresis = 500; + } + else if( bt_volt16 > V_TH_ZERO ) + { + fuel_cap_by_voltage = BATT_TH_EMPTY; + hysteresis = 500; + } + else if( bt_volt16 > V_TH_FORCE_OFF ) + { + fuel_cap_by_voltage = 0; + hysteresis = 500; + } + else + { + force_off = true; + hysteresis = 500; + } + } + + + // [diA_v^hĂĵɏ[dĂȂ + // AiȂƂjf̓drcʂ60%ȏiCCICoOABT_IN_CHG_delayed_nɐD荞ݍς݁j + // = [dBdrւĂMGIC100%ԂȂ + if( !BT_CHG_Ena_n && BT_IN_CHG_delayed_n ){ + reg_volatile_temp_bt_remain = 100; + reg_volatile_temp_bt_remain_fine = 0; + } + else + { // dł̃Lbv|邩H + if( fuel_cap_by_voltage < reg_volatile_temp_bt_remain ) + { + reg_volatile_temp_bt_remain = fuel_cap_by_voltage; + reg_volatile_temp_bt_remain_fine = 0; + } + } + + /* + \ɖȂdĂ炵̂ŃPAł悵 + if( system_status.taikendai_nbd && system_status.model != MODEL_TS_BOARD ) // dr[qɓd‚ȂĂĒlsȂߏ㏑B + { + reg_volatile_temp_bt_remain = 100; + } + */ + + vreg_ctr[ VREG_C_BT_REMAIN ] = reg_volatile_temp_bt_remain; + vreg_ctr[ VREG_C_BT_REMAIN_FINE ] = reg_volatile_temp_bt_remain_fine; + + // twl̃WX^XV@(CTRɊ荞ݓOɍXVȂƊ荞݂̃^C~O܂Ȃ) + bt_batt_update_twl(); + + // cʂŊ荞݁B}ɌƔԂƂ // + { + static u8 bt_remain_old_ctr; + + if( bt_remain_old_ctr != reg_volatile_temp_bt_remain ) + // CTRɒʒm + { + if( (( vreg_ctr[ VREG_C_BT_REMAIN ] <= BATT_TH_LO ) && ( BATT_TH_LO < bt_remain_old_ctr ))|| + (( vreg_ctr[ VREG_C_BT_REMAIN ] <= BATT_TH_EMPTY ) && ( BATT_TH_EMPTY < bt_remain_old_ctr ))|| + (( vreg_ctr[ VREG_C_BT_REMAIN ] == 0 ) && ( bt_remain_old_ctr != 0 )) ) + { + set_irq( VREG_C_IRQ1, REG_BIT_BT_REMAIN ); + } + } + bt_remain_old_ctr = vreg_ctr[ VREG_C_BT_REMAIN ]; + } + + // PMIC-NTRɓdrcʂĂ + bt_batt_update_ntr(); +} + + + +/* ======================================================== + tn̓d + @Xe[^XtO͂ɗĂĂ܂B + @sԂ邵A + NsłΓd + ʂ̃^XNœd͊ĎĂāAXe[^XNA + ======================================================== */ +// BSR // +err PM_LCD_on( ) +{ + err rv = ERR_ERR; + + PM_VDDLCD_on( ); + + if( system_status.family == FAMILY_SPFL ) + { + SPFL_LCD_AMOL_HV_CONT = 1; + } + + wait_ms( DELAY_PM_TSS_50B_AND_TCOM ); + + PM_TCOM_on( ); + + wait_ms( DELAY_PM_TCOM_TO_VCS ); + + PM_VCS_on( ); + + wait_ms( DELAY_PM_VCS_TO_BL ); + + if( PM_chk_LDSW() != 0 ) // pX + { + // dNG[Ȃd؂Ă܂Bł̓PAȂ + vreg_ctr[VREG_C_STATUS] |= REG_BIT_LCD_POW; + set_irq( VREG_C_IRQ3, REG_BIT_LCD_ON ); + rv = ERR_SUCCESS; + } + + return rv; +} + +// BSR // +void PM_LCD_off() +{ + // BL‚ĂB// `FbN̂͊荞݂̊֌W + if( ( read_pmic( PM_REG_ADRS_BL ) & 0x03 ) != 0 ) + { + u8 tot; + + PM_BL_set( REG_BIT_CMD_BL_U_OFF | REG_BIT_CMD_BL_L_OFF ); + vreg_ctr[VREG_C_STATUS] &= bits8(1,0,0,1, 1,1,1,1); + + 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 ); + } + + + // td؂ // + SPFL_LCD_AMOL_HV_CONT = 0; // ̃t@~łLȂ̂ŕQȂ + + // 50msƂ҂‚AmF܂傤ˁc + if( read_pmic( PM_REG_ADRS_VDD_LCD ) != 0 ) + { + if( system_status.family == FAMILY_SPFL ) + { + wait_ms( 10 ); // At@X15V؂Ƃ̃EFCgB + } + + PM_TCOM_off(); + wait_ms( 1 ); + PM_TCOM_VCS_off( ); + wait_ms( DELAY_PM_LCD_OFF ); + + PM_VDDLCD_off( ); // cĂ̑S~߂܂B + vreg_ctr[VREG_C_STATUS] &= ~REG_BIT_LCD_POW; + } + + set_irq( VREG_C_IRQ3, REG_BIT_LCD_OFF ); // ɔB}XN΁B +} + + + +/* ======================================================== +@obNCǧ•on/off +@󂩂@on/off/ێ@̃tOȂ̂Ŗʓ| +@@Ⴆ΁ABL on/on ̏ԂŁAon/onɂƌĂAon/on荞݂܂B +======================================================== */ +err PM_BL_set( u8 dat ) +{ + u8 blset; + u8 intset = 0; + // RMWs + + // Read + blset = read_pmic( PM_REG_ADRS_BL ); + + // 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; + } + + if( blset != 0 ) // BLtꍇ̓EFCg܂ȂPWMĂ炸 + // Vbg_E邱Ƃ + { + wait_ms( 16 + 10 ); + } + send_cmd_pmic( PM_REG_ADRS_BL, blset ); + + // SoCPWMo悤WX^ZbgĂxL邽߁AXe[^X + // XVĂ܂BĂقƂ̗vB + + // PMICBL̃rbgƁAMCUSTATUSWX^̃rbgʒutȂߓւ + vreg_ctr[VREG_C_STATUS] = (( vreg_ctr[VREG_C_STATUS] & bits8(1,0,0,1, 1,1,1,1) ) + | ( (( blset << 6 ) | ( blset << 4 )) & bits8(0,1,1,0, 0,0,0,0) )); + + // 荞 + /// rbg܂Ƃ߂čŝŁAset_irq()gȂ + { + 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; + } + } + + return( ERR_SUCCESS ); // łُ͈`FbNsv +} + + + +/* ======================================================== + t̑Όd̐ݒs܂B + zWX^̓e𑗂邾 + ======================================================== */ +void PM_LCD_vcom_set( ) +{ + send_cmd_pmic( PM_REG_ADRS_POW_DAC1, vreg_ctr[VREG_C_VCOM_T] ); // ȂƂɁAPMIC̓o[Xgݕs + send_cmd_pmic( PM_REG_ADRS_POW_DAC2, vreg_ctr[VREG_C_VCOM_B] ); + return; +} + + + +/* ======================================================== + ŁAWX^݂Ăяo鎞̂ + @I2C̎荇̊֌WłĂ + ======================================================== */ +task_status_immed tski_vcom_set( ) +{ + PM_LCD_vcom_set( ); + return ( ERR_FINISED ); +} + + + +/* ======================================================== + V[PX̒ʂd𗧂グĂ䂫܂B + Ԓl 0 Ō܂ŐɊB + 1 V[gȂǂœd肫Ȃ + + ȉ̃s͎ɂőEĎ܂B + EPOW_CONT1,2 TEGd̂ + ======================================================== */ +err PM_sys_pow_on( ) +{ + // dグ +// PM_reset_ast( ); sv PM_LDSW_on܂ + RESET2_ast; + FCRAM_RST_ast; + GYRO_DISABLE(); + + PM_LDSW_on( ); + + wait_ms( 1 + DELAY_PM_TW_PWUP ); + + PM_VDD_normMode(); + PM_VDD_on( ); +// wait_ms( DELAY_PM_TW_PWUP ); // GYROނ + wait_ms( 10 ); + GYRO_ENABLE(); + wait_ms( DELAY_PM_TW_PWUP - 10 ); + + PM_VDD50A_on( ); // tdł͂ȂAledƂɎĝł + + wait_ms( DELAY_PM_TW_PWUP ); + + // dN`FbNB + if( !PM_chk_LDSW() ) + { + return ( ERR_ERR ); // reset1͂قƂėǂ + } + + // dIC + pmic_version = read_pmic( PM_REG_ADRS_VER ); + read_mgic_2B( BT_GAUGE_REG_VERSION, mgic_version ); + + // ZbgȂǁBVXeNI + PM_reset_neg(); + FCRAM_RST_neg; + RESET2_neg; + + codec_reg_init(); // CODEC s背WX^(reset2̌łȂƂȂ̂) + ntr_pm_reg_shadow = 0; // @V@ȂƂ... + + return ( ERR_SUCCESS ); +} + + + + +/* ======================================================== + dOFFV[PX + ======================================================== */ +void PM_sys_pow_off( ) +{ +// if( RESET1_n ) + if( PM_chk_LDSW() ) + { + // ُIłȂƂ + PM_BL_set( REG_BIT_CMD_BL_U_OFF | REG_BIT_CMD_BL_L_OFF ); + PM_LCD_off(); // TCOM,VCS OFF Ă܂B + wait_ms( 20 ); + + PM_reset_ast(); + } + + RESET2_ast; + FCRAM_RST_ast; + + wait_ms( 20 ); + + PM_off( ); + PM_LDSW_off( ); + +} + + + +/*========================================================= + extDC荞 + dOFFNi[d̉xĎ̂߁ĵ + i̓|[O(pm) + =========================================================*/ +__interrupt void intp4_extdc( ) +{ +} + + + +/*========================================================= + t^J‚ߊ荞 + i̓|[O(misc) + =========================================================*/ +__interrupt void intp5_shell( ) +{ + ; +} + + +/*========================================================= + PMICւ̃R}h + =========================================================*/ +__interrupt void intp6_PM_irq( ) +{ + EI(); + if( system_status.pwr_state == ON ) + { + renge_task_immed_add( tski_ntr_pmic_comm ); + } +} + + +/* ======================================================== + PMIC̊荞݂󂯂āANTR PMIC݊WX^烊[h + ======================================================== */ +task_status_immed tski_ntr_pmic_comm( ) +{ + u8 reg1_old; + u8 irq_work = 0; + + reg1_old = ntr_pm_reg_shadow; + ntr_pm_reg_shadow = iic_mcu_read_a_byte( IIC_SLA_CODEC, CODEC_REG_PM ); + if( iic_mcu_result != ERR_SUCCESS ) + { + return ( ERR_FINISED ); + } + +// DI( ); + + // obNCg //////////////////////////////////// + if( ( ( reg1_old ^ ntr_pm_reg_shadow ) & REG_BIT_TWL_REQ_BL_U ) != 0 ) + { + if( ( ntr_pm_reg_shadow & REG_BIT_TWL_REQ_BL_U ) == 0 ) // + { + irq_work = REG_BIT_TWL_BL_U_OFF; + } + else + { + irq_work = REG_BIT_TWL_BL_U_ON; + } + } + + // obNCg + if( ( ( reg1_old ^ ntr_pm_reg_shadow ) & REG_BIT_TWL_REQ_BL_L ) != 0 ) + { + if( ( ntr_pm_reg_shadow & REG_BIT_TWL_REQ_BL_L ) == 0 ) // + { + irq_work |= REG_BIT_TWL_BL_L_OFF; + } + else + { + irq_work |= REG_BIT_TWL_BL_L_ON; + } + } + +// EI(); + + vreg_ctr[ VREG_C_STATUS_1 ] = ( vreg_ctr[ VREG_C_STATUS_1 ] & ~REG_BIT_MASK_STATUS1_NTR_PM_REG ) + | ( ntr_pm_reg_shadow & REG_BIT_MASK_STATUS1_NTR_PM_REG ); // TWLobNCg̃~[ + + irq_work &= ~vreg_ctr[ VREG_C_IRQ_MASK2 ]; + // set_irq i + if( irq_work != 0 ) + { + u8 tot; + + vreg_ctr[ VREG_C_IRQ2 ] |= irq_work; + IRQ0_neg; // uグăpX𑗂蒼 + tot = 0; + while( !IRQ0 && ( ++tot != 0 ) ){;} // O.DȂ̂łƂ̂҂ IRQ_mcu LɔĂƍ(•s) + IRQ0_ast; + } + + /// obNCgAC𗘂ď肵܂B + + // offNGXg ////////////////////////////////////// + if( ( ntr_pm_reg_shadow & REG_BIT_TWL_REQ_OFF_REQ ) != 0 ) + { + set_irq( VREG_C_IRQ2, REG_BIT_TWL_OFF_REQ ); + } + + // ZbgNGXg ///////////////////////////////// + if( ( ntr_pm_reg_shadow & REG_BIT_TWL_REQ_RST_REQ ) != 0 ) + { + set_irq( VREG_C_IRQ2, REG_BIT_TWL_RESET_REQ ); + } + + // obNCg}XNď߂ + EI( ); + if( ( ntr_pm_reg_shadow & ( REG_BIT_TWL_REQ_OFF_REQ | REG_BIT_TWL_REQ_RST_REQ )) != 0 ) + { + ntr_pm_reg_shadow &= ~( REG_BIT_TWL_REQ_OFF_REQ | REG_BIT_TWL_REQ_RST_REQ ); + iic_mcu_write_a_byte_codec( CODEC_REG_PM, ntr_pm_reg_shadow ); + } + return ( ERR_FINISED ); +} + + + +/********************************************************** + command2 tn +@ bp[IȕBERR_SUCCESSԂȂc +**********************************************************/ +task_status_immed tski_PM_LCD_on() +{ + PM_LCD_on(); + return( ERR_FINISED ); +} + +task_status_immed tski_PM_LCD_off() +{ + PM_LCD_off(); + return( ERR_FINISED ); +} + +task_status_immed tski_PM_BL_set() +{ + u8 cmd_BL; // volatileƂtȂĂv݂ + + do + { + cmd_BL = vreg_ctr[VREG_C_COMMAND2]; + PM_BL_set( cmd_BL ); // }XNς + } + while( cmd_BL != vreg_ctr[VREG_C_COMMAND2] ); // <- PM_BL_setXV + vreg_ctr[VREG_C_COMMAND2] = 0; + + return( ERR_FINISED ); +} + + + +/********************************************************** +@reset2 CODEC ɃZbgAWX^sɂȂ邽 +**********************************************************/ +void codec_reg_init() +{ + wait_ms( 100 ); + + ntr_pm_bt_low_old = conv_ctr_bt_to_twl_bt(); + + iic_mcu_write_a_byte_codec( CODEC_REG_BT, (u8)ntr_pm_bt_low_old ); // SoC 珑 + + vol_reset(); +// renge_task_immed_add( tski_vol_update ); |[ÔŁB + vol_polling = 3; +} + + +/* ============================================================ + wp[Ƃbp[ƂH + ROMߖ̂ + ============================================================ */ +err send_cmd_mgic_2B( u8 reg, u16 dat ) // Mobt@ +{ + u16 temp = dat; + return iic_mcu_write( IIC_SLA_BT_GAUGE, reg, 2, &temp ); // DMA]̂őMf[^obt@̃|C^ǂKv +} + +err read_mgic_2B( u8 reg, u8* dat ) // Mobt@͌Œ +{ + return iic_mcu_read( IIC_SLA_BT_GAUGE, reg, 2, dat ); +} + +err send_cmd_pmic( u8 reg, u8 dat ) +{ + return iic_mcu_write_a_byte( IIC_SLA_PMIC, reg, dat ); +} + +u8 read_pmic( u8 reg ) +{ + return iic_mcu_read_a_byte( IIC_SLA_PMIC, reg ); +} + + +/* ============================================================ + dr[J[ƃfAgdrp[^̌ + ============================================================ */ +void bt_param_select() +{ + BT_TYPE bt_type_temp; + // ΉĂ番R[h‚ + if( battery_manufacturer <= BT_VENDER_3 ) + { + bt_type_temp = BT_PARAM_CTR_MAXELL; + } + else + { + bt_type_temp = BT_PARAM_CTR_PANA; + } + + if( system_status.family == FAMILY_SPFL ) + { + bt_type_temp += BT_PARAM_SPFL_MAXELL; // ItZbg cOȎŁcB + } + else if( system_status.family == FAMILY_SHRIMP ) + { + bt_type_temp += BT_PARAM_SHRIMP_MAXELL; + } + p_bt_param = &bt_param[ bt_type_temp ]; +} + + + + +#define TWL_BT_LEVEL_THREASH_F 60 +#define TWL_BT_LEVEL_THREASH_B 30 +#define TWL_BT_LEVEL_THREASH_1 0 + +/* ============================================================ + TWLɓdrcʂĂ + ============================================================ */ +static void bt_batt_update_twl() +{ + if (vreg_ctr[VREG_C_BT_REMAIN] > TWL_BT_LEVEL_THREASH_F ) + { + vreg_twl[REG_TWL_INT_ADRS_POWER_INFO] = 0x0F; + } + else if (vreg_ctr[VREG_C_BT_REMAIN] > TWL_BT_LEVEL_THREASH_B ) + { + vreg_twl[REG_TWL_INT_ADRS_POWER_INFO] = 0x0B; + } + else if (vreg_ctr[VREG_C_BT_REMAIN] > BATT_TH_LO) + { + vreg_twl[REG_TWL_INT_ADRS_POWER_INFO] = 0x07; + } + else if (( vreg_ctr[ VREG_C_BT_REMAIN ] > BATT_TH_EMPTY )|| + !BT_CHG_Ena_n ) + { // A_v^̗LŒグ + vreg_twl[REG_TWL_INT_ADRS_POWER_INFO] = 0x03; + } + else if (vreg_ctr[VREG_C_BT_REMAIN] > TWL_BT_LEVEL_THREASH_1 ) + { + vreg_twl[REG_TWL_INT_ADRS_POWER_INFO] = 0x01; + } + else + { + vreg_twl[REG_TWL_INT_ADRS_POWER_INFO] = 0x00; + } +} + + +/* ============================================================ + NTRɓdrcʂĂ + ============================================================ */ +static void bt_batt_update_ntr() +{ + static bit initialized; + static bit flag; // HstaticłȂƃRpCɓ{ + + if( system_status.pwr_state == OFF_TRIG ) + { + initialized = false; + } + else + { + + flag = conv_ctr_bt_to_twl_bt(); + + if(( ntr_pm_bt_low_old != flag ) || !initialized ) + { + initialized = true; + ntr_pm_bt_low_old = flag; + iic_mcu_write_a_byte_codec( CODEC_REG_BT, (u8)flag ); + } + } +} + + +/* ======================================================== +========================================================= */ +static err read_BT_SOC( u8* dest ) +{ +#ifdef _ENABLE_HAL_ + if( vreg_ctr[ VREG_C_HAL_OVW_BT_FUEL ] != 0xFF ) // trueȂHALL +#else + if( 0 ) +#endif + { + *dest = vreg_ctr[ VREG_C_HAL_OVW_BT_FUEL ]; + *(dest+1) = 0x00; + return ERR_SUCCESS; + } + else + { + return( read_mgic_2B( BT_GAUGE_REG_SOC, dest ) ); + } +} + + +/* ======================================================== +========================================================= */ +static err read_BT_voltage( u8* dest ) +{ +#ifdef _ENABLE_HAL_ + if( vreg_ctr[ VREG_C_HAL_OVW_BT_VOLTAGE ] != 0xFF ) // trueȂHALL +#else + if( 0 ) +#endif + { + *dest = vreg_ctr[ VREG_C_HAL_OVW_BT_VOLTAGE ]; +// *(dest+1) = 0x00; // gȂ@ǂQoCg[h֐pӂĂȂ̂ł + return ERR_SUCCESS; + } + else + { + return( read_mgic_2B( BT_GAUGE_REG_VCELL, dest ) ); + } +} + + +/* ======================================================== + drcʂtwlɃtOɂĕԂ +========================================================= */ +static u8 conv_ctr_bt_to_twl_bt() +{ +// ntr_pm_bt_low_old = ( vreg_ctr[ VREG_C_BT_REMAIN ] <= BATT_TH_LO )? NTR_PM_BT_EMPTY: NTR_PM_BT_ENOUGH; // 1œdr؂ + if( vreg_ctr[ VREG_C_BT_REMAIN ] <= BATT_TH_LO ) + { + return NTR_PM_BT_EMPTY; + } + else + { + return NTR_PM_BT_ENOUGH; + } +} diff --git a/tags/2.03_SDK-3.1/pm.h b/tags/2.03_SDK-3.1/pm.h new file mode 100644 index 0000000..942da87 --- /dev/null +++ b/tags/2.03_SDK-3.1/pm.h @@ -0,0 +1,216 @@ +#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 + + + +#define BATT_TH_LO 10 +#define BATT_TH_EMPTY 5 + +// dWX^ƒڔrłpɃItZbg +#define V_BT_4000MV (u16)( 4000 * 12.8 ) // dǂݏosp 4000mVݒ +#define V_TH_30 (u16)( 3300 * 12.8 ) // 30% +#define V_TH_LO (u16)( 3200 * 12.8 ) // 10% +#define V_TH_EMPTY (u16)( 3150 * 12.8 ) // 5% +#define V_TH_ZERO (u16)( 3100 * 12.8 ) // 0% +#define V_TH_FORCE_OFF (u16)( 2900 * 12.8 ) // 2.9V ŏIf + + +//========================================================= +#ifdef _WIN32 +#define LED_CHARGE mcuRegP[ _P2_4 ] +#else +#define LED_CHARGE P2.4 +#endif + + +//========================================================= +enum PMIC_REG_ADRS +{ + PM_REG_ADRS_VER = 0x00, // verinfo Ȃ + PM_REG_ADRS_VDD_SYS, // VXegpd + PM_REG_ADRS_VDD_LCD, // td + PM_REG_ADRS_CONT, // /RESET1, LoadSwitch + PM_REG_ADRS_BL, // obNCg on/off + PM_REG_ADRS_POW_SAVE, // ȓd͐ݒ + PM_REG_ADRS_POW_DAC1, + PM_REG_ADRS_POW_DAC2 +}; + +enum BT_GAUGE_REG_ADRS +{ + BT_GAUGE_REG_VCELL = 0x02, // ꂼ16rbĝ + 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 +}; + + +typedef enum BT_VENDER +{ + BT_VENDER_MAXELL = 0, // V[g + BT_VENDER_1, // 120 + BT_VENDER_2, // 360 + BT_VENDER_3, // 750 + BT_VENDER_4, // 1.3k + BT_VENDER_PANA = 5, // 2.7k + BT_VENDER_6, // 8.2k + BT_VENDER_OPEN = 7, // open + BT_VENDER_NOT_CHECKED = 0xFF, +}BT_VENDER; + + + +enum NTR_PM_BT_STATUS{ + NTR_PM_BT_ENOUGH, + NTR_PM_BT_EMPTY, + NTR_PM_BT_NOT_INITIALIZED = 0xFF +}; + + + +//========================================================= +// CODECPMIC݊WX^ +#define CODEC_REG_PM 0x10 +#define CODEC_REG_BL 0x11 +#define CODEC_REG_BT 0x12 +//#define CODEC_REG_VOL 0x13 // ...sɂAadc.hŒ` + +// TWLSPIPMICɓR}h +#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_CGS 0x07 +#define PM_REG_BIT_VDDLCD_AMO 0x05 +#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 bits8(0,0,0,0, 0,0,0,0) +#define PM_REG_BIT_VDD1P_1R05 bits8(0,0,0,0, 1,0,0,0) +#define PM_REG_BIT_VDD1P_0R90 bits8(0,0,1,0, 0,0,0,0) +#define PM_REG_BIT_VDD_AUTO bits8(0,0,0,0, 0,1,1,1) +#define PM_REG_BIT_VDD_PWM bits8(0,0,0,0, 0,0,0,0) + + +#define DELAY_PM_TW_PWUP 16 + 2 +#define DELAY_PM_TSS_50B_AND_TCOM 17 + 1 +#define DELAY_PM_5V_TO_TCOM 17 + 1 +#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; +extern BT_VENDER battery_manufacturer; +extern bit bt_force_update; + +extern u8 pmic_version; +extern u8 mgic_version[]; + +extern u8 pm_reg_bit_vddlcd; // At@XΉ(dV[PXႤ) + + +//========================================================= +err PM_sys_pow_on( ); +void PM_sys_pow_off( ); +//err PM_bt_auth( ); +void PM_LCD_vcom_set( ); + +err PM_LCD_on( ); +void PM_LCD_off( ); +err PM_BL_set( u8 ); + + +void BT_chk(); +void BT_get_left(); +void pm_chk_adapter(); + +void codec_reg_init(); + + +task_status_immed tski_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(); + + +err send_cmd_pmic( u8 reg, u8 dat ); +u8 read_pmic( u8 reg ); + + +#define PM_Chg_Stop() { BT_TEMP_P = 0; BT_CHG_DISABLE(); LED_CHARGE = 0; bt_authorized = false; } +// @ĂԑOɁA݉xĂKv܂B +#define PM_reset() ( send_cmd_pmic( PM_REG_ADRS_CONT, 0x00 ) ) + + +//========================================================= + + +// // +#define PM_LDSW_on() ( send_cmd_pmic( PM_REG_ADRS_CONT, PM_REG_BIT_LDSW )) +#define PM_LDSW_off() ( send_cmd_pmic( PM_REG_ADRS_CONT, 0 )) + + +// VXed // +#define PM_VDD_on() ( send_cmd_pmic( PM_REG_ADRS_VDD_SYS, PM_REG_BIT_VDD )) +#define PM_VDD50A_on() ( send_cmd_pmic( PM_REG_ADRS_VDD_SYS, ( PM_REG_BIT_VDD | PM_REG_BIT_VDD50A ))) +#define PM_VDD_off() ( send_cmd_pmic( PM_REG_ADRS_VDD_SYS, 0 )) +#define PM_off() PM_VDD_off() + +#define PM_VDD_normMode() ( send_cmd_pmic( PM_REG_ADRS_POW_SAVE, PM_REG_BIT_VDD1P_1R15 | PM_REG_BIT_VDD_PWM )) +#define PM_VDD_ecoMode() ( send_cmd_pmic( PM_REG_ADRS_POW_SAVE, PM_REG_BIT_VDD1P_0R90 | PM_REG_BIT_VDD_AUTO )) +// todo YŃRAdς邩Ȃ + +// ق // +#define PM_reset_neg() ( send_cmd_pmic( PM_REG_ADRS_CONT, ( PM_REG_BIT_LDSW | PM_REG_BIT_nRST1 ))) +#define PM_reset_ast() ( send_cmd_pmic( PM_REG_ADRS_CONT, ( PM_REG_BIT_LDSW ))) +#define PM_chk_LDSW() ( read_pmic( PM_REG_ADRS_CONT ) & PM_REG_BIT_LDSW ) +// 1̂ƂAdon + +// tnd // +#define PM_VDDLCD_on() ( send_cmd_pmic( PM_REG_ADRS_VDD_LCD, pm_reg_bit_vddlcd )) +#define PM_TCOM_on() ( send_cmd_pmic( PM_REG_ADRS_VDD_LCD, ( pm_reg_bit_vddlcd | PM_REG_BIT_LCD_TCOM ))) +#define PM_VCS_on() ( send_cmd_pmic( PM_REG_ADRS_VDD_LCD, ( pm_reg_bit_vddlcd | PM_REG_BIT_LCD_VCS | PM_REG_BIT_LCD_TCOM ))) +#define PM_TCOM_off() ( send_cmd_pmic( PM_REG_ADRS_VDD_LCD, ( pm_reg_bit_vddlcd | PM_REG_BIT_LCD_VCS ))) +#define PM_TCOM_VCS_off() PM_VDDLCD_on() +#define PM_VDDLCD_off() ( send_cmd_pmic( PM_REG_ADRS_VDD_LCD, 0 ) ) + +#define PM_set_BL( dat ) ( send_cmd_pmic( PM_REG_ADRS_BL, dat ) ) +#define PM_set_adc1( dat ) ( send_cmd_pmic( PM_REG_ADRS_POW_DAC1, dat ) ) +#define PM_set_adc2( dat ) ( send_cmd_pmic( PM_REG_ADRS_POW_DAC2, dat ) ) + + +#endif // __PM__ diff --git a/tags/2.03_SDK-3.1/pool.h b/tags/2.03_SDK-3.1/pool.h new file mode 100644 index 0000000..81c8091 --- /dev/null +++ b/tags/2.03_SDK-3.1/pool.h @@ -0,0 +1,24 @@ +#ifndef _pool_h_ +#define _pool_h_ + + +#include "pedometer.h" + +#define VREG_C_FREE_SIZE 200 + +// 󂢂Ă郁 +typedef struct _st_vreg_c_ext{ + unsigned short pedo_log[ PEDOMETER_LOG_SIZE ]; + unsigned char vreg_c_free[ VREG_C_FREE_SIZE ]; +}st_vreg_c_ext; + +typedef union _uni_pool +{ + st_vreg_c_ext vreg_c_ext; + u8 self_update_work[ 256 ]; // 256ȏ͂܂ƂߏłȂ +}uni_pool; + +extern uni_pool pool; + + +#endif diff --git a/tags/2.03_SDK-3.1/reboot.c b/tags/2.03_SDK-3.1/reboot.c new file mode 100644 index 0000000..b784f15 --- /dev/null +++ b/tags/2.03_SDK-3.1/reboot.c @@ -0,0 +1,24 @@ +/********************************************************//* + + ނ胊u[g + + t@CɃCCAZuƁA + ̃W[SœKȂȂ邽ߒǂo + + **********************************************************/ +#pragma SFR + +#include "incs_loader.h" + + +void my_reboot(){ +#asm + + MOV PSW,#06H ; _~[PSWZbg + MOVW AX,#000d0h ; Zbg̃xN^l荞ł܂B + PUSH PSW + PUSH AX ; RETÎ߂̃X^bN + RETI ; ŃZbgExN^ɕ + +#endasm +} diff --git a/tags/2.03_SDK-3.1/reboot.h b/tags/2.03_SDK-3.1/reboot.h new file mode 100644 index 0000000..c20e11e --- /dev/null +++ b/tags/2.03_SDK-3.1/reboot.h @@ -0,0 +1,6 @@ +#ifndef __MYREBOOT__ +#define __MYREBOOT__ + +void my_reboot(); + +#endif diff --git a/tags/2.03_SDK-3.1/renge/renge.c b/tags/2.03_SDK-3.1/renge/renge.c new file mode 100644 index 0000000..c7ad624 --- /dev/null +++ b/tags/2.03_SDK-3.1/renge/renge.c @@ -0,0 +1,312 @@ +#ifndef _WIN32 + +#pragma section @@CODE ROM_CODE +#pragma nop +#pragma ei +#pragma di +#pragma sfr + +#endif + + +#ifdef _WIN32 +typedef unsigned char bit; +typedef unsigned char u8; +#endif + +/****************************************************************************** + ^XNVXeH + ȂقǁAiTRONɂ̓RtBM[^͂B + ܂ + ctr_mcu_config.rb QƁB task_config.h쐬܂B + *****************************************************************************/ +#include "renge.h" +#include "renge_task_intval.h" +#include "renge_task_immediate.h" +#include "..\WDT.h" +#include "..\config.h" +#include "..\user_define.h" + +#ifdef _WIN32 +#include "../sim/simOnWin.h" +#endif +//#define _renge_test_ + +#define true 1 +#define false 0 + +//****************************************************************************** +u8 renge_flg_interval; +bit renge_task_interval_run_force; +bit renge_task_immediate_not_empty; + + +#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 ] )(); +extern void DI_wt_chk(); + + + +/****************************************************************************** + +E^XNVXe̓Ȉ +EC^[o^C} + *****************************************************************************/ +void renge_init(){ + renge_task_immed_init(); + /* + Cxg^C}̃ZbgȂ + RTC𗬗pĂ̂ŃRgAEg + #define renge_tick 19xxxxxxx [ms] + renge_interval_init(); RTC_init(); + */ +} + + + +/****************************************************************************** + VXe`bNi߂ + *****************************************************************************/ +/* +void renge_interval(){ +// RTCĂ +__interrupt void int_rtc_int(); +} +*/ + + + +/****************************************************************************** + RpCɌ܂ĂAC^[oÑ^XN + ̂ANƍ邩ȂB + *****************************************************************************/ +__callt err renge_task_interval_run(){ + u8 i; + + // C^[oN + DI_wt_chk(); + if(( renge_flg_interval != 0 ) || + ( renge_task_interval_run_force )) /// ȁc + { + renge_task_interval_run_force = false; // N^XNA荞ރ^XNŃtO‚Ȃ̂ + if( renge_flg_interval != 0 ) + { + renge_flg_interval --; + WDT_Restart( ); + } + EI(); + for( i = 0; i != TSK_LAST; i ++ ) + { + tasks[ i ](); + // N^XNԂɋ + renge_task_immed_run(); + } + } + EI(); + return( ERR_SUCCESS ); +} + + + +/***************************************************************************** + N^XN + + task_immed Ԃ֐B + VXetickA炩̊荞݁iI2CʐMȂǁj + X[v畜A^C~OŎs܂B + +Ԓl@ERR_FINISED@^XN폜 +@@@@ȊO ̃^C~Oł܂s + + *****************************************************************************/ + + +/************************************** + **************************************/ +void renge_task_immed_init(){ + u8 i; + + for( i = 0; i < TASK_IMMED_RUN_LIST_MAX; i++ ){ + tasks_immed[ i ] = TSK_IMM_EMPTY_; + } +} + + + +/************************************** + s^XN̓o^ + 荞݋֎~ 36us + **************************************/ +__callt err renge_task_immed_add( task_status_immed (*new_task)() ){ + u8 i; + + // Xg̋󂫂̐擪ɓo^ + // 폜΂̃^XŃA폜}[N(TSK_IMM_DELETED_)ƂȂA󂫂Ƃ͖Iɋʂ + // do^ + for( i = 0; i < TASK_IMMED_RUN_LIST_MAX; i ++ ) + { + DI_wt_chk(); + if( tasks_immed[ i ] == TSK_IMM_EMPTY_ ) + { + // 󂫂‚ + tasks_immed[ i ] = new_task; + EI(); + return( ERR_SUCCESS ); + } + else + { + // do^`FbN + /// ɂȂĂȂAOl߂ĂO + if( tasks_immed[ i ] == new_task ) + { + // do^͂Ȃ + EI(); + return( ERR_ERR ); + } + } + EI(); + } + // ^XNo^(͂ + return( ERR_ERR ); +} + + + +/************************************** + s^XN̎s + **************************************/ +__callt err renge_task_immed_run(){ + u8 list_id; + +// while( tasks_immed[ 0 ] != TSK_IMM_EMPTY_ ) + if( tasks_immed[ 0 ] != TSK_IMM_EMPTY_ ) + { + DI_wt_chk(); + for( list_id = 0; list_id < TASK_IMMED_RUN_LIST_MAX; list_id ++ ){ + if( tasks_immed[ list_id ] == TSK_IMM_EMPTY_ ){ + // Xg + EI(); + break; + } +#ifdef _renge_test_ + else if( tasks_immed[ list_id ] == TSK_IMM_DELETED_ ) + { + EI(); + NOP(); + // ^XNǗ̕s + // ݂Ȃ^XNs悤Ƃ + // ^XN̍폜̏܂ + // \Ȃ^C~O immed_run Ă΂ꂽ + } +#endif + else + { + u8 rv; + + EI(); + rv = tasks_immed[ list_id ](); // ^XNs + if( rv == ERR_SUCCESS ) + { + tasks_immed[ list_id ] = TSK_IMM_DELETED_; + } + // ǂ^C~Oœ^XN̓o^ƍ̂DIԂłė鎖 + } + DI_wt_chk(); + } + // Xg̃^XNʂs + + // ^XN폜 // + { + u8 i = 0; // Xg̕בւ + u8 j = 1; + + // K i < jAj < TASK_IMMED_RUN_LIST_MAX (łȂƃ^XNӂ) + while( 1 ) + { + if( tasks_immed[ i ] == TSK_IMM_EMPTY_ ) + { + // Olߊ && Xg + // break; + goto imm_list_sort_fin; + } + else if( tasks_immed[ i ] == TSK_IMM_DELETED_ ) + { + for( ; j < TASK_IMMED_RUN_LIST_MAX; j++ ) + { + if( tasks_immed[ j ] == TSK_IMM_DELETED_ ) + { + // ׁiHj폜Ώۂ + // next j + } + else + { + DI_wt_chk(); + if( tasks_immed[ j ] == TSK_IMM_EMPTY_ ) + { + do{ + j --; + tasks_immed[ j ] = TSK_IMM_EMPTY_; + // XgOlߊ + }while( i < j ); + EI(); + goto imm_list_sort_fin; + } + else + { + // Ol߂ׂ^XN‚ + tasks_immed[ i ] = tasks_immed[ j ]; + tasks_immed[ j ] = TSK_IMM_DELETED_; + i ++; + EI(); + } + } + } + } + else + { + // ̃^XNAؗ + } + i ++; + } + } + } + +imm_list_sort_fin: + // ܂łŊSɑOl߂Ă +#ifdef _renge_test_ + /// ق? + { + u8 a,b; + + a = 0; + for( b = 0 ; b < TASK_IMMED_RUN_LIST_MAX; b++ ) + { + if( tasks_immed[ b ] == TSK_IMM_EMPTY_ ) + { + a = 1; + } + else + { + if( a != 0 ) + { + NOP(); // EMPTYɃ^XNdeletedL + } + } + } + } +#else + NOP(); // Ȃ񂩖ƃJ{ +#endif +// } + return( ERR_SUCCESS ); +} diff --git a/tags/2.03_SDK-3.1/renge/renge.h b/tags/2.03_SDK-3.1/renge/renge.h new file mode 100644 index 0000000..9c7b2e4 --- /dev/null +++ b/tags/2.03_SDK-3.1/renge/renge.h @@ -0,0 +1,26 @@ +#ifndef __renge__ +#define __renge__ + +//****************************************************************************** + + + +//****************************************************************************** +#include "renge_defs.h" +#include "renge_task_immediate.h" +// #include "renge_task_interval_run.h" // O狭N֎~I + +//****************************************************************************** +void renge_init(); +void renge_task_immed_init(); +__callt err renge_task_immed_run(); +__callt err renge_task_immed_add( task_status_immed (*p_task_func)() ); +// static err renge_task_immed_del( u8 ); + + +//****************************************************************************** +__callt err renge_task_interval_run(); +extern u8 renge_flg_interval; +extern bit renge_task_interval_run_force; // ^XNstO + +#endif diff --git a/tags/2.03_SDK-3.1/renge/renge_defs.h b/tags/2.03_SDK-3.1/renge/renge_defs.h new file mode 100644 index 0000000..0199d76 --- /dev/null +++ b/tags/2.03_SDK-3.1/renge/renge_defs.h @@ -0,0 +1,55 @@ +#ifndef __renge_defs__ +#define __renge_defs__ +/****************************************************************************** + Renge Ver.0 (2009/04/09) + 2009- 7k4jhl R.Fujita @ RED.nintendo + + OSɂ͂قljAȈՓIȃ^XNVXeB + Range Typo ł͂ȂłBQłB + + Ȃ Q ͑̂œ{ QQ + ǖɗ–𑐂łB + 傫ĂˁI + ******************************************************************************/ + +typedef unsigned char u8; +typedef signed char s8; +typedef unsigned short u16; +typedef signed short s16; + + +// ************************************ +#define SYS_INTERVAL_TICK 1.953 + + + +// ************************************ +typedef enum _ERR +{ + ERR_SUCCESS = 0, + ERR_ERR +}err; + + +typedef enum _IMMED_TASK_ERR +{ + ERR_FINISED = 0, + ERR_CONTINUE +}IMMED_TASK_ERR; + + + +/************************************** + C^[oN + *************************************/ +typedef void task_status; + + +/************************************** + Ñ^XNXg + p~ɂȂ邩Ȃ + *************************************/ +typedef IMMED_TASK_ERR task_status_immed; + + +#endif diff --git a/tags/2.03_SDK-3.1/renge/renge_task_config.rb b/tags/2.03_SDK-3.1/renge/renge_task_config.rb new file mode 100644 index 0000000..c2de509 --- /dev/null +++ b/tags/2.03_SDK-3.1/renge/renge_task_config.rb @@ -0,0 +1,59 @@ +#!/usr/bin/ruby -Ks + +tasklist = Array.new + + +if( ARGV[0] == nil ) + printf( "t@C renge_tasks.txt gp܂" ) + datfile = "renge_tasks.txt" +else + datfile = ARGV[0] +end + +if( !File.exist?( datfile ) ) + printf("ݒt@C‚܂B") + 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^XN %d \n", tasklist.size ) + + +#----- ÓI^XN̗ ------------------------------------------------------- +conf = File.new( "renge_task_intval.h", "w+" ) + +conf << "/*XNvgɂ鎩łB蓮ŏȂ悢ł*/\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 << "const void ( *tasks[ TSK_LAST ] )() = {\n" +tasklist.each{|dat| + conf << " tsk_" << dat << ",\n" +} +conf << " };\n" + +conf << "\n#endif\n" diff --git a/tags/2.03_SDK-3.1/renge/renge_task_immediate.h b/tags/2.03_SDK-3.1/renge/renge_task_immediate.h new file mode 100644 index 0000000..9ac3bd2 --- /dev/null +++ b/tags/2.03_SDK-3.1/renge/renge_task_immediate.h @@ -0,0 +1,25 @@ +#ifndef __tasks__ +#define __tasks__ + +#include "renge_defs.h" + +// ************************************* +#define TASK_IMMED_RUN_LIST_MAX 10 + + +extern task_status_immed tski_do_command0( ); +extern task_status_immed tski_ntr_pmic_comm(); +extern task_status_immed tski_acc_read(); +extern task_status_immed tski_acc_write(); +//extern task_status_immed tski_acc_setup(); // accero.h +extern task_status_immed tski_mcu_reset(); +extern task_status_immed tski_vol_update(); + + +// ************************************* +#define TSK_IMM_EMPTY_ ( void * )( 0x0000 ) +#define TSK_IMM_DELETED_ ( void * )( 0x0001 ) + + + +#endif diff --git a/tags/2.03_SDK-3.1/renge/renge_task_intval.h b/tags/2.03_SDK-3.1/renge/renge_task_intval.h new file mode 100644 index 0000000..9b0d9ea --- /dev/null +++ b/tags/2.03_SDK-3.1/renge/renge_task_intval.h @@ -0,0 +1,37 @@ +/*XNvgɂ鎩łB蓮ŏȂ悢ł*/ + +#ifndef __renge_task__ +#define __renge_task__ + +#include "renge_defs.h" + +enum TSK +{ + TSK_SW, TSK_ADC, TSK_BATT, TSK_LED_POW, TSK_LED_WIFI, TSK_LED_NOTIFY, TSK_LED_CAM, TSK_MISC, TSK_STATUS, 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(); +extern void tsk_status(); +extern void tsk_sys(); + +const void ( *tasks[ TSK_LAST ] )() = { + tsk_sw, + tsk_adc, + tsk_batt, + tsk_led_pow, + tsk_led_wifi, + tsk_led_notify, + tsk_led_cam, + tsk_misc, + tsk_status, + tsk_sys, + }; + +#endif diff --git a/tags/2.03_SDK-3.1/renge/renge_tasks.txt b/tags/2.03_SDK-3.1/renge/renge_tasks.txt new file mode 100644 index 0000000..73af545 --- /dev/null +++ b/tags/2.03_SDK-3.1/renge/renge_tasks.txt @@ -0,0 +1,11 @@ +sw +adc +batt +led_pow +led_wifi +led_notify +led_cam +misc +status +debug +sys diff --git a/tags/2.03_SDK-3.1/rtc.c b/tags/2.03_SDK-3.1/rtc.c new file mode 100644 index 0000000..e3bdcfa --- /dev/null +++ b/tags/2.03_SDK-3.1/rtc.c @@ -0,0 +1,177 @@ +/* ======================================================== + RTC + ======================================================== */ +#ifndef _WIN32 + +#pragma sfr +#pragma inline + +#endif + +#include "incs.h" + + +#define RTC_DATA_SIZE 7 +// ======================================================== +static u8 rtc_work[RTC_DATA_SIZE]; +static bit rtc_lock; +static bit rtc_dirty; +bit rtc_alarm_dirty; + + +/* ======================================================== + ytF̏ + WX^̓drrbg̃Zbg + ======================================================== */ +void RTC_init( void ) +{ + + if( !RTCEN ) // rbgĂ烊u[g + { + RTCEN = 1; // W[ON + + // RTCݒ + RTCC0 = bits8(0,0,0,0, 1,0,0,0); /* ~A24ԐA32kóu܂ȂvA荞݂Ȃ */ + // (RTCE 0 RCLOE1 RCLOE0 AMPM CT2 CT1 CT0) + RTCC1 = bits8(1,1,0,0, 0,0,0,0); /* A[荞ݗLJn */ + // (WALE WALIE 0 WAFG RIFG 0 RWST RWAIT) + RTCC2 = bits8(1,0,0,0, 0,0,0,0); /* C^[o:32k/2^6=2msARTCDIVo͂Ȃ */ + // (RINTE RCLOE2 RCKDIV 0 0 ICT2 ICT1 ICT0) + + HOUR = 0x00; + MIN = 0x00; + SEC = 0x00; + MONTH = 0x01; + DAY = 0x01; + WEEK = 0x01; // Mon + YEAR = 0x01; + + ALARMWW = 0x7F; + + vreg_ctr[VREG_C_MCU_STATUS] |= REG_BIT_RTC_BLACKOUT; + } + // 荞ݐݒ + RTCIF = 0; + RTCIIF = 0; + RTCMK = 1; /* 荞()֎~ */ + RTCIMK = 0; /* 荞(A[&C^[o) */ + + RTCE = 1; /* Jn */ + + RWAIT = 1; + while( !RWST ) + {;} + RWAIT = 0; + + rtc_lock = false; + rtc_dirty = false; + rtc_alarm_dirty = false; +} + + + +/* ======================================================== + RTC A[荞 + ======================================================== */ +__interrupt void int_rtc( ) +{ + RWAIT = 1; + while( !RWST ) + {;} + // tw + 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 ) ) + { + set_irq( VREG_C_IRQ1, REG_BIT_RTC_ALARM ); + } + RWAIT = 0; +} + + + +/* ======================================================== + RTC ̃[h + WX^́Asec,min,hour,week,day,month,year ̏ + ======================================================== */ +void rtc_buf_refresh( ) +{ + if( !rtc_lock ) + { + rtc_lock = true; + RWAIT = 1; + while( !RWST ) + {;} + + memcpy( &vreg_ctr[VREG_C_RTC_SEC], &SEC, RTC_DATA_SIZE ); + RWAIT = 0; +// renge_task_immed_add( tski_rtc_close ); + } +} + + + +/* ======================================================== + RTC ̃Cg + set_rtc_close Ƒ΂ŎgĉB + ‚̓obt@ɃRs[邾ŁA + ۂRTCɃZbĝset_rtc_close()łB + ======================================================== */ +void set_rtc( u8 adrs, u8 data ) +{ + if( !rtc_dirty ) + { + rtc_dirty = true; + memcpy( rtc_work, &SEC, RTC_DATA_SIZE ); +// renge_task_immed_add( tski_rtc_close ); // I2CIɍs + } + rtc_work[adrs] = data; +} + + + +/* ======================================================== + KvȂ΁ARTCWX^̍XV + ======================================================== */ +// task_status_immed tski_rtc_close(){ +void rtc_unlock( ) +{ + // [hbN + rtc_lock = false; + + // CgbN + if( rtc_dirty ) + { + rtc_dirty = false; + RWAIT = 1; + while( !RWST ) + {;} + memcpy( &SEC, rtc_work, RTC_DATA_SIZE ); + RWAIT = 0; + } + + // A[Zbg + if( rtc_alarm_dirty ) + { + rtc_alarm_dirty = false; + WALE = 0; + ALARMWM = vreg_ctr[VREG_C_RTC_ALARM_MIN]; + ALARMWH = vreg_ctr[VREG_C_RTC_ALARM_HOUR]; + WALE = 1; + } +} + + + + + +/* ======================================================== + RTC VXe`bN^C}荞݃xN^ + 2^6/fXTi1.953125 msj + ======================================================== */ +__interrupt void int_rtc_int( ) +{ +// renge_flg_interval ++; // CNg/fNg߂ĝ DI()sv + renge_flg_interval = 1; // CNg/fNg߂ĝ DI()sv +} + diff --git a/tags/2.03_SDK-3.1/rtc.h b/tags/2.03_SDK-3.1/rtc.h new file mode 100644 index 0000000..6b2d9f8 --- /dev/null +++ b/tags/2.03_SDK-3.1/rtc.h @@ -0,0 +1,21 @@ +#ifndef __rtc_h__ +#define __rtc_h__ + + +void RTC_init( void ); +void rtc_buf_refresh( ); +void set_rtc( u8 adrs, u8 data ); + +//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 diff --git a/tags/2.03_SDK-3.1/self_flash.c b/tags/2.03_SDK-3.1/self_flash.c new file mode 100644 index 0000000..d1ff4dd --- /dev/null +++ b/tags/2.03_SDK-3.1/self_flash.c @@ -0,0 +1,608 @@ +/* ======================================================== + ȃAbvf[^ + ======================================================== */ +#ifndef _WIN32 + +#pragma SFR +#pragma di +#pragma ei +#pragma nop +#pragma stop +#pragma halt + +#endif + +#include "incs_loader.h" + +#include +#include "fsl_user.h" +#include "i2c_ctr.h" + +#include "pool.h" +#include "magic.h" + +#include "pm.h" + +// ======================================================== +const u8 fsl_fx_MHz_u08 = 8; +const u8 fsl_low_voltage_u08 = 1; + + +// ȃtbVp[^ +#define SAM_BLOCK_SIZE 1024 + // 256oCgȏ͂܂Ƃ߂Ă܂B +#define SELF_UPDATE_BUFF_SIZE 256 +#define SELF_UPDATE_SPLIT_WRITE_NUM ( SAM_BLOCK_SIZE / SELF_UPDATE_BUFF_SIZE ) +#define SAM_WORD_SIZE 4 + +// ubNԍi1ubN1kBj +#define INACTIVE_BOOTSECT_TOP 4 +#define FIRM_TOP 8 +#define FIRM_SIZE 12 +#define ALTERNATE_FIRMTOP 20 + + +#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 + +#ifndef _WIN32 +#define LED_POW1 P1.5 +#define LED_PM_POW1 PM1.5 +#else +#define LED_POW1 mcuRegP[ _P1_5 ] +#define LED_PM_POW1 mcuRegPM[ _P1_5 ] +#endif + +// ======================================================== +static void FSL_Open( void ); +static void FSL_Close( void ); +void firm_restore( ); + +static err my_FSL_Init(); +static err firm_duplicate( u8 block_src, u8 block_dest ); + +#ifdef _DBG_LED_PRINT_ +void alert( u8 ); +void led_print( u8 ); +#else +# define alert( x ) ; +# define led_print( x ) ; +#endif + + +// ======================================================== +extern uni_pool pool; + + +// 0.Dȍ~ VAbvf[^ +// Vt@[͑vH +#define N_MGC_L 0x1FF6 +#define N_MGC_T 0x4FF6 + + + +/* ======================================================== + I2CŎMāA + ݁A + `FbNOK@@Vt@[ɐ؂ւčċN + @@@@NG@@ijt@[ɖ߂čċN + i̊֐͖߂܂j + ======================================================== */ +void firm_update( ) +{ + u8 target_block; + u8 split_write_count; // ubNւ܂܏ރJE^ + + // ւO ///////////////////////////////////// + my_FSL_Init(); + + /* t@[̃obNAbv + JnAhXAݐ̐擪hubNԍh (TCY FIRM_SIZE) + 0x2000 - 0x4FFF + 0x5000 - 0x7FFF (ubN 20 - 31) ɃRs[ + */ + firm_duplicate( FIRM_TOP, + ALTERNATE_FIRMTOP ); + + // SubN폜 ///////////////////////////////////// + // df𔻒肷邽߁AŏɑSNX^ + //iVt@[ƂɎcĂAȑÕt@[̃tb^j + for( target_block = INACTIVE_BOOTSECT_TOP; + target_block < ALTERNATE_FIRMTOP; + target_block ++ ) + { + FSL_Erase( target_block ); + } + + + // ւ /////////////////////////////////////////// + // XgbvRfBV܂ő + // IAX^[gAbv[`ɔ + for( target_block = INACTIVE_BOOTSECT_TOP; + target_block < ALTERNATE_FIRMTOP; + target_block ++ ) + { + u8 my_spd; + +/* łɏĂBłȂƒfꂽƂIĂ邩ʏoȂ +// // Vt@[̈폜 +// FSL_Erase( target_block ); +*/ + // + for( split_write_count = 0; + split_write_count < SELF_UPDATE_SPLIT_WRITE_NUM; + split_write_count ++ ) + { + u8* p_buffer = &pool.self_update_work[0]; + u16 buff_written_size = 0; + + WDT_Restart( ); + + // I2C珑݃f[^obt@ɂ߂ + do + { + while( !IICAIF && !SPD ) + {;} + my_spd = SPD; + IICAIF = 0; + *p_buffer = IICA; + WREL = 1; + p_buffer ++; + buff_written_size ++; + } + while( ( buff_written_size != SELF_UPDATE_BUFF_SIZE ) + && !SPD ); + + my_spd += SPD; + + // + // ŌゾƁAS~pfBO邪ʂɂ܂Ȃ + 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 ) + { + alert(1); + // ݌̃`FbNG[ + // XgA + firm_duplicate( ALTERNATE_FIRMTOP, FIRM_TOP ); + FSL_ForceReset(); // Zbg + // FSL_SwapBootCluster( ); // u[gXbvuɁvċNďoȂ炵 + // ߂ĂȂ // + } + + if( my_spd != 0 ) + { + break; + } + } + + // 1ubN݊Bxt@Cs + if( FSL_IVerify( target_block ) != FSL_OK ){ + alert(2); + // ēx xt@CJԂ_ł... /// ďׂ݂H + // XgA + firm_duplicate( ALTERNATE_FIRMTOP, FIRM_TOP ); + FSL_ForceReset(); // Zbg + // FSL_SwapBootCluster( ); // u[gXbvuɁvċNďoȂ炵 + // ߂ĂȂ // + } + + if( my_spd != 0 ) + { + break; + } + } + + LREL = 1; + + // 񂾃t@[̃`FbN // + { + u8 i; + u8 comp = 0; + + // [_[̃}WbNƁA{̖̃}WbN͓mF + for( i = 0; i < sizeof( __TIME__ ); i++ ) + { + comp += (u8)(( (*( __far u8 * ) ( N_MGC_L + i )) == (*( u8 * ) ( N_MGC_T + i ) )) ? 0 : 1); + } + if( *( __far u8 * )( N_MGC_L +2 ) != ':' ) // ς̂܂ + { + comp ++; + } + + if( comp == 0 ) + { + // OK! + FSL_InvertBootFlag( ); + FSL_SwapBootCluster( ); // ZbgɓBFSL_Close͕sv + } + else + { + // f[^(}WbNio[ĂȂ)G[ + // XgA + alert(3); + + firm_duplicate( ALTERNATE_FIRMTOP, FIRM_TOP ); + FSL_ForceReset(); // Zbg + // FSL_SwapBootCluster( ); // u[gXbvuɁvċNďoȂ炵 + } + // ߂ĂȂ // + } +} + + + + +/* ======================================================== + @t@[obNAbv̈悩烊XgA܂B + @`FbNAŌ̍ŌŃu[gXbv̂ŁA +@ł̓u[gXbv͕svłB + + ======================================================== */ +void firm_restore( ) +{ + DBG_LED_on; + LED_PM_POW1 = 0; + + // obNAbv͐H // + { + u16 i; + u8 comp = 0; + + for( i = 0; i < sizeof( __TIME__ ); i++ ) // sizeof( __TIME__ ) = 8 炵 + { + comp += ( *( __far u8 * )( MGC_LOAD + i ) == *( u8 * )( MGC_HEAD_BKUP + i ) ) ? 0 : 1; + comp += ( *( u8 * )( MGC_HEAD_BKUP + i ) == *( u8 * )( MGC_FOOT_BKUP + i ) ) ? 0 : 1; + } + if( *( u8 * )( MGC_FOOT_BKUP ) == 0xFF ) + { + comp ++; + } + + if( comp != 0 ) + { + // obNAbv̈ꂽ... + comp = 0; + + // 3.3VオȂƍ + EI( ); + iic_mcu_start( ); + RESET2_ast; + FCRAM_RST_ast; + GYRO_DISABLE(); + PM_LDSW_on(); + wait_ms( 1 + DELAY_PM_TW_PWUP ); + PM_VDD_on( ); + + while(1) + { + WDT_Restart(); + + { + // LED sRsR + comp++; + LED_POW1 = ( comp == 1 || comp == 3 )? 1: 0; + if( comp == 8 ) + { + comp = 0; + } + } + + { + // d{^œdoff + static u8 sw_hold_count; + + if( !SW_POW_n_RAW ) + { + sw_hold_count++; + } + else + { + sw_hold_count = 0; + } + + if( sw_hold_count > 16 ) + { + sw_hold_count = 0; + // doff + PM_LDSW_off( ); + break; + } + } + + // EFCg + for( i = 1; i != 0; i++ ) + { + NOP(); + NOP(); + NOP(); + NOP(); + } + } + { + // ǁAǂ悤cB + + KRM = ( KR_SW_POW ); // Mask ł͂ȂAModeȂ̂B킵 + MK0 = 0xFFFF; + MK1 = ~( INT_MSK1_KR ); + MK2L = 0xFF; + + // PU5 ̂܂ + PU7 = bits8(0,0,0,0, 1,0,0,0); // PWSWI + PU20 = bits8(0,0,0,0, 0,0,0,0);; // SW_HOME ~ + + STOP( ); + + mcu_wdt_reset; + } + } + } + + + if( my_FSL_Init() != ERR_SUCCESS ){ + alert(1); + } + + /* t@[̃XgA + 0x4800 - 0x7FFF (ubN 18 - 27) + 0x2000 - 0x47FF (ubN 8 - 17) փRs[ + */ + if( firm_duplicate( ALTERNATE_FIRMTOP, FIRM_TOP ) != ERR_SUCCESS ) + { + alert(2); + } + DBG_LED_off; + + // todo XgAsALEDƂāAT[rXɂĂ炤H + +/* +// u[g + if( FSL_InvertBootFlag() != ERR_SUCCESS ) + { + alert(3); + } +*/ + FSL_ForceReset(); // Zbg + // FSL_SwapBootCluster( ); // u[gXbvuɁvċNďoȂ炵 +} + + + +// ======================================================== +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 + + while( DST1 ){;} // DMA~ + DEN1 = 0; + + MK0 = 0xFFFF; + MK1 = 0xFFFF; + MK2 = 0xFFFF; +/* + LVIM = bits8(0,0,0,0, 0,0,1,0); + LVIS = bits8(0,0,0,0, 1,0,0,0); + LVIM = bits8(1,0,0,0, 0,0,1,0); +*/ + FSL_FLMD0_HIGH; // tbVւ +} + + + +/*----------------------------------------------------------------------------------------------*/ +/* leave the "user room" and restore previous conditions */ +/*----------------------------------------------------------------------------------------------*/ +static void FSL_Close( void ) +{ + // nH + + FSL_FLMD0_LOW; // tbVCgveNg + +#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 +} + + + +/* ======================================================== +@}CRŃt@[Rs[܂B + __far u8 * p_rom Rs[̐擪AhX + block_dest Rs[̐擪ubN + + Rs[ɏ悤my_FSL_Init炩ߎsKv܂B + ======================================================== */ +//static err firm_duplicate( __far u8 * p_rom, +// u8 block_dest ) +static err firm_duplicate( u8 block_src, + u8 block_dest ) +{ + u8 target_block; + u8 split_write_count; // ubNւ܂܏ރJE^ + __far u8* p_src = ( __far u8* )( block_src * 0x400 ); + u8 retry_error; + + led_print(1); + + // ݐubN̐JԂ + for( target_block = block_dest; + target_block < ( block_dest + FIRM_SIZE ); + target_block ++ ) + { + led_print(2); + WDT_Restart( ); + // ubN + retry_error = 5 + 1; + while( FSL_BlankCheck( target_block ) != FSL_OK ) + { + led_print(3); + FSL_Erase( target_block ); + if( -- retry_error == 0 ) + { + // tbVH + FSL_Close( ); + return ( ERR_ERR ); // ZbgA݂@ǂȂ邩m + } + } + + led_print(4); + // ݕJԂ + for( split_write_count = 0; + split_write_count < SELF_UPDATE_SPLIT_WRITE_NUM; + split_write_count ++ ) + { + u16 buff_written_size; + u8* p_buff; + + // ݃f[^obt@ɂ߂ + buff_written_size = 0; + p_buff = &pool.self_update_work[0]; + do + { + *p_buff = *p_src; + p_src ++; + p_buff ++; + buff_written_size ++; + } + while( buff_written_size != 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 ) + { + // Jo̓u[g // + FSL_Close( ); + led_print(5); +// while(1){} + return ( ERR_ERR ); + } + } + led_print(6); + + // 1ubN݊Bd`FbNs + while( FSL_IVerify( target_block ) != FSL_OK ) + { + // Jo̓u[g // + led_print(7); + return ( ERR_ERR ); + } + } + return( ERR_SUCCESS ); + +} + + + +/* ======================================================== + ======================================================== */ +static err my_FSL_Init() +{ + u8 rv; + + RTCE = 0; + + // ւO // + DI( ); + FSL_Open( ); // 荞݋֎~Ȃ + + FSL_Init( &pool.self_update_work[0] ); // CuB荞ݒfl + rv = FSL_ModeCheck( ); // CgveNg`FbNBs邱Ƃl + + return( (err)rv ); +} + + +task_status_immed tski_mcu_reset() +{ + // ʂɍċN + my_FSL_Init(); + + FSL_ForceReset(); // Zbg + FSL_Close( ); + + // یH // + mcu_wdt_reset; + return( ERR_SUCCESS ); // no reach +} + + +#ifdef _DBG_LED_PRINT_ +// P1.5 = led_pow_red_old +void alert( u8 num ) +{ + u8 i; + + while(1) + { + WDT_Restart(); + LED_POW1 = 1; + for( i = 0; i < num; i++ ) + { + DBG_LED_on; + DBG_LED_off; + } + LED_POW1 = 0; + } +} + + +void led_print( u8 num ) +{ + u8 i; + + DBG_LED_on; + for( i = 0; i < num; i++ ) + { + LED_POW1 = 1; + LED_POW1 = 0; + } + DBG_LED_off; +} +#endif diff --git a/tags/2.03_SDK-3.1/self_flash.h b/tags/2.03_SDK-3.1/self_flash.h new file mode 100644 index 0000000..768565e --- /dev/null +++ b/tags/2.03_SDK-3.1/self_flash.h @@ -0,0 +1,9 @@ +#ifndef _self_flash_h_ +#define _self_flash_h_ + + +void firm_update(); + + +#endif + diff --git a/tags/2.03_SDK-3.1/sw.c b/tags/2.03_SDK-3.1/sw.c new file mode 100644 index 0000000..5fd74ed --- /dev/null +++ b/tags/2.03_SDK-3.1/sw.c @@ -0,0 +1,188 @@ +#ifndef _WIN32 + +#pragma SFR +#pragma NOP +#pragma HALT +#pragma STOP + +#endif + +#include "incs.h" + +#include "i2c_twl.h" +#include "i2c_ctr.h" +#include "led.h" +#include "pm.h" +#include "rtc.h" +#include "sw.h" + + +//========================================================= +/* + vreg_ctrǂ݂̂Ńwb_ +#define INTERVAL_TSK_SW +#define CLICK_THRESHOLD + +#define HOLD_THREASHOLD +#define FORCEOFF_THREASHOLD +*/ +#define TIME_MUKAN ( u8)( 300 / INTERVAL_TSK_SW ) +#define TIME_MUKAN_PWSW_RED_TRIAL (u16)( 15000 / INTERVAL_TSK_SW ) // VAhome}XN + +//========================================================= +u16 SW_pow_count; +bit SW_pow_mask; + +static u8 SW_home_count, SW_wifi_count, SW_home_count_rel; +static u8 sw_wifi_mukan_time; + +u16 off_timeout_timer; + +static u16 sw_pwsw_mukan_time; + +//========================================================= +// Ԃ𐔂BςȂł0ɖ߂Ȃ +// mask0̎́Ax܂Ŗ +#define count_sw_n( sw, counter, mask ) \ + { \ + if( sw ){ \ + mask = 0; \ + counter = 0; \ + }else{ \ + if( mask != 0 ){ \ + counter = 0; \ + }else{ \ + counter ++; \ + if( counter == 0 ) counter = -1; \ + } \ + } \ + } + + +#define chk_clicked( button, count, irq_bit_name ) \ + if( !button ) \ + { \ + if( count < CLICK_THRESHOLD ) \ + { \ + count ++; \ + if( count == CLICK_THRESHOLD ) \ + { \ + count ++; \ + set_irq( VREG_C_IRQ0, irq_bit_name ); \ + } \ + } \ + } \ + else \ + { \ + count = 0; \ + } + + + +/* ======================================================== + XCb`̊Ď + @`^O͂˂AAgKȂǂ̌oȂ + ======================================================== */ +void tsk_sw( ) +{ + static u8 task_interval; + + if( system_status.pwr_state == OFF_TRIG ) + { + SW_pow_count = 0; // dɔăNA +// task_interval = 0; + } + + if( system_status.pwr_state != ON_CHECK ) // 莞(PWSW_POWON_TIME)ẐŃvXP[@łȂƃ`^܂肫Ȃ + { + if( task_interval != 0 ) + { + task_interval--; + return; + // ܂ + } + + task_interval = (u8)( INTERVAL_TSK_SW / SYS_INTERVAL_TICK ) -1; // vXP[ɎgĂ܂ˁc + // -1̓|XgfNĝ߂̒ + } + + // 8ms ɂ܂ + switch ( system_status.pwr_state ) + { + case ( ON ): + case ( SLEEP ): + case ( OFF ): + case ( ON_CHECK ): + // @̏ꍇ + if( ! system_status.taikendai ) + { + + // dXCb`̊Ď // + if( SW_pow_count == ( TIME_PWSW_CLICK ) ) // NbNԂɓB + { + set_irq( VREG_C_IRQ0, REG_BIT_SW_POW_CLICK ); + } + else if( SW_pow_count == ( HOLD_THREASHOLD ) ) // ɓB + { + set_irq( VREG_C_IRQ0, REG_BIT_SW_POW_HOLD ); + if( off_timeout_timer == 0 ) // dfJEg_EJnAxȂ悤ɁB + { + off_timeout_timer = vreg_ctr[ VREG_C_OFF_DELAY ] * 16; + } + } + + if( off_timeout_timer != 0 ) // 荞݌A^CAEgŋItB + { + off_timeout_timer --; + if( off_timeout_timer == 0 ) + { + force_off = true; + } + } + + }else{ + // X^hAV + // dXCb`̊Ď // + if( SW_pow_count == ( TIME_PWSW_CLICK ) ) + { + if( sw_pwsw_mukan_time == 0 ) + { + set_irq( VREG_C_IRQ0, REG_BIT_SW_POW_CLICK ); + // ȃ^C~OPWSWHOMEj[ɓĂ܂̂邽߂̃}XN^C}[ + sw_pwsw_mukan_time = TIME_MUKAN_PWSW_RED_TRIAL; + } + } + else if( SW_pow_count == ( HOLD_THREASHOLD ) ) + { + force_off = true; + } + + if( sw_pwsw_mukan_time != 0 ) + { + sw_pwsw_mukan_time--; + } + } + + count_sw_n( SW_POW_n, SW_pow_count, SW_pow_mask ); // {^Ԃ̃JEg + + // HOME sw // + chk_clicked( SW_HOME_n, SW_home_count, REG_BIT_SW_HOME_CLICK ); + chk_clicked( !SW_HOME_n, SW_home_count_rel, REG_BIT_SW_HOME_RELEASE ); + + // wifi sw // + /// ňȎȂ̂͂킩Ă邪AsɏoĂ܂sǃXCb`~ + if( sw_wifi_mukan_time != 0 ) + { + sw_wifi_mukan_time--; + } + else + { + chk_clicked( SW_WIFI_n, SW_wifi_count, REG_BIT_SW_WIFI_CLICK ); + if( SW_wifi_count == CLICK_THRESHOLD +1 ) // 蔭I + { + sw_wifi_mukan_time = TIME_MUKAN; + } + } + } +} + diff --git a/tags/2.03_SDK-3.1/sw.h b/tags/2.03_SDK-3.1/sw.h new file mode 100644 index 0000000..abe9715 --- /dev/null +++ b/tags/2.03_SDK-3.1/sw.h @@ -0,0 +1,20 @@ +#ifndef _sw_ +#define _sw_ + +#include "config.h" + +extern u16 SW_pow_count; +extern bit SW_pow_mask; + +#define INTERVAL_TSK_SW 8 +#define CLICK_THRESHOLD 5 + +#define HOLD_THREASHOLD (u16)( 3000 /INTERVAL_TSK_SW ) +#define TIME_PWSW_CLICK (u8)( 220 /INTERVAL_TSK_SW ) +#define FORCEOFF_THREASHOLD (u8)( 12000 /INTERVAL_TSK_SW /16 ) + + +extern u16 off_timeout_timer; +#define clear_pow_off_countdown(){ off_timeout_timer = 0; force_off = false; } + +#endif diff --git a/tags/2.03_SDK-3.1/task_debug.c b/tags/2.03_SDK-3.1/task_debug.c new file mode 100644 index 0000000..fc3ab4f --- /dev/null +++ b/tags/2.03_SDK-3.1/task_debug.c @@ -0,0 +1,112 @@ +#ifndef _WIN32 + +#pragma SFR +#pragma NOP +#pragma HALT +#pragma STOP + +#endif + +#include "incs_loader.h" +//#include "incs.h" +#include "renge\renge.h" +#include "pm.h" +#include "accero.h" + + +/* ======================================================== + ======================================================== */ + +// 7ZO 4oCg +# define IIC_SLA_DBG_MONITOR 0x44 + + +#if 0 // fobOj^p^XN + +ӁI@^XNXgOĂ܂̂ŁAgȂ畜ĉI + +void tsk_debug( ) +{ +// u8 temp; + + /* + if( system_status.pwr_state == ON_TRIG ){ + { + static u8 count = 0; + // fobOLEDi8bitj̏ + temp = iic_mcu_read_a_byte( IIC_SLA_8LEDS, IIC_8LEDS_REG_DO ); + count ++; + iic_mcu_write_a_byte( IIC_SLA_8LEDS, IIC_8LEDS_REG_DO, count ); + iic_mcu_write_a_byte( IIC_SLA_DBG_MONITOR, 3, count ); + } + } + */ + +// 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_3D ] ); +// 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_3D ] ); +// 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 ] ); + + /* + { + 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_3D ]; + str[1] = vreg_ctr[ VREG_C_ACC_CONFIG ]; + str[0] = SEC; + iic_mcu_write( IIC_SLA_DBG_MONITOR, 0x03, 4, &str ); + } + } + */ +} + +#endif + + +#if 0 // ^XNЂȌ` +/* ======================================================== + ^XNЂȌ` + ======================================================== */ +task_interval tsk_hina( ) +{ + switch ( system_status.pwr_state ) + { + case ON_CHECK: + case ON_TRIG: + case ON: + case SLEEP: + case OFF_TRIG: + default: + } + + return; // tic Ă΂邱ƂɂȂ܂ +} + + +// |C^ʼn炤̂͊댯ȋCĂ +/* ̂悤Ɏg + renge_task_immed_add( ^XN֐ւ̃|C^ ); +*/ +task_status_immed tski_hina( u8 * arg ) +{ + return ( ERR_FINISED ); + // ERR_FINISED ^XN폜 + // ERR_CONTINUE ɂȂ񂩊荞݂ȂA[U[ȂAVXe`bN + // Ƃɍēxs +} + + +#endif diff --git a/tags/2.03_SDK-3.1/task_misc.c b/tags/2.03_SDK-3.1/task_misc.c new file mode 100644 index 0000000..d50d289 --- /dev/null +++ b/tags/2.03_SDK-3.1/task_misc.c @@ -0,0 +1,399 @@ +#ifndef _WIN32 + +#pragma SFR +#pragma NOP +#pragma HALT +#pragma STOP + +#endif + +#include "incs.h" +#include "renge\renge.h" +#include "pm.h" + +#include "accero.h" +#include "adc.h" +#include "i2c_mcu.h" +#include "led.h" +#include "vreg_twl.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 + +// ======================================================== +extern void f(); + + +// ======================================================== +bit twl_ver_read; // twl home menuverǂ񂾂݊J[lɊ荞݂邽 +bit going_to_sleep; // SoCAsleepɓʒm炤Bslp_i HԂ0ɂȂ + // X[v畜AłȂȂ̂h + + +// eXgp +bit reserve_pedo_increnent; + + +// ======================================================== +static void update_LED_3D(); +static void check_twl_vol_irq(); +extern void DI_wt_chk(); + + + +/* ======================================================== + Xe[^XWX^Ȃ + ======================================================== */ +void tsk_misc( ) +{ + /* ======================================================== + xZT荞݃sIWi}CRɂ͖̂ + |[OB + vp + BSR}CRaccero.cŊ荞݃[`^XNo^܂B + ======================================================== */ + // 荞݂̎肱ڂH + if( ACC_VALID ) + { + if( renge_task_immed_add( tski_cbk_accero ) == ERR_SUCCESS ){ + // dbg_nop(); + } + } + + if( system_status.pwr_state == ON ) + { + /* ======================================================== + PM݊WX^ւ̏ + |[OĂȂB荞݁H + ======================================================== */ + if( !PM_IRQ_n ) + { + renge_task_immed_add( tski_ntr_pmic_comm ); + // dbg_nop(); + } + + /* ======================================================== + TWL`[NƂCTRm肽炵 + ======================================================== */ + if( twl_ver_read ) + { + twl_ver_read = false; + set_irq( VREG_C_IRQ2, REG_BIT_TWL_VER_READ ); + } + + // TWL ̉ʕω荞݃`FbN // + check_twl_vol_irq(); + } + + // 3D vXV // + update_LED_3D(); + + if( reserve_pedo_increnent ) + { + reserve_pedo_increnent = 0; + hosu_increment_if_necessary(); + } + +#ifdef _ENABLE_PRESS_SEL_TO_WDT_ + if( system_status.pwr_state == ON ) + { + static u16 timer; + if( !SW_SEL_n ) + { + timer += 1; + if( timer == 2000 ) + { + DI(); + timer = 0; + while(1) + { + NOP(); // ̂WDT + } + } + } + } +#endif + + //. X^bNeXg +// f(); +} + + + +/* ======================================================== + TWLVol̂ƁAXC_̑삪obeBO + sN鎖Ah + TWLł8ʏ펞A{^8iKBɍ킹Ċ荞݂ꂽ + ======================================================== */ +void check_twl_vol_irq() +{ + static u8 vol_level_twl_sent; + static u8 mabiki; + + if( !is_TWL ) + { + return; + // ܂ + } + + if( mabiki != 0 ) + { + mabiki--; + return; + // ܂ + } + + mabiki = 9; // 1t[͊J + if( vol_level_twl != vol_level_twl_sent ) + { + vol_level_twl_sent = vol_level_twl; + set_irq( VREG_C_IRQ2, REG_BIT_SLIDE_VOL_ACROSS_TWL_BOUNDARY ); + } +} + + + +// 3D_LED ///////////////////////////////////// +void update_LED_3D() +{ + if( system_status.pwr_state != ON ) + { + LED_duty_3d = 0; + return; + // ܂ // + } + + if( vreg_ctr[VREG_C_LED_3D] == LED_3D_ILM_OFF ) + { + if( LED_duty_3d != 0 ) + { + LED_duty_3d --; + } + } + else + { + if( LED_duty_3d != vreg_ctr[VREG_C_LED_BRIGHT] ) + { + if( LED_duty_3d < vreg_ctr[VREG_C_LED_BRIGHT] ) + { + LED_duty_3d ++; + } + else + { + LED_duty_3d --; + } + } + } +} + + + +/* ======================================================== + N^XN + ======================================================== */ + +/* ======================================================== + COMMANDWX^ւ̏ +@ 0ȂĂ΂܂BPAsv + ======================================================== */ +task_status_immed tski_do_command0( ) +{ + u8 temp_command; + + // command0 {̓dȂ + DI_wt_chk(); + temp_command = vreg_ctr[VREG_C_COMMAND0]; + vreg_ctr[VREG_C_COMMAND0] = 0; + EI(); + + if( temp_command & REG_BIT_GOING_TO_SLEEP ) + { + going_to_sleep = true; + } + + if( ( temp_command & ( REG_BIT_OFF_REQ | REG_BIT_RESET1_REQ | REG_BIT_FCRAM_RESET_REQ | REG_BIT_RESET2_REQ )) != 0x00 ) + { + if( temp_command & REG_BIT_OFF_REQ ) + { + system_status.pwr_state = OFF_TRIG; + } + else + { + if( temp_command & REG_BIT_RESET1_REQ ) + { + PM_reset_ast( ); + RESET2_ast; + FCRAM_RST_ast; + } + if( temp_command & REG_BIT_RESET2_REQ ) + { + RESET2_ast; + if( vreg_twl[ REG_TWL_INT_ADRS_MODE ] == 0 ) + { + FCRAM_RST_ast; // twlntr[hœ삵Ă + } + // TWL[hDS[hւ̐؂ւɃZbg + // IRQǂ܂Ȃꍇ̂TWLWX^ + vreg_twl_init(); + } + if( temp_command & REG_BIT_FCRAM_RESET_REQ ) + { + FCRAM_RST_ast; + } + wait_ms( 5 ); // ԉ҂ + FCRAM_RST_neg; + PM_reset_neg(); + RESET2_neg; + + // CODEC s背WX^ // + codec_reg_init(); + } + } +/* + X[vvɓdOFFEZbgR}h͗܂ + if( vreg_ctr[VREG_C_COMMAND0] != 0 ) + { + return ( ERR_CONTINUE ); + } +*/ + return ( ERR_FINISED ); +} + + + +/* fobOEeXgp ============================== */ +u16 _dbg_rcomp; +extern u8 raw_adc_temperature; + +extern u8 iic_burst_state; +extern bit temp_zone_charge_disable; +extern bit bt_authorized; + + +/* ======================================================== +@fobOpɂ낢ǂł܂B +@Ԓl̓f[^̂ + oĂ鏇́A + 1) vbgtH[ + 2) PMIC o[W + 3) dr[J[ + 4) KXQ[Wo[W + 5) V + 6) ( rcomp & 0xFF ) + 7) raw_adc_temperature + 8) ( !temp_zone_charge_disable | ( bt_authorized << 1 ) ) + 9) m点LED̓tJ[H + 10) system_status.family + ======================================================== */ + +#define KOUMOKU 19 + +static u8 infos_bits[2]; +static u8 infos_temp[5]; + +static const u8 *infos_table[] = { + &infos_temp[0], /* 0 */ + &pmic_version, + (u8*)&battery_manufacturer, + &mgic_version[0], + &mgic_version[1], + &infos_temp[1], /* 5 */ + &raw_adc_temperature, + &infos_temp[2], + &infos_temp[3], + (u8*)&system_status.family, +// LED_pow_red, /* 10 */ + &infos_bits[0], + (u8*)&LED_duty_pow_blu, + (u8*)&LED_duty_3d, + (u8*)&LED_duty_notify_red, + (u8*)&LED_duty_notify_grn, + (u8*)&LED_duty_notify_blu, /* 15 */ + &infos_bits[1], +// &LED_CAM, + (u8*)&LED_duty_WiFi, + &infos_temp[4] /* 18 */ + /* ڑƂ KOUMOKU ɒ */ +}; + + u8 extinfo_read(void) +{ + u8 ret = 0xFF; + + /* + * temp͌vZKvȃf[^Bɗ]TȂ̂ŌvZKv + * ϐ́Av/svɊւ炸vZ|V[ + */ + + if( iic_burst_state < KOUMOKU ) + { + infos_temp[0] = system_status.captureBox? MODEL_CAPTURE_BOX + : ( system_status.is_dev? MODEL_ISBAKO: (u8)system_status.model ); + infos_temp[1] = (u8)( _dbg_rcomp & 0xFF ); + infos_temp[2] = ( !temp_zone_charge_disable | ( bt_authorized << 1 ) ); + infos_temp[3] = 1; /* dlύXɂ1ŒɂȂ */ + infos_temp[4] = 0 +// | ( PM_EXTDC_n ? REG_BIT_HAL0_PM_EXTDC_n : 0 ) // status0ɂ + | ( RBR_RESET_n ? REG_BIT_HAL0_PM_EXTDC_n : 0 ) // 󂫂g킹Ă炤 + | ( BT_IN_CHG_n ? REG_BIT_HAL0_BT_IN_CHG_n : 0 ) + | ( BT_CHG_Ena_n ? REG_BIT_HAL0_RSV_5 : 0 ) // 󂫃rbggp,out pin + | 0 // WL_TX gȂ +// | ( SHELL_OPEN ? REG_BIT_HAL0_SHELL_OPEN : 0 ) // status0ɂ + | ( RBR_FLIGHT ? REG_BIT_HAL0_SHELL_OPEN : 0 ) // 󂫂g킹Ă炤 + | ( SW_WIFI_n ? REG_BIT_HAL0_SW_WIFI_n : 0 ) + | ( SW_HOME_n ? REG_BIT_HAL0_SW_HOME_n : 0 ) + | ( SW_POW_n ? REG_BIT_HAL0_SW_POW_n : 0 ); + + infos_bits[0] = (u8)LED_pow_red; + infos_bits[1] = (u8)LED_CAM; + + ret = *infos_table[iic_burst_state]; + iic_burst_state ++; + } + + return ret; +} + + +#ifdef i2c_timeout_test +void i2c_mcu_error_monitor() +{ + LED_duty_pow_blu = 0xff; + LED_duty_3d = 0xff; + LED_duty_notify_red = 0xff; + LED_duty_notify_grn = 0xff; + LED_duty_notify_blu = 0xff; + LED_pow_red = 1; + LED_CAM = 1; +} +#endif + diff --git a/tags/2.03_SDK-3.1/task_status.c b/tags/2.03_SDK-3.1/task_status.c new file mode 100644 index 0000000..521b880 --- /dev/null +++ b/tags/2.03_SDK-3.1/task_status.c @@ -0,0 +1,79 @@ +#ifndef _WIN32 + +#pragma SFR +#pragma NOP +#pragma HALT +#pragma STOP + +#endif + +#include "incs_loader.h" +#include "renge\renge.h" +#include "hal.h" + +#include "pm.h" + +#include "accero.h" +#include "adc.h" +#include "i2c_mcu.h" +#include "led.h" + + +/* ======================================================== + Xe[^XWX^fE荞 + ======================================================== */ +void tsk_status( ) +{ + static u8 state_old; // Xe[^Xωo荞 ̈ + u8 diff; + + // WJ`FbN + set_bit( SHELL_OPEN, vreg_ctr[VREG_C_STATUS], REG_BIT_ST_SHELL_OPEN ); + + // Xe[^XWX^֌W 荞 // + // pm.c ŁȀōs܂B + // REG_BIT_LCD_ON/OFF + // REG_BIT_BL_ON/OFF + // REG_BIT_BT_DC_CONNECT/DISC + + diff = (u8)( vreg_ctr[VREG_C_STATUS] ^ state_old ); + if( diff != 0 ) + { + state_old = vreg_ctr[VREG_C_STATUS]; + + if( system_status.pwr_state == ON ) + { + if( diff & REG_BIT_BATT_CHARGE ) + { + // [dԔf + if( vreg_ctr[VREG_C_STATUS] & REG_BIT_BATT_CHARGE ) // set_irqʁXɌĂԕRpNg + { + set_irq( VREG_C_IRQ1, REG_BIT_BT_CHG_START ); + } + else + { + set_irq( VREG_C_IRQ1, REG_BIT_BT_CHG_STOP ); + } + } + } + + if(( system_status.pwr_state == ON ) || + ( system_status.pwr_state == SLEEP ) + ) + { + if( diff & REG_BIT_ST_SHELL_OPEN ) + { + // W̊J‚ + 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 ); + } + } + } + } +} + diff --git a/tags/2.03_SDK-3.1/task_sys.c b/tags/2.03_SDK-3.1/task_sys.c new file mode 100644 index 0000000..2931f7e --- /dev/null +++ b/tags/2.03_SDK-3.1/task_sys.c @@ -0,0 +1,654 @@ +#ifndef _WIN32 + +#pragma SFR +#pragma NOP +#pragma HALT +#pragma STOP + +#endif + +#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" +#include "self_flash.h" + + +//========================================================= +#define WAIT_SHIROBAKO_POW_CONTROL 240 + + +//========================================================= +extern void nop8(); + + +static void chk_emergencyExit(); +static void force_off_check(); +static void send_getup_to_soc(); +#ifdef _DBG_CHK_OFF_LEAK_ +static void leak_check(); +#endif + + + +//========================================================= +extern bit info_led_off; +extern bit going_to_sleep; +extern bit bt_authorized; + +static u8 timeout_sleep; +extern u8 chg_led_override; + +#ifdef i2c_timeout_test +extern bit i2c_mcu_time_out_error; +#endif + + +//========================================================= +#define PWSW_POWON_TIME (u8)( 20 / SYS_INTERVAL_TICK ) // [ms] // INTERVAL_TSK_SW ŊȂBl珬̂ +#define PWSW_ON_CHECK_TIMEOUT 100 // K donׂ̈ɓdXCb`삳ꂽƂA̎Ԍo߂mcuȓd͂ɖ߂ + +/* ======================================================== + }CRŕKvȂ +Eȓd͂ɓ + @system_status.pwr_state == OFF_TRIG ŁÃ^XNĂ΂ƁA + ȓd̓[hɓ܂ + ======================================================== */ +void tsk_sys( ) +{ + static u8 pwsw_timeout = 0; // d{^`^OB@^CAEg܂łɓdm肵Ȃoffɖ߂ + + hal_update(); + + switch ( system_status.pwr_state ) + { + case ON_CHECK: //------------------------------------------------------- + // dfJEg_E^C}NA + clear_pow_off_countdown(); + + // ̊荞݂HALT(X[v) ^@A_v^L + + // dXCb`HALT // + if( system_status.poweron_reason == RSN_PWSW ) + { + if( PM_EXTDC_n ) + { + // A_v^Ȃ + if( SW_pow_count != 0 ) + { + pwsw_timeout = 0; + } + else + { + pwsw_timeout ++; + } + + if( pwsw_timeout > PWSW_ON_CHECK_TIMEOUT ) + { + SW_pow_count = 0; + system_status.pwr_state = OFF_TRIG; // XCb`̓mCYBQB + renge_task_interval_run_force = true; + return; + } + } + else + { + BT_chk(); + } + + + if( SW_pow_count < PWSW_POWON_TIME ) + { + // ԂZēdonɓBĂȂ + return; + } + } + // else { if( system_status.poweron_reason == RSN_TRIALAc ) d } + + SW_pow_mask = true; // pwswςȂœd/ JԂȂ悤 + + // d // + iic_mcu_start( ); + + bt_force_update = false; + BT_chk(); // @obe̔AdrcIC̐ݒ + +#ifndef _ALLOW_NOBATT_ + if( system_status.model == MODEL_JIKKI_NOBATT ) + { + renge_task_interval_run_force = true; + system_status.pwr_state = OFF_TRIG; + return; + } +#endif + + // cʃ`FbN + BT_get_left(); // ɁABT_chk()sĂKv܂B + if( +// ( vreg_ctr[VREG_C_BT_REMAIN] < 1 ) // Ŕ肷ƓdrقƂǖƂ +// // A_v^ĂNłȂȂႤ + ( vreg_ctr[VREG_C_BT_VOLTAGE] < ( V_TH_ZERO / 256 ) ) // dr + ) + { + // drȂ̂ŋNȂ(d`FbNĂ) + renge_task_interval_run_force = true; + system_status.pwr_state = OFF_TRIG; + return; + } + + // |[g̕ݒ@dOɁB + PM_SW_WIFI_n = 1; + PM_SW_HOME_n_JIKKI = 1; + PM_WL_TX = 1; + PM_SW_SEL_n = 1; + PM_ACCEL_INT1 = 1; + PM_ACC_VALID = 1; + + if( PM_sys_pow_on( ) != ERR_SUCCESS ) // ZbgĂ܂ + { // dNsƒG[ + renge_task_interval_run_force = true; + system_status.pwr_state = OFF_TRIG; + return; + } + + // ܂ŗƁAdm // + // vAbvon + PU_BT_IN_CHG_n = 1; + PU7 = bits8(0,0,0,1, 1,1,0,1); // 4:SW_WIFI 3:SW_PWSW 2:PM_IRQ 0:PM_EXTDC_n + PU_SW_HOME_n_JIKKI = 1; // SW_HOME + + if( system_status.poweron_reason == RSN_PWSW || + system_status.poweron_reason == RSN_TRIAL ) + { + // d{^łon̎́ALED_ + vreg_ctr[VREG_C_LED_POW] = LED_POW_ILM_AUTO; + } + else + { + // Ƃ肠ALEDԂŋN + vreg_ctr[VREG_C_LED_POW] = LED_POW_ILM_OFF; + } + + system_status.pwr_state = ON_TRIG; + + PM_LCD_vcom_set( ); // LCD̑ΌdlȂǏ + + break; + + case ON_TRIG: //------------------------------------------------------- +#ifdef i2c_timeout_test + LED_duty_pow_blu = 0; // debug + LED_duty_3d = 0; + LED_duty_notify_red = 0; + LED_duty_notify_grn = 0; + LED_duty_notify_blu = 0; + LED_pow_red = 0; + LED_CAM = 0; + i2c_mcu_time_out_error = false; +#endif + IIC_ctr_Init( ); + IIC_twl_Init( ); + RTC_32k_on( ); + + vreg_twl_init( ); + vreg_ctr_reset( ); + + KRM = bits8(0,0,0,0, 0,0,0,0); + PIF0 = 0; + + system_status.poweron_reason = NONE; + renge_task_interval_run_force = true; + + MK0 = INT_MSK0_RSV; + MK1 = INT_MSK1_RSV; + + iic_mcu_start(); + +// MK2 = ~( INT_MSK2_IIC_TWL | INT_MSK2_WIFI_TX_BSR | INT_MSK2_CODEC_PMIRQ ); +// PMK21 = 0; // wifi gȂ + PMK6 = 0; // pm_irq + + // todo Iɂ͊SɃWX^ + RBR_RESET_n = 1; + RBR_FLIGHT = 0; + + // u[gAXe[^XƂȂXV + if( system_status.reboot ) + { + u8 bl_status_temp; + + bl_status_temp = read_pmic( PM_REG_ADRS_BL ); + vreg_ctr[ VREG_C_STATUS ] |= (( bl_status_temp & 0x03 ) << 5 ); + set_bit( ( read_pmic( PM_REG_ADRS_VDD_LCD ) != 0 ), + vreg_ctr[ VREG_C_STATUS ], REG_BIT_LCD_POW ); + BT_chk(); + } + + LED_init( ); // reboot́BT_Chk,BT_chkɍs + + system_status.reboot = 0; + system_status.pwr_state = ON; + + // WDTZbgAI2C̏܂Ŋ荞ݕۗ + // قƂ͂ɂׂȂ... + if( ( vreg_ctr[ VREG_C_MCU_STATUS ] & REG_BIT_STATUS_WDT_RESET ) != 0 ) + { + set_irq( VREG_C_IRQ0, REG_BIT_IRQ_WDT_RESET ); + } + + break; + + case ON: //--------------------------------------------- + // PMICɂ鋭df`FbN + // fobKreset1AT[g邱ƂB̂Ƃ͑SZbg + chk_emergencyExit(); + + // SLPĎ + if( going_to_sleep ) // ΂ SLP_REQ ̑Oɗ\ + { + timeout_sleep ++; + if( timeout_sleep == 0 || // I[o[t[ҁBsleepČLjuŋNċC‚Ȃ + ( PIF0 && !SLP_REQ )) // slp荞݂CANĂ܂ + { + PIF0 = 0; + send_getup_to_soc(); + } + if( PIF0 && SLP_REQ ){ + PIF0 = 0; + PM_VDD_ecoMode(); + system_status.pwr_state = SLEEP; + renge_task_interval_run_force = true; + } + } + + // offJEg + force_off_check(); + +#ifndef _TAIKENDAI_SEISAN_SPECIAL_ + if( system_status.taikendai ) // A_v^玩œdoff + { + if( PM_EXTDC_n ) + { + system_status.pwr_state = OFF_TRIG; + } + } +#endif + + break; + + case SLEEP: //------------------------------------------ + chk_emergencyExit(); + // X[v畜A + if( !SLP_REQ ){ + PM_VDD_normMode(); + wait_ms( 5 ); // tdly_sw + send_getup_to_soc(); + system_status.pwr_state = ON; + } + + force_off_check(); +// leak_check(); + +#ifndef _TAIKENDAI_SEISAN_SPECIAL_ + if( system_status.taikendai ) // A_v^玩œdoff + { + if( PM_EXTDC_n ) + { + system_status.pwr_state = OFF_TRIG; + } + } + break; // ł悢B +#else + /* FALLTHROUGH */ +#endif + + default: //--------------------------------------- + system_status.pwr_state = OFF_TRIG; // 蓾ȂXe[gBfobOp +// dbg_nop(); + /* FALLTHROUGH */ + + case OFF_TRIG: //--------------------------------------- + // LED҂ + vreg_ctr[ VREG_C_LED_POW ] = LED_POW_ILM_OFF; + vreg_ctr[ VREG_C_LED_WIFI ] = WIFI_LED_OFF; + vreg_ctr[ VREG_C_LED_3D ] = LED_3D_ILM_OFF; + info_led_off = true; + if( LED_duty_pow_blu != 0 ) + { + return; + } + + // dfJEg_E^C}NA + clear_pow_off_countdown(); + + // xZT~ + vreg_ctr[ VREG_C_ACC_CONFIG ] = 0x00; + tski_acc_setup(); + EI(); // DIԂłė̂ŁAI2C_mcu ̂ɕKv + + // ̑ytF~ + LED_stop( ); + IIC_ctr_Stop( ); + IIC_twl_Stop( ); + RTC_32k_off(); + + // todo }Nɂł + RBR_RESET_n = 0; + RBR_FLIGHT = 0; + +// dI̊荞݃Zbg +// PWSW KR3 L +// BG24 KR4 +// ӂJ INTP5 ‚L +// ACA_v^ INTP4 A_v^L +// RTC + while( iic_mcu_busy ) + {;} + + // irq}XNݒ + KRM = ( KR_SW_POW ); // Mask ł͂ȂAModeȂ̂B킵 + MK0 = ~( INT_MSK0_EXTDC ); + MK1 = ~( INT_MSK1_KR | INT_MSK1_RTCINTVAL ); // INT_MSK1_RTCALARM | RTCA[ + MK2L = 0xFF; + + // irqtONA + vreg_ctr[VREG_C_IRQ0] = 0; + vreg_ctr[VREG_C_IRQ1] = 0; + vreg_ctr[VREG_C_IRQ2] = 0; + vreg_ctr[VREG_C_IRQ3] = 0; + + // PU5 ̂܂ + PU7 = bits8(0,0,0,0, 1,0,0,1); // PWSWI,PM_EXTTDC,( IRQ0_deactive(), PM_IRQ_deactive ) + PU_SW_HOME_n_JIKKI = 0; // SW_HOME ~ + + IF0 = 0; + IF1 = 0; + IF2 = 0; + + IRQ0_disable; + + PM_sys_pow_off( ); // dJbgIt + + // |[gނ~[hɁBHłALo͂ɂȂႾ߂ȁB + SW_WIFI_n_RAW = 0; + PM_SW_WIFI_n = 0; + + SW_HOME_n_JIKKI_RAW = 0; + PM_SW_HOME_n_JIKKI = 0; + + WL_TX = 0; + PM_WL_TX = 0; + + SW_SEL_n = 0; + PM_SW_SEL_n = 0; + + ACCEL_INT1 = 0; + PM_ACCEL_INT1 = 0; + ACC_VALID = 0; + PM_ACC_VALID = 0; + + system_status.pwr_state = OFF; + SW_pow_mask = true; + SW_pow_count = 0; + + // HALfobOZbg@YƓdonoȂȂ邱Ƃc + hal_reset(); + /* FALLTHROUGH */ + + case OFF: + // Fł͓d{^d͂܂B + + system_status.poweron_reason = NONE; + pwsw_timeout = 0; + + if( !PM_EXTDC_n + || chg_led_override != 0 ) // ꂪ[ɂȂ܂ő҂ + { + // A_v^L /////////////////////////////// ܂́AA_v^ĂRb͏[dLED_Ă + + // d{^`FbN + system_status.poweron_reason = RSN_PWSW; + system_status.pwr_state = ON_CHECK; + + // VȂ玩œdē + if( system_status.taikendai ) + { + vreg_ctr[ VREG_C_HAL_OVW_CONT0 ] = vreg_ctr[ VREG_C_HAL_OVW_CONT1 ] = 0; + wait_ms(46); // pmic̓dēdl̂ + system_status.poweron_reason = RSN_TRIAL; + system_status.pwr_state = ON_CHECK; + } + } + else + { + // A_v^Ȃ /////////////////////////////// + + // ȓd͂ֈڍs + iic_mcu_stop( ); + pm_chk_adapter(); + PM_Chg_Stop(); + + bt_force_update = true; + + while( RWST ) + {;} + + // 荞ݑ҂ŐQ // + RTCIMK = 1; // systickpC^[o^C}[荞݃}XN + +#ifdef _DBG_CHK_OFF_LEAK_ + leak_check(); +#endif + CKC = bits8(0,0,0,0, 1,0,0,1); // 4MHzɗƂĂSTOPȂĂ͂ȂȂ + OSMC = bits8(0,0,0,0, 0,0,0,0); // 5MHzȉ[hցB + + if( PM_EXTDC_n_RAW ) // ǂ^C~Oő}N邱ƂBHALʂȂׂioffłj + { + STOP(); + } + + // N // + // N + // EKeyReturn荞݁id{^j + // ERTCA[iݕj + + // NbNA + OSMC = bits8(1,0,0,0, 0,0,0,0); // 8MHz쏀 + + renge_flg_interval = 0; + hal_update(); + + CKC = bits8(0,0,0,0, 1,0,0,0); // FSEL = 1 3clkȏJ + + // NŔH + if( !PM_EXTDC_n ){ + system_status.pwr_state = OFF; // ĂāAON_CHECKɍs + } +/* // RTCA[B + else if( vreg_ctr[ VREG_C_IRQ1 ] & REG_BIT_RTC_ALARM ) + { + system_status.poweron_reason = RSN_RTC_ALARM; + system_status.pwr_state = ON_CHECK; + } + // else if( ̊荞݂œdon ){ + // 󑼂̗vł͋NȂ + // } +*/ + else // if( !SW_POW_n ) // iȊOȂjd{^ŋN + { + SW_pow_mask = false; + system_status.poweron_reason = RSN_PWSW; + system_status.pwr_state = ON_CHECK; + } + + RTCIMK = 0; // sys tick ^C}[L + + if( system_status.taikendai ) + { + system_status.pwr_state = OFF_TRIG; + } + + } + } +} + + + +/*******************************************************//** + PMICdُŎ~߂mF + **********************************************************/ +static void chk_emergencyExit(){ + static u8 shirobako_power_control_count; + + if( shirobako_power_control_count == 0 ) + { + if( !RESET1_n ) // PM_chk_LDSW() I2C_mgpARXg + { + if( !PM_chk_LDSW() ) + { + // ZbgĂ + /// PMICُIf + system_status.pwr_state = OFF_TRIG; + renge_task_interval_run_force = true; + } + else + { + // ̎d + shirobako_power_control_count = 1; + } + } + } + else + { + if( shirobako_power_control_count == WAIT_SHIROBAKO_POW_CONTROL ) // }WbNio[ + // fobKBreset1܂ł͖ + { + if( RESET1_n ) // ZbglQ[g҂ + { + shirobako_power_control_count = 0; + } + else + { + // nothing to do + } + } + else if( shirobako_power_control_count == 200 ) // * (sys_tick)[ms] + // fobK炵 + { +#ifndef _RVD_ + // ͓d؂肽炵 + system_status.pwr_state = OFF_TRIG; + renge_task_interval_run_force = true; + shirobako_power_control_count = WAIT_SHIROBAKO_POW_CONTROL; +#endif + } + else + { + if( !RESET1_n ) + { + if( shirobako_power_control_count != 255 ) + shirobako_power_control_count ++; + } + else + { + // (TS{[hŎ蓮/fobK)Zbg炵 + send_cmd_pmic( PM_REG_ADRS_BL, 0 ); + vreg_ctr[VREG_C_STATUS] = ( vreg_ctr[VREG_C_STATUS] & bits8(1,0,0,1, 1,1,1,1) ); + vreg_ctr[VREG_C_COMMAND0] |= REG_BIT_RESET1_REQ; + renge_task_immed_add( tski_do_command0 ); + shirobako_power_control_count = WAIT_SHIROBAKO_POW_CONTROL; + } + } + } +} + + + +/* ======================================================== + Ed{^ + Edr؂ + Edr + ł̋OFFBƉs\ + ======================================================== */ +static void force_off_check() +{ + if( force_off ) + { + system_status.pwr_state = OFF_TRIG; + renge_task_interval_run_force = true; + } +} + + + +/* ======================================================== + SoCN +@@dʏɖ߂ĂĂʼnB + ======================================================== */ +void send_getup_to_soc() +{ + going_to_sleep = false; + timeout_sleep = 0; +#ifdef _MODEL_CTR_ + SLP_ACK = 1; + nop8(); + SLP_ACK = 0; +#endif +} + + + + +/* ======================================================== + firm_update() task_status_immed^ Ԃ悤ɂ΂̂ł... + ======================================================== */ +task_status_immed tski_firm_update(){ + firm_update(); + return( ERR_SUCCESS ); +} + + + +#ifdef _DBG_CHK_OFF_LEAK_ +/* ======================================================== + pinݒ~X`FbN + ======================================================== */ +static void leak_check() +{ + volatile u8 ports_i[12]; + volatile u8 ports_o[12]; + + ports_i[0] = ( PM0 & PU0 & ~P0 ); // vAbv؂YH + ports_i[1] = ( PM1 & PU1 & ~P1 ); + ports_i[2] = 0; + ports_i[3] = ( PM3 & PU3 & ~P3 ); + ports_i[4] = ( PM4 & PU4 & ~P4 ); + ports_i[5] = ( PM5 & PU5 & ~P5 ); + ports_i[6] = 0; + ports_i[7] = ( PM7 & PU7 & ~P7 ); + ports_i[8] = ( PM12 & PU12 & ~P12 ); + ports_i[9] = ( PM14 & PU14 & ~P14 ); + ports_i[10] = 0; + ports_i[11] = ( PM20 & PU20 & ~P20 ); + + ports_o[0] = ( ~PM0 & P0 ); // H o͂Ă邩 + ports_o[1] = ( ~PM1 & P1 ); + ports_o[2] = ( ~PM2 & P2 ); + ports_o[3] = ( ~PM3 & P3 & ~POM3 ); + ports_o[4] = ( ~PM4 & P4 ); // bit3chg_enȂ̂1ł悢 + ports_o[5] = ( ~PM5 & P5 ); + ports_o[6] = ( ~PM6 & P6 ); + ports_o[7] = ( ~PM7 & P7 ); + ports_o[8] = ( ~PM12 & P12 ); + ports_o[9] = ( ~PM14 & P14 ); + ports_o[10] = ( ~PM15 & P15 ); + ports_o[11] = ( ~PM20 & P20 ); + NOP(); // u[Nu +} +#endif _DBG_CHK_OFF_LEAK_ diff --git a/tags/2.03_SDK-3.1/user_define.h b/tags/2.03_SDK-3.1/user_define.h new file mode 100644 index 0000000..1d0773a --- /dev/null +++ b/tags/2.03_SDK-3.1/user_define.h @@ -0,0 +1,209 @@ +#ifndef _USER_DEF_ +#define _USER_DEF_ + + +#define IIC_T_SLAVEADDRESS 0x4A +#define IIC_C_SLAVEADDRESS 0x4A +#define IIC_C_SLAVEADDRESS_DMY 0x4C + +//#define IIC_SLA_DCP 0x50 + +#define bits8(a,b,c,d,e,f,g,h) ( a<<7 | b<<6 | c<<5 | d<<4 | e<<3 | f<<2 | g<<1 | h ) + +#ifndef _WIN32 +// @‹ + +#ifdef _debug_led_ +/*spflΉȍ~AncłȂȂ̂Ŏg܂ +# define DBG_LED_on { PM2.1 = 0; P2.1 = 1; } +# define DBG_LED_off { P2.1 = 0; } +# define DBG_LED_toggle ( P2.1 ^= 1 ) +# define DBG_LED2_on { PM2.2 = 0; P2.2 = 1; } +# define DBG_LED2_off { P2.2 = 0; } +# define DBG_LED2_toggle ( P2.2 ^= 1 ) +*/ +#else +# define DBG_LED_on ; +# define DBG_LED_off ; +# define DBG_LED_toggle ; +# define DBG_LED2_on ; +# define DBG_LED2_off ; +# define DBG_LED2_toggle ; +#endif // _debug_led_ + +#define IIC_SLA_CODEC 0xA4 +#define IIC_SLA_ACCEL 0x30 // ST LIS331DLH + + +#define SLP_ACK P7.7 + + +// PMx0ŏo̓[h + +// SoC +#define IRQ0_ast { P7.6 = 0; PM7.6 = 0; } +#define IRQ0_neg { P7.6 = 1; } +#define IRQ0_enable { PM7.6 = 0; } +#define IRQ0_disable { PM7.6 = 1; } +#define IRQ0 ( P7.6 ) + + +// h~ +#define RESET1_n ( P0.0 ) + +#if 0 // PM_RESET1`g +# 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; } + +#define SLP_REQ P12.0 + +// CTR,SPFL,܂ʔh@ +#define DEV_DET ( P12 & 0b00000110 ) +#define DEV_CTR ( 0b00 << 1 ) +#define DEV_SPFL ( 0b01 << 1 ) +#define DEV_SHRIMP ( 0b10 << 1 ) +#define DEV_RSV2 ( 0b11 << 1 ) + +// FCRAM +#define FCRAM_RST P3.0 +#define FCRAM_RST_ast { P3.0 = 0; } +#define FCRAM_RST_neg { P3.0 = 1; } + +// CODEC +#define PM_IRQ_n P7.2 +// INTP6 + +// PM +#define PM_EXTDC_n_RAW 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 + + +// SPFL̃At@XLCDŕKvȁ}15V̓dB +#define SPFL_LCD_AMOL_HV_CONT P20.2 + + +// [d(out) +// _łBӁB +#define BT_CHG_ENABLE() ( P4.3 = 0 ) +#define BT_CHG_DISABLE() ( P4.3 = 1 ) +#define BT_CHG_Ena_n ( P4.3 ) + +// [d(in) +#define BT_IN_CHG_n_RAW P5.1 +#define PM_BT_IN_CHG_n PM5.1 +#define PU_BT_IN_CHG_n PU5.1 + +#define SW_WIFI_n_RAW P7.4 +#define PM_SW_WIFI_n PM7.4 +// KR4 +#define SW_POW_n_RAW P7.3 +// KR3 +#define SW_SEL_n P2.3 +#define PM_SW_SEL_n PM2.3 +//#define VOL P2.7 +// ANI7 + +#define SW_HOME_n_JIKKI_RAW P20.4 +#define PM_SW_HOME_n_JIKKI PM20.4 +#define PU_SW_HOME_n_JIKKI PU20.4 + +// INTP22 +#define SW_HOME_n_TSBOARD_RAW P2.0 // TS}U[pull up(P2͓p.u.) +#define PM_SW_HOME_n_TSBOARD PM2.0 + +// WiFi +#define WL_TX P20.3 // INTP21 +#define PM_WL_TX PM20.3 // INTP21 + +// RBR +#define RBR_RESET_n P2.1 +#define RBR_FLIGHT P2.2 + +//#define LED_CAM P1.0 // TO02 +//#define LED_WIFI P1.1 // TO03 +//#define LED_NOTIFY P1.3 // TO05 +//#define LED_3D P5.2 // SLTO TO01 +//#define LED_POW2 P1.4 // TO06 ( ) +//#define LED_POW1 P1.5 // TO07 ( ) +//#define LED_CHARGE P2.4 + +// P5.3 ɉAP5.5, P140 P141 +// P140o͐pȂ̂... +#define I2C_PU_on() { P14 |= 0x03; PM5.3 = 0; PM3.3 = 0; } +#define I2C_PU_off() { PM5.3 = 1; PM3.3 = 1; P14 &= ~0x03; } + +#define GYRO_ENABLE() P5.0 = 0 +#define GYRO_DISABLE() P5.0 = 1 + +//#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 + +// @AJ@AV䔻ʁB +#define DIPSW ( P4 & 0b00000011 ) // mini cube & \tgEFAfBbvXCb` TOOL0,1B P4.0 L ӁI +#define DIPSW_CTR 0b11 // gp +#define DIPSW_ISDEV 0b00 // KuCBattGaugeŔ +#define DIPSW_TAIKENDAI 0b10 +#define DIPSW_TAIKENDAI_NBD 0b01 + + +#define SHELL_OPEN_RAW P7.1 // INTP5 ӂJ (‚L) + +#define ACC_VALID P20.5 +#define PM_ACC_VALID PM20.5 +#define ACCEL_INT1 P2.5 +#define PM_ACCEL_INT1 PM2.5 + + +#endif // _WIN32 + +// win32 sim‹Ƌ + +#define KR_SW_POW ( 1 << 3 ) +#define KR_SW_WIFI ( 1 << 4 ) + +/////////////////////////////////////////////////////////// + +#define INT_MSK0_IIC_M_DMA 1<<12 +#define INT_MSK0_SHELL 1<<7 +#define INT_MSK0_EXTDC 1<<6 +//#define INT_MSK0_SLP 1<<2 +#define INT_MSK0_RSV ~( INT_MSK0_IIC_M_DMA | INT_MSK0_SHELL | INT_MSK0_EXTDC ) + +#define INT_MSK1_KR 1<<11 +#define INT_MSK1_RTCINTVAL 1<<10 +#define INT_MSK1_RTCALARM 1<<9 +#define INT_MSK1_ADC 1<<8 +#define INT_MSK1_IIC_CTR 1<<3 +#define INT_MSK1_IIC_MCU 1<<0 +#define INT_MSK1_RSV ~( INT_MSK1_KR | INT_MSK1_RTCINTVAL | INT_MSK1_RTCALARM | INT_MSK1_ADC \ + | INT_MSK1_IIC_CTR | INT_MSK1_IIC_MCU ) + +#define INT_MSK2_WIFI_TX_KE3 1<<4 +#define INT_MSK2L_RSV ~( INT_MSK2_WIFI_TX_KE3 ) + +#define INT_MSK2_IIC_TWL 1<<8 +#define INT_MSK2_WIFI_TX_BSR 1<<10 +#define INT_MSK2_CODEC_PMIRQ 1<<3 +#define INT_MSK2_RSV ~( INT_MSK2_IIC_TWL | INT_MSK2_WIFI_TX_BSR | INT_MSK2_CODEC_PMIRQ ) + +#endif // dupe include guard diff --git a/tags/2.03_SDK-3.1/voltable.c b/tags/2.03_SDK-3.1/voltable.c new file mode 100644 index 0000000..2aedcf0 --- /dev/null +++ b/tags/2.03_SDK-3.1/voltable.c @@ -0,0 +1,48 @@ +#include "incs.h" + +#define _10db_ + +#ifdef _10db_ +// max -10db +const u8 slider_to_codec[64] = +{ + 127, 126, 125, 124, 122, 121, 120, 119, + 118, 117, 116, 114, 113, 112, 111, 110, + 109, 108, 106, 105, 104, 103, 102, 101, + 100, 98, 97, 96, 95, 94, 93, 92, + 90, 89, 88, 87, 86, 85, 83, 82, + 81, 80, 79, 78, 77, 75, 74, 73, + 73, 72, 71, 70, 69, 67, 66, 65, + 64, 63, 62, 61, 59, 58, 57, 56 + }; +#endif + +#ifdef _15db_ +// max -15db +const u8 slider_to_codec[64] = +{ + 127, 127, 127, 127, 127, 126, 125, 123, + 122, 121, 120, 119, 118, 117, 116, 115, + 114, 113, 112, 110, 109, 108, 107, 106, + 105, 104, 103, 102, 101, 100, 99, 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, + 71, 70, 69, 68, 67, 66, 66, 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 diff --git a/tags/2.03_SDK-3.1/voltable.h b/tags/2.03_SDK-3.1/voltable.h new file mode 100644 index 0000000..6ff34ab --- /dev/null +++ b/tags/2.03_SDK-3.1/voltable.h @@ -0,0 +1,57 @@ +#ifdef _10db_ +// max -10db +/* +const u8 slider_to_codec[64] = +{ + 127, 127, 127, 127, 126, 125, 123, 122, + 121, 120, 118, 117, 116, 115, 113, 112, + 111, 110, 108, 107, 106, 105, 103, 102, + 101, 100, 98, 97, 96, 95, 93, 92, + 91, 90, 88, 87, 86, 85, 83, 82, + 81, 80, 78, 77, 76, 75, 73, 72, + 72, 71, 70, 68, 67, 66, 64, 63, + 62, 61, 59, 58, 57, 56, 55, 55 + }; +*/ +const u8 slider_to_codec[64] = +{ + 127, 126, 125, 124, 122, 121, 120, 119, + 118, 117, 116, 114, 113, 112, 111, 110, + 109, 108, 106, 105, 104, 103, 102, 101, + 100, 98, 97, 96, 95, 94, 93, 92, + 90, 89, 88, 87, 86, 85, 83, 82, + 81, 80, 79, 78, 77, 75, 74, 73, + 73, 72, 71, 70, 69, 67, 66, 65, + 64, 63, 62, 61, 59, 58, 57, 56 + }; +#endif + +#ifdef _15db_ +// max -15db +const u8 slider_to_codec[64] = +{ + 127, 127, 127, 127, 127, 126, 125, 123, + 122, 121, 120, 119, 118, 117, 116, 115, + 114, 113, 112, 110, 109, 108, 107, 106, + 105, 104, 103, 102, 101, 100, 99, 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, + 71, 70, 69, 68, 67, 66, 66, 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 diff --git a/tags/2.03_SDK-3.1/vreg_ctr.c b/tags/2.03_SDK-3.1/vreg_ctr.c new file mode 100644 index 0000000..11d7713 --- /dev/null +++ b/tags/2.03_SDK-3.1/vreg_ctr.c @@ -0,0 +1,591 @@ +/* ======================================================== + +CTR MCU I2CWX^ + + ====================================================== */ +#include "incs.h" +#include "vreg_ctr.h" +#include "rtc.h" +#include "led.h" +#include "accero.h" +#include "pm.h" +#include "pool.h" + +#include + +#include "fsl_user.h" + + +extern u8 extinfo_read(); // task_misc.c + +extern u8 iic_burst_state; // o[XgANZX鎞̃JE^ +extern bit info_led_pattern_updated; // m点LED̃p^[擪ɖ߂ + +extern bit pedolog_overflow; +extern bit reserve_pedo_increnent; + + + +// ******************************************************** +u8 vreg_ctr[VREG_C_ENDMARK_]; + +static u8 vreg_free_adrs; // AhXł̂ł΂炭͂ +bit irq_readed; // AAA^̂߁B + + + +// ******************************************************** +extern task_status_immed tski_firm_update(); +extern task_status_immed tski_mcu_reset(); +extern unsigned char get_ei(); +extern void DI_wt_chk(); + + + +// ******************************************************** +#ifdef _MCU_BSR_ +#define IICAMK IICAMK1 +#endif + + +// ******************************************************** +// [̏l̎w肪KvȃAhX +// }CRZbgɌĂ΂܂ +void vreg_ctr_init( ) +{ + vreg_ctr[ VREG_C_VCOM_T ] = VCOM_DEFAULT_T; + vreg_ctr[ VREG_C_VCOM_B ] = VCOM_DEFAULT_B; + + vreg_ctr[ VREG_C_OFF_DELAY ] = FORCEOFF_THREASHOLD; + + vreg_ctr[ VREG_C_VOL_CAL_MIN ] = 0x36; + vreg_ctr[ VREG_C_VOL_CAL_MAX ] = 0xFF - 0x36; + + vreg_ctr[ VREG_C_RBR_CONTROL ] = REG_BIT_RESET_n; // todo | REG_BIT_FLIGHT; +} + + +// ******************************************************** +// {̂̓dɃZbg܂ +void vreg_ctr_reset( ) +{ + vreg_ctr[ VREG_C_MCU_VER_MAJOR ] = MCU_VER_MAJOR | 0x10; + vreg_ctr[ VREG_C_MCU_VER_MINOR ] = MCU_VER_MINOR; + + vreg_ctr[ VREG_C_LED_BRIGHT ] = 0xFF; + vreg_ctr[ VREG_C_LED_POW ] = 0; + vreg_ctr[ VREG_C_LED_WIFI ] = 0; + vreg_ctr[ VREG_C_LED_CAM ] = 0; + vreg_ctr[ VREG_C_LED_3D ] = 0; +// vreg_ctr[ VREG_C_VOL_CAL_MIN ] = 0x36; ŏ_I +// vreg_ctr[ VREG_C_VOL_CAL_MAX ] = 0xFF - 0x36; d邽тɃftHglɂȂĂ܂ + { + u8 i; + for( i = 0; i < sizeof( uni_info_LED ); i++ ) + { + info_LED.bindata[ i ] = 0; + } + } +} + + + +// ******************************************************** +// I2CzWX^ɏ܂B +//@ adrs ͓AhX +// @ȂAhXɃANZXꍇA܂B +// 񂾌ʁAI2C_mcuʐMꍇArenge_task_immed_add() +// gpȂƁAI2C_mcugpŃG[IꍇɃgC܂B +void vreg_ctr_write( u8 adrs, u8 data ) +{ + switch ( adrs ) + { + + case ( VREG_C_MCU_STATUS ): +// vreg_twl[ REG_TWL_INT_ADRS_MODE ] = (u8)( ( data >> 6 ) & 0x03 ); Rł悢B̑胊ZbgŃNA + vreg_ctr[ VREG_C_MCU_STATUS ] &= data; // bitNA͂邪Zbg͂ȂB + // ̕twlWX^~[͓ǂݏoꎞɍ + 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_DBG03 ): + if( ( vreg_ctr[VREG_C_DBG01] == 'j' ) + && ( vreg_ctr[VREG_C_DBG02] == 'h' ) + && ( data == 'l' ) ) + { + renge_task_immed_add( tski_firm_update ); + IICAMK = 1; + } + vreg_ctr[ VREG_C_DBG03 ] = data; + break; + + case ( VREG_C_COMMAND0 ): + if( data != 0 ) + { + renge_task_immed_add( tski_do_command0 ); + vreg_ctr[ VREG_C_COMMAND0 ] |= data; + } + break; + + case ( VREG_C_COMMAND2 ): + // 炩̊荞݂҂ĂȂłB #--) ̂߂̊荞݂ + // td + 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 ); + } + + // obNCgݒ + /// ̂Ƃ낳ɍׂ͕Ȃǁc + if(( data & REG_BITS_CMD_BL ) != 0 ) + { + renge_task_immed_add( tski_PM_BL_set ); + vreg_ctr[adrs] = (u8)( data & REG_BITS_CMD_BL ); + } + break; + + case ( VREG_C_COMMAND1 ): + if( data != 0 ) + { + // u8 temp; ԕϐg΂łȂ... + // TWLɊ荞݂ + /// ۂɊ荞݂̂SoC + /// rbg̕тႤʓ| + 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 + + if(( data & REG_BIT_SEND_TWL_VOL_CLICK ) != 0 ) + { + vreg_twl[ REG_TWL_INT_ADRS_IRQ ] |= REG_BIT_TWL_IRQ_VOL_CHANGE; //vol_changed + } + } + break; + + case ( VREG_C_LED_POW ): + if( iic_burst_state == 0 ) + { + vreg_ctr[ VREG_C_LED_POW ] = data; + iic_burst_state ++; + } + else if( iic_burst_state < 5 ) + { + led_red_batt_empty.dats[ iic_burst_state -1 ] = data; + iic_burst_state ++; + } + break; + + case ( VREG_C_LED_WIFI ): + case ( VREG_C_LED_CAM ): + case ( VREG_C_LED_3D ): + vreg_ctr[adrs] = (u8)( data & 0x0F ); + break; + + case ( VREG_C_LED_NOTIFY_DATA ): + if( iic_burst_state < sizeof( uni_info_LED ) ) + { + if(( iic_burst_state == 1 ) && ( data == 0 )) // fade_time == 0 ֎~ + { + data = 1; + } + info_LED.bindata[ iic_burst_state ] = data; + iic_burst_state ++; + if( iic_burst_state > 4 ) // p^[1ł + { + info_led_pattern_updated = true; + } + } + break; + + /// 񓯊œĂ邽߂ł͏ȂB + // \񂷂邾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_DAY ): + 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_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 ): + WDT_Restart(); + while(1) + { + RWAIT = 1; + while( !RWST ){} + if( SEC != 0 ) + { + break; + } + RWAIT = 0; + } + SUBCUD = data; + RWAIT = 0; + vreg_ctr[ VREG_C_RTC_COMP ] = data; + break; + + case ( VREG_C_RTC_ALARM_MIN ): + rtc_alarm_dirty = true; + vreg_ctr[ VREG_C_RTC_ALARM_MIN ] = (u8)( data & 0x7F ); + break; + + case ( VREG_C_RTC_ALARM_HOUR ): + rtc_alarm_dirty = true; + vreg_ctr[ VREG_C_RTC_ALARM_HOUR ] = (u8)( data & 0x3F ); + break; + + // ł悢 + case ( VREG_C_RTC_ALARM_DAY ): + vreg_ctr[ VREG_C_RTC_ALARM_DAY ] = (u8)( data & 0x3F ); + break; + + case ( VREG_C_RTC_ALARM_MONTH ): + vreg_ctr[ VREG_C_RTC_ALARM_MONTH ] = (u8)( data & 0x1F ); + break; + + case ( VREG_C_ACC_CONFIG ): + renge_task_immed_add( tski_acc_setup ); + vreg_ctr[ VREG_C_ACC_CONFIG ] = data; + break; + + case ( VREG_C_ACC_R_ADRS ): + renge_task_immed_add( tski_acc_read ); + vreg_ctr[ VREG_C_ACC_R_ADRS ] = data; + break; + + case ( VREG_C_ACC_W_BUF ): + renge_task_immed_add( tski_acc_write ); + vreg_ctr[ VREG_C_ACC_W_BUF ] = data; + break; + + case ( VREG_C_ACC_HOSU_SETTING ): + if( ( data & 0x01 ) != 0 ) + { + clear_hosu_hist(); // NA + } + break; + + case ( VREG_CX_FREE_DATA ): + if( vreg_free_adrs < VREG_C_FREE_SIZE ) + { + pool.vreg_c_ext.vreg_c_free[ vreg_free_adrs ] = data; + vreg_free_adrs ++; + } + break; + + case ( VREG_CX_FREE_ADRS ): + vreg_free_adrs = data; + break; + + case ( VREG_C_RBR_CONTROL ): + if(( data & REG_BIT_RESET_n ) != 0 ) + { + RBR_RESET_n = 1; + } + else + { + RBR_RESET_n = 0; + } + if(( data & REG_BIT_FLIGHT ) != 0 ) + { + RBR_FLIGHT = 1; + } + else + { + RBR_FLIGHT = 0; + } + vreg_ctr[ VREG_C_RBR_CONTROL ] = data; + break; + + case ( VREG_C_COMMAND3 ): + switch ( data ) + { +#ifdef _ENABLE_COMMAND3_ + case ( 'r' ): + // 荞݃[`FSLCuĂԂ̂͋֎~ + // }CRċNB@WX^ނB + renge_task_immed_add( tski_mcu_reset ); + break; + + case ( 'w' ): + // WDTōċNieXgj +// mcu_wdt_reset; // ̃R}hgӖȂłI + while(1) + { + dbg_NOP(); + } + break; +#endif //_ENABLE_COMMAND3_ + +#ifdef _ENABLE_HAL_ + case( 'p' ): + reserve_pedo_increnent = 1; + // ő₷ɂ̓X^bNȂBŗ\̂݁Atask_miscŏ +// hosu_increment_if_necessary(); // A + break; +#endif //_ENABLE_HAL_ + + } +// vreg_ctr[ VREG_C_COMMAND3 ] = data; // KvȂ + break; + + // read only ////////////////////////////////////////// + case VREG_C_MCU_VER_MAJOR: + case VREG_C_MCU_VER_MINOR: + case VREG_C_3D: // ɃtbV + case VREG_C_SND_VOL: // ɃtbV + case VREG_C_BT_TEMP: // ɃtbV + case VREG_C_BT_REMAIN: // ɃtbV + case VREG_C_BT_REMAIN_FINE: // ɃtbV + case VREG_C_BT_VOLTAGE: // ɃtbV + case VREG_C_STATUS_1: // KɃtbV + case VREG_C_STATUS: // KɃtbV + case VREG_C_IRQ0: // ̂‚łɊ荞݋NĂقȂ... + case VREG_C_IRQ1: + case VREG_C_IRQ2: + case VREG_C_IRQ3: + case VREG_C_IRQ4: + case VREG_C_LED_NOTIFY_FLAG: // tbV + case VREG_C_RTC_SEC_FINE_L: // tbV + case VREG_C_RTC_SEC_FINE_H: // tbV + // VREG_C_ACC_RESERVE, // NȂ + // VREG_C_ACC_HOSU_HIST = 0x4F, + case VREG_C_ACC_XH: // tbV + case VREG_C_ACC_XL: + case VREG_C_ACC_YH: + case VREG_C_ACC_YL: + case VREG_C_ACC_ZH: + case VREG_C_ACC_ZL: +// dbg_nop(); + // return( ERROR ) + break; + + case VREG_C_ACC_HOSU_L: // ĂǁAfobOpB(AhX0x4B == mcu sla(r)) +// dbg_nop(); + /* FALLTHROUGH */ + + // ʂɏ邾 ///////////////////////////////// + default: + /* + 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: + case VREG_C_DBG01: + case VREG_C_DBG02: + case VREG_C_LED_BRIGHT: + case VREG_C_ACC_HOSU_L: + case VREG_C_ACC_HOSU_M: + case VREG_C_ACC_HOSU_H: + case VREG_C_ACC_HOSU_HOUR_BOUNDARY: + case VREG_C_FREE_ADRS: + case VREG_C_RTC_ALARM_YEAR: + case VREG_C_ACC_W_ADRS: + case VREG_C_OFF_DELAY: + case VREG_C_HAL_OVW_CONT0: + case VREG_C_HAL_OVW_DAT0: + case VREG_C_HAL_OVW_CONT1: + case VREG_C_HAL_OVW_DAT1: + */ + if( adrs < VREG_C_ENDMARK_ ) + { + vreg_ctr[adrs] = data; + break; + } + else + { +// dbg_nop(); // `AhXɏ@Ȃ񂩃oOĂȂH + // return( ERROR ) + break; + } + } +// return( SUCCESS ) + return; +} + + + + +// ******************************************************** +// I2CzWX^ǂ݂܂B +// ߂F xx f[^ +// ӁF̃AhX̏ŌĂ΂ ̂ŁA +// [hꂽNAȂǂ͋C‚ +// ( vreg_ctr_after_read( u8 adrs ) ) +u8 vreg_ctr_read( u8 adrs ) +{ + static u16 rsub_temp; + u8 temp; + + // RTC͓ǂݏorɌJオ̂邽 + if( ( VREG_C_RTC_SEC <= adrs ) && ( adrs <= VREG_C_RTC_YEAR ) ) + { + rtc_buf_refresh( ); + } + else if( adrs == VREG_C_MCU_STATUS ) + { + return( ( vreg_ctr[ VREG_C_MCU_STATUS ] & 0x03 ) | + ( ( vreg_twl[ REG_TWL_INT_ADRS_MODE ] & 0x03 ) << 6 ) | // sys_mode + ( ( vreg_twl[ REG_TWL_INT_ADRS_MODE ] & 0x80 ) >> 2 )); // vol32 + } + 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 ) ); + } +/* + // debug I + else if( adrs == VREG_C_IRQ_MASK0 ) + { + return( vreg_ctr[ VREG_C_IRQ_MASK0 ] & 0x7F ); // `MSB0B1ȂʐMG[ + } +*/ + else if( adrs == VREG_C_ACC_HOSU_HIST ) + { + return( hosu_read() ); + } + else if( adrs == VREG_CX_FREE_DATA ) + { + temp = pool.vreg_c_ext.vreg_c_free[ vreg_free_adrs ]; + // vreg_free_adrs ++; // ʼnZĂ܂ƃCfbNX + return( temp ); + } + else if( adrs == VREG_CX_INFO ) + { + return( extinfo_read() ); + } + else if( adrs == VREG_C_ACC_HOSU_SETTING ) + { + if( pedolog_overflow ) + { + return( 0x10 ); + } + else + { + return( 0 ); + } + } + + if( adrs >= VREG_C_ENDMARK_ ) + { + // VREG_C_INFO > VREG_C_ENDMARK_ Ȃ̂łƂ + return( 0xFF ); + } + return ( vreg_ctr[adrs] ); +} + + + +// ******************************************************** +// I2CzWX^ǂ܂ĉ郌WX^ +void vreg_ctr_after_read( u8 adrs, u8 data ) +{ + // 荞݃tO̓[hŃNA + switch( adrs ) + { + case VREG_C_IRQ0: + case VREG_C_IRQ1: + case VREG_C_IRQ2: + case VREG_C_IRQ3: + case VREG_C_IRQ4: + DI_wt_chk(); + vreg_ctr[ adrs ] ^= data; + EI(); + irq_readed = true; + break; + + case VREG_CX_FREE_DATA: + vreg_free_adrs ++; + break; + + default: + break; + } +} + + + + + + +/****************************************************************************** + 荞݂ + + @}XNĂAtOuĂȂvA荞ݓȂB + @荞݂AǂݏoOɃ}XNƂ́ASoC̏L[ɂ + IRQǂރ^XNςł̂ŁAǂ݂ɂ͗B + @ƁAÔ߁A}XNƂ͋ǂ݂Ă炤B + łDĨ`FbNsvB + @DIɗ̂I2C_twlARTC_A[B̒ŖڒEIĎgpȂ + *****************************************************************************/ +void set_irq( u8 irqreg, u8 irq_flg ) +{ + u8 tot; +//0 u8 ei_orig; // EItOۑ + + if(( system_status.pwr_state == ON ) || + ( system_status.pwr_state == SLEEP )) + { +/*0 łDIԂȂPAKvȂ + ei_orig = get_ei(); + + //. debug + if( !ei_orig ) + { + dbg_nop(); + } + + DI_wt_chk(); +*/ + DI(); + if( ( vreg_ctr[ irqreg + 8 ] & irq_flg ) == 0 ) + { + vreg_ctr[ irqreg ] |= irq_flg; + IRQ0_neg; // uグ... +//0 if( ei_orig ) + { + EI(); + } + tot = 0; + while( !IRQ0 && ( ++tot != 0 ) ){;} // O.D.Ȃ̂łƂ̂҂ IRQ_mcu LɔĂƍ(•s) + IRQ0_ast; // ƂBiGbW荞ׁ݂̈j + } +//0 if( ei_orig ) + { + EI(); + } + } +} + diff --git a/tags/2.03_SDK-3.1/vreg_ctr.h b/tags/2.03_SDK-3.1/vreg_ctr.h new file mode 100644 index 0000000..9e0b11e --- /dev/null +++ b/tags/2.03_SDK-3.1/vreg_ctr.h @@ -0,0 +1,302 @@ +#ifndef __vreg_ctr__ +#define __vreg_ctr__ + + +#include "config.h" + +// VREG_C_MCU_STATUS +// bit[7.6] twl.sys_mode[1.0] ctr珑ȂAfcr_resetɓKɃZbg +// bit[5] V [7] ctr珑ȂAfcr_resetɓKɃZbg +#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 ) +// gp ( 1 << 2 ) +#define REG_BIT_ST_SHELL_OPEN ( 1 << 1 ) +// gp ( 1 << 0 ) + + +// VREG_C_STATUS_X +// gp ( 1 << 6 ) +// gp ( 1 << 5 ) +#define REG_BIT_WIFI_TX ( 1 << 4 ) +// twl bl ̃~[[1: ( 1 << 3 ) +// 0]( 1 << 2 ) +#define REG_BIT_ACCERO_ERR ( 1 << 1 ) +#define REG_BIT_MGIC_ERR ( 1 << 0 ) + +#define REG_BIT_MASK_STATUS1_NTR_PM_REG 0x0C + + +// VREG_C_IRQ0 +#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_RELEASE ( 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_VER_READ ( 1 << 7 ) +//#define REG_BIT_TWL_SNDVOL_CHANGE ( 1 << 6 ) p~ +#define REG_BIT_SLIDE_VOL_ACROSS_TWL_BOUNDARY ( 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_3D_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_GOING_TO_SLEEP ( 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Ɋ荞݂) +// gp ( 1 << 7 ) +// gp ( 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 t֌W +#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ɒʒmIRQWX^ +#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 + + +// CODECPMIC NTR ̑㗝WX^ +#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 ) + + +// VREG_C_LED_NOTIFY_FLAG +#define REG_BIT_IN_LOOP ( 1 << 0 ) + +// RBR control (0x57) +#define REG_BIT_FLIGHT ( 1 << 1 ) +#define REG_BIT_RESET_n ( 1 << 0 ) + + +// HAL bitfields 0 +#define REG_BIT_HAL0_PM_EXTDC_n ( 1 << 7 ) +#define REG_BIT_HAL0_BT_IN_CHG_n ( 1 << 6 ) +//#define REG_BIT_HAL0_PM_IRQ_n // gȂ +#define REG_BIT_HAL0_RSV_5 ( 1 << 5 ) +#define REG_BIT_HAL0_WL_TX ( 1 << 4 ) +#define REG_BIT_HAL0_SHELL_OPEN ( 1 << 3 ) // statusɂ܂ +#define REG_BIT_HAL0_SW_WIFI_n ( 1 << 2 ) +#define REG_BIT_HAL0_SW_HOME_n ( 1 << 1 ) +#define REG_BIT_HAL0_SW_POW_n ( 1 << 0 ) + + +// HAL bitfields 1 +#define REG_BIT_HAL1_DIPSW_1 ( 1 << 3 ) +#define REG_BIT_HAL1_DIPSW_0 ( 1 << 2 ) +#define REG_BIT_HAL1_HW_DET_1 ( 1 << 1 ) +#define REG_BIT_HAL1_HW_DET_0 ( 1 << 0 ) + +/* + ev +#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_ADRS +{ // `AhX֏񂾍ۂ͕̓s + 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_DBG01 = 0x05, + VREG_C_DBG02, + VREG_C_DBG03, + + VREG_C_3D = 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' Ń}CRZbgA 'w' WDTZbg + + VREG_C_OFF_DELAY = 0x24, +// VREG_C_VOL_DIGITAL = 0x25, // todo +// VREG_C_VOL_OPTION, + VREG_C_VOL_ADC_RAW = 0x27, + + VREG_C_LED_BRIGHT = 0x28, + VREG_C_LED_POW, + VREG_C_LED_WIFI, + VREG_C_LED_CAM, + VREG_C_LED_3D, + VREG_C_LED_NOTIFY_DATA, + VREG_C_LED_NOTIFY_FLAG, + + VREG_C_RBR_CONTROL = 0x2F, + + 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_ACC_HOSU_HOUR_BOUNDARY = 0x50, + VREG_C_ACC_HOSU_HOUR_BOUNDARY_SEC, + + VREG_C_HAL_OVW_CONT0 = 0x52, + VREG_C_HAL_OVW_DAT0, + VREG_C_HAL_OVW_CONT1, // reserved + VREG_C_HAL_OVW_DAT1, // reserved + + VREG_C_HAL_OVW_BT_FUEL = 0x56, + VREG_C_HAL_OVW_BT_VOLTAGE, + + VREG_C_VOL_CAL_MIN = 0x58, + VREG_C_VOL_CAL_MAX, + + VREG_C_HAL_OVW_TEMPERATURE = 0x5A, + + VREG_C_ENDMARK_ +}; + +// Ԃ͔ɂāAmۂȂ߂ ʂ define Ă +#define VREG_CX_INFO 0x7F +#define VREG_CX_FREE_ADRS 0x60 +#define VREG_CX_FREE_DATA 0x61 +// VREG_C_AMBIENT_BRIGHTNESS = 0xXX, + + + + +/*============================================================================*/ +void vreg_ctr_init( ); +void vreg_ctr_reset( ); +void vreg_ctr_write( u8 adrs, u8 data ); +u8 vreg_ctr_read( u8 phy_adrs ); +void vreg_ctr_after_read( u8 adrs, u8 data ); +void set_irq( u8 irqreg, u8 irq_flg ); + +#endif diff --git a/tags/2.03_SDK-3.1/vreg_twl.c b/tags/2.03_SDK-3.1/vreg_twl.c new file mode 100644 index 0000000..15e971a --- /dev/null +++ b/tags/2.03_SDK-3.1/vreg_twl.c @@ -0,0 +1,156 @@ +/* ======================================================== + +TWL݊I2CWX^ + + ======================================================== */ +#include "incs.h" +#include "jhl_defs.h" +#include "led.h" + +#include "vreg_twl.h" +#include "vreg_ctr.h" + +// ======================================================== +#define TWL_REG_VER_INFO 0x35 +#define NON_EXIST_REG 0xFF + +// ======================================================== +u8 vreg_twl[_REG_TWL_INT_ADRS_ENDMARK]; + + +extern bit twl_ver_read; +extern bit cam_led_update; +extern bit vol_changed_by_twl; + + +// ======================================================== +extern void tsk_led_cam(); + + + + +/* ======================================================== + zWX^̏ + ======================================================== */ +void vreg_twl_init( ) +{ + vreg_twl[ REG_TWL_INT_ADRS_MODE ] = 0x03; + vreg_twl[ REG_TWL_INT_ADRS_IRQ ] = 0; + vreg_twl[ REG_TWL_INT_ADRS_CAM ] = 0; + vreg_twl[ REG_TWL_INT_ADRS_TEMP0 ] = 0; +} + +// ======================================================== +// I2CzWX^ɏEANV +//@ adrs ͓AhX +// @݂ȂAhXɃANZXꍇA܂B +void vreg_twl_write( u8 adrs, u8 data ) +{ + switch ( adrs ) + { + case ( REG_TWL_INT_ADRS_VOL ): + { + vol_changed_by_twl = true; + vreg_twl[ REG_TWL_INT_ADRS_VOL ] = data; + //renge_task_immed_add( tski_vol_update ); + vol_polling = 3; + break; + } + + case ( REG_TWL_INT_ADRS_MODE ): + vreg_twl[ REG_TWL_INT_ADRS_MODE ] = ( data & 0x83 ); // [8]vol32 [1:0]nand + break; + + case ( REG_TWL_INT_ADRS_CAM ): + vreg_twl[ REG_TWL_INT_ADRS_CAM ] = ( data & 0x03 ); + if( ( data & 0x03 ) == TWL_CAMLED_BLINK ) + { + cam_led_update = true; // łȂƈꔭɕs邽 + } + tsk_led_cam(); // uN̓sŋN + break; + + case ( REG_TWL_INT_ADRS_TEMP0 ): + vreg_twl[ REG_TWL_INT_ADRS_TEMP0 ] = 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Ă炵B + break; + } + else if( ( data & REG_BIT_TWL_RESET_REQ ) != 0 ) + { + set_irq( VREG_C_IRQ2, REG_BIT_TWL_RESET_REQ ); //ZbgȂB̂́ASPI痈܂B + break; + } + } +*/ + if( data == REG_BIT_TWL_RESET_REQ ) + { + set_irq( VREG_C_IRQ2, REG_BIT_TWL_RESET_REQ ); //ZbgȂB̂́ASPI痈܂B + break; + } + } + return; +} + + + +// ======================================================== +// I2CzWX^ǂ݂܂B +//@ adrs O猩Ƃ́AAhX +//@߂ xx f[^ +// @݂ȂAhXɃANZXꍇA߂l0x5A +u8 vreg_twl_read( u8 phy_adrs ) +{ + u8 temp; + + switch( phy_adrs ){ + // 10%ȉŐԂɂȂ + case( REG_TWL_INT_ADRS_POWER_INFO ): + // x̃Zbg get_batt_left()ixĖłj + return( vreg_twl[ REG_TWL_INT_ADRS_POWER_INFO ] | ( !PM_EXTDC_n ? 0x80: 0x00 ) ); // A_v^bit(A_v^L) + + case( REG_TWL_INT_ADRS_IRQ ): + temp = vreg_twl[ REG_TWL_INT_ADRS_IRQ ]; + vreg_twl[ REG_TWL_INT_ADRS_IRQ ]= 0; + return( temp ); + + case( REG_TWL_INT_ADRS_VER_INFO ): +// set_irq( VREG_C_IRQ2, REG_BIT_TWL_VER_READ ); // xIɖȂ̂ + twl_ver_read = true; + return( TWL_REG_VER_INFO ); + + case( REG_TWL_ADRS_NON_EXIST ): + return( 0x00 ); + + default: + return( vreg_twl[ phy_adrs ] ); + } +} + + + +// ======================================================== +// O猩钎HAhXA̘AAhXɓǂݑւ +// 0xFF݂͑ȂAhXB +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_VOL ): return( REG_TWL_INT_ADRS_VOL ); + case( REG_TWL_ADRS_CAM ): return( REG_TWL_INT_ADRS_CAM ); + 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ǂ߂΂悢AȂėǂ +// case( REG_TWL_ADRS_WIFI ): return( REG_TWL_INT_ADRS_WIFI ); + } +} diff --git a/tags/2.03_SDK-3.1/vreg_twl.h b/tags/2.03_SDK-3.1/vreg_twl.h new file mode 100644 index 0000000..63cdd94 --- /dev/null +++ b/tags/2.03_SDK-3.1/vreg_twl.h @@ -0,0 +1,127 @@ +#ifndef __vreg_twl__ +#define __vreg_twl__ +/* ========================================================================= */ +extern u8 vreg_twl[]; + + +/* + * O猩Ƃ̃}CRWX^AhXB + * gȂǂlĔєтɂĂB + */ +/* + * 荞ݗvtO + * MSB:OdL/Ȃω ij + * 6:VolL[iύXɌ炸BMAXɁ{łBj + * 5:drd o + * 4: + * 3:dXCb` ꌟo + * 2:iݒj + * 1:dXCb` OFF ԉꌟo + * LSB: Zbg + */ +enum REG_TWL_ADRS +{ // `AhX֏񂾍ۂ͖ + 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 + +/* + * }CRł̃WX^̎ + * ‚߂Ă + */ +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 ( vreg_twl[ REG_TWL_INT_ADRS_MODE ] & 0x01 ) +#define with_NAND ( vreg_twl[ REG_TWL_INT_ADRS_MODE ] & 0x02 ) +#define volSteps32 ( vreg_twl[ REG_TWL_INT_ADRS_MODE ] & 0x80 ) + +#define reg_wifi_led ( vreg_twl[ REG_TWL_INT_ADRS_WIFI ] & 0x01 ) +#define reg_wifi_led_blink ( vreg_twl[ REG_TWL_INT_ADRS_WIFI ] & 0x02 ) + +#define REG_TWL_ADRS_MODE__VOL32 ( 1 << 7 ) + +typedef enum CAM_LED_TWL_MODE +{ + TWL_CAMLED_OFF, + TWL_CAMLED_ON, + TWL_CAMLED_BLINK, + TWL_CAMLED_DEF_ON +}twl_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 ); + + +// ǂ񂾂NAȂǂ̏ +#define vreg_twl_after_read( reg_adrs ); \ + if( reg_adrs == REG_TWL_INT_ADRS_IRQ ) \ + { \ + vreg_twl[ REG_TWL_INT_ADRS_IRQ ]= 0;\ + } + +#endif diff --git a/tags/2.03_SDK-3.1/yav_mcu_bsr.plg b/tags/2.03_SDK-3.1/yav_mcu_bsr.plg new file mode 100644 index 0000000..51ab1ff --- /dev/null +++ b/tags/2.03_SDK-3.1/yav_mcu_bsr.plg @@ -0,0 +1,44 @@ +C:\Windows\system32\cmd.exe /c c:\cygwin\bin\touch magic.c +"C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\bin\cc78k0r.exe" -c9F0104 -y"c:\program files (x86)\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r" -ms -rd2s2 -qvjl2w -sainter_asm -zpb -no pm.c +pm.c(501) : CC78K0R warning W0401: Conversion may lose significant digits +pm.c(795) : CC78K0R warning W0401: Conversion may lose significant digits +pm.c(799) : CC78K0R warning W0401: Conversion may lose significant digits +pm.c(827) : CC78K0R warning W0401: Conversion may lose significant digits +pm.c(848) : CC78K0R warning W0401: Conversion may lose significant digits +pm.c(913) : CC78K0R warning W0401: Conversion may lose significant digits +pm.c(922) : CC78K0R warning W0401: Conversion may lose significant digits +pm.c(1123) : CC78K0R warning W0401: Conversion may lose significant digits +pm.c(1125) : CC78K0R warning W0401: Conversion may lose significant digits +Compilation complete, 0 error(s) and 9 warning(s) found. +"C:\Program Files (x86)\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"c:\program files (x86)\nec electronics tools\dev" -_msgoff -pinter_asm -ks -kx inter_asm\pm.asm +Assembly complete, 0 error(s) and 0 warning(s) found. +"C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\bin\cc78k0r.exe" -c9F0104 -y"c:\program files (x86)\nec electronics tools\dev" -_msgoff -irenge -i"C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r" -ms -rd2s2 -qvjl2w -sainter_asm -zpb -no magic.c +Compilation complete, 0 error(s) and 0 warning(s) found. +"C:\Program Files (x86)\NEC Electronics Tools\RA78K0R\W1.33\bin\ra78k0r.exe" -c9F0104 -y"c:\program files (x86)\nec electronics tools\dev" -_msgoff -pinter_asm -ks -kx inter_asm\magic.asm +Assembly complete, 0 error(s) and 0 warning(s) found. +"C:\Program Files (x86)\NEC Electronics Tools\RA78K0R\W1.33\bin\lk78k0r.exe" -y"c:\program files (x86)\nec electronics tools\dev" -_msgoff -obsr.lmf "..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\lib78k0r\s0rm.rel" -gi1B339499E033F240BFAAh -pbsr_k0r.map -nkd -gb7EFBFFh -b"C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\lib78k0r\fsl.lib" -bcl0rdm.lib -bcl0rm.lib -bcl0rmf.lib -i"C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\lib78k0r" -dbsr_mcu.dr -s -w2 loader.rel pm.rel i2c_ctr.rel main.rel magic.rel WDT.rel i2c_mcu.rel i2c_twl.rel led.rel rtc.rel vreg_ctr.rel vreg_twl.rel adc.rel renge.rel accero.rel self_flash.rel sw.rel task_debug.rel task_misc.rel task_sys.rel pedo_alg_thre_det2.rel ini_VECT.rel task_status.rel led_cam.rel led_pow.rel hal.rel batt_params.rel voltable.rel pedo_lpf_coeff.rel kanaria.rel kanaria_c.rel get_ei.rel +RA78K0R warning W3420: File 'loader.rel' already has had error(s)/warning(s) by 'CC78K' + Read Device File Directory : C:\PROGRAM FILES (X86)\NEC ELECTRONICS TOOLS\DEV\ +RA78K0R warning W3420: File 'pm.rel' already has had error(s)/warning(s) by 'CC78K' +RA78K0R warning W3420: File 'i2c_mcu.rel' already has had error(s)/warning(s) by 'CC78K' +RA78K0R warning W3420: File 'led.rel' already has had error(s)/warning(s) by 'CC78K' +RA78K0R warning W3420: File 'vreg_ctr.rel' already has had error(s)/warning(s) by 'CC78K' +RA78K0R warning W3420: File 'vreg_twl.rel' already has had error(s)/warning(s) by 'CC78K' +RA78K0R warning W3420: File 'adc.rel' already has had error(s)/warning(s) by 'CC78K' +RA78K0R warning W3420: File 'accero.rel' already has had error(s)/warning(s) by 'CC78K' +RA78K0R warning W3420: File 'self_flash.rel' already has had error(s)/warning(s) by 'CC78K' +RA78K0R warning W3420: File 'task_misc.rel' already has had error(s)/warning(s) by 'CC78K' +RA78K0R warning W3420: File 'task_sys.rel' already has had error(s)/warning(s) by 'CC78K' +RA78K0R warning W3420: File 'pedo_alg_thre_det2.rel' already has had error(s)/warning(s) by 'CC78K' +RA78K0R warning W3420: File 'led_pow.rel' already has had error(s)/warning(s) by 'CC78K' + +Link complete, 0 error(s) and 13 warning(s) found. +"C:\Program Files (x86)\NEC Electronics Tools\RA78K0R\W1.33\bin\oc78k0r.exe" -y"c:\program files (x86)\nec electronics tools\dev" -_msgoff -o.\bsr.hex -nu -ki bsr.lmf +Object Conversion Complete, 0 error(s) and 0 warning(s) found. +C:\Windows\system32\cmd.exe /c ruby nec_s_2_bsrbin2.rb bsr.hex +4 +intel-HEX to bsr bin converter + file converted! + + +Build Total error(s) : 0 Total warning(s) : 22 diff --git a/tags/2.03_SDK-3.1/yav_mcu_bsr.pri b/tags/2.03_SDK-3.1/yav_mcu_bsr.pri new file mode 100644 index 0000000..023f915 --- /dev/null +++ b/tags/2.03_SDK-3.1/yav_mcu_bsr.pri @@ -0,0 +1,1028 @@ +[Project.ID] +Ver=200 +Target=IDK0R32G +[Configuration] +Chip=uPD79F0104 +Internal Rom=32KB +Internal Ram=1536B +Clock=Target +Sub Clock=Target +Peripheral Break=0x3 +Firm Clock=System +Flash Programming=Permit +Low-voltage Flash Rewriting=On +Fail Safe Break=0x2000 +Port=1 +NMI=OFF +TRESET=OFF +IRESET=OFF +WAIT=OFF +SysClock=None +SubClock=None +[Mapping] +Count=0 +[Main] +Geometry=242, 242, 1200, 858 +Window=Max +MDI_MAX=OFF +Button=ON +Mode=Auto +Trace=Uncond ON +Trace2=Non Stop +Coverage=OFF +Timer=OFF +Tracer=OFF +[Load File] +Dir=\\Tsclient\c\78k_data\yav-mcu-basara\trunk\ +SaveFilter=0 +Start=0 +End=0 +LoadFilter=5 +Offset=0 +Object=ON +Symbol=ON +Erase=OFF +HighSpeed=OFF +Symbol Reset=ON +CPU Reset=ON +File1=\\Tsclient\c\78k_data\yav-mcu-basara\trunk\bsr.lmf +LoadFilter1=5 +Offset1=0 +Object1=ON +Symbol1=ON +Erase1=OFF +HighSpeed1=OFF +CPU Reset1=ON +Symbol Reset1=ON +[View File] +Dir=\\Tsclient\c\78k_data\yav-mcu-basara\trunk\ +Filter=Source +[Debugger Option] +Source Path="" +Symbol Size=Byte +Symbol Format=Hex +Register Name=Func +Offset Label=OFF +Offset Mnemonic=ON +Tab Count=4 +Tab Size1=*.*, 8 +Tab Size2=*.c, 8 +Tab Size3=*.s, 8 +Tab Size4=*.asm, 8 +Default Source=*.c;*.s;*.asm +Default Module=*.lnk;*.lmf +Startup Start=_@cstart +Startup End=_@cend +Main Symbol=_main +Symbol Type=OFF +Language=C +Kanji=SJIS +[Source] +Geometry=0, 0, 600, 400 +Window=Normal +DispStart=457 +CaretPos=458,0 +Mode=Normal +DispFile= +Address1= +Address2= +Address3= +Address4= +Address5= +Address6= +Address7= +Address8= +Address9= +Address10= +Address11= +Address12= +Address13= +Address14= +Address15= +Address16= +Data1= +Data2= +Data3= +Data4= +Data5= +Data6= +Data7= +Data8= +Data9= +Data10= +Data11= +Data12= +Data13= +Data14= +Data15= +Data16= +Option=0 +Case=ON +Direction=Down +File1= +File2= +File3= +File4= +File5= +File6= +File7= +File8= +File9= +File10= +File11= +File12= +File13= +File14= +File15= +File16= +SaveRange=Screen +SaveStart= +SaveEnd= +Accumulative=ON +[Assemble] +Geometry=75, 75, 600, 400 +Window=Normal +DispStart=16170 +CaretPos=16170,27 +Address1= +Address2= +Address3= +Address4= +Address5= +Address6= +Address7= +Address8= +Address9= +Address10= +Address11= +Address12= +Address13= +Address14= +Address15= +Address16= +Data1= +Data2= +Data3= +Data4= +Data5= +Data6= +Data7= +Data8= +Data9= +Data10= +Data11= +Data12= +Data13= +Data14= +Data15= +Data16= +Case=ON +Scan=OFF +Direction=Down +FindStart= +FindEnd= +SaveRange=Screen +SaveStart= +SaveEnd= +[Memory] +Geometry=0, 0, 0, 0 +Window=Hide +Boundary=0 +Format=Hex +Mode=Byte +Endian= +Ascii=OFF +Idtag=OFF +Address= +DispStart=FFFFFFFF +CaretPosData=0, 0 +CaretPosAscii=0, 0 +Address1= +Address2= +Address3= +Address4= +Address5= +Address6= +Address7= +Address8= +Address9= +Address10= +Address11= +Address12= +Address13= +Address14= +Address15= +Address16= +Data1= +Data2= +Data3= +Data4= +Data5= +Data6= +Data7= +Data8= +Data9= +Data10= +Data11= +Data12= +Data13= +Data14= +Data15= +Data16= +Binary=ON +Scan=OFF +Direction=DOWN +FindStart= +FindEnd= +Unit=Byte +SaveRange=Screen +SaveStart= +SaveEnd= +Accumulative=ON +[Memory fill] +Scope=0, 0 +Code=0 +[Memory copy] +Scope=0, 0 +To=0 +[Memory compare] +Source=0, 0 +Destination=0 +[I/O Port] +Line=0 +[Stack] +Geometry=0, 0, 0, 0 +Window=Hide +Boundary=0 +Mode=Proper +[Sfr] +Geometry=0, 0, 0, 0 +Window=Hide +Address1= +Address2= +Address3= +Address4= +Address5= +Address6= +Address7= +Address8= +Address9= +Address10= +Address11= +Address12= +Address13= +Address14= +Address15= +Address16= +Boundary=0, 0 +Mode=Hex +Attribute=Show +Sort=Address +Pickup=OFF +SelectSort=Address +Last Name= +Line=531 +L1=P0 +L2=P1 +L3=P2 +L4=P3 +L5=P4 +L6=P5 +L7=P6 +L8=P7 +L9=P12 +L10=P14 +L11=P15 +L12=SDR00 +L13=SIO00 +L14=TXD0 +L15=SDR01 +L16=RXD0 +L17=SIO01 +L18=TDR00 +L19=TDR01 +L20=ADCRH +L21=PM0 +L22=PM1 +L23=PM2 +L24=PM3 +L25=PM4 +L26=PM5 +L27=PM6 +L28=PM7 +L29=PM12 +L30=PM14 +L31=PM15 +L32=ADM +L33=ADCE +L34=ADCS +L35=ADS +L36=KRM +L37=EGP0 +L38=EGN0 +L39=ISC +L40=TIS0 +L41=SDR02 +L42=SIO10 +L43=TXD1 +L44=SDR03 +L45=RXD1 +L46=IICA0 +L47=IICS0 +L48=SPD0 +L49=STD0 +L50=ACKD0 +L51=TRC0 +L52=COI0 +L53=EXC0 +L54=ALD0 +L55=MSTS0 +L56=IICF0 +L57=IICRSV0 +L58=STCEN0 +L59=IICBSY0 +L60=STCF0 +L61=TDR02 +L62=TDR03 +L63=TDR04 +L64=TDR05 +L65=TDR06 +L66=TDR07 +L67=RSUBC +L68=SEC +L69=MIN +L70=HOUR +L71=WEEK +L72=DAY +L73=MONTH +L74=YEAR +L75=SUBCUD +L76=ALARMWM +L77=ALARMWH +L78=ALARMWW +L79=RTCC0 +L80=RCLOE0 +L81=RCLOE1 +L82=RTCE +L83=RTCC1 +L84=RWAIT +L85=RWST +L86=RIFG +L87=WAFG +L88=WALIE +L89=WALE +L90=RTCC2 +L91=RCKDIV +L92=RCLOE2 +L93=RINTE +L94=CMC +L95=CSC +L96=HIOSTOP +L97=XTSTOP +L98=MSTOP +L99=OSTC +L100=OSTS +L101=CKC +L102=MCM0 +L103=MCS +L104=CSS +L105=CLS +L106=CKS0 +L107=PCLOE0 +L108=CKS1 +L109=PCLOE1 +L110=RESF +L111=LVIM +L112=LVIF +L113=LVIMD +L114=LVISEL +L115=LVION +L116=LVIS +L117=WDTE +L118=DSA0 +L119=DSA1 +L120=DRA0 +L121=DRA0L +L122=DRA0H +L123=DRA1 +L124=DRA1L +L125=DRA1H +L126=DBC0 +L127=DBC0L +L128=DBC0H +L129=DBC1 +L130=DBC1L +L131=DBC1H +L132=DMC0 +L133=DWAIT0 +L134=DS0 +L135=DRS0 +L136=STG0 +L137=DMC1 +L138=DWAIT1 +L139=DS1 +L140=DRS1 +L141=STG1 +L142=DRC0 +L143=DST0 +L144=DEN0 +L145=DRC1 +L146=DST1 +L147=DEN1 +L148=BECTL +L149=FLMDPUP +L150=PFCMD +L151=PFS +L152=FPRERR +L153=FLPMC +L154=BFAEN +L155=FWEPR +L156=BRAMEN +L157=IF2 +L158=IF2L +L159=TMIF05 +L160=TMIF06 +L161=TMIF07 +L162=PIF6 +L163=IF2H +L164=IICAIF1 +L165=PIF20 +L166=PIF21 +L167=PIF22 +L168=PIF23 +L169=MK2 +L170=MK2L +L171=TMMK05 +L172=TMMK06 +L173=TMMK07 +L174=PMK6 +L175=MK2H +L176=IICAMK1 +L177=PMK20 +L178=PMK21 +L179=PMK22 +L180=PMK23 +L181=PR02 +L182=PR02L +L183=TMPR005 +L184=TMPR006 +L185=TMPR007 +L186=PPR06 +L187=PR02H +L188=IICAPR01 +L189=PPR020 +L190=PPR021 +L191=PPR022 +L192=PPR023 +L193=PR12 +L194=PR12L +L195=TMPR105 +L196=TMPR106 +L197=TMPR107 +L198=PPR16 +L199=PR12H +L200=IICAPR11 +L201=PPR120 +L202=PPR121 +L203=PPR122 +L204=PPR123 +L205=IF0 +L206=IF0L +L207=WDTIIF +L208=LVIIF +L209=PIF0 +L210=PIF1 +L211=PIF2 +L212=PIF4 +L213=PIF5 +L214=IF0H +L215=DMAIF0 +L216=DMAIF1 +L217=CSIIF00 +L218=STIF0 +L219=CSIIF01 +L220=SRIF0 +L221=SREIF0 +L222=IF1 +L223=IF1L +L224=CSIIF10 +L225=IICIF10 +L226=STIF1 +L227=SRIF1 +L228=SREIF1 +L229=IICAIF0 +L230=TMIF00 +L231=TMIF01 +L232=TMIF02 +L233=TMIF03 +L234=IF1H +L235=ADIF +L236=RTCIF +L237=RTCIIF +L238=KRIF +L239=MDIF +L240=TMIF04 +L241=MK0 +L242=MK0L +L243=WDTIMK +L244=LVIMK +L245=PMK0 +L246=PMK1 +L247=PMK2 +L248=PMK4 +L249=PMK5 +L250=MK0H +L251=DMAMK0 +L252=DMAMK1 +L253=CSIMK00 +L254=STMK0 +L255=CSIMK01 +L256=SRMK0 +L257=SREMK0 +L258=MK1 +L259=MK1L +L260=CSIMK10 +L261=IICMK10 +L262=STMK1 +L263=SRMK1 +L264=SREMK1 +L265=IICAMK0 +L266=TMMK00 +L267=TMMK01 +L268=TMMK02 +L269=TMMK03 +L270=MK1H +L271=ADMK +L272=RTCMK +L273=RTCIMK +L274=KRMK +L275=MDMK +L276=TMMK04 +L277=PR00 +L278=PR00L +L279=WDTIPR0 +L280=LVIPR0 +L281=PPR00 +L282=PPR01 +L283=PPR02 +L284=PPR04 +L285=PPR05 +L286=PR00H +L287=DMAPR00 +L288=DMAPR01 +L289=CSIPR000 +L290=STPR00 +L291=CSIPR001 +L292=SRPR00 +L293=SREPR00 +L294=PR01 +L295=PR01L +L296=CSIPR010 +L297=IICPR010 +L298=STPR01 +L299=SRPR01 +L300=SREPR01 +L301=IICAPR00 +L302=TMPR000 +L303=TMPR001 +L304=TMPR002 +L305=TMPR003 +L306=PR01H +L307=ADPR0 +L308=RTCPR0 +L309=RTCIPR0 +L310=KRPR0 +L311=MDPR0 +L312=TMPR004 +L313=PR10 +L314=PR10L +L315=WDTIPR1 +L316=LVIPR1 +L317=PPR10 +L318=PPR11 +L319=PPR12 +L320=PPR14 +L321=PPR15 +L322=PR10H +L323=DMAPR10 +L324=DMAPR11 +L325=CSIPR100 +L326=STPR10 +L327=CSIPR101 +L328=SRPR10 +L329=SREPR10 +L330=PR11 +L331=PR11L +L332=CSIPR110 +L333=IICPR110 +L334=STPR11 +L335=SRPR11 +L336=SREPR11 +L337=IICAPR10 +L338=TMPR100 +L339=TMPR101 +L340=TMPR102 +L341=TMPR103 +L342=PR11H +L343=ADPR1 +L344=RTCPR1 +L345=RTCIPR1 +L346=KRPR1 +L347=MDPR1 +L348=TMPR104 +L349=MDAL +L350=MULA +L351=MDAH +L352=MULB +L353=MDBH +L354=MULOH +L355=MDBL +L356=MULOL +L357=PMC +L358=MAA +L359=ADPC +L360=PU0 +L361=PU1 +L362=PU3 +L363=PU4 +L364=PU5 +L365=PU7 +L366=PU12 +L367=PU14 +L368=PIM3 +L369=PIM7 +L370=POM3 +L371=POM7 +L372=NFEN0 +L373=NFEN1 +L374=NFEN2 +L375=MDCL +L376=MDCH +L377=MDUC +L378=DIVST +L379=DIVMODE +L380=PER0 +L381=SAU0EN +L382=IICA0EN +L383=ADCEN +L384=RTCEN +L385=PER2 +L386=TAU0EN +L387=OSMC +L388=BCDADJ +L389=SSR00 +L390=SSR00L +L391=SSR01 +L392=SSR01L +L393=SSR02 +L394=SSR02L +L395=SSR03 +L396=SSR03L +L397=SIR00 +L398=SIR00L +L399=SIR01 +L400=SIR01L +L401=SIR02 +L402=SIR02L +L403=SIR03 +L404=SIR03L +L405=SMR00 +L406=SMR01 +L407=SMR02 +L408=SMR03 +L409=SCR00 +L410=SCR01 +L411=SCR02 +L412=SCR03 +L413=SE0 +L414=SE0L +L415=SS0 +L416=SS0L +L417=ST0 +L418=ST0L +L419=SPS0 +L420=SPS0L +L421=SO0 +L422=SOE0 +L423=SOE0L +L424=SOL0 +L425=SOL0L +L426=TCR00 +L427=TCR01 +L428=TCR02 +L429=TCR03 +L430=TCR04 +L431=TCR05 +L432=TCR06 +L433=TCR07 +L434=TMR00 +L435=TMR01 +L436=TMR02 +L437=TMR03 +L438=TMR04 +L439=TMR05 +L440=TMR06 +L441=TMR07 +L442=TSR00 +L443=TSR00L +L444=TSR01 +L445=TSR01L +L446=TSR02 +L447=TSR02L +L448=TSR03 +L449=TSR03L +L450=TSR04 +L451=TSR04L +L452=TSR05 +L453=TSR05L +L454=TSR06 +L455=TSR06L +L456=TSR07 +L457=TSR07L +L458=TE0 +L459=TE0L +L460=TS0 +L461=TS0L +L462=TT0 +L463=TT0L +L464=TPS0 +L465=TPS0L +L466=TO0 +L467=TO0L +L468=TOE0 +L469=TOE0L +L470=TOL0 +L471=TOL0L +L472=TOM0 +L473=TOM0L +L474=IICCTL00 +L475=SPT0 +L476=STT0 +L477=ACKE0 +L478=WTIM0 +L479=SPIE0 +L480=WREL0 +L481=LREL0 +L482=IICE0 +L483=IICCTL10 +L484=DFC0 +L485=SMC0 +L486=DAD0 +L487=CLD0 +L488=WUP0 +L489=IICWL0 +L490=IICWH0 +L491=SVA0 +L492=PER3 +L493=IICA1EN +L494=P20 +L495=PM20 +L496=PU20 +L497=EGP2 +L498=EGN2 +L499=IICA1 +L500=IICS1 +L501=SPD1 +L502=STD1 +L503=ACKD1 +L504=TRC1 +L505=COI1 +L506=EXC1 +L507=ALD1 +L508=MSTS1 +L509=IICF1 +L510=IICRSV1 +L511=STCEN1 +L512=IICBSY1 +L513=STCF1 +L514=IICCTL01 +L515=SPT1 +L516=STT1 +L517=ACKE1 +L518=WTIM1 +L519=SPIE1 +L520=WREL1 +L521=LREL1 +L522=IICE1 +L523=IICCTL11 +L524=DFC1 +L525=SMC1 +L526=DAD1 +L527=CLD1 +L528=WUP1 +L529=IICWL1 +L530=IICWH1 +L531=SVA1 +[Local Variable] +Geometry=0, 0, 0, 0 +Window=Hide +Boundary=0 +Mode=Proper +[Trace View] +Geometry=0, 0, 0, 0 +Window=Hide +Mode=Normal +Frame=Show +Timetag=Clock +Address=Show +Data=Hex +Status=Show +Address2=Show +Data2=Hex +Status2=Show +Disasm=Show +Pick Up=Off +Synchronize=0 0 0 0 +Frameno= +Frameno1= +Frameno2= +Frameno3= +Frameno4= +Frameno5= +Frameno6= +Frameno7= +Frameno8= +Frameno9= +Frameno10= +Frameno11= +Frameno12= +Frameno13= +Frameno14= +Frameno15= +Frameno16= +ScanStatus=ALL +Access Size=B +ScanAddress=<>-<> +Mask Address= +ScanData= +Mask Data= +ScanExternal= +Mask External= +Scan=OFF +Direction=Down +FindStart= +FindEnd= +SaveRange=Screen +SaveStart= +SaveEnd= +[Register] +Geometry=0, 0, 0, 0 +Window=Hide +Mode=Hex +Boundary=0 +Pickup=OFF +Name=Functional +Register Bank=0 +RP0=3 +RP1=3 +RP2=3 +RP3=3 +PC=3 +SP=3 +PSW=3 +ES=3 +CS=3 +[Event Manager] +Geometry=0, 0, 0, 0 +Window=Hide +Sort by=Unsort +Detail=OFF +[Event Set] +Geometry=0, 0, 0, 0 +Window=Hide +Manager=ON +Sort by=Unsort +Detail=OFF +Last Name= +Count=0 +[Event Link] +Geometry=0, 0, 0, 0 +Window=Hide +Manager=ON +Sort by=Unsort +Detail=OFF +Last Name= +Count=0 +[Break] +Geometry=0, 0, 0, 0 +Window=Hide +Manager=ON +Sort by=Unsort +Detail=OFF +Last Name= +Count=0 +[Trace] +Geometry=0, 0, 0, 0 +Window=Hide +Manager=ON +Sort by=Unsort +Detail=OFF +Last Name= +Delay Count0=2 +Count=0 +[Snap] +Geometry=0, 0, 0, 0 +Window=Hide +Manager=ON +Sort by=Unsort +Detail=OFF +Last Name= +Count=0 +[Stub] +Geometry=0, 0, 0, 0 +Window=Hide +Manager=ON +Sort by=Unsort +Detail=OFF +Last Name= +Count=0 +[Timer] +Geometry=0, 0, 0, 0 +Window=Hide +Manager=ON +Sort by=Unsort +Detail=OFF +Last Name= +TimerRateRunBreak=0011 +TimerBreakOutRunBreak=OFF +Count=0 +[Timer Monitor] +Count=0 +[Dmm] +Geometry=0, 0, 0, 0 +Window=Hide +Manager=ON +Sort by=Unsort +Detail=OFF +Last Name= +Count=0 +[Variable] +Geometry=1145, 5, 440, 719 +Window=Normal +Boundary=13762700 +0=.flag_wifi_TX,P,N,A,+,1 +1=.PIF21,B,S,A,+,1 +Line=2 +[Quick Watch] +0=PIF21,B,A,1 +1=flag_wifi_TX,P,A,1 +2= +3= +4= +5= +6= +7= +8= +9= +10= +11= +12= +13= +14= +15= +[Software Break] +Geometry=0, 0, 0, 0 +Window=Hide +Width=150 30 200 100 +Name0=Swb00001 +Address0=led.c#_LED_init+0x62 +Window0=ASM +Status0=ON +Name1=Swb00002 +Address1=led.c#_tsk_led_wifi+0xb +Window1=ASM +Status1=ON +Name2=Swb00003 +Address2=led.c#_tsk_led_wifi+0x10 +Window2=ASM +Status2=ON +Count=3 +[Reset] +Debugger=ON +Symbol=OFF +Target CPU=OFF +[Extended Option] +OnClick Software Break=ON +TraceTimetag=x1 +Redraw=500 +Break When Access Function=OFF +Break When Access Whole=Select +Verify=ON +Break Sound=ON +TraceAutoClear=OFF +RRM Clock=Internal +CKC Register Value=0x09 +RRM Internal Clock Frequency=8.000 +[About] +Version=Program +[Pseudo Emulation] +Geometry=0, 0, 0, 0 +Window=Hide +[Data Flash Option] +Data Flash Emulation=OFF +[List] +Geometry=0, 0, 0, 0 +Window=Hide +[Console] +Geometry=0, 0, 0, 0 +Window=Hide diff --git a/tags/2.03_SDK-3.1/yav_mcu_bsr.prj b/tags/2.03_SDK-3.1/yav_mcu_bsr.prj new file mode 100644 index 0000000..8d026dc --- /dev/null +++ b/tags/2.03_SDK-3.1/yav_mcu_bsr.prj @@ -0,0 +1,1407 @@ +[ProjectManager] +Version=6.00 +Path=C:\78k_data\yav-mcu-basara\trunk\ +Title=yav-mcu +Series=78K0R.PM +Device=uPD79F0104 +DeviceVer=E1.00b +DebugMode=1 +Target=bsr.lmf +[BuildMode0] +BuildModeName=Debug Build +TargetFile=0 +[BuildMode1] +BuildModeName=Release Build +TargetFile=0 +[Tools] +MakeFile=yav_mcu_bsr.mak +Debugger=C:\Program Files (x86)\NEC Electronics Tools\ID78K0R-QB\V3.61\BIN\IDK0R32G.EXE +DebOption= +DebCpuReset=1 +DebSymReset=1 +MuitiLoad=0 +LoadPrjNum=0 +CheckVersion=CC78K0R|W2.13;RA78K0R|W1.33 +[Option.IDK0R32G] +File=\\Tsclient\c\78k_data\yav-mcu-basara\trunk\yav_mcu_bsr.pri +[BuildMode2] +BuildModeName=K0R_dbg +TargetFile=0 +[BuildMode3] +BuildModeName=BSR_dbg +TargetFile=0 +[BuildMode4] +BuildModeName=BSR_rel +TargetFile=0 +[BuildMode5] +BuildModeName=BSR_WM0 +TargetFile=0 +[Options.OC78K0R 0] +Version=100 +O0=.\bsr.hex +O1=bsr.hex +UC=1 +UN=FF +UST= +USZ= +K=1 +ZF=0 +S=1 +E=0 +CommandFile=0 +[Options.OC78K0R 1] +Version=100 +UC=1 +UN=FF +UST= +USZ= +K=1 +ZF=0 +S=1 +E=0 +CommandFile=0 +[Options.OC78K0R 2] +Version=100 +O0=.\bsr.hex +O1=bsr.hex +UC=0 +UN=FF +UST= +USZ= +K=0 +ZF=0 +S=1 +E=0 +CommandFile=0 +[Options.OC78K0R 3] +Version=100 +O0=.\bsr.hex +O1=bsr.hex +UC=1 +UN=FF +UST= +USZ= +K=1 +ZF=0 +S=1 +E=0 +CommandFile=0 +[Options.OC78K0R 4] +Version=100 +O0=.\bsr.hex +O1=bsr.hex +UC=1 +UN=FF +UST= +USZ= +K=1 +ZF=0 +S=1 +E=0 +CommandFile=0 +[Options.OC78K0R 5] +Version=100 +O0=.\bsr.hex +O1=bsr.hex +UC=1 +UN=FF +UST= +USZ= +K=1 +ZF=0 +S=1 +E=0 +CommandFile=0 +[BuildBefore-AfterCmd] +Before1=c:\cygwin\bin\touch magic.c +After1=ruby nec_s_2_bsrbin2.rb bsr.hex +[ToolSet] +ToolSetName=(ύX)78K0R Software Package V1.10 +Tool1=CC78K0R|W2.13 +Tool2=RA78K0R|W1.33 +Tool3=SK78K0R|V3.10 +Tool4=ID78K0R-QB|V3.61 +[SrcFile] +Source1=loader.c +Source2=pm.c +Source3=i2c_ctr.c +Source4=main.c +Source5=magic.c +Source6=WDT.c +Source7=i2c_mcu.c +Source8=i2c_twl.c +Source9=led.c +Source10=rtc.c +Source11=vreg_ctr.c +Source12=vreg_twl.c +Source13=adc.c +Source14=renge\renge.c +Source15=accero.c +Source16=self_flash.c +Source17=sw.c +Source18=task_debug.c +Source19=task_misc.c +Source20=task_sys.c +Source21=pedo_alg_thre_det2.c +Source22=ini_VECT.c +Source23=task_status.c +Source24=led_cam.c +Source25=led_pow.c +Source26=hal.c +Source27=batt_params.c +Source28=voltable.c +Source29=pedo_lpf_coeff.c +Source30=kanaria.asm +Source31=kanaria_c.c +Source32=get_ei.asm +[IncFile] +Include1=incs_loader.h +Include2=sim\simOnWin.h +Include3=sim\sfrAlias.h +Include4=config.h +Include5=jhl_defs.h +Include6=user_define.h +Include7=hal.h +Include8=bsr_system.h +Include9=renge\renge.h +Include10=renge\renge_defs.h +Include11=renge\renge_task_immediate.h +Include12=vreg_ctr.h +Include13=vreg_twl.h +Include14=loader.h +Include15=i2c_mcu.h +Include16=WDT.h +Include17=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\fsl.h +Include18=fsl_user.h +Include19=i2c_ctr.h +Include20=pm.h +Include21=rtc.h +Include22=reboot.h +Include23=magic.h +Include24=incs.h +Include25=i2c_twl.h +Include26=accero.h +Include27=pedometer.h +Include28=sw.h +Include29=adc.h +Include30=led.h +Include31=batt_params.h +Include32=pool.h +Include33=i2c_twl_defs.h +Include34=renge\renge_task_intval.h +Include35=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\math.h +Include36=self_flash.h +Include37=sim\sim_interrupt_decrare.c +[Options.RA78K0R 0] +Version=100 +G=1 +GA=1 +E=0 +COMMON=0 +COMPATI=0 +P=1 +KA=1 +KS=0 +KX=0 +LF=0 +LW=132 +LL=0 +LT=8 +Z=0 +CommandFile=0 +RA_OPT= +[Options.RA78K0R 1] +Version=100 +G=0 +GA=0 +E=0 +COMMON=0 +COMPATI=0 +P=1 +KA=1 +KS=0 +KX=0 +LF=0 +LW=132 +LL=0 +LT=8 +Z=0 +CommandFile=0 +RA_OPT= +[Options.RA78K0R 2] +Version=100 +O0= +O1=obj +G=1 +GA=1 +E=0 +COMMON=0 +COMPATI=0 +P=1 +P0=inter_asm +KA=1 +KS=1 +KX=1 +LF=0 +LW=132 +LL=0 +LT=8 +Z=0 +CommandFile=0 +RA_OPT=-pinter_asm -ks -kx +[Options.RA78K0R 3] +Version=100 +G=1 +GA=1 +E=0 +COMMON=0 +COMPATI=0 +P=1 +KA=1 +KS=0 +KX=0 +LF=0 +LW=132 +LL=0 +LT=8 +Z=0 +CommandFile=0 +RA_OPT= +[Options.RA78K0R 4] +Version=100 +G=1 +GA=1 +E=0 +COMMON=0 +COMPATI=0 +P=1 +KA=1 +KS=0 +KX=0 +LF=0 +LW=132 +LL=0 +LT=8 +Z=0 +CommandFile=0 +RA_OPT= +[Options.RA78K0R 5] +Version=100 +G=1 +GA=1 +E=0 +COMMON=0 +COMPATI=0 +P=1 +KA=1 +KS=0 +KX=0 +LF=0 +LW=132 +LL=0 +LT=8 +Z=0 +CommandFile=0 +RA_OPT= +[Options.CC78K0R 0] +Version=210 +Include0=renge,C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r +Include1=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r +Memorymodel=1 +Flashobj=0 +FlashStartadr= +FlashBranchStartadr= +Mirror=0 +Saddrglobalchk=0 +Saddrglobal=1066 +Saddrstaticchk=0 +Saddrstatic=1072 +Bitfieldmsb=0 +Onebytechk=0 +Pacstructchk=0 +AssignROMchk=0 +AssignROM=0 +Maxoptimizechk=0 +Maxoptimize=1104 +Charunexpandchk=1 +Unsignedchar=0 +Usesaddrchk=0 +Autoallocationchk=1 +Jumpoptimize=1 +Librarycallchk=0 +Librarycall=1129 +Aggressivechk=1 +Relativebranchchk=1 +Debugoptchk=0 +Outdebugchk=1 +Outdebug=1153 +Outasmsrccmb0=inter_asm +Outasmsrccmb1=bsr.asm +Outasmsrcchk=1 +Outasmsrc=1158 +Outasmoptall=1 +Common=0 +Outerrlistchk=0 +Outerrlist=1174 +Xreference=0 +Preprocess=0 +Prenocomment=0 +Predefine=0 +Preifdef=1 +Preinclude=0 +Preline=1 +Prenumber=1 +Formfeed=0 +Columns=132 +Lines=0 +Tablength=8 +Ansi=0 +Cpraspras=1 +Commentnest=0 +Intunexpand=0 +Kanjicode=1210 +Verbose=0 +CommandFile=0 +Warninglevel=0 +Startupchk=1 +Fixation=1 +FarROMization=0 +Objectsel=1305 +Librarychk=1 +Floatingpoint=0 +Muldivunit=1 +Mulunit=1 +Startup=s0rml.rel +Library1=cl0rdm.lib +Library2=cl0rm.lib +Library3=cl0rmf.lib +VfiFileBoot0= +VfiFileBoot1=boot.vfi +VF78K0Rchk=0 +VF78K0Rvs= +[Options.CC78K0R 1] +Version=210 +Memorymodel=2 +Flashobj=0 +FlashStartadr= +FlashBranchStartadr= +Mirror=0 +Saddrglobalchk=0 +Saddrglobal=1066 +Saddrstaticchk=0 +Saddrstatic=1072 +Bitfieldmsb=0 +Onebytechk=0 +Pacstructchk=0 +AssignROMchk=0 +AssignROM=0 +Maxoptimizechk=0 +Maxoptimize=1104 +Charunexpandchk=1 +Unsignedchar=0 +Usesaddrchk=0 +Autoallocationchk=1 +Jumpoptimize=1 +Librarycallchk=1 +Librarycall=1128 +Aggressivechk=1 +Relativebranchchk=0 +Debugoptchk=0 +Outdebugchk=0 +Outdebug=1153 +Outasmsrcchk=0 +Outasmsrc=1157 +Outasmoptall=1 +Common=0 +Outerrlistchk=0 +Outerrlist=1173 +Xreference=0 +Preprocess=0 +Prenocomment=0 +Predefine=0 +Preifdef=1 +Preinclude=0 +Preline=1 +Prenumber=1 +Formfeed=0 +Columns=132 +Lines=0 +Tablength=8 +Ansi=0 +Cpraspras=0 +Commentnest=0 +Intunexpand=0 +Kanjicode=1210 +Verbose=0 +CommandFile=0 +Warninglevel=1 +Startupchk=1 +Fixation=1 +FarROMization=1 +Objectsel=1305 +Librarychk=1 +Floatingpoint=0 +Muldivunit=1 +Mulunit=1 +Startup=s0rll.rel +Library1=cl0rdm.lib +Library2=cl0rm.lib +Library3=cl0rmf.lib +VF78K0Rchk=0 +VF78K0Rvs= +[Options.CC78K0R 2] +Version=210 +Define0= +Define1=_debug_,_TEG_,proc_is_ke3 +Define2=_debug_,_TEG_,proc_is_ke3,%time% +Define3=_TEG_,proc_is_ke3 +Define4=proc_is_ke3 +Include0=renge,C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r +Include1=renge,C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r +Include2=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r +Memorymodel=1 +Flashobj=0 +FlashStartadr= +FlashBranchStartadr= +Mirror=0 +Saddrglobalchk=1 +Saddrglobal=1063 +Saddrstaticchk=1 +Saddrstatic=1069 +Bitfieldmsb=0 +Onebytechk=0 +Pacstructchk=0 +AssignROMchk=0 +AssignROM=0 +Maxoptimizechk=0 +Maxoptimize=1104 +Charunexpandchk=0 +Unsignedchar=0 +Usesaddrchk=0 +Autoallocationchk=1 +Jumpoptimize=1 +Librarycallchk=1 +Librarycall=1129 +Aggressivechk=1 +Relativebranchchk=0 +Debugoptchk=0 +Outdebugchk=1 +Outdebug=1153 +Outobjectcmb0= +Outobjectcmb1=obj +Outasmsrccmb0=inter_asm +Outasmsrccmb1=bsr.asm +Outasmsrcchk=1 +Outasmsrc=1158 +Outasmoptall=1 +Common=0 +Outerrlistchk=0 +Outerrlist=1174 +Xreference=0 +Preprocess=0 +Prenocomment=0 +Predefine=0 +Preifdef=1 +Preinclude=1 +Preline=1 +Prenumber=1 +Formfeed=0 +Columns=132 +Lines=0 +Tablength=8 +Ansi=0 +Cpraspras=1 +Commentnest=0 +Intunexpand=1 +Kanjicode=1210 +Verbose=0 +CommandFile=0 +Warninglevel=1 +Startupchk=1 +Fixation=0 +FarROMization=0 +Objectsel=1305 +Librarychk=1 +Floatingpoint=0 +Muldivunit=1 +Mulunit=1 +Startup=s0rm.rel +Library1=cl0rdm.lib +Library2=cl0rm.lib +Library3=cl0rmf.lib +VfiFileBoot0= +VfiFileBoot1=boot.vfi +VF78K0Rchk=0 +VF78K0Rvs= +[Options.CC78K0R 3] +Version=210 +Define0=_debug_,proc_is_bsr,_TEG_ +Define1=_debug_,proc_is_bsr +Define2=proc_is_bsr +Define3=_TEG_,proc_is_ke3 +Define4=proc_is_ke3 +Include0=renge,C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r +Include1=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r +Memorymodel=1 +Flashobj=0 +FlashStartadr= +FlashBranchStartadr= +Mirror=0 +Saddrglobalchk=0 +Saddrglobal=1066 +Saddrstaticchk=0 +Saddrstatic=1072 +Bitfieldmsb=0 +Onebytechk=0 +Pacstructchk=0 +AssignROMchk=0 +AssignROM=0 +Maxoptimizechk=0 +Maxoptimize=1104 +Charunexpandchk=1 +Unsignedchar=0 +Usesaddrchk=0 +Autoallocationchk=1 +Jumpoptimize=1 +Librarycallchk=0 +Librarycall=1129 +Aggressivechk=1 +Relativebranchchk=1 +Debugoptchk=0 +Outdebugchk=1 +Outdebug=1153 +Outasmsrccmb0=inter_asm +Outasmsrccmb1=bsr.asm +Outasmsrcchk=1 +Outasmsrc=1158 +Outasmoptall=1 +Common=0 +Outerrlistchk=0 +Outerrlist=1174 +Xreference=0 +Preprocess=0 +Prenocomment=0 +Predefine=0 +Preifdef=1 +Preinclude=0 +Preline=1 +Prenumber=1 +Formfeed=0 +Columns=132 +Lines=0 +Tablength=8 +Ansi=0 +Cpraspras=1 +Commentnest=0 +Intunexpand=0 +Kanjicode=1210 +Verbose=0 +CommandFile=0 +Warninglevel=0 +Startupchk=1 +Fixation=1 +FarROMization=0 +Objectsel=1305 +Librarychk=1 +Floatingpoint=0 +Muldivunit=1 +Mulunit=1 +Startup=s0rml.rel +Library1=cl0rdm.lib +Library2=cl0rm.lib +Library3=cl0rmf.lib +VfiFileBoot0= +VfiFileBoot1=boot.vfi +VF78K0Rchk=0 +VF78K0Rvs= +[Options.CC78K0R 4] +Version=210 +Define0=proc_is_bsr +Include0=renge,C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r +Include1=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r +Memorymodel=1 +Flashobj=0 +FlashStartadr= +FlashBranchStartadr= +Mirror=0 +Saddrglobalchk=0 +Saddrglobal=1066 +Saddrstaticchk=0 +Saddrstatic=1072 +Bitfieldmsb=0 +Onebytechk=0 +Pacstructchk=0 +AssignROMchk=0 +AssignROM=0 +Maxoptimizechk=0 +Maxoptimize=1104 +Charunexpandchk=1 +Unsignedchar=0 +Usesaddrchk=0 +Autoallocationchk=1 +Jumpoptimize=1 +Librarycallchk=0 +Librarycall=1129 +Aggressivechk=1 +Relativebranchchk=1 +Debugoptchk=0 +Outdebugchk=1 +Outdebug=1153 +Outasmsrccmb0=inter_asm +Outasmsrccmb1=bsr.asm +Outasmsrcchk=1 +Outasmsrc=1158 +Outasmoptall=1 +Common=0 +Outerrlistchk=0 +Outerrlist=1174 +Xreference=0 +Preprocess=0 +Prenocomment=0 +Predefine=0 +Preifdef=1 +Preinclude=0 +Preline=1 +Prenumber=1 +Formfeed=0 +Columns=132 +Lines=0 +Tablength=8 +Ansi=0 +Cpraspras=1 +Commentnest=0 +Intunexpand=0 +Kanjicode=1210 +Verbose=0 +CommandFile=0 +Warninglevel=0 +Startupchk=1 +Fixation=1 +FarROMization=0 +Objectsel=1305 +Librarychk=1 +Floatingpoint=0 +Muldivunit=1 +Mulunit=1 +Startup=s0rml.rel +Library1=cl0rdm.lib +Library2=cl0rm.lib +Library3=cl0rmf.lib +VfiFileBoot0= +VfiFileBoot1=boot.vfi +VF78K0Rchk=0 +VF78K0Rvs= +[Options.CC78K0R 5] +Version=210 +Define0= +Define1=_debug_,proc_is_bsr,_TEG_,_WM0_ +Define2=_debug_,proc_is_bsr,_TEG_,_WM0 +Define3=_debug_,proc_is_bsr,_TEG_ +Define4=_debug_,proc_is_bsr +Include0=renge,C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r +Include1=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r +Memorymodel=1 +Flashobj=0 +FlashStartadr= +FlashBranchStartadr= +Mirror=0 +Saddrglobalchk=0 +Saddrglobal=1066 +Saddrstaticchk=0 +Saddrstatic=1072 +Bitfieldmsb=0 +Onebytechk=0 +Pacstructchk=0 +AssignROMchk=0 +AssignROM=0 +Maxoptimizechk=0 +Maxoptimize=1104 +Charunexpandchk=1 +Unsignedchar=0 +Usesaddrchk=0 +Autoallocationchk=1 +Jumpoptimize=1 +Librarycallchk=0 +Librarycall=1129 +Aggressivechk=1 +Relativebranchchk=1 +Debugoptchk=0 +Outdebugchk=1 +Outdebug=1153 +Outasmsrccmb0=inter_asm +Outasmsrccmb1=bsr.asm +Outasmsrcchk=1 +Outasmsrc=1158 +Outasmoptall=1 +Common=0 +Outerrlistchk=0 +Outerrlist=1174 +Xreference=0 +Preprocess=0 +Prenocomment=0 +Predefine=0 +Preifdef=1 +Preinclude=0 +Preline=1 +Prenumber=1 +Formfeed=0 +Columns=132 +Lines=0 +Tablength=8 +Ansi=0 +Cpraspras=1 +Commentnest=0 +Intunexpand=0 +Kanjicode=1210 +Verbose=0 +CommandFile=0 +Warninglevel=0 +Startupchk=1 +Fixation=1 +FarROMization=0 +Objectsel=1305 +Librarychk=1 +Floatingpoint=0 +Muldivunit=1 +Mulunit=1 +Startup=s0rml.rel +Library1=cl0rdm.lib +Library2=cl0rm.lib +Library3=cl0rmf.lib +VfiFileBoot0= +VfiFileBoot1=boot.vfi +VF78K0Rchk=0 +VF78K0Rvs= +[Options.CC78K0R 2 self_flash.c] +Version=210 +Define0= +Define1=_debug_,_TEG_,proc_is_ke3 +Define2=_debug_,_TEG_,proc_is_ke3,%time% +Undefine0= +Include0=renge,C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r +Include1=renge,C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r +Include2=renge,C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r +Include3=renge,C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r +Include4=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r +Memorymodel=1 +Flashobj=0 +FlashStartadr= +FlashBranchStartadr= +Mirror=0 +Saddrglobalchk=1 +Saddrglobal=1063 +Saddrstaticchk=0 +Saddrstatic=1072 +Bitfieldmsb=0 +Onebytechk=0 +Pacstructchk=0 +AssignROMchk=0 +AssignROM=0 +Maxoptimizechk=0 +Maxoptimize=1104 +Charunexpandchk=0 +Unsignedchar=0 +Usesaddrchk=0 +Autoallocationchk=1 +Jumpoptimize=1 +Librarycallchk=1 +Librarycall=1129 +Aggressivechk=1 +Relativebranchchk=0 +Debugoptchk=0 +Outdebugchk=1 +Outdebug=1153 +Outobjectcmb0= +Outobjectcmb1=obj +Outasmsrccmb0=inter_asm +Outasmsrccmb1=bsr.asm +Outasmsrcchk=1 +Outasmsrc=1158 +Outasmoptall=1 +Common=0 +Outerrlistchk=0 +Outerrlist=1174 +Xreference=0 +Preprocess=0 +Prenocomment=0 +Predefine=0 +Preifdef=1 +Preinclude=1 +Preline=1 +Prenumber=1 +Formfeed=0 +Columns=132 +Lines=0 +Tablength=8 +Ansi=0 +Cpraspras=1 +Commentnest=0 +Intunexpand=1 +Kanjicode=1210 +Verbose=0 +CommandFile=0 +Warninglevel=1 +Startupchk=1 +Fixation=0 +FarROMization=0 +Objectsel=1305 +Librarychk=1 +Floatingpoint=0 +Muldivunit=1 +Mulunit=1 +Startup=s0rm.rel +Library1=cl0rdm.lib +Library2=cl0rm.lib +Library3=cl0rmf.lib +VfiFileBoot0= +VfiFileBoot1=boot.vfi +VF78K0Rchk=0 +VF78K0Rvs= +[Options.CC78K0R 2 vreg_twl.c] +Version=210 +Define0= +Define1=_debug_,_TEG_,proc_is_ke3 +Define2=_debug_,_TEG_,proc_is_ke3,%time% +Undefine0= +Include0=renge,C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r +Include1=renge,C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r +Include2=renge,C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r +Include3=renge,C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r +Include4=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r +Memorymodel=1 +Flashobj=0 +FlashStartadr= +FlashBranchStartadr= +Mirror=0 +Saddrglobalchk=1 +Saddrglobal=1063 +Saddrstaticchk=1 +Saddrstatic=1075 +Bitfieldmsb=0 +Onebytechk=0 +Pacstructchk=0 +AssignROMchk=0 +AssignROM=0 +Maxoptimizechk=0 +Maxoptimize=1104 +Charunexpandchk=0 +Unsignedchar=0 +Usesaddrchk=0 +Autoallocationchk=1 +Jumpoptimize=1 +Librarycallchk=1 +Librarycall=1129 +Aggressivechk=1 +Relativebranchchk=0 +Debugoptchk=0 +Outdebugchk=1 +Outdebug=1153 +Outobjectcmb0= +Outobjectcmb1=obj +Outasmsrccmb0=inter_asm +Outasmsrccmb1=bsr.asm +Outasmsrcchk=1 +Outasmsrc=1158 +Outasmoptall=1 +Common=0 +Outerrlistchk=0 +Outerrlist=1174 +Xreference=0 +Preprocess=0 +Prenocomment=0 +Predefine=0 +Preifdef=1 +Preinclude=1 +Preline=1 +Prenumber=1 +Formfeed=0 +Columns=132 +Lines=0 +Tablength=8 +Ansi=0 +Cpraspras=1 +Commentnest=0 +Intunexpand=1 +Kanjicode=1210 +Verbose=0 +CommandFile=0 +Warninglevel=1 +Startupchk=1 +Fixation=0 +FarROMization=0 +Objectsel=1305 +Librarychk=1 +Floatingpoint=0 +Muldivunit=1 +Mulunit=1 +Startup=s0rm.rel +Library1=cl0rdm.lib +Library2=cl0rm.lib +Library3=cl0rmf.lib +VfiFileBoot0= +VfiFileBoot1=boot.vfi +VF78K0Rchk=0 +VF78K0Rvs= +[Options.CC78K0R 2 renge.c] +Version=210 +Define0= +Define1=_debug_,_TEG_,proc_is_ke3 +Define2=_debug_,_TEG_,proc_is_ke3,%time% +Undefine0= +Include0=renge,C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r +Include1=renge,C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r +Include2=renge,C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r +Include3=renge,C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r +Include4=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r +Memorymodel=1 +Flashobj=0 +FlashStartadr= +FlashBranchStartadr= +Mirror=0 +Saddrglobalchk=1 +Saddrglobal=1063 +Saddrstaticchk=1 +Saddrstatic=1075 +Bitfieldmsb=0 +Onebytechk=0 +Pacstructchk=0 +AssignROMchk=0 +AssignROM=0 +Maxoptimizechk=0 +Maxoptimize=1104 +Charunexpandchk=0 +Unsignedchar=0 +Usesaddrchk=0 +Autoallocationchk=1 +Jumpoptimize=1 +Librarycallchk=1 +Librarycall=1129 +Aggressivechk=1 +Relativebranchchk=0 +Debugoptchk=0 +Outdebugchk=1 +Outdebug=1153 +Outobjectcmb0= +Outobjectcmb1=obj +Outasmsrccmb0=inter_asm +Outasmsrccmb1=bsr.asm +Outasmsrcchk=1 +Outasmsrc=1158 +Outasmoptall=1 +Common=0 +Outerrlistchk=0 +Outerrlist=1174 +Xreference=0 +Preprocess=0 +Prenocomment=0 +Predefine=0 +Preifdef=1 +Preinclude=1 +Preline=1 +Prenumber=1 +Formfeed=0 +Columns=132 +Lines=0 +Tablength=8 +Ansi=0 +Cpraspras=1 +Commentnest=0 +Intunexpand=1 +Kanjicode=1210 +Verbose=0 +CommandFile=0 +Warninglevel=1 +Startupchk=1 +Fixation=0 +FarROMization=0 +Objectsel=1305 +Librarychk=1 +Floatingpoint=0 +Muldivunit=1 +Mulunit=1 +Startup=s0rm.rel +Library1=cl0rdm.lib +Library2=cl0rm.lib +Library3=cl0rmf.lib +VfiFileBoot0= +VfiFileBoot1=boot.vfi +VF78K0Rchk=0 +VF78K0Rvs= +[Options.CC78K0R 2 vreg_ctr.c] +Version=210 +Define0= +Define1=_debug_,_TEG_,proc_is_ke3 +Define2=_debug_,_TEG_,proc_is_ke3,%time% +Undefine0= +Include0=renge,C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r +Include1=renge,C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r +Include2=renge,C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r +Include3=renge,C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r +Include4=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r +Memorymodel=1 +Flashobj=0 +FlashStartadr= +FlashBranchStartadr= +Mirror=0 +Saddrglobalchk=1 +Saddrglobal=1063 +Saddrstaticchk=1 +Saddrstatic=1075 +Bitfieldmsb=0 +Onebytechk=0 +Pacstructchk=0 +AssignROMchk=0 +AssignROM=0 +Maxoptimizechk=0 +Maxoptimize=1104 +Charunexpandchk=0 +Unsignedchar=0 +Usesaddrchk=0 +Autoallocationchk=1 +Jumpoptimize=1 +Librarycallchk=1 +Librarycall=1129 +Aggressivechk=1 +Relativebranchchk=0 +Debugoptchk=0 +Outdebugchk=1 +Outdebug=1153 +Outobjectcmb0= +Outobjectcmb1=obj +Outasmsrccmb0=inter_asm +Outasmsrccmb1=bsr.asm +Outasmsrcchk=1 +Outasmsrc=1158 +Outasmoptall=1 +Common=0 +Outerrlistchk=0 +Outerrlist=1174 +Xreference=0 +Preprocess=0 +Prenocomment=0 +Predefine=0 +Preifdef=1 +Preinclude=1 +Preline=1 +Prenumber=1 +Formfeed=0 +Columns=132 +Lines=0 +Tablength=8 +Ansi=0 +Cpraspras=1 +Commentnest=0 +Intunexpand=1 +Kanjicode=1210 +Verbose=0 +CommandFile=0 +Warninglevel=1 +Startupchk=1 +Fixation=0 +FarROMization=0 +Objectsel=1305 +Librarychk=1 +Floatingpoint=0 +Muldivunit=1 +Mulunit=1 +Startup=s0rm.rel +Library1=cl0rdm.lib +Library2=cl0rm.lib +Library3=cl0rmf.lib +VfiFileBoot0= +VfiFileBoot1=boot.vfi +VF78K0Rchk=0 +VF78K0Rvs= +[Options.LK78K0R 0] +Version=100 +O0=bsr_k0r.lmf +O1=bsr.lmf +O2=flash.lmf +O3=a.lmf +G=1 +E=0 +E0=flash.elk +E1=a.elk +GO=1 +GOValue=85 +GOStart=FC00 +GOSizeValue=1024 +GI=1 +GIValue=FFFFFFFFFFFFFFFFFFFF +CCZA=0 +MemInfoCheck=1 +P=1 +P0=bsr_k0r.map +P1=bsr.map +P2=flash.map +P3=a.map +MI=0 +GB=1 +GBValue=6EFBFF +KM=1 +KD=0 +KP=1 +KL=0 +LF=0 +LL=0 +B0=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\lib78k0r\fsl.lib +D0=bsr_mcu.dr +D1=user_area.dr +S=1 +W=0 +SELFCheck=1 +SELF=0 +ZB= +Etcetera0= +Etcetera1=boot.lmf +CommandFile=0 +[Options.LK78K0R 1] +Version=100 +O0=a.lmf +G=0 +E=0 +E0=a.elk +GO=0 +GOValue= +GOStart=FC00 +GOSizeValue=1024 +GI=0 +GIValue=FFFFFFFFFFFFFFFFFFFF +CCZA=1 +MemInfoCheck=0 +P=1 +P0=a.map +MI=0 +GB=0 +GBValue= +KM=1 +KD=1 +KP=0 +KL=0 +LF=0 +LL=0 +S=0 +W=1 +SELFCheck=0 +SELF=0 +ZB= +CommandFile=0 +[Options.LK78K0R 2] +Version=100 +O0=bsr.lmf +O1=bsr_k0r.lmf +O2=flash.lmf +O3=a.lmf +G=1 +E=0 +E0=flash.elk +E1=a.elk +GO=0 +GOValue=85 +GOStart=FC00 +GOSizeValue=1024 +GI=1 +GIValue=1B339499E033F240BFAA +CCZA=0 +MemInfoCheck=1 +P=1 +P0=bsr_k0r.map +P1=bsr.map +P2=flash.map +P3=a.map +MI=0 +GB=1 +GBValue=7EFBFF +KM=1 +KD=0 +KP=0 +KL=0 +LF=0 +LL=0 +B0=C:\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\lib78k0r\fsl.lib +B1=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\lib78k0r\fsl.lib +D0=bsr_mcu.dr +D1=user_area.dr +S=1 +W=2 +SELFCheck=0 +SELF=0 +ZB= +Etcetera0= +Etcetera1=boot.lmf +CommandFile=0 +OFILE=C:\78k_data\yav-mcu-basara\trunk\bsr.lmf +[Options.LK78K0R 3] +Version=100 +O0=bsr_bsr.lmf +O1=bsr_k0r.lmf +O2=bsr.lmf +O3=flash.lmf +O4=a.lmf +G=1 +E=0 +E0=flash.elk +E1=a.elk +GO=1 +GOValue=85 +GOStart=FC00 +GOSizeValue=1024 +GI=1 +GIValue=FFFFFFFFFFFFFFFFFFFF +CCZA=0 +MemInfoCheck=1 +P=1 +P0=bsr_bsr.map +P1=bsr_k0r.map +P2=bsr.map +P3=flash.map +P4=a.map +MI=0 +GB=1 +GBValue=6EFBFF +KM=1 +KD=0 +KP=1 +KL=0 +LF=0 +LL=0 +B0=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\lib78k0r\fsl.lib +D0=bsr_mcu.dr +D1=user_area.dr +S=1 +W=2 +SELFCheck=0 +SELF=0 +ZB= +Etcetera0= +Etcetera1=boot.lmf +CommandFile=0 +[Options.LK78K0R 4] +Version=100 +O0=bsr_k0r.lmf +O1=bsr.lmf +O2=flash.lmf +O3=a.lmf +G=1 +E=0 +E0=flash.elk +E1=a.elk +GO=1 +GOValue=85 +GOStart=FC00 +GOSizeValue=1024 +GI=1 +GIValue=FFFFFFFFFFFFFFFFFFFF +CCZA=0 +MemInfoCheck=1 +P=1 +P0=bsr_k0r.map +P1=bsr.map +P2=flash.map +P3=a.map +MI=0 +GB=1 +GBValue=6EFBFF +KM=1 +KD=0 +KP=1 +KL=0 +LF=0 +LL=0 +B0=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\lib78k0r\fsl.lib +D0=bsr_mcu.dr +D1=user_area.dr +S=1 +W=0 +SELFCheck=1 +SELF=0 +ZB= +Etcetera0= +Etcetera1=boot.lmf +CommandFile=0 +[Options.LK78K0R 5] +Version=100 +O0=bsr_bsr.lmf +O1=bsr_k0r.lmf +O2=bsr.lmf +O3=flash.lmf +O4=a.lmf +G=1 +E=0 +E0=flash.elk +E1=a.elk +GO=1 +GOValue=85 +GOStart=FC00 +GOSizeValue=1024 +GI=1 +GIValue=FFFFFFFFFFFFFFFFFFFF +CCZA=0 +MemInfoCheck=1 +P=1 +P0=bsr_bsr.map +P1=bsr_k0r.map +P2=bsr.map +P3=flash.map +P4=a.map +MI=0 +GB=1 +GBValue=6EFBFF +KM=1 +KD=0 +KP=1 +KL=0 +LF=0 +LL=0 +B0=C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\lib78k0r\fsl.lib +D0=bsr_mcu.dr +D1=user_area.dr +S=1 +W=2 +SELFCheck=0 +SELF=0 +ZB= +Etcetera0= +Etcetera1=boot.lmf +CommandFile=0 +[Options.LCNV78K0R 0] +Version=100 +LCNV_GO=0 +E=0 +CommandFile=0 +[Options.LCNV78K0R 1] +Version=100 +LCNV_GO=0 +E=0 +CommandFile=0 +[Options.LCNV78K0R 2] +Version=100 +LCNV_GO=0 +O0=inter_asm +E=0 +CommandFile=0 +[Options.LCNV78K0R 3] +Version=100 +LCNV_GO=0 +E=0 +CommandFile=0 +[Options.LCNV78K0R 4] +Version=100 +LCNV_GO=0 +E=0 +CommandFile=0 +[Options.LCNV78K0R 5] +Version=100 +LCNV_GO=0 +E=0 +CommandFile=0 +[Options.78K0R] +BuildMode=2 +BuildMode2=K0R_dbg +BuildMode3=BSR_dbg +BuildMode4=BSR_rel +BuildMode5=BSR_WM0 +DefaultMode2=1 +DefaultMode3=1 +DefaultMode4=1 +DefaultMode5=1 diff --git a/tags/2.03_SDK-3.1/yav_mcu_bsr.prk b/tags/2.03_SDK-3.1/yav_mcu_bsr.prk new file mode 100644 index 0000000..9f3d5b7 --- /dev/null +++ b/tags/2.03_SDK-3.1/yav_mcu_bsr.prk @@ -0,0 +1,23 @@ +[ProjectManager] +FrameMax=0 +FrameX=562 +FrameY=3 +FrameCX=1191 +FrameCY=681 +OpenFile1=i2c_ctr.c,0,655,120,1628,751,0,1,0,0 +OpenFile2=kanaria_c.c,0,68,138,763,769,8,5,8,0 +OpenFile3=ProjectWindow +PrjPos=0,0,706,0,291 +OpenFile4=pm.c,0,373,197,1346,828,35,374,32,0 +OpenFile5=accero.c,0,200,200,1016,818,109,227,2,0 +OpenFile6=i2c_mcu.h,0,671,375,1487,993,16,7,16,0 +OpenFile7=task_sys.c,0,225,225,1471,947,0,445,0,0 +OpenFile8=loader.c,0,250,250,1841,957,6,157,1,0 +OpenFile9=config.h,0,75,75,902,478,29,6,29,0 +OpenFile10=i2c_mcu.c,0,175,175,1036,939,1,453,1,0 +OpenFile11=main.c,0,402,105,1713,812,0,68,0,0 +OpenFile12=OutputWindow +OutputPos=0,21,472,273,1150 +ActivePRJ=yav_mcu_bsr.prj +[ProjectWindow] +ProjectWindowDispType=0 diff --git a/tags/2.03_SDK-3.1/yav_mcu_bsr.prw b/tags/2.03_SDK-3.1/yav_mcu_bsr.prw new file mode 100644 index 0000000..7c0bbd6 --- /dev/null +++ b/tags/2.03_SDK-3.1/yav_mcu_bsr.prw @@ -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 diff --git a/tags/2.03_SDK-3.1/yav_mcu_bsr.sdb b/tags/2.03_SDK-3.1/yav_mcu_bsr.sdb new file mode 100644 index 0000000..20998a5 --- /dev/null +++ b/tags/2.03_SDK-3.1/yav_mcu_bsr.sdb @@ -0,0 +1,312 @@ +[SdbInfo] +Ver=5 +[loader.c] +T=4e5db4bc +1=incs_loader.h +2=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\fsl.h +3=fsl_user.h +4=i2c_ctr.h +5=i2c_mcu.h +6=pm.h +7=rtc.h +8=reboot.h +9=magic.h +[pm.c] +T=4e5dbf8d +1=incs.h +2=adc.h +3=led.h +4=pm.h +5=renge\renge.h +6=batt_params.h +7=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\fsl.h +8=fsl_user.h +[i2c_ctr.c] +T=4e532b68 +1=config.h +2=incs.h +[main.c] +T=4e5dbf8d +1=incs_loader.h +2=WDT.h +3=rtc.h +4=pm.h +5=accero.h +6=led.h +7=adc.h +8=pool.h +[magic.c] +T=4e5dbfb4 +1=config.h +2=magic.h +[WDT.c] +T=4e424710 +1=incs_loader.h +[i2c_mcu.c] +T=4e56f834 +1=incs_loader.h +2=i2c_mcu.h +[i2c_twl.c] +T=4e4e1d71 +1=config.h +2=incs.h +3=i2c_twl_defs.h +4=i2c_twl.h +[led.c] +T=4e5b390f +1=incs.h +2=led.h +[rtc.c] +T=4e423614 +1=incs.h +[vreg_ctr.c] +T=4e5c39a6 +1=incs.h +2=vreg_ctr.h +3=rtc.h +4=led.h +5=accero.h +6=pm.h +7=pool.h +8=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\fsl.h +9=fsl_user.h +[vreg_twl.c] +T=4e530e07 +1=incs.h +2=jhl_defs.h +3=led.h +4=vreg_twl.h +5=vreg_ctr.h +[adc.c] +T=4e531196 +1=incs.h +2=adc.h +3=pm.h +4=led.h +5=vreg_twl.h +[renge\renge.c] +T=4e54a654 +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=sim\simOnWin.h +8=bsr_system.h +[accero.c] +T=4e5c3a75 +1=config.h +2=incs.h +3=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\math.h +[self_flash.c] +T=4e409e18 +1=incs_loader.h +2=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\fsl.h +3=fsl_user.h +4=i2c_ctr.h +5=pool.h +6=magic.h +7=pm.h +[sw.c] +T=4e54ca66 +1=incs.h +2=i2c_twl.h +3=i2c_ctr.h +4=led.h +5=pm.h +6=rtc.h +7=sw.h +[task_debug.c] +T=4e5c398f +1=incs_loader.h +2=renge\renge.h +3=pm.h +4=accero.h +[task_misc.c] +T=4e5dc039 +1=incs.h +2=renge\renge.h +3=pm.h +4=accero.h +5=adc.h +6=i2c_mcu.h +7=led.h +8=vreg_twl.h +[task_sys.c] +T=4e5dbf8d +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 +10=self_flash.h +[pedo_alg_thre_det2.c] +T=4e522ab6 +1=incs.h +2=..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\math.h +3=accero.h +4=pedometer.h +5=pool.h +[ini_VECT.c] +T=4e409e1a +1=config.h +2=sim\sim_interrupt_decrare.c +[task_status.c] +T=4e532a61 +1=incs_loader.h +2=renge\renge.h +3=hal.h +4=pm.h +5=accero.h +6=adc.h +7=i2c_mcu.h +8=led.h +[led_cam.c] +T=4e55dd12 +1=incs.h +2=led.h +[led_pow.c] +T=4e530e07 +1=incs.h +2=led.h +[hal.c] +T=4e532b4c +1=incs_loader.h +[batt_params.c] +T=4e409e1b +1=jhl_defs.h +2=batt_params.h +[voltable.c] +T=4e422f23 +1=incs.h +[pedo_lpf_coeff.c] +T=4e422f1d +1=incs.h +[kanaria.asm] +T=4e4226a2 +[kanaria_c.c] +T=4e522dba +1=incs.h +[get_ei.asm] +T=4e5223c3 +[incs_loader.h] +T=4e409e1d +1=sim\simOnWin.h +2=jhl_defs.h +3=user_define.h +4=hal.h +5=bsr_system.h +6=renge\renge.h +7=vreg_ctr.h +8=vreg_twl.h +9=loader.h +10=i2c_mcu.h +11=WDT.h +[sim\simOnWin.h] +T=4e559884 +1=sim\sfrAlias.h +[sim\sfrAlias.h] +T=4e5b0fa2 +1=config.h +[config.h] +T=4e5cbce4 +[jhl_defs.h] +T=4df82cd1 +1=config.h +[user_define.h] +T=4e5b1041 +[hal.h] +T=4e5229fb +[bsr_system.h] +T=4e409e1a +[renge\renge.h] +T=4e54e394 +1=renge\renge_defs.h +2=renge\renge_task_immediate.h +[renge\renge_defs.h] +T=4c073c5a +[renge\renge_task_immediate.h] +T=4e54ab05 +1=renge\renge_defs.h +[vreg_ctr.h] +T=4e409e1c +1=config.h +[vreg_twl.h] +T=4d42202e +[loader.h] +T=4c318e0f +[i2c_mcu.h] +T=4e55a31b +[WDT.h] +T=4c319dfc +[..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\fsl.h] +T=49a3bd4e +[fsl_user.h] +T=4e409e62 +[i2c_ctr.h] +T=4bf0d1e1 +[pm.h] +T=4e5dbf8d +[rtc.h] +T=4e409e1c +[reboot.h] +T=4bf0d1e1 +[magic.h] +T=4caab849 +[incs.h] +T=4e409e18 +1=sim\simOnWin.h +2=jhl_defs.h +3=user_define.h +4=hal.h +5=bsr_system.h +6=renge\renge.h +7=loader.h +8=vreg_ctr.h +9=vreg_twl.h +10=i2c_mcu.h +11=i2c_twl.h +12=rtc.h +13=accero.h +14=pm.h +15=sw.h +16=adc.h +17=WDT.h +[i2c_twl.h] +T=4bf4e29e +[accero.h] +T=4e54ab05 +1=jhl_defs.h +2=pedometer.h +[pedometer.h] +T=4e409e19 +[sw.h] +T=4df2001a +1=config.h +[adc.h] +T=4dd5c8b2 +1=jhl_defs.h +[led.h] +T=4e530d97 +[batt_params.h] +T=4e409e1c +1=jhl_defs.h +[pool.h] +T=4c072cf1 +1=pedometer.h +[i2c_twl_defs.h] +T=4bf0d1e1 +[renge\renge_task_intval.h] +T=4e530e07 +1=renge\renge_defs.h +[..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\math.h] +T=45f12258 +[self_flash.h] +T=4bf0d1e0 +[sim\sim_interrupt_decrare.c] +T=4e409e19 diff --git a/tags/2.03_SDK-3.1/ベースからの変更.xls b/tags/2.03_SDK-3.1/ベースからの変更.xls new file mode 100644 index 0000000000000000000000000000000000000000..5212dac6485080dca2bfd246e855585895ff82af GIT binary patch literal 26624 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 literal 0 HcmV?d00001