From 683798248afb62f034806a4b55a541b97527884f Mon Sep 17 00:00:00 2001 From: n2232 Date: Thu, 26 Jan 2012 08:18:49 +0000 Subject: [PATCH] =?UTF-8?q?spfl=E7=94=9F=E7=94=A3=E5=90=91=E3=81=91=20(bra?= =?UTF-8?q?nches/CTR=5FSDK-3=5F2=5F5-PEE)?= 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@448 013db118-44a6-b54f-8bf7-843cb86687b1 --- tags/2.1E_spfl_dp2(sdk3PEE-spfl)/OMakefile | 159 ++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/OMakeroot | 4 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/WDT.c | 12 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/WDT.h | 20 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/accero.c | 279 ++++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/accero.h | 14 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/adc.c | 475 ++++++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/adc.h | 48 + .../2.1E_spfl_dp2(sdk3PEE-spfl)/batt_params.c | 87 + .../2.1E_spfl_dp2(sdk3PEE-spfl)/batt_params.h | 49 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/bsr.hex | 994 ++++++++++++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/bsr.lmf | Bin 0 -> 177860 bytes tags/2.1E_spfl_dp2(sdk3PEE-spfl)/bsr_k0r.map | 863 ++++++++++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/bsr_mcu.dr | 46 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/bsr_system.h | 67 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/config.h | 97 ++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/fsl.h | 362 +++++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/fsl_user.h | 113 ++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/get_ei.asm | 26 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/hal.c | 182 +++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/hal.h | 16 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/hoge.bin | Bin 0 -> 16387 bytes tags/2.1E_spfl_dp2(sdk3PEE-spfl)/i2c_ctr.c | 310 ++++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/i2c_ctr.h | 210 +++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/i2c_mcu.c | 651 ++++++++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/i2c_mcu.h | 40 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/i2c_twl.c | 244 +++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/i2c_twl.h | 7 + .../i2c_twl_defs.h | 196 +++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/incs.h | 43 + .../2.1E_spfl_dp2(sdk3PEE-spfl)/incs_loader.h | 40 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/ini_VECT.c | 347 ++++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/jhl_defs.h | 25 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/kanaria.asm | 12 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/kanaria_c.c | 18 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/led.c | 373 +++++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/led.h | 142 ++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/led_cam.c | 156 ++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/led_pow.c | 296 ++++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/loader.c | 392 +++++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/loader.h | 6 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/magic.c | 33 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/magic.h | 24 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/main.c | 99 ++ .../nec_s_2_bsrbin2.rb | 82 + .../pedo_alg_thre_det2.c | 567 +++++++ .../pedo_lpf_coeff.c | 87 + .../pedo_lpf_coeff.h | 84 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/pedometer.h | 36 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/pm.c | 1443 +++++++++++++++++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/pm.h | 216 +++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/pool.h | 24 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/reboot.c | 23 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/reboot.h | 6 + .../2.1E_spfl_dp2(sdk3PEE-spfl)/renge/renge.c | 313 ++++ .../2.1E_spfl_dp2(sdk3PEE-spfl)/renge/renge.h | 26 + .../renge/renge_defs.h | 55 + .../renge/renge_task_config.rb | 59 + .../renge/renge_task_immediate.h | 25 + .../renge/renge_task_intval.h | 37 + .../renge/renge_tasks.txt | 11 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/rtc.c | 182 +++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/rtc.h | 21 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/self_flash.c | 635 ++++++++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/self_flash.h | 9 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/sw.c | 205 +++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/sw.h | 20 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/task_debug.c | 122 ++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/task_misc.c | 424 +++++ .../2.1E_spfl_dp2(sdk3PEE-spfl)/task_status.c | 89 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/task_sys.c | 668 ++++++++ .../2.1E_spfl_dp2(sdk3PEE-spfl)/user_define.h | 214 +++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/util_funcs.c | 65 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/util_funcs.h | 16 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/voltable.c | 64 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/voltable.h | 57 + tags/2.1E_spfl_dp2(sdk3PEE-spfl)/vreg_ctr.c | 611 +++++++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/vreg_ctr.h | 302 ++++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/vreg_twl.c | 169 ++ tags/2.1E_spfl_dp2(sdk3PEE-spfl)/vreg_twl.h | 127 ++ .../yav_mcu_bsr.plg | 207 +++ .../yav_mcu_bsr.pri | 1028 ++++++++++++ .../yav_mcu_bsr.prj | 1406 ++++++++++++++++ .../yav_mcu_bsr.prk | 24 + .../yav_mcu_bsr.prw | 8 + .../yav_mcu_bsr.sdb | 312 ++++ .../ベースからの変更.xls | Bin 0 -> 26624 bytes 87 files changed, 17656 insertions(+) create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/OMakefile create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/OMakeroot create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/WDT.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/WDT.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/accero.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/accero.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/adc.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/adc.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/batt_params.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/batt_params.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/bsr.hex create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/bsr.lmf create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/bsr_k0r.map create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/bsr_mcu.dr create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/bsr_system.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/config.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/fsl.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/fsl_user.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/get_ei.asm create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/hal.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/hal.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/hoge.bin create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/i2c_ctr.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/i2c_ctr.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/i2c_mcu.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/i2c_mcu.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/i2c_twl.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/i2c_twl.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/i2c_twl_defs.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/incs.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/incs_loader.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/ini_VECT.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/jhl_defs.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/kanaria.asm create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/kanaria_c.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/led.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/led.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/led_cam.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/led_pow.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/loader.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/loader.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/magic.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/magic.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/main.c create mode 100755 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/nec_s_2_bsrbin2.rb create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/pedo_alg_thre_det2.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/pedo_lpf_coeff.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/pedo_lpf_coeff.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/pedometer.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/pm.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/pm.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/pool.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/reboot.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/reboot.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/renge/renge.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/renge/renge.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/renge/renge_defs.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/renge/renge_task_config.rb create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/renge/renge_task_immediate.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/renge/renge_task_intval.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/renge/renge_tasks.txt create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/rtc.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/rtc.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/self_flash.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/self_flash.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/sw.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/sw.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/task_debug.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/task_misc.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/task_status.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/task_sys.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/user_define.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/util_funcs.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/util_funcs.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/voltable.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/voltable.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/vreg_ctr.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/vreg_ctr.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/vreg_twl.c create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/vreg_twl.h create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/yav_mcu_bsr.plg create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/yav_mcu_bsr.pri create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/yav_mcu_bsr.prj create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/yav_mcu_bsr.prk create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/yav_mcu_bsr.prw create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/yav_mcu_bsr.sdb create mode 100644 tags/2.1E_spfl_dp2(sdk3PEE-spfl)/ベースからの変更.xls diff --git a/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/OMakefile b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/OMakefile new file mode 100644 index 0000000..42baad6 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/OMakeroot b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/OMakeroot new file mode 100644 index 0000000..16f4b11 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/OMakeroot @@ -0,0 +1,4 @@ +# +# Include the OMakefile in this directory. +# +.SUBDIRS: . diff --git a/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/WDT.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/WDT.c new file mode 100644 index 0000000..ed3daf3 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/WDT.c @@ -0,0 +1,12 @@ +/* ======================================================== + wdt + + $Id$ + ======================================================== */ +#include "incs_loader.h" + +/* + + gAwb_Ƀ}N̂݁B + +*/ diff --git a/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/WDT.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/WDT.h new file mode 100644 index 0000000..2e28e9d --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/accero.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/accero.c new file mode 100644 index 0000000..16819dc --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/accero.c @@ -0,0 +1,279 @@ +/* ======================================================== +@xZT֌W +Ef[^XVŃf[^zグ背WX^XVACPUɊ荞 +EtOĂΕJEg +ExZT荞݂^XNo^ĉBiI2C̋Ȃǂ̂Łj + + $Id: accero.c 418 2011-09-22 01:35:37Z n2232 $ + ======================================================== */ +#ifndef _WIN32 + +#pragma SFR +#pragma NOP +#pragma HALT +#pragma STOP +#pragma ROT +// rorb, rolb, rorw, rolw +#pragma MUL +#pragma BCD + +#endif + +#ifndef _WIN32 + +#pragma interrupt INTP23 intp23_ACC_ready RB3 // xZTAf[^ + +#endif + +#include "incs.h" +#include "accero.h" +#include "i2c_mcu.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 + + +// ======================================================== +static u8 acc_retry_count; // xZTǂݏoAG[ƂgCB񐔐 + + + +// ======================================================== +task_status tsk_soft_int( ); + + + +/********************************************//** +@E荞݂mFăf[^zグAWX^ɏo܂ + + E{ł΃R[obN֐o^Ă΂ƂȂ̂łA + I2CgpHƂlƎł͂܂łłȂ̂łB + + EvƂł + ***********************************************/ +task_status_immed tski_cbk_accero( ) +{ // i^jisro^܂ + 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 ) + { + // SLA NAK // + if( acc_retry_count < 4 ) + { + acc_retry_count ++; + // 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 + { + // 펞pX // + DI_wt_chk(); + memcpy( &vreg_ctr[VREG_C_ACC_XL], acc_dat_buff, ACC_RAW_DATA_SIZE ); + EI(); + + acc_retry_count = 0; + // 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 )) + &&( ( vreg_ctr[VREG_C_ACC_CONFIG] & VREG_BITMASK_ACC_CONF_HOSU ) != 0 ) + ) + { + 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 )); + + if( acc_setting_sent == 0 ) + { + // S~ + PMK23 = 1; + str_send_buf[0] = + ( ACC_BITS_PM_PDN << ACC_bP_PM0 | 0 << ACC_bP_DR0 | ACC_BITS_ALL_AXIS_ON ); + } + else + { + // on 100Hz 荞 + PMK23 = 0; + 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 ) + { + // ZTB^XN͍폜ȂĂ͂ȂȂB + vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_ACCERO_ERR; + return ( ERR_FINISED ); + // ܂ + } + // else + + // ZTݒ萬 pX + vreg_ctr[ VREG_C_STATUS_1 ] &= ~REG_BIT_ACCERO_ERR; + acc_retry_count = 0; + + // ÕS~L΃Jǂ + 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(); + if( acc_setting_sent != ( vreg_ctr[VREG_C_ACC_CONFIG] & + ( VREG_BITMASK_ACC_CONF_HOSU | VREG_BITMASK_ACC_CONF_ACQ ))) + { + // DIԂ̂܂܋A + return ( ERR_CONTINUE ); // ƊԂčēxɂ // Ƃ悢H + } + } + + // 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 ) + { + // xZT on + if( ( system_status.pwr_state == ON ) || ( system_status.pwr_state == SLEEP ) ) + { +// if( ACC_VALID ) // mFsv + { + renge_task_immed_add( tski_cbk_accero ); + } + } + } +} diff --git a/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/accero.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/accero.h new file mode 100644 index 0000000..fbf80d6 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/adc.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/adc.c new file mode 100644 index 0000000..27ecb16 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/adc.c @@ -0,0 +1,475 @@ +/* ======================================================== + adc.c + + cJZ + nintendo + '09 Apr + $Id$ + ======================================================== */ +#include "incs.h" +#include "adc.h" +#include "pm.h" + +#include "led.h" + +#include "vreg_twl.h" +#include "i2c_mcu.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 + - BT_TEMP,_P + - ADIN1 + - VOL + + ***********************************************/ +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; +} + + + +/********************************************//** + vol݂̃XC_̈ʒuɋXV + ***********************************************/ +void vol_reset() +{ + vol_old = vol_data_ctr; + vreg_ctr[ VREG_C_SND_VOL ] = vol_data_ctr; // 64i +} + + +/********************************************//** +@VolXV܂B + + @Ȏɓo^܂B + + - [U[VolXC_𓮂 + - HorizonɋXVwꂽ@icodecZbgj + - TWLAvVol + ***********************************************/ +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 ); +} + + +/********************************************//** + TWL ։ʂʒmB + + iKႤ̂ŁÃPAs + ***********************************************/ +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; + } + } +} + + + +/********************************************//** +@ADC isr + +@}`vNT̏Ԃ`FbNĂׂ֓]A + +@OŎ̃`lN + +@@ʂ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 ): + // 3D{[ // + EI(); + adc_raw_dep = adc_data; + break; + + case ( ADC_SEL_VOL ): + // ʃXC_ // + 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 ): + // obex // + 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 ): + // obe[J[ // + break; +*/ + } + +// Ƃ܂Ƃȏ肻 + if( ADS < ADC_SEL_BATT_DET ) + { + ADS += 1; // ̃`l + } + else + { + ADCEN = 0; // ~߂Ă܂ + adc_updated = true; + } + ADIF = 0; // ȂƁAÕ`l̃f[^̊ŒɊ荞މ”\ +} + + + +/********************************************//** + adcWX^ǂݏoÂ܂ܕԒlɂB + + 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.1E_spfl_dp2(sdk3PEE-spfl)/adc.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/adc.h new file mode 100644 index 0000000..6f4ad04 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/batt_params.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/batt_params.c new file mode 100644 index 0000000..75f47ab --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/batt_params.c @@ -0,0 +1,87 @@ +/* ======================================================== + eЃobe[p[^ + $Id$ + ======================================================== */ +#include "jhl_defs.h" + +#include "batt_params.h" + + + +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 + { + { + 0x9C, 0xF0, 0xAD, 0x50, 0xAF, 0xB0, 0xB3, 0x00, + 0xB3, 0xE0, 0XB5, 0x60, 0XB6, 0x70, 0xB7, 0xA0, + 0xBA, 0x00, 0xBC, 0x00, 0xBE, 0x90, 0xC1, 0x60, + 0xC4, 0x00, 0xC7, 0x00, 0xCC, 0xA0, 0xD0, 0xA0, + 0x02, 0x00, 0x19, 0x10, 0x12, 0x00, 0x48, 0x10, + 0x25, 0x10, 0x41, 0xF0, 0x2F, 0xA0, 0x13, 0xF0, + 0x1C, 0xD0, 0x10, 0xD0, 0x0F, 0xA0, 0x11, 0x00, + 0x10, 0xE0, 0x0C, 0x10, 0x0C, 0x00, 0x0C, 0x00 + }, + 2, + { 113, (u8)(-256* 0.30), (u8)(-256* 2.25) }, + 0xDAA0, + { 0xE5, 0xE7 }, + } +}; + diff --git a/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/batt_params.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/batt_params.h new file mode 100644 index 0000000..343b3f4 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/bsr.hex b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/bsr.hex new file mode 100644 index 0000000..735b118 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/bsr.hex @@ -0,0 +1,994 @@ +:02000000F20C00 +:040010007447764774 +:02001C00224977 +:02002400C949C8 +:02002A00144A76 +:08003400414BE44A3D4B824DB3 +:02004A007847F5 +:02005A00B247AB +:02006200404D0F +:06008000D54B0E4C584C5C +:0400C0007EFBFF04C0 +:0A00C4001B339499E033F240BFAA09 +:1000CE00C7C1FBF8FFCEABACC736F00071F4C6610A +:1000DE00D8710006F98EA89C018C015C10D1DD0A46 +:1000EE007110A6FB710006F9EF0B8C015C80D161DB +:1000FE00E8710006F98F06F931030EF6B1BBF66111 +:10010E004900DD05618900EFF5FDE001FD3101FDDE +:10011E008901FD9909FDD008FDB22FFDB02CEFA588 +:10012E00C0C6D7C7360000674C09DE3F318E04F6D5 +:10013E000FC1317B9EFDC411897267318E04F64F5B +:10014E0014896142DF03F6EF01E660610667318EC6 +:10015E00124900207267318E04F64F14896142DF16 +:10016E0003F6EF01E660610687EFBC40F84F3A6197 +:10017E00E88666D161E8FD7106C6D751065B0C3183 +:10018E001A9F08F94008F901DF05CD3705EF03CDB9 +:10019E0037078F06F95CE39F06F951035B04318E36 +:1001AE00E7240000DD1023DD0823DF0E712006F9A1 +:1001BE00D7713006F9D7714006F9D7717BFACEA008 +:1001CE0010CEA180CFF30081000000CEA408F5AAC6 +:1001DE00FFD78F06F9310508CD0003CD030FEF08C9 +:1001EE00CD030EF690BFB401CD0408CD0508F52160 +:1001FE00FFCE22E9CE23F8CE24F3CE25FACE26FC6E +:10020E00CE275FCE2EFCCF1105F8CF120511CF35BC +:10021E000002CF370019CF530006CBEEFEFFCE38CB +:10022E0031CE3970CF38050A308700BF1801BF1A9A +:10023E0001BF1C01BF1E01D7D7C7F616FD6B047197 +:10024E007BFA31329308713293717AFAEF0C717A2C +:10025E00FAA7F647DFE95203EF01F2C6D7C7C1C1CD +:10026E00FBF8FF17A1C1E0C18C0A70C18C0270FDB2 +:10027E008C021006629D508C01721004C6D7C7C145 +:10028E00FBF8FFFD4702D2DD045203EF618B70FDD8 +:10029E00B803D2DD077133935202EF528C0870FD12 +:1002AE00D403FD1F048B6C0170FDD403300400BF1A +:1002BE002401301740BF1C01300400BF22018C0AFC +:1002CE0091DF04F6BF2A01710BE2CE44FF3182E2C8 +:1002DE0002EFFAAC0C148E449961790C61690A8CA8 +:1002EE000AD1DFDAFD4804710BE2713393F2C0C616 +:1002FE00D7C7C1FBF8FFFD4702D2DD045203EF253D +:10030E00710AE68B70FDB803D2DD0771339352028A +:10031E00EF138C0870FDD4038C0A70FDD403FD48D6 +:10032E0004713393F2C0C6D7C7C1FBF8FFFD470275 +:10033E00D2DD045203EF70710AE6710BE28B70FD91 +:10034E00B803D2DD077133935202EF5B710BE231CA +:10035E00229344C73422FBAC0C1652048B99A5A7EA +:10036E0092DFF9C68B9D4D8C089D4E8C0A9D4F31A8 +:10037E0084BD02EFFA717ABDCEB144CBB422FB8CB0 +:10038E000A318EBEB8CEBB48714BE1714BE5710A96 +:10039E00BD8C089E44EF0F710BE68C089E448C0AB0 +:1003AE009D4CAC0CBD4AF2C0C6D7C716FDF703AFC5 +:1003BE000401BF0C0117FDD403D2DD07FD48045222 +:1003CE0002EF01F2C6D7C716710AE6710BE2669EFE +:1003DE00443182E202EFFAF6420401DD09AF040174 +:1003EE00BF0C01E2EF01F2C6D7AF2801085CFB0893 +:1003FE00BF2801FD4602AF28015CFBBF2801300477 +:10040E0000BF2A01301780BF1C01300400BF22013B +:10041E00D7AF2401086C0408BF2401AF28016C0F6C +:10042E00086C0B08BF2801FD4602AF2A01085CFBD1 +:10043E0008BF2A01FD4602EDF703300400BF240178 +:10044E00F6BF2A01300B0BBF2801FD4602300B0F01 +:10045E00BF2801FD4602300F0FBF2801D73144934C +:10046E0001D77132936A0E03713B25713B23E0FD78 +:10047E00AC097120F000FD4602F6BF26015024BFE4 +:10048E001401CB440014300F0FBF28017123937158 +:10049E000BE2710AE6FDF703CE44FF3182E202EF72 +:1004AE00FAFD4804AF0401BF0C01713393714293FE +:1004BE00D731349302EFFAFD1F04713A25713A23B6 +:1004CE005A0EFC7128F000714393D7C7880616FDAB +:1004DE004702D2DD045203EF36710AE650A4FDB88E +:1004EE0003D2DD077133935202EF2417FDD4036755 +:1004FE0070FDD403FD1F0450A4FDD4035020FDD481 +:10050E0003D851FDD403A451FD4804713393F2C6B0 +:10051E00D7C72008FBF8FFFD6C085014C15008FD2A +:10052E009E07C0CC07048C074C14DE0C8C07318E52 +:10053E00FDD409615907EFEECC07048C074C14610A +:10054E00C8ED0D06CC06008C064C0461C8EDEC051A +:10055E00300AF9BC02F6BBCEABAC31B2D109C7360C +:10056E0041057184C6DEF3F1C73641057184C6615B +:10057E00DC9C05713BD1AC02148F40059971505033 +:10058E0005617902617900F0E1614900DD09C73644 +:10059E0041057184C6DEC3F1C73641057184C6615B +:1005AE00DC0E059C055040C18C07318E31AD128C8E +:1005BE0006318E318D03BDD831FFBDDADADAADD812 +:1005CE00FDA00CC0D2DD0C5008C15014FD9E07C01A +:1005DE00FD5D0B8C05D1DF06615906ED55058C07C7 +:1005EE00318EFDD809D2DD0C5008C15014FD9E0786 +:1005FE00C0FD5D0B8C05D1DF06615907ED49057114 +:10060E00605005CC0400CC05008C054C09DE2B8C0B +:10061E0005318E04F61FC1317B9EFDC41189728C8B +:10062E0005318E04F64F14896142DF03F6EF01E6C1 +:10063E00600E049C04615905EFCF41001140F81F74 +:10064E003A61E86159048C04D1DF08FD5E0BFD7040 +:10065E000CEF0C5008C15014FD9E07C0FD5D0B1031 +:10066E0008C6D7C72004FBF8FF712B24CC0100F677 +:10067E00BC02AC02440900DE3EAC0204F60F14418B +:10068E0000118972AC020C5014896142DF03F6EF3F +:10069E0001E6600E019C01AC021249005072AC02E0 +:1006AE0004F67F14896142DF03F6EF01E6600E0166 +:1006BE009C01617902EFBB40F67FFF61F861590141 +:1006CE008C01D161F8ED6A07CC0100717AFAFD6BED +:1006DE0004711300711B20710303710205E0C150F8 +:1006EE0003FD712BC05013FDAC09500FC1E0FD711D +:1006FE002BC0CEABAC6159018C0191DD068C014C47 +:10070E0003DF03E6EF01F66061FB7121048C014CFF +:10071E000861F8CC010031320705A024FCEF03F587 +:10072E0024FC4024FC11DC22F524FCF0C15003FD16 +:10073E00712BC0CE3708CBE4FFFFCBE6FFF7CED44C +:10074E00FFCF370008F5120561FDE6BC02F66149E0 +:10075E0002DD9F00000000617902EFF1FD6C08D20E +:10076E00DFFA5008C15014FD9E07C0D2FD5D0B107C +:10077E0004C6D73184BD02EFFA717BBDCBE4FFFF17 +:10078E00CBE6FFFFCBD4FFFF717ABED7717BBED70E +:10079E00C7C1200CFBF8FF8C0C318E31ADC1317B03 +:1007AE009DD4C0BC068DD49C088C149C0B8C14312B +:1007BE008E040C00128C0B318EBDD813FD2F0F61E1 +:1007CE00C8ED6708CEABACCC05068C0B318EFDD0D8 +:1007DE0009D2DD158C0B318EFDD4096169058C05AE +:1007EE00D1DFE7FD9A07E2EF71CC0A008C0A4C04C8 +:1007FE00DE54F6BC02300AF9BBAC06148C089EFD22 +:10080E00118972AB146299AC06A1BC0661790061C4 +:10081E007902F0E1614902DFE05040C18C0B318E6C +:10082E0031AD128C0A318E318D03BDD831FFBDDA58 +:10083E00DADAADD8FDA00CC0D2DD06FD9A07E2EFE4 +:10084E001961590AEFA68C0B318EFDD809D2DD0342 +:10085E00E2EF0761590BEDBB07F2100EC6D7C77159 +:10086E007B9D717BFAFD8107300AF9FD830AFD0E2F +:10087E000AC6D7FD6C08FD5D0BFD9A07F5ABFFF2BE +:10088E00D7C7310497067110B3FBEF047118B3FB91 +:10089E008FB3FB7B8A76D1DD278FB3FB9D8A665C97 +:1008AE0002D1DD1C8FB3FB5C02D1DD0B5040C15079 +:1008BE0010FDC134C0EF095020C15010FDC134C02D +:1008CE00C6D7C7360000665C80D1DD10675C80D16C +:1008DE00DF05713396EF0B713296EF0671040771D7 +:1008EE003196665C40D1DD10675C40D1DF05714307 +:1008FE0096EF0B714296EF06711405714196665C88 +:10090E0001D1DD10675C01D1DF05715396EF0B71DC +:10091E005296EF06713407715196665C02D1DD1066 +:10092E00675C02D1DF05716396EF1D716296EF1859 +:10093E004007F901DF08710402716196EF0AC736AC +:10094E00100571C4C6716196665C04D1DD10675CDA +:10095E0004D1DF05717396EF0B717296EF06714439 +:10096E0007717196665C08D1DD10675C08D1DF05F2 +:10097E00710397EF0B710297EF06711407710197D0 +:10098E00665C10D161E8715AD1C6D7F5F6FBF5F861 +:10099E00FBCFFEFBFFCFFAFBFFCFFBFBFFD7C7C1A1 +:1009AE00C1FBF8FFCEABAC8C02D1DD126169023017 +:1009BE005C03BBF6614900DDEE618900EFF51004C2 +:0209CE00C6D78A +:1009D0005208EF065203EF025206FEE600FE1B002D +:1009E000DC16089F03088F0408089F040862FE2491 +:1009F00000089F0408EEBF00EEBA00C1C514410E06 +:100A000011D9D0FF118FD1FF312E45C4C0D7F2319B +:100A1000A2C401E2D79DE261DD4C09DF12717BFACD +:100A2000C18F06089F25FDC0CF060800EE270031C4 +:100A3000F2FA04CF0608004C00DF05D50008DD16E9 +:100A400061DD717BFAD50608DD0ACDE31F61CD615A +:100A5000CDEE160061CDFED40061FFFE9A00FCF8D9 +:100A6000FF0EFEB20061CDFED5004C09DF0EC18F36 +:100A700006086F25FD9F0608C0EE0400CF0608009B +:100A8000F8E3D75200EF025202FE3700CF24FD00F8 +:100A9000CF060800BF0408C716629F000841001176 +:100AA0008F1A209B4100118F1B209F0108C6510007 +:100AB000FE62FFEF025205CF060800C1510CFE0A8C +:100AC00000C0D7C1511DFE0200C0D761DD717BFAA5 +:100AD00070CEC0A59EC47CFF9EC4609EC461CDD76D +:100AE00061DD717BFAC18EC45C1BFED6FFCF0608A8 +:100AF00001FED7FFC061CDD731F2FA1AC1AEE4BF13 +:100B000016FDAEE6BF18FDAED4BF1AFD30FFFFBE26 +:100B1000E4BEE6BED4C0D731F2FA11C1AF16FDBEB5 +:100B2000E4AF18FDBEE6AF1AFDBED4C0D7C1BF1CEE +:100B3000FD13BF1EFD15BF20FD17BF22FDC0D7AF9F +:100B40001CFDDB1EFDEB20FDFB22FDD7534B30527D +:100B50005430324E323030475631323000FFC150BF +:100B6000FEFEAB0061DD717BFACF060800FE0A00D5 +:100B7000FEA4FF61CDF8E3EECF00C7FB0408BF166B +:100B8000FD8FC0009C05C5C337040600BF18FD35A6 +:100B900036C20B300000522BFE6600C2C4C6307055 +:100BA0000BB800300000B8022004AF18FDB80030C8 +:100BB0000F00B802AF16FD61FF520AFE3AFFECF8D3 +:100BC000FF0E717BFAC1C7FB04088C05C65C80FE72 +:100BD0000200C0D761DD717BFA70CFC0FFA59FC056 +:100BE000007CFF9FC000609FC00061CDD7618BFE7D +:100BF000E2FF717BBE410011FB000017CEFC0061DB +:100C0000CB089EFDF31161C999A58392DFF7D7FE4A +:100C1000B1FED524FDDF23C1CF0308035109FEF443 +:100C2000FDC0D2DF37FE3800A20408CF0308075109 +:100C300009FEE1FDD2B20408DF22C7FB04083183BC +:100C400002C6D7C6510AFECCFD624C1FDF06CF2478 +:100C5000FD01EF04CF24FD00C0EE5BFEC0EE55FEAB +:100C6000C7C1FB04088B31196C0161589BC0C6D702 +:100C7000717BFAFE4DFEAF0408040600C11436D4A1 +:100C80000B300000522DF3FE77FF8FC000FE2BFECD +:100C900061CF5C807C8073C0041900CEFC0F61CBF7 +:100CA000C55404EF03C55417FE18FEC7360008BB31 +:100CB000629C0288089C03D1DD334C41DE2F70F129 +:100CC000312DB161090033081C000851FF612A4130 +:100CD0000E118FD0FF613B118FD1FF6138DC0E8B7D +:100CE0005C03DF0964C6C4FE2BFDEECAFDC6C4EE7C +:020CF000C3FD42 +:100CF20061CF5100718C7109FECBF800FEFCC90175 +:100D020000F6BF00F953C0F693935820FEDFF94175 +:100D12000036924D34CCFCEF05118B99A7A51744F0 +:100D2200DC4DDFF53602F930CCFCEF04CC0000A735 +:100D320047DFF9410036DC4D3420FEEF05118B9977 +:100D4200A7A51744EC4DDFF53630FE3092FEEF04D6 +:100D5200CC0000A747DFF9FCCE0000EFFE61DD7199 +:100D62007BFABEF0ADD8BEF200AEF661CDD7C3615C +:100D7200DD717BFABEF0ADD8BEF200DBF6FFADDC72 +:100D8200BEF000AEF6BDD8AEF40312ADDABEF2008C +:100D9200AEF661CD03BDDAC2D7C3F33174D908838D +:100DA200C1F626D8BDD8C031750683C312F623C258 +:100DB200FDBD0D93DF0312F623C2D7440000DD26EA +:100DC20061DD717BFACFE80080BEF6F6BEF4BEF2BA +:100DD200ADD8BEF0CFE800818FE8003103FAAEF063 +:100DE200F5E80061CDD7B1D7C3F33174D90883C117 +:100DF200F626D8BDD8C0317505C312F623C2FD0B45 +:100E02000E93DF0312F623C2D7440000DD2761DD13 +:100E1200717BFACFE80080BEF6F6BEF4BEF2ADD822 +:100E2200BEF0CFE800818FE8003103FAAFE000F5B1 +:100E3200E80061CDD7ADD8D7C3F33174DB0F83C1DE +:100E4200F626D8BDD861317026DABDDAC031750D0B +:100E520083C312F626DCBDDC61317023C2FD730E42 +:100E620093DF0CF626D8BDD861317026DABDDAC21E +:100E7200D7C161686BDC6BDDC0DD2F61DD717BFA90 +:100E8200CFE80080BEF4ADDCBEF6ADD8BEF0ADDA80 +:100E9200BEF2CFE800818FE8003103FAAEF0BDD890 +:100EA200AEF2BDDAF5E80061CDD7F6BDD8BDDAD72E +:100EB2008292DD2B61DD717BFACFE80080BEF0F615 +:100EC200BEF2BEF46208BEF6CFE800818FE80031C0 +:100ED20003FAAFE0006072AEF0F5E80061CDD760D2 +:100EE20072F6B1D706DABDDAADDC06D8BDD861D864 +:100EF200A6DAD7D1DD17C1C3DAD89DD8ADDA311C55 +:100F020061EEB4D8DFF8BDDA13BDD8C2C0D7D1DDE7 +:100F12001BC1C3DADA9DDAADD8311E33311E33710B +:100F2200F9B4DADFF4BDD813BDDAC2C0D746D8DDD2 +:100F32000771FF7177D971C0D75BDB9DDB605BDA2C +:100F42009DDAADDC5BD9085BD808BDD8D7C3C7F33F +:100F5200728EFDC162314C410036884D1161A07222 +:070F6200C09EFD62C6C2D76C +:0A0FF60031353A30343A303900004A +:0A20000031353A30343A303900002F +:10200A0005214F7B9EC5E9000104080D12171C1F0C +:10201A00080100001F003B005A0078009700B50035 +:10202A00D400F300110130014E01192634445362E1 +:10203A006E777D80807D776E625344342619100A4C +:10204A0008080808080808080A10AEF0B430B740B3 +:10205A00BA30BB50BBB0BC50BD10BD60BDB0BFE014 +:10206A00C2B0C420C7B0CAE0CE1001F014101420C8 +:10207A000630639049006E0077707B0019001900E2 +:10208A0017F01C6012001200120002005C003600F9 +:10209A00A70000D8EAE88C309C10A5E0B040B1C097 +:1020AA00B200B250B310B490B620B860BA50BFA014 +:1020BA00C6B0CE90D02000200020002000207B3027 +:1020CA00686020001700173012F00DE007F00700D3 +:1020DA00093001C001C00100AB000000670020DA2E +:1020EA006967A120B750B9D0BB00BC30BC60BCA0A6 +:1020FA00BD10BDC0BE70BFD0C2A0C400C850CC8045 +:10210A00D0B001A0251018B017C095206FE07C60F0 +:10211A003510350037F016F01CA0173011D011F029 +:10212A0011F002005E00A7002700B0DAF5F39CF078 +:10213A00AD50AFB0B300B3E0B560B670B7A0BA00A7 +:10214A00BC00BE90C160C400C700CCA0D0A00200F1 +:10215A00191012004810251041F02FA013F01CD0BE +:10216A0010D00FA0110010E00C100C000C0002009F +:10217A007100B400C000A0DAE5E70000000000002A +:10218A000000000000000000000000000000000045 +:10219A000000000000000000000000000000000035 +:1021AA000000000000000000000000000000000025 +:1021BA000000000000000000000000000000000015 +:1021CA000000000000000000000000000000000005 +:1021DA0000000000000000000000000000000000F5 +:1021EA0000000000000000000000000000000000E5 +:1021FA0000000000000000000000000000000000D5 +:10220A0000000000000000000000000000000000C4 +:10221A0000007F7E7D7C7A7978777675747271702A +:10222A006F6E6D6C6A6968676665646261605F5E3D +:10223A005D5C5A5958575655535251504F4E4D4B53 +:10224A004A494948474645434241403F3E3D3B3A59 +:10225A00393801020203030200FEFBF7F3F0F0F340 +:10226A00FA041225384D5F6E777A776E5F4D3825FE +:10227A001204FAF3F0F0F3F7FBFE00020303020282 +:02228A00010051 +:10228C008D3AB43AD1DF26CD3A1EFD6723FD0A23E1 +:10229C003132920D3104920931329605713304EFCB +:1022AC0003713204FD3B23FDBA22FD3E26D7C771D4 +:1022BC005392D432DD05B4327152923122920371B1 +:1022CC0052927154927141028FB3FB7631440206E3 +:1022DC007140B3FBEF047148B3FB8FB3FB617E5CC1 +:1022EC0010D1DD183144020B5080C15011FDC134A6 +:1022FC00C0EF095040C15011FDC134C0C6D74A309F +:10230C004BDC114A30B9DE0C4A3B28DE03A43BD728 +:10231C00713392D74A303EDC054A30BDDC0C4A3C66 +:10232C0028DE03A43CD7713292D7F43BF43CD7316E +:10233C0042960C4A3D02DE03A43DD7712392D7315D +:10234C0032041240AFFB3CDE0C8FB2FB5C01D1DFE0 +:10235C0004712392D7712292F43DD7C7C1FBF8FFC9 +:10236C00313296067130B3FBEF047138B3FB714414 +:10237C0092713796DE4F7134967141923132960ECE +:10238C005002C15011FDC134C0CD3229EF37E0C12C +:10239C005011FDC134C0F43217C15002FD592BC08D +:1023AC00D2DF0D8B318E318D080E01081C00BD342F +:1023BC00AD3444009BDC05D5AFFBDF095020C15088 +:1023CC0011FDC134C0C0C6D78D209D3EFD1624FD25 +:1023DC008D2BD507F9DD04710392D78D3E4B20610F +:1023EC00F83164921C716392FD6B044A3E07DD0563 +:1023FC004A3EFFDF098F06F9310303FDA524FDB921 +:10240C0024710292309C256194D7C771620171725C +:10241C00015003FDAC095008FD3E37629D30500958 +:10242C00FD3E376276716301711806F94A30F1DCB2 +:10243C000BE507F9F508F9CD3707EF224A3004DE32 +:10244C001ACF07F9025008C1506CFD6B02C092DF25 +:10245C000DD450DF09711006F9EF03F507F94007A9 +:10246C00F901DF05710A22EF06710B22710302CD0F +:10247C0020075700674C08DE1073090A20614EDCF8 +:10248C0005679D20EF0387EFEB4A2007DF09D5078F +:10249C00F961F8CF07F903C6D7500AFDAC093040F3 +:1024AC0000C15006FD3C2BC05096EDAC09C7200670 +:1024BC00FBF8FFD507F961E8ED9825304A57C15074 +:1024CC003EFD3C2BC0D2DD077100B2FBED982571AF +:1024DC0008B2FB17040200C15004C1500CC1506C6F +:1024EC00FD8C021006EA38AA48318D12AA48318EAA +:1024FC00616B08616A08C1500EFD3C2BC0F690C19F +:10250C00500CFD3C2BC0CC01008C014C04DE28315E +:10251C00349302EFFA712293EA388C015010D605ED +:10252C00C15010C18C01D6044000C1506CFD360363 +:10253C001006615901EFD250A5FDAC09EA38AA4842 +:10254C00318D12AA48318E616B08616A08C1500E38 +:10255C00FD3C2BC050A5FDAC095004C1506CFD6B6B +:10256C0002C0629C01EA388A4B4E0161C3048A4A5C +:10257C004E0117040200C15004C1500CC1506CFD37 +:10258C0036031006F6C1503EFD3C2BC01006C6D7D4 +:10259C00C78D3F4B3061F8ED3B264A4128DE05A440 +:1025AC0041ED3B26F4418D309D3F8D305070D6125D +:1025BC00307351230480001231FF318E039D409FF4 +:1025CC00AEFBF68D407C804C95DC1B8D40318F240E +:1025DC001400EA38BDD8AA44FD5F0D1231FF318ECC +:1025EC0003318F16EF198D40318F241400EA38BD5A +:1025FC00D8AA46FD5F0D1231FF318E03318F16EADA +:10260C00388A427217F3031644000171FE61C83612 +:10261C00FF001701DE02F61617BD78C7500CFD3C03 +:10262C002BC0D2DF068D309D3FEF047100B2FBF260 +:10263C00C6D7C72008FBF8FF4007F901DD064007A5 +:10264C00F902DF1C17040600FD342CD2DF0A8C06BD +:10265C009C058C079C04EF4ECC0563CC0400EF4624 +:10266C0017040600FD342CD2DD0F7100B2FB710390 +:10267C0092CC0500711293EF2D7108B2FB8C0631D0 +:10268C008E318D080E07081C00BBEA388A4072ABED +:10269C00FDB20EBB8C019C05D1DF08CC0501CC042E +:1026AC0000EF038B9C0417040600FD3F2CD2DD06C3 +:1026BC00CC06C8CC07008C069FB1FB8C06318E3142 +:1026CC008D080E07081C00BD34AD344401A5DC0890 +:1026DC00CC0364F6BD42EF48AD3426424401A0DC85 +:1026EC0008CC031EF6BD42EF37AD3444819DDC09A6 +:1026FC00CC030AC942F401EF27AD3444019BDC0939 +:10270C00CC0305C942F401EF17AD34440191DC0947 +:10271C00CC0300C942F401EF07711293C942F401D2 +:10272C003132040C31249208CC0564CC0400EF0D3A +:10273C008C034E05DE078C039C05CC04008C059F96 +:10274C00AFFB8C049FB0FBFDC12B8D444E05DD28E7 +:10275C0040AFFB0BDE054A440BDE1440AFFB06DE3C +:10276C00054A4406DE09D5AFFBDF0DD444DD095024 +:10277C0020C15011FDC134C08FAFFB9D44FDFE2B19 +:10278C001008C6D7C75601D837C15002FD712BC0EF +:10279C004008F901DF10500AFDAC097120100550FA +:1027AC0008FDAC09EF055012FDAC098D376C0870B3 +:1027BC00C15002FD712BC05003FDAC098D376C1854 +:1027CC0070C15002FD712BC05016FDAC095003FDB9 +:1027DC00822B625C01D1DD0F7170B3FB5002C150D2 +:1027EC0013FDC134C056006672C6D7C75004FD82B3 +:1027FC002B625C03D1DD405014FD8E2834B3FB8971 +:10280C005C9F998A0C7CFF50FF5C14D1DD228A0CF2 +:10281C007CFF5C147234B7FB89616A99716207564C +:10282C0000316207058666D1DFF7716307716B278C +:10283C0034C6FB895CEB995002FD822BD2DD398DBD +:10284C00376C1070C15002FD712BC0E0FDAC09D883 +:10285C0037C15002FD712BC05033FDAC094008F953 +:10286C0001DF0971281005500AFDAC09F0C15002B6 +:10287C00FD712BC07178B3FBE0C15013FDC134C0A6 +:10288C00C6D7C7C12004FBF8FFCC02005004FD8260 +:10289C002B629C038C045C20D1DD0E8C036C019CA0 +:1028AC00038C026C209C02EF138C045C10D1DD0CA9 +:1028BC008C035CFE9C038C026C109C028C045C08E8 +:1028CC00D1DD0E8C036C029C038C026C089C02EF15 +:1028DC00138C045C04D1DD0C8C035CFD9C038C021A +:1028EC006C049C028C03D1DD05501AFDAC098C03E1 +:1028FC0070C15004FD712BC08FB3FB5C9F728C03B5 +:10290C00318E316D148C03318E314D616D08616CDB +:10291C005C606162629FB3FB8FBFFB7CFF50FF5E0C +:10292C0002D1DD278FBFFB7CFF5E027234B7FB89BF +:10293C00616A99716207CC01003162070861590123 +:10294C008C01D1DFF4716307716B27F21006C6D7C7 +:10295C00D9A7FBC15006FD712BC0D9A8FBC15007EC +:10296C00FD712BC0D7FD5C29F2D7C7711300711B09 +:10297C0020710303710205E0C15003FD712BC0509F +:10298C0013FDAC09F0C15005FD712BC0500FC1E017 +:10299C00FD712BC0500AFDAC097103055008FDAC4C +:1029AC0009501FC1E0FD712BC05012FDAC09500342 +:1029BC00FD822B625C01D1DF03E2EF24F0FD822B60 +:1029CC00629D363602F9C75008FD592BC05003C121 +:1029DC00FD712BC0710203711A20FD192BF431F219 +:1029EC00C6D75003FD822B625C01D1DD155014FD5E +:1029FC008E28FDF7275014FDAC09E0C15003FD7182 +:102A0C002BC0711300711B207103035014FDAC0912 +:102A1C00F0C1E0FD712BC0F0C15003FD712BC0D78C +:102A2C00C72004FBF8FFCC02008D319C035010C171 +:102A3C0050A4FD6B02C0629D31D450DD04F2EDF662 +:102A4C002A8C037B315C08D1DD0F8D315C08D1DF22 +:102A5C0005CC0210EF03CC02208C037B315C04D13B +:102A6C00DD158D315C04D1DF088C026C049C02EF07 +:102A7C00068C026C089C028FB2FB5CF3728D315C8D +:102A8C000C6162629FB2FB8FBEFB7CFF50FF5E024B +:102A9C009C02D1DD1F34B6FB896E0299716207CCA2 +:102AAC000100316207086159018C01D1DFF47163B7 +:102ABC0007716B278D315C40D1DD095002C150127A +:102ACC00FDC134C08D315C01D1DD08E0C15012FD77 +:102ADC00C134C0717AFA8D315C41D1DD0C5A31BEF2 +:102AEC00D831C15010FDD904C0F21004C6D7FD90E6 +:102AFC0027F2D7FDF727F2D7C78FC6FB7617FD8EC7 +:102B0C0028664FC6FBDFF2F5C6FBF2C6D75064FD54 +:102B1C00AC09FD4A2C6261FB711192F17114926146 +:102B2C00DC70C15012FDD904C0FD6F36CD5F03D7E8 +:102B3C00C7C1C1FBF8FFAC0ABB17C15002C18C0264 +:102B4C0070C1506CFD360310061004C6D7C7C1FB0C +:102B5C00F8FFAC08C15002C18B70C1506CFD8C02E7 +:102B6C001006C0C6D7C78806166770C1C75084FD4B +:102B7C00FF021004C6D7C716C75084FD6B02C0C62F +:102B8C00D7C74A2004DE045600EF0256014008F96C +:102B9C0001DF048686EF0A4008F902DF0451046164 +:102BAC000666318F12504CD633514CD6610A045400 +:102BBC0020BD38C6D740AFFB3DDC05CF04FC0FD79A +:102BCC0040AFFB1FDC05CF04FC0BD740AFFB0BDC8D +:102BDC0005CF04FC07D740AFFB0661D831320405A2 +:102BEC00CF04FC03D7D5AFFBDD04E504FCD7F5041B +:102BFC00FCD7D504F9DF04717392D7FD4A2C6261BE +:102C0C00FB71019371149271079361C83172921721 +:102C1C00717292710493711192F171049361DC7071 +:102C2C00C15012FDD904C0D7C716C75004FD592B8B +:102C3C00C0C6D7C716C75002FD592BC0C6D740AF68 +:102C4C00FB0BDE02E2D7F2D771000105717850055B +:102C5C00713AD5713BD18F10055CFC9F1005CF5498 +:102C6C00054AE54205711042057100420571485054 +:102C7C00057130500571205005CF530505CF520515 +:102C8C000A7130510571205105713BD57170500599 +:102C9C008F11055CFC9F1105F422D77178500571DA +:102CAC00080105D7FD6938FD6B04717AFAFDD42350 +:102CBC00F504F98F06F931051B5003FD822B625C7C +:102CCC0001D161E8CF04F902CFAFFB647104077145 +:102CDC004192EF10F6710407611012F6B123606196 +:102CEC00FB714192FD9230FD1843712295712BE7D7 +:102CFC00618461A461EDEFF8D77140F00071783018 +:102D0C0002713AE6713BE2713BEA713BEE8F1005C2 +:102D1C005CFC9F1005CF34024AE552FF711A5271C8 +:102D2C000A52714830027130300271203002CF33B8 +:102D3C000205CF32020A71303102713BE6717030FC +:102D4C00028F11055CFC9F110571603002D7717800 +:102D5C0030027148F000D7C788061666614FDD094E +:102D6C0067614EDE0396EF01866672C6D7C71617EB +:102D7C0014AA0412A943DD29AA0412A923FDEC4DBF +:102D8C00C3AC02FDEC4D13C2BDD813FD2F0FDE0CEE +:102D9C001714AA0212AA0403BA04EF051714A9BA4D +:102DAC0004AC041231FF319E03317F087208C6D780 +:102DBC007100F200304400BFB601300188BF9001B1 +:102DCC00300984BF9E01BF9C01BF9A01BF9801BF0F +:102DDC009601BF9401BF9201F53CFF30FE00BFBECF +:102DEC0001F6BFBC01BFB80150EEBFBA01A1BFB222 +:102DFC0001C918FE008F06F9310507F5CDFBCB6C28 +:102E0C00FF00717393716293D730EF00BFB401F67A +:102E1C00BFBA017108F200712304715307BE6EBE74 +:102E2C0064BE6A712304715307715BD1F453F4527D +:102E3C00716393D78D54B454D1DF6931D4D10571FA +:102E4C005BD1E453D453DD2E7140B2FBD852F1E781 +:102E5C0034020023DD0625DD0325DF05F6BE66EF13 +:102E6C0006D9CCFBF1BE66A4524A5220DF04F452C0 +:102E7C00F453CD5419D7CD541E7148B2FBD5CEFBAB +:102E8C00DF04F6BE66D7D9CCFBF14266FFDD15D95F +:102E9C00CCFBF112AE6643DE05A266FFEF03B26611 +:102EAC00FFCD5403D7C7161714F6B9AA0412F6238C +:102EBC001231FF31AE03316FBA02C6D7C7C1FBF86E +:102ECC00FF8C085080D612AB1413B9AB14AA0412A1 +:102EDC00A92312D927FBF133BDD813FD9B0DBA02E0 +:102EEC00C0C6D731049401D74004F902DF10F6BEF6 +:102EFC0064BE6EBE6ABF8EFBBF94FBBF9AFB31747F +:102F0C009314308AFBFDB12E3090FBFDB12E309620 +:102F1C00FBFDB12EEF713114940D7113947108D225 +:102F2C00FBF456F455EF60D455DF5A8F26FB9D55B4 +:102F3C004A561FDC177100D2FB4028FBFFDD1CA496 +:102F4C00578F28FB4B57DE13F456EF0FD856F1A1D1 +:102F5C00605C1F9D567108D2FBF457E856092AFB9A +:102F6C0070C1308AFBFDC82EC0E856094AFB70C1FF +:102F7C003090FBFDC82EC0E856096AFB70C1309634 +:102F8C00FBFDC82EC0B455308AFBFD792DF313BE62 +:102F9C006E3090FBFD792DF313BE6A3096FBFD79F4 +:102FAC002DF313BE64D7C736F00071F4DC297170B1 +:102FBC00F000CE9D08CE9EC0CE9F80F594FFF59379 +:102FCC00FFF592FFE597FFE596FFE595FFE598FF86 +:102FDC00CE9C7F7100A6FB711BE3712BE3711AE78A +:102FEC00712BE7717A9D710A9E31929E02EFFA71F4 +:102FFC000B9E712394713394714394C6D7C73122BD +:10300C00941E712294710A9E31929E02EFFA34D46E +:10301C00FB3692FF52078B99A5A792DFF9710B9E95 +:10302C00C6D7C788061631329415713294C7349CB2 +:10303C00FB3092FF1652078B99A5A792DFF9C66653 +:10304C007367189CFBC6D7C77123943134941E71D7 +:10305C003394710A9E31929E02EFFA3492FF369CA1 +:10306C00FB52078B99A5A792DFF9710B9E31449403 +:10307C0013714394717B9E8FDCFB9E9A8FDDFB9EBC +:10308C009B717A9EC6D7CFA7FB5CCFA8FB5FCFC83E +:10309C00FB5DCFFCFB36CFFDFBC9E5D3FBD7C7CF20 +:1030AC00A4FB12CFA5FB14CFCCFBFFF5CDFBF5CECB +:1030BC00FBF5CFFBF5D0FB5600664C64DE0872388E +:1030CC0026FB0086EFF3C6D7C788061617F1E73440 +:1030DC0003002361E3EDF9332361F8EDC531B1232E +:1030EC0061E3EDCF312561F8EDDD31B1240D0061E7 +:1030FC00D8EDF933240B0061F8EDFD312361F8EDC7 +:10310C0040322361F8ED10322361F8EDF4332406DC +:10311C000061F8EDA932B12561D8EDC5322400006B +:10312C0061F8EDD2322361F8EDF9332361F8EDD279 +:10313C0033B12361E3EDF5322361F8ED06332361FE +:10314C00F8ED17332361F8ED06332361F8ED2833DE +:10315C002361F8ED39332361F8ED48332361F8ED41 +:10316C006A332361F8ED76332361F8ED8233236102 +:10317C00F8ED8A332402002361E3EDF933240200D5 +:10318C0061F8ED92332361F8ED9D332561F8EDA8DC +:10319C0033B124060061D8EDF93324000061F8ED59 +:1031AC00FB332561F8EDB33324120061F8EDCD3318 +:1031BC002361F8EDBE33EDFB3334A6FB89615F99D7 +:1031CC00ED0534307129619466736718A4FBED0525 +:1031DC003440A9FB6ADF1340AAFB68DF0D674C6C17 +:1031EC00DF083055406194713AD5679FABFBED0514 +:1031FC003467D1DD0C30853B619434C4FB89616F3D +:10320C0099ED0534675C02D1DD0730FA2A6194EF41 +:10321C000B675C01D1DD0530FF2A6194675C3CD102 +:10322C00DD0F30042B6194675C3C7266736218A4EA +:10323C00FBED053467D1DD625C01D1DD05300800A2 +:10324C00EF01F6609F01FC675C02D1DD03E6EF0144 +:10325C00F63401FC89616899675C04D1DD04E6A150 +:10326C00EF01F63401FC89616899675C08D1DD05D2 +:10327C00302000EF01F63401FC89616899675C101D +:10328C00D1DD05301000EF01F63401FC896168993D +:10329C00675C20D161E8716001FCED0534D446DF38 +:1032AC0008679FCDFBA446EF0D4A4605DE08E846AD +:1032BC00671811FDA446ED0534675C0F72667362E6 +:1032CC0018A4FBED05344A4664DE1B4A4601DF06B2 +:1032DC0067D161F85701E846671826FBA4464A46B1 +:1032EC000561C8711294ED0534675C7F70C117F1EC +:1032FC00243000FD2E30C0ED0534675C3F70C117E3 +:10330C00F1243000FD2E30C0ED0534675C0770C130 +:10331C0017F1243000FD2E30C0ED0534675C1F70B2 +:10332C00C117F1243000FD2E30C0ED05346770C19B +:10333C0017F1243000FD2E30C0ED0534CEABAC714E +:10334C000A9E31929E02EFFAD592FFDF05710B9E19 +:10335C00EFED679E99710B9E9FDBFBED053471427F +:10336C0094675C7F9FDCFBED0534714294675C3F96 +:10337C009FDDFBED0534675C3F9FDEFBEF7B675CFD +:10338C001F9FDFFBEF733045396194679FE4FBEFC0 +:10339C00683012396194679FE5FBEF5D302B396122 +:1033AC0094679FE8FBEF52675C01D1DD4CFD18433D +:1033BC00EF474A58C8DE42E85867185AFAA458EF43 +:1033CC0038679D58EF33675C01D1DD05711202EF50 +:1033DC0003711302675C02D1DD05712202EF0371E8 +:1033EC002302679FD3FBEF1167318EEF0CEF0A6658 +:1033FC004C5BDE05736718A4FBC6D7C716664C304A +:10340C00DC094C37DE05FD0930EF6B664C02DF1F23 +:10341C008FA6FB5C03728F03FC5C03318E316D084D +:10342C00616A08128F03FC5C80312A6162EF566678 +:10343C004C3DDF08AE90BD5AF85AEF49664C3EDF62 +:10344C0004F85BEF40664C4FDF05FD4043EF3666FA +:10345C004C61DF08E858095AFA72EF29664C7FDF95 +:10346C0005FDFB3BEF1F664C4EDF0B3104960452FF +:10347C0010EF12F2EF0F664C5BDC0452FFEF0666A6 +:10348C007309A4FB72C6D7C788061617F12410005F +:10349C00240500DC07244C00DD17EF17717BFA17AD +:1034AC00F104A4FB1489617F99717AFA715294EF3B +:1034BC0002A458C6D7C7C1C1FBF8FF4004F903DD0D +:1034CC00064004F904DF38717BFA8C027309ACFBFB +:1034DC005E0AD1DF278C02318E04A4FB14896E0A9C +:1034EC0099716207717AFACC01003162070861594F +:1034FC00018C01D1DFF4716307716B27717AFA10BB +:10350C0004C6D7CF03FC03F501FCF505FCF507FC5D +:10351C00D7C788061617F1E734020025DD3D23DDF9 +:10352C001725DD1C23DD0523DD2BEF3B7102956791 +:10353C009F06FCCD5F03EF2F675C839F03FCEF2797 +:10354C00675C039F05FC675C034C0261F871229673 +:10355C00FD2E45EF12679F07FCEF0C6791DF08E02B +:10356C00C15012FDC134C0C6D7C71617F1E72400ED +:10357C0000DD2A23DD1E240300DD0724FB00DD24EF +:10358C00EF2531329605308000EF01F6086F04FC10 +:10359C007208EF198F01FCF501FC72EF1071529556 +:1035AC005235EF09F2EF0666730900FC72C6D7C7F5 +:1035BC001617F1E7240000DD38241000DD1C23DD94 +:1035CC001C23DD30240E00DD18241100DD1B240F1C +:1035DC0000DD12243000DD15EF1EE2EF1D5202EF6C +:1035EC00195204EF155206EF115205EF0D5207EF69 +:1035FC0009F2EF065203EF0252FFC6D7C7316494AB +:10360C00377163948D5E9FACFB8D5D9FCBFB36D287 +:10361C00FCC7D85DFD6F37618A70618AFDB437C015 +:10362C00D862F1312F609D618D5C4B61DD0A717246 +:10363C00948D619D5CCD5F034A5F05DE0830793661 +:10364C006194CD5F6BB45F7150F000CE300BCF172F +:10365C000006CE3106FD4602717A30710BE3710B18 +:10366C00E7C6D78D619D5C8D619FADFBD74004F99A +:10367C0003DF064004F904DF02F2D73174940C71B5 +:10368C0073947113958D619D63EF313104951F71A6 +:10369C000395711295D506FCDF04F464EF0A8F06CE +:1036AC00FC5002D6A1609D648D649D63EF0E3114B5 +:1036BC0095068D649D63EF048D619D638D639FAD55 +:1036CC00FBD863FDE136E863091C2270C15013FD81 +:1036DC00D904C0F2D7C7C1C1FBF8FF8C02D1DF05FA +:1036EC00F506FCEF1A8C024C05DE06CF06FC02EF49 +:1036FC000E8C02318E1231FE03311F609F06FC8D41 +:10370C00654F06FCDD28CC011F8F06FC9D65CC00A7 +:10371C00008B4C08DE148B730912204F06FCDC0561 +:10372C008B9C01EF05615900EFE78C019D60100443 +:10373C00C6D7C716710AE7710BE37150F000CE3093 +:10374C000BCF170006669E31FD4602717A30710B65 +:10375C00E33182E302EFFA8D1F7158F000710BE731 +:10376C0072C6D7C7C1C1FBF8FF8FFCFB4E02DC034E +:10377C00F2EF318C024FFDFBDC0452FFEF268C0282 +:10378C002FFCFB706131318D128FFDFB2FFCFB7018 +:10379C00613133BDD813FDBD0DBB440001DC03F614 +:1037AC0090BB8B721004C6D7C7C1FBF8FFAC0814D2 +:1037BC00A91489708B6128706131FDEC4D134403A1 +:1037CC000071FEDC23AC08148A04819A04AC081442 +:1037DC008A044C11DC10A9148B99AC0814CA020091 +:1037EC00AC0814CA0310EF72AC0814CA0400AC087D +:1037FC0014A914894DDE0AAC08148A02819A02EFCE +:10380C0012AC0814A914894D61D308AC08148A02AF +:10381C00919A02AC08148A03919A03D1DF3CAC084C +:10382C00148A024C10DF10A91489318EA112AC0835 +:10383C0014A9146299EF17AC08148A024CF0DF0E2D +:10384C00A91489318EB112AC0814A9146299AC0870 +:10385C0014CA0200AC0814CA0310C0C6D7ED6C38E9 +:10386C00C75600664C0ADE0BF0317E12F67810FC5F +:10387C0086EFF0C6D7C7200CFBF8FF17040600C173 +:10388C005006C150A8C15030FD8C021006D2DD1B71 +:10389C004A6804DE05A468E2EF6834E4FB895CFC4A +:1038AC0099FD45397110B2FBF2EF57717BFA300676 +:1038BC0000C117040600C130E9FBFDF44D10047182 +:1038CC007AFAF4688FE4FB5C01D1DD264004F9033D +:1038DC00DF205010C180FDC134C0C736100571D433 +:1038EC00C6DE0F17C15006C150A8C15030FD8C0266 +:1038FC0010064004F903DD064004F90461F8FD5A92 +:10390C0040F2100CC6D7D9E5FBC15030FD6B02C09C +:10391C00629FE8FB5008C15011FDC134C0F2D7D9E9 +:10392C00E8FBC1D9E7FBC15030FDFF021004500881 +:10393C00C15011FDC134C0F2D7C7200CFBF8FFCC2D +:10394C0009004007F901DF05CC0A02EF03CC0A108D +:10395C00CC0B808FE4FB5C039C07D1DF08717AD51C +:10396C00CC0807EF06717BD5CC082F17040800C1D3 +:10397C005004C150A0C15030FD36031006624C02F9 +:10398C00DF077110B2FBF2EF357118B2FBF468C7A8 +:10399C0036100571D4C6DE164004F903DF1017A1EA +:1039AC00C15006C150A8C15030FD8C021006717B6D +:1039BC00FA8FE4FB5C034E07DD03E2EF01F2100C1F +:1039CC00C6D7D504F9DF03F6BD6A4004F901DD0A58 +:1039DC00D474DD03B474D7CD74038F04F9318FE73D +:1039EC0023DD0B24020024030061C8EDF33A8F069B +:1039FC00F931233E301B00466ADF0AE0C15010FD4E +:103A0C00C134C0EF1D307701466ADF165002C15039 +:103A1C0010FDC134C0F64670DF088FC8FB5010D6BD +:103A2C00BD70F64670DD36B6704670DF307112939D +:103A3C00EF2B301B00466ADF13F64672DF18E0C12D +:103A4C005010FDC134C0C9725307EF0A30770146DC +:103A5C006A61F8711293F6467261E8B67231549647 +:103A6C0008714395F6BD6AEF1431449505F6BD6AAD +:103A7C00EF0BA66AF6466A61F8C96AFFFF316296D7 +:103A8C00194A6C05DE16A46C4A6C05DF0FA46C5049 +:103A9C0004C15010FDC134C0EF02F46C31649619AE +:103AAC004A6E05DE16A46E4A6E05DF0FA46E500832 +:103ABC00C15010FDC134C0EF02F46ED46FDD03B4FD +:103ACC006FD7317296174A6D05DE14A46D4A6D05D9 +:103ADC00DF0DA46D5010C1FDC134C0EF02F46D4A6E +:103AEC006D0661F8CD6F25D7C736100571D4DE0E83 +:103AFC008FB2FB5C02D1DF063081386194D2400476 +:103B0C00F903DF1C31220705302C2A6194315495BE +:103B1C000C7153955080C15012FDC134C0FD313B26 +:103B2C00FD573BC6D78F03FC5C01D1DD1DD477DD7F +:103B3C0003B477D7CD77098D604B76DD0D8D609D05 +:103B4C00765040C15012FDC134C0D74004F903DD9A +:103B5C0004F6BD1AD7D5D0FBDF08F6461ADD19B628 +:103B6C001AD7D9CCFBF1461ADD0ED9CCFB12AD1A03 +:103B7C0043DE03A61AD7B61AD7717BFAC78FC4FBDC +:103B8C0076F5C4FB717AFA5C10D161E871629566C6 +:103B9C005C0FD1DD57665C01D1DD05F504F9EF4C06 +:103BAC00665C02D1DD11E0C15003FD712BC07113B5 +:103BBC0000711B20710303665C04D1DD11711300CD +:103BCC00711B20D503FC61F8710303FD0F35665C96 +:103BDC0008D161E87103035005FDAC097102035073 +:103BEC0003C1FD712BC0711A20FD192BF2C6D7C76A +:103BFC0056FF4A461361C8EDD53C8F06F9311505C1 +:103C0C00300400EF0F8F06F9314505300500EF0445 +:103C1C00D907F9F1609F28FC8D789F29FC713492AB +:103C2C00E661301271049261DC31196162629F2A83 +:103C3C00FCE52BFC31140205308000EF01F6C1319C +:103C4C00449605304000EF01F6C2616B08616A08CA +:103C5C00C131340405302000EF01F6C2616B0861FC +:103C6C006A08C131240205300800EF01F6C2616B0D +:103C7C0008616A08C131749605300400EF01F6C280 +:103C8C00616B08616A08C131649604E6A1EF01F624 +:103C9C00C2616B08616A08C131549603E6EF01F604 +:103CAC00C2616B08616A9F2CFCF171240461DC9F7A +:103CBC0026FCF171540761DC9F27FCD846F1010406 +:103CCC00ECFC14A9148976A4466672C6D7C7FDD03D +:103CDC00088F04F9318FE724000061F8EDB33E231F +:103CEC00DD1B2361F8EDBD3D2361F8ED393E236109 +:103CFC00F8ED823E2361F8ED563FEDB03EF6BD7017 +:103D0C007113934005F901DF2C3134961B466ADDA3 +:103D1C0004F424EF02A4244A2465DC0FF6BD6AF5F2 +:103D2C0004F9712295EDD83FFDD423AD6A440A0005 +:103D3C0061D8EDD83F714295FD6B04716392FDD44F +:103D4C00234007F903DF09712295F504F9EDD83FFB +:103D5C00FD3E2640B1FB9BDE09712295F504F9ED81 +:103D6C00D83F714A277140110571301105713A2203 +:103D7C00715A2271501105FD7629D2DD09712295F7 +:103D8C00F504F9EDD83F71103500CF37001D7140A7 +:103D9C0012054005F901DD064005F903DF05F5CDF7 +:103DAC00FBEF04CFCDFB03CF04F902FD5C29EDD86A +:103DBC003FFD542CFD052D714A9DFD0F35FDAA309C +:103DCC00F537FF712BE0F505F9712295CBE43FEF48 +:103DDC00CBE6F6F0FD6B04713BD471120271230239 +:103DEC008F06F93105285004FD822B625C03318E5D +:103DFC00315D34B3FB896168995002FD822BD2DDB1 +:103E0C00067170B3FBEF047178B3FBFDD423FDBCDA +:103E1C002D710806F9CF04F9038FA6FB5C02D1DDE6 +:103E2C00095080C15010FDC134C0EDD83FFDDA3FC0 +:103E3C003164952FA47AD47ADD0831A4E00A3102DA +:103E4C000C06712BE0FD464031A4E01731040C1335 +:103E5C00712BE05027C15005FD712BC0CF04F90424 +:103E6C00712295FD3B408F06F931250731349603BD +:103E7C00F504F9EDD83FFDDA3F31020C14F0C150D6 +:103E8C0005FD712BC05005FDAC09FD4640CF04F972 +:103E9C0003FD3B408F06F931250731349603F504B9 +:103EAC00F9EDD83FF504F9CFCDFB03F5CEFBF5D0FA +:103EBC00FB717293F6426CFF61E8EDD83FF6BD7072 +:103ECC00711393F5E4FBFD4539717AFAFD152EFD5E +:103EDC00A72CFD5A2D714B9D7113027123023134A5 +:103EEC009302EFFACE3708CBE4BFFFCBE6FFF3CE5D +:103EFC00D4FFF5B4FBF5B5FBF5B6FBF5B7FBCF3747 +:103F0C00000971481205F6BEE0BEE2BED0716A2708 +:103F1C00FDEE29714307714B27714810057148114B +:103F2C00057138100571381105713302713B22711E +:103F3C005302715B227158100571581105CF04F9A9 +:103F4C0005714295F6BD6AFD9909F505F9F4243120 +:103F5C00349604D432DD20E505F9E504F98F06F931 +:103F6C00312569F5F8FBF5F6FB502EFDAC09CF05B4 +:103F7C00F903E504F9EF55FDBF04FD6723717301E7 +:103F8C0071320471430271039271629231949E02F8 +:103F9C00EFFA712AE7CEA409F5F3003104070261A8 +:103FAC00FDCFF30081F466FDD008CEA40831329623 +:103FBC0006CF04F905EF09714395E505F9E504F918 +:103FCC00712BE78F06F9312503F504F9C6D7D47B9D +:103FDC00DF19310200585003FD822B625C01D1DFE6 +:103FEC0007F504F9712295D7E47BD74A7BF0DF07FC +:103FFC003104003AF47BD74A7BC8DF0AF504F97127 +:10400C002295CD7BF0D7310200084A7BFFDD1FA43F +:10401C007BD7F0C15004FD712BC08FB3FB5C9F9F0D +:10402C00B3FB7110C4FB30853B6194CD7BF0D73171 +:10403C00149306F504F9712295D7716395F47A718E +:10404C007207FD4602717307D7FD1F05F2D7717B0E +:10405C00FAC7200CFBF8FF8FEAFBF0F9E9FBF3033E +:10406C00FDEC4D13BC048FECFBF0F9EBFBF303FD03 +:10407C00EC4D13BC028FEEFBF0F9EDFBF303FDEC02 +:10408C004D13BB717AFAAC04BDD8F6BDDAAC043171 +:10409C001EBDDCF6BDDEFD700DADD8BDDCADDABDF0 +:1040AC00DEAC02BDD8F6BDDAAC02311EDADCC3DA06 +:1040BC00DEC3BDDCF6BDDEFD700DC0BDDEC0BDDCFB +:1040CC00ADDEFDE60EADD8BDDCADDABDDEABBDD8E8 +:1040DC00F6BDDAAB311EDADCC3DADEC3BDDCF6BD0D +:1040EC00DEFD700DC0BDDEC0BDDCADDEFDE60EDA62 +:1040FC00DAADD8FD2944C3C58D885C3FF0317E0410 +:10410C0040FC14C2C0B9A488F6BC08BC0A9C078C3D +:10411C00074C2EDD3D8D880E0770F161DC605C3F35 +:10412C00F0317E127940FCBDD8F6BDDA8C077309EC +:10413C005C22318FBDDC70BDDEFD700DAC08BDDCCA +:10414C00AC0AFDE60EADDABC0AADD8BC0861590765 +:10415C00EFBDAC08BDD8AC0ABDDAC9DC0004F6FD75 +:10416C003A0EC9DCFFFFF6FD3B0FADD8BD82AF3A6E +:10417C00FC4682DD11AF3CFCBF3EFCAF3AFCBF3CC1 +:10418C00FCAD82BF3AFCAF3CFC423EFCDC46AF3A95 +:10419C00FC423CFCDE3EAD26423AFCDE374A2A1697 +:1041AC00DC1A4A2AA0DE138D844B2ADE0DAF3AFCB2 +:1041BC00268644691061C8FD1242F42AAF3AFC44C9 +:1041CC005146DC0AAF3AFC241027BD28EF0DC92854 +:1041DC00F82AEF074A2AFF61E8A42AAF3EFC423CCA +:1041EC00FCDC18AF3CFC423AFCDE10AF3AFC462833 +:1041FC00DE09F484AF3AFCBD86EF074A84FF61E820 +:10420C00A484100CC6D7717BFAC7710A9E31929E9A +:10421C0002EFFA8E949F34FC8E969F35FC8E979FFE +:10422C0036FC8E989F37FC8E939F38FC8E929F396C +:10423C00FC710B9E717AFA8F37FCFD4F0F76FDA740 +:10424C004313BD80D5EFFBDF0AD5F0FBDF05D5F1BD +:10425C00FBDD25F6B14680DF11C9803722665C0391 +:10426C0091DF060A80181A81009617FDCA4413FDC7 +:10427C00EA4231049602EF61520692926934FC686C +:10428C002EFCDFF6AD80BD7EF87CF3311C790AF98B +:10429C0044FEFFDD44D87CF101040AF914A944FF63 +:1042AC00FFDF04E6B9EF0BD87CF101040AF914A97D +:1042BC00A1B9717BFAA0EFFBD5EFFBDF1CA0F0FBE3 +:1042CC00D5F0FBDF14A0F1FBD5F1FBDF0CCFEFFB3E +:1042DC00FFCFF0FBFFCFF1FBFFC6717AFAD7C71601 +:1042EC00D87CF10744A800DC05710296EF1CF64758 +:1042FC00DD18A47C4A7CA8DC05710296EF0CF87CD6 +:10430C00F3311CF6780AF9B7EFE4C6D7C756A8966E +:10431C0066F0317E12F6B1780AF966D1DFF1717B65 +:10432C00FAF5EFFBF5F0FBF5F1FBF47C710396C6A7 +:10433C00717AFAD7C72004FBF8FFD446DF168D7CC0 +:10434C009D89717BFA52069292692EFC68C0FCDF43 +:10435C00F6717AFA4A4606DE0EE84609C0FC9C0362 +:10436C00A4468C0372EF30F889F3311C790AF9BB3F +:10437C00311296058B9C03EF0F8C019C03D489DFC3 +:10438C0005CD89A7EF02B489718071179661DC6144 +:10439C00FB7111968C03721004C6D7C72008FBF86A +:1043AC00FF8F37FCFD4F0F9C078F36FCFD4F0F9C8A +:1043BC00068F35FCFD4F0F9C058F34FCFD4F0F9C79 +:1043CC00048F38FC9C038F39FC9C028C06318E01C7 +:1043DC0012791A20BB8C075C03D1DF098C064C03C5 +:1043EC0061C86179008C05318EB1610900BB313D2A +:1043FC00120103BB8B0E04708C011C00BB8FF4FBF1 +:10440C004E03DC0E8C034FF4FBDC0B8C024FF5FBE4 +:10441C00DC04AB12EF03ABB1121008C6D7C7C3C193 +:10442C002008FBF8FFF661490A61F8614908DF07CB +:10443C00F7340000EDC644E6BC04F6BC06AC0ABC7E +:10444C0002AC08BBAC06614902AC0461F8614900DE +:10445C00DE28AC04BDD8AC06BDDAE1FDF50EADDA54 +:10446C00BC06ADD8BC04ABBDD8AC02BDDAE1FD10C6 +:10447C000FADDABC02ADD8BBEFCAAC06BC02AC04C3 +:10448C00BBAC08BDD8AC0ABDDAAC04BDDCAC06FDD7 +:10449C00730EAC04BDDCAC06FDE60EE1FD100FADF9 +:1044AC00DABC06ADD8BC04AC06614902AC0461F8B8 +:1044BC00614900DCC5AC0214AB12100CC6D7C7C1E5 +:1044CC002004FBF8FF8F31FCFD4F0F9C034E04DFE3 +:1044DC001CAD7E4680DE07AD80267E12EF40F64690 +:1044EC0080DF07467EDD03E7EF34F7EF318C0431D4 +:1044FC008EB1128C03318E43DF18303822267E06A3 +:10450C0080BB8C045C0391DF05AB041800BBAB12C1 +:10451C00EF0C8C034E04DE0532A900EF01F71006F8 +:10452C00C6D7717BFA3122960CF6468CDD07B68C19 +:10453C00717AFAEF7C712396717AFA4004F904DFF0 +:10454C0007715307F42CEF69D9CFFBF1E724000076 +:10455C00DD0F23DD1A23DD1023DD5323DD2723DDBF +:10456C0038715307F42CEF49715207F42CEF42D4F5 +:10457C002CDF07715207E42CEF05715307F42CC99B +:10458C008CFA00EF2CD42CDF0B715207E42CC98C65 +:10459C00FA00EF1DF5CFFBEF18D42CDF0B7153078E +:1045AC00E42CC98CFA00EF09CFCFFB02EF03FDBE60 +:1045BC0045D7D905FCF1E7240000DD0923DD2123D3 +:1045CC00DD0923EF1B715307F42CD7D42CDF0771B3 +:1045DC005207E42CEF05715307F42CC98C2D01D72D +:1045EC00715207E42CD731629301D7710394D9CD62 +:1045FC00FBF1E7240000DD1223DD1923DD1123DD9F +:10460C002623DD3423DD3923DD3FFD7E46EF3DFDE2 +:10461C009F46EF38D9CCFBC1AE6CFD632DC0F313B4 +:10462C00BE6C712304EF25F0C1AE6CFD632DC0F39D +:10463C0013BE6C712304EF14F6BE6C712204EF0CE4 +:10464C00CB6CFF00712304EF03FD13474004F90505 +:10465C00DD064004F901DF06712304710394310473 +:10466C00940FF6BE64BE6A31220402EF02F690BECD +:10467C006ED7CD2E47F48EAE6C317DBFCAFCFDE8F3 +:10468C0046D2DF0ED9CCFBC1AE6CFD632DC0F3134B +:10469C00BE6CD7FDE846D2DD0DCD2E47F48EAE6C48 +:1046AC00317DBFCAFCD7E88E0934205080D6BFC6F6 +:1046BC00FC22CAFCBDD8304700FD9B0DBFC8FC30A6 +:1046CC00C6FCFD792DF313BE6CB42ED42EDF0CCDAD +:1046DC002E47A48E4A8E1F61C8F48ED740AFFB0BB9 +:1046EC00DC05712304F2D740AFFB0661D83122926E +:1046FC0011F0C1AE6CFD632DC0F313BE6C712204BE +:10470C00EF03FD1347E2D7710294F0C1AE6CFD6369 +:10471C002DC0F313BE6CA48F4A8F40DC37F48FD8B6 +:10472C0090F1313F0412FD14D890F1BDD85008FD22 +:10473C00EA0D087208E6D2DD040192DFFC896158AB +:10474C00D1DD05712204EF03712304A4904A90205B +:10475C0061C8F490D7C73026FDC6D77180717DFA39 +:08476C00DE035201D75200D711 +:1047740061FC61FCC1C3C5C7520C929269D4FEC1ED +:10478400DFF88EFD708EFCC1717AFA4004F903DF04 +:1047940005302C2A6194C09EFC609EFD34D4FE52E8 +:1047A40006C0B9A5A592DFF9C6C4C2C061FC61DF29 +:1047B400520C929269D4FEC1DFF88EFD708EFCC15A +:1047C4008F4105775C04D1DD06675C01D1DD503192 +:1047D4005494367162077153948FB4FB5FBCFBD160 +:1047E400DF1B8FB5FB5FBDFBD1DF128FB6FB5FBE56 +:1047F400FBD1DF098FB7FB5FBFFBD1DD0C31620753 +:1048040002EFFA716307716B27711396FD5330F44D +:10481400227148500571605005717AFAED0E4967AE +:104824005C02D1DD16D422DD124A2202DD0DF4220F +:104834007148500571605005717AFA717AFA8D22C7 +:10484400318FE7240000DD0823DD1423DD2CEF4A3B +:10485400F4467140500571505005E422ED0E498F25 +:1048640040059D47715050058D479D49D847FD0728 +:1048740034629D48CD2202ED0E49675C02D1DD17FA +:10488400675C10D1DD05CD2203EF0F71485005712F +:10489400605005F422EF73CD22044A2203DF108D09 +:1048A400489F4005D848C1D847FD9334C0EF1F8FB7 +:1048B400400576717447DC054A4702DE0671605094 +:1048C40005EF47C7D847FDD430C071505005D849CB +:1048D400F1242900DD27240400DD22242200DD1D2B +:1048E400241100DD0C240100DD13241E00DD0EEF75 +:1048F4000A4A4760DF07CD4761EF02A4474A220313 +:10490400DF08D847FD0734629D48C09EFC609EFDC9 +:1049140034D4FE5206C0B9A5A592DFF961FCC1C327 +:10492400C5C7520C929269D4FEC1DFF88EFD708E19 +:10493400FCC1717AFA51405F0401D1DD06F616A775 +:1049440047DFF2300400BF2401F6BF2A01300B0B0D +:10495400BF2801FD4602300B0FBF2801FD4602307F +:104964000F0FBF2801710AE6F6420C01DD33AF04D4 +:1049740001BF0C0131529329715293710BE2D84D4E +:10498400FDB8033184BD02EFFACBB422FBD84FF15A +:10499400BEB8714BE1714BE5710ABD8D4E9E44EF7B +:1049A4000C715393714AE5717BBD713393C09EFCC6 +:1049B400609EFD34D4FE5206C0B9A5A592DFF9C6A7 +:1049C400C4C2C061FCC1C5717AFAD44CDD0BEA4A99 +:1049D400899E44A64AB44CEF33710AE6300400BF02 +:1049E4002401F6BF2A01300B0BBF28010000000090 +:1049F40000000000510FBF2801000000000000006B +:104A040000500FBF2801712393713393C4C061FC1C +:104A140061EF520C929269D4FEC1DFF88EFD708E64 +:104A2400FCC12006FBF8FF71503002CEABACCC04C5 +:104A340000F6BB31B2E210617900F6614900DFF3A0 +:104A440071603002EDCE4A8E519C03713BE28C03BF +:104A54005C02D1DD1E8C035C08D1DF097150300289 +:104A6400CC0400EFCC8C0570FD7535629E50CC04EF +:104A740002EFBE8C035C03D1DF408E509C02715068 +:104A840030028C04D1DF0E8C0270FDBB35629C05B4 +:104A9400CC0401EF328C044C02DF0671603002EF6B +:104AA40029CF34025A716030028C0270C18C0570B7 +:104AB400FD1D35C0CF34024AEF108C035C01D1DDFB +:104AC4000671603002EF03ED354A1006C09EFC60AB +:104AD4009EFD34D4FE5206C0B9A5A592DFF961FC4F +:104AE400C1C3C5C7520C929269D4FEC1DFF88EFDD2 +:104AF400708EFCC1710A9E31929E02EFFA8FDEFB2A +:104B04004F96FFDF198FDFFB4F97FFDF118FE0FB1D +:104B14004F98FFDF095004C15011FDC134C0710B1F +:104B24009EC09EFC609EFD34D4FE5206C0B9A5A56D +:104B340092DFF9C6C4C2C061FCE46661FCC1C3C5AE +:104B4400C7520C929269D4FEC1DFF88EFD708EFCC0 +:104B5400C1C1FBF8FF8D1F9C018E31318EE7240605 +:104B640000DD0823DD0E23DD22EF38717AFA8C0193 +:104B74009D5EEF2F717AFA4007F901DF068C019DE3 +:104B84005DEF2051FF2E019D5DEF18717AFA8C01C3 +:104B94009D304004F903DD064004F904DF05309C30 +:104BA4002561944031FF09DE05A031FFEF077158FC +:104BB400F000716294710BE3C0C09EFC609EFD34F2 +:104BC400D4FE5206C0B9A5A592DFF9C6C4C2C0611D +:104BD400FC717BFAC7D46661F8312495277123955B +:104BE400D466DD05B466CEABAC717AFA5600664C79 +:104BF4000ADD1172F3311C79D8FCCEFC0061CA6164 +:104C0400A486EFEA717AFAF2C6D7C7C1C1FBF8FFEE +:104C1400CC01008C014C0ADE36717BFA8C01F03138 +:104C24007E0410FC14A96168DF09AC02B9717AFA38 +:104C3400F2EF1D8C01F0317E127910FC614902DF24 +:104C440006717AFAE2EF09717AFA615901EFC4E266 +:104C54001004C6D7C72004FBF8FFF64210FC61F825 +:104C6400ED3A4D717BFA9C038C034C0ADE3C8C03B9 +:104C7400F0317E0410FC14A96168DF05717AFAEF43 +:104C840029717AFA8C0372F3311C7910FCCEFC0082 +:104C940061CA629C02D1DF0A8C03F0317E12E6788D +:104CA40010FC717BFA615903EFBECC0200CC010108 +:104CB4008C02F0317E0410FC14A96168DD788C024A +:104CC400F0317E127910FCE743DF658C014C0ADE7B +:104CD4005F8C01F0317E127910FCE743DD4D717B6E +:104CE400FA8C01F0317E0410FC14A96168DF1861AC +:104CF40069018C01F0317E12F67810FC8C024E01B1 +:104D0400DCED717AFAEF2F8C01F0317E0410FC1483 +:104D1400A9128C02F0317E337810FC8C01F0317EC4 +:104D240012E67810FC615902717AFA615901EF9B1D +:104D3400615902EDB44C00F21004C6D761FF520C65 +:104D4400929269D4FEC1DFF88EFD708EFCC1717A37 +:104D5400FA8FE4FB5C03D1DD114004F903DD064066 +:104D640004F904DF053081386194C09EFC609EFD27 +:104D740034D4FE5206C0B9A5A592DFF961FC61FCEA +:044D840061FC61FC71 +:0A4D880000060C12181E242A303613 +:104D9200ACFB0000000062FE00000000CE390836C5 +:104DA2008C22F245402EEF2E2E45F43A8F08D93C44 +:104DB20028FC36FE20FE02F903F929FC30FE2AFC0B +:104DC2002BFC08F926FC6CFF1AFF6EFF6AFF64FFDA +:0A4DD20027FC66FF2CFC55555555D3 +:104DDC00FF0000000000983AF82AFF00000047008E +:104DEC00317503F7332312D714AEF8C716AC06127D +:104DFC00C5AC0416F643DD078B99A7A5B3EFF5C236 +:024E0C00C6D707 +:024FF400324445 +:0A4FF60031353A30343A303900000A +:00000001FF + \ No newline at end of file diff --git a/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/bsr.lmf b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/bsr.lmf new file mode 100644 index 0000000000000000000000000000000000000000..f45fe525bc0633025df04383feef7abe92f1f309 GIT binary patch literal 177860 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 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.1E_spfl_dp2(sdk3PEE-spfl)/fsl_user.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/fsl_user.h new file mode 100644 index 0000000..1018689 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/get_ei.asm b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/get_ei.asm new file mode 100644 index 0000000..29f4a6e --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/get_ei.asm @@ -0,0 +1,26 @@ +$PROCESSOR ( 9F0104 ) + +PUBLIC _get_ei +; +; PSWEIǂݏo܂B +; + + + +ROM_CODE CSEG BASE + +_get_ei: + set1 CY + and1 CY,PSW.7 ; check IE bit. if 0, all interrupts are disabled. + bnc $ie_dis + mov C,#01h + ret + +ie_dis: + mov C,#00h + ret + + + end + + diff --git a/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/hal.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/hal.c new file mode 100644 index 0000000..f51354f --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/hal.c @@ -0,0 +1,182 @@ +/* ======================================================== + ȈՃeXĝ߂HALC + + $Id$ + ======================================================== */ +#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.1E_spfl_dp2(sdk3PEE-spfl)/hal.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/hal.h new file mode 100644 index 0000000..245be75 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/hoge.bin b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/hoge.bin new file mode 100644 index 0000000000000000000000000000000000000000..572eb0b7585a5aa1e1aa87bb401462f4c2905804 GIT binary patch literal 16387 zcmd6Odt6l2+W)@J>=_V-fxuhJnL)f}dkZP4DJr3jgd>_+QnJawJZ5a{bWtnLIsH1B z17m=6ED$?C>?UfOr;9pV(!h#~7&d6LXFTTZbdGLBn7}=I=J%{UfLfjR^L~E+ye~R? zul1~FJ?mMQz1Fk7>sf17ul0lmZu?^v=obtSK7Ak4I?(^2^5 zU+7@IAT6~&-u~cCo?nNaO8Z;dztetA|L;;>mIKs?gwpM26S|UXKWeO(djl=Is~e|w zVnTNV-yvX{zM>DxaT}g#XcP5<;XN6Vq!1t!wDFfw#IEV%$T08z!(RRYOr-hEnAD?q zaD~H_&A9TKPH`|w;oZt#CP};M8k~(&F)TMt=bp_KQQq)+ZsQK+Sj6W1TohdtwV9vm zA-xiQF^ks#$@l;k`&&tWk&YzyE}G6?ek})-P$p;^oQpLpLb>6UOkXn7hkNMeX|zN( zPt$^OnLk!)`WBNbD6Z&I9EOPov&fh|VM45?&nd9zk>2Z?x<*w7gqz;W`F?Emcg< zM*%0Q8_hIhWHT8qG0jlTt+fa7W{PR1nV#PTT1@|JG55B_U2hq4qb1(gGInLlWM69p z-P>xUBU zg%}`RNhMB-6lCGIKS zxK|yZp|HWxvOne9gC^Og=Zb1RZ#ld`SojZN;RQkOurWJQq;MhRA__p3wCYfYMO8dn z@sj%}yfze%0o9N3{werpiS2}bq+1O+Tgx^ ztv|%O%4uOnTQw17Po}pERx8cFNboOWo&P{n$RPjGoBUyPIc-g@M`d$+j5ZCt3Q0!? z7jT?8b7oJ6QW#oyQVg{+_0}k)tYQhV(QO_L|A^*F7_DmjmF~A0v{wjP$gr;Jn=S?h zzLi)CT2z=A*Mwu^!{Awc9ddmbDhL_{j1k8X|NTIy1{2~b& zOgfzGeI>y6@{hp$+{X7_F>66KOdDt}iNu5vu>wg71bw#NN-7H`)>$KA#8|`Y&!Px) zjhgRGQDei?NDp~Y!o69%Ec}jwIK%gXC~k_D-WlhU$euV~a-1*1Wr9FwzqFQV%(v$Q zfp0Gcer{s4KK!}xS7DY;4gF$rCb7Qb;PD08k(h-RS6-68N?~ z5D+%hz)V~N6H9C;w3aOtbvJZFMSI;5O<{XEV~Z*eu|+}egknZp2v_9jh*U;~!t(pXebh%vuMnLL^S4LcKMAlr%~k&;~&vW@2MrCaYmk#wEQC>SDw{&8N#6J zg^d+3xhvDPP^6NlS7cp-6Pg8D0&@544s`AUL_asYLlBFhpF6fc2ztR< zoCE8)Xvl@9hZYjbq!3|BnWPaYt-zJ#WG1U=$tZ0eN}G$)qG(|bq~U5Bj?$K(v<#G% zs1+7N8k7k#36%CknRKU+T_z1p*22Qf2oxdkWs<&es(}`cH9$BglTx|i`NMqDA2Bnd2K^pNE(m*TVZ=v=83*^zZ24{~~?&+0V{c@o72K;0>(7#;5n6QB^ zM*b;+%_M^s%2m}uK|?TukuVIs zikcG^ar#6c!rm6(Cf|Ro&e_HN?HGQ}S#gdR({vsqba1_0!&Ht@>RL4nc6BVqb={y) zFb(t2r!Yp0=0#vSrC~&U^N*wXX1@7qG{!gk+c7@ie;f1l2EzOY5aARC0>hBBXT~U% z8m8_lg&{$`KRPooP?zve!&>7Ml~zkJjnUba7z1;NeR%9U=rtm?5@#9~WB%*_aMLJj z{o+u+9;ziSi0z}HRtyYRcbEo8?GQ~eeFmkvUZem zM{TSUQ)^P{ocl&9Ka5iT6|2Z5#kpi5o3WIgl0JoH=P%=?uvnnp>i6%)RK<|Spsv3v zz&H2)c(oO4lwlQ(R_t|HIsMhqX_N*GDCM51`$AX@%b4iT!M;4!z&;l8IR^31iC790 zfp9p4K`%a#q4!S@{2SUAbrOk<6d+jsrB*z>c~zu$i6xUw8E(KbTV#vxOVB7U!401LhTI z>wnO{k7A&{^-)vn)!N>5-T!<58p1!(&$nh4Y${k^M-9VTeBu1JUoE91@~fpW{-J*O zw3)-%<;3euIoT#Aq|I^Pop+79Yd^2U5}1(~vpB#{fB|hk5#VQ_Asv8Zw@v!K0UF?C(#jG zw!gnCCM7T3(=(OmV}V39Vc7fgRi3=`#903zPXXd#{cN#+kjK}8VUl0%`kKx?9W`Cp zUN3aP(OW4$cmsP}HJy;+=-As$8uy&(XCobFzH}bF&OLjY`E$KDzQfT`$NfR`=c7ii z`Ag-aAtfFXg`6p1`o{-H*JZ4r#_O%=uIYlZI$JMef3#o5IP%8c&YsJt>-Yak937O_ zdz-Ye|FyJzXR)BTJsqmNAHw_99vY_0aVA(Ow36eD^H0U%#G4sAy)|7m-Pufy_hv58 zGAn8R+~bA}tqUp?62>2;imbaZ@K2T3C! z=}ZL}VBDw#_%HMwJmcwxH5t03&Y9W)yN`hI{Ar=ix#EY4AF@^;R@aKt%!&@i0gcjl zJs&K|Y%UGP(a7`&erJB&4kf$cOXq)g_xeA@$4#5g!hcvkZ-(gKE!w!_tAAoR#SAgV zj2zA27&aQ4fjx@7fW3wN9c#y~V-Yxur{lxo6H}ICuY3Nbf`XTxUzfckB{6=OLC^I6 z=?!~353-*nA7T$%4}W~b>M%I693R)7{qo~uv5g;pbGF5RcSaeaVm0g&TOYvIVbAAn z#D>AYn9h+|MhyKUuuN+0|LGSPT}!8as!a)plwz9gEk&KWsPHak*IRnWu8!js48}#fih%5%x&d zk)5DdT}@u?i7$5^!;V{<3Ql~C?;K+o`f*I%w%BLRZpymHa1S=EGrDu+&KNf0L_}vq zCxJZDv8J6Tb`sbygArR` z7-N{zdH2r9&XFe!C&G6|V1~1yhEOaN>L_3bu{vz$nG2VYrTM?{@0FKd+O*-t7oLCa z56|WcdC#nSdhMF0R_EqCxhk8_TKV{6nU6lQ{NZH}Ey-AHU6lUdLdydWESR5q|Gc?# zl4sAlZ^ra{lW>9{NdoiBKVR?cyncf+j!AlO<+|rLJil(`gGpnI)D1-bS@vUyjli+O z=?AB`dE%R=k5Xotm4BGHDaAuLs#wQODFf3EmIh%8r5Mf1A(L`Pyi-_G+&)F54^9y> ziaAp;2`^!3u`q|=QeZ=r{E6%o7Qn;8E_6j$*e~3nmKo#RWYr9(kWdWNSuWbbI$WWa znTR?QcBaM7?it-Po!s2AP|JM;5btve=3*x|g)%1ZlV`d^?FVEq8a))E3Z~-j`-1oZ zsHYKF)$&dHL>5wtg=uB(MM7ekFsB&O!mLEUdD}c?yfp1>f24a#Oudy**om;_4%vcC zb0!RjmCcd3Cou(k$3>soCwp{OFm_cd8CKK6*os-o6|=Hx;wf#PNC{-IvvAhJSiYBA zRXkF7q8N5fmRVYnw#*86bSkJtDx2bzt#JZT%&s59mx3LijSKlW?51EJ#VEt3Wmm9P z9eO_}Jb?>CHGLNLnk(djwy%fj1Mo>QSy;+Fyj9yrpzY6EWerhR>>1K-_2>ixplD=| zwokQ+X+duSvo^#ekVJE=_F+KC7`I`)P9MvsyXf4CSc&|L^e;=S)}sU6`CgDnHaM+% z(1T6J>a7|j61I0`SGMaKV>PgELQI#hJTr#1JX~*`g%S}EgdLE9CNKx&7>a;gRJ}D6 zX@y{D=?t|YzJXqNV&%aF$2L=@>7xxw;H~uVLMT8 z!@sAHB5RdLH2V{%RNi z>1!;Uy^w|7t})&+XPld^nggNkIfZP+>_XO>_q~x_zt~I_U`8&$6_FLmm3w7xVe+Pe zv~8{tg~^;fE(-f8$V7TDtk53I?F}R!X zM#nf_XbiT^Nsk5<4_h~AVg%Kx;0fwk*o{Hwdq&291*e2eI_c5dH06Ltlv7fA6a55W z4pQnsni!6|MxLNJy{ccGpNA{|Va7KZj=P$fBkw^A8)*oK$Go|b8%aU_D=QckH- zq9>gcHBFl1O$%;yG#29cJ19=8@fZ|;6U8w#t_3Ag06y?gF0L4qS%s7tVk6UOx7J3MBS^(YSMHN- zROQFA^4E!lDe1I04km*TH*HA?aYsQ=gMu2j4t=ge+Ec`vpR9eKT#=%jny7*&%kYkA z=z9m`LIrpY>fje*4K#d++jSCcHNvZK+FB;BpH2NrfiQHC5DgqaePm)b+Pj7ed7sE= zZiz(u;$>J)K6IRwQj@`CP6i<9$#IFF$eS}Ox4#j(DPRp`Mzx716wHjuPy9^Y%&*xl zWNVjUT(*`5Almb@@PtBs`g)Lmn&H=G zX7SnCm4H#y%BWQyhyC?fHT*bnOS2&OC|k<}u_;e?uxYx`_j~$%8O>Nw!s!nnq(vd8 zk}w`XkpGBULA%h1Zvedt_C6WxeCy~Sq@@ml!4CES2ou+dy0c;`Y)KknoWNpXCF_wK zfgpw9u}bHJZVtZJ!93y}YOgCTW8uAB2R)zyXM<{~)XrdOppu%{59~qb6msPx%!Sq} zG|y*OaP3x+>blZA!A5T6P&b4ZqL+tmA`BAQM8v9e=!rXkj*vs>N9YPk18?Xjv|3)z zhon%{+y`WPO@DKjLxYb_{8Zk&jzHt@HyawV0d%87!`q04H^gDcGf*Kl3K$_!=D;9$ zl&k6B5FoT{eq9&BM3mgIT~25K=nZ>={9Fut1UZWuWKUO51De{btDs$!-%ZK}q%flR znh;gYyI{Z=QGUfTwRt7kkGxdt52FPdol^`f3xkIg)v&q{^;^^gwD_Qtgx59Exq0=C z)>jojp)y9JFf=5jSz;+SwG5DtWw`piP_Mlv=^;dTsKpeo$>HoqYufh-i_^a6_0-Z> zM^b|mW|sS0bSvcxN5Ro*Fa!ld)SwmxHGBumU5JTv!t^6j7bu^z2Y#ohKCn{O7d!ha zikCn=1#Jm`oXanc5%P-#szj|lRdTcT&PLFfLSqaxhM;PjsEUNRiF3{_r-0$K@Pd^V zrk?`r+isvUeU%2fbt!GRFqak#@WbG@02o;K#aijsCA6+JgANhc#Sn+zj8j6Mm9|Hq zoDp=l$*GECaN4P)Bq7ijpx@o*9!fouqel!5YyNU8)kn1MlUE^JZ%(mf@Irt$7`^+= z2=bj%tUS#sH|7eaZNkJ${HuHwe?{trb1^szc!4E^=@*3==Y$zQ2{Wz^s+~w!E@T9R z;TeKHLs$SzEc{|wqBVigwN4>GX%6D>n{iRdV~GK!g)Ei;wSjj*C#Lp#4!=m$TTVbC599=zm%@h!?dJUgn#^lPjj@;Ho;d`NlX^&JW2^<=8+S)Vez99^ zTeI=>SovB4YR}h)9710iN0s7Ez>W!z!3*_SSF@(JNUklFYu}c+XG@~kH)O>&ncb>B z%g|F2xTw-0LS(7HoRqtlbw4C!wLj!})E+NaJY-om+7%;UC*|aEazGqe^{{=MyzpUn zWcM;Dykpt5ce64_S1eQWJ$!kYZi1XwkL3T~$#oF3pcs@BjIBX2C=X%>A3{t^@46mY zvkoz+p*1K`4Xpw^8y#D_#tV6!SW5-dvZJo0vY@9l&{GoVDGpqCD{!GKaA8~E!e0X| z<*x`BoMn&rQJDCnF#Hk>dtpO`px?n2??7jYAv*+fsgO`A%qxWkZb1XJl?a$>tY zwK$NW?LU(QZeW55jGIz=hcKnIF|k}`iv!Vv3=KK!bBC78zywmcL=Xm&2g*t;4ooeV z2YEplmr@!D1q&N@*j@6Dx9y_5;~ilGl+pUWoZ0$;yt4JU{8+0`p4zI&Utjo6b~d(F z$;Q@Q@~GA(IRN9er$z2*m3vOeVAZ6pax?i!@iO+BbUmnL3=BUKGxI-QX-_bN9lev= zk0Kv&V<7T5w?A$O#&XiLsfN|#(I8=w|9+f31 za!-OP@`OtIhx+WgB}}U2MyXG;`n+F#E>@q9sm~`9;@}%mm4pDue_AEKkbt!ObHaY4 zgQ}%k`1dNgC?U>>SU*r%wqYR;|PjnZ>rZDd!^;7b#afq-X_0Cb)qYT334e5n+Yi`G+`{T?E@ znKNN+XMYF=^K;f`2a5m^s-a1<42I6uDsi7GLOp3q#C@Cj)!TE?*#~v;T}U6KfTcjQ zu_((R3Cud0HQYvuMQ0ybxDOO-PxUalmCbThsx-usO1qiMskuWVl&Vx!>F}ExSyETI zM_5vEk0uw63m?W2Up!=kO#E@dSgP{Bl2;#dEsn($9b2aoX8)3){Uu@aF9^3s;S6SQ zu%9Xpz(G#P4(Uqnj_vTS`~fw#Fc%u}l}guOcy^_zc0%UtO1CU+%*`BK>5--N?6`ZO zxhv1h(rUIR2?a06(qn9xO1&&g8EUVj!Ad60w=6&Io_l$D?$AeXR4td1ax0cg(1WPc z1S0`ZNFeG`D)7lf=cKVNUD`A^t(?DG`h89s z;TdgzPtGLs?W8YLHILDT*@$8V+yp*bT9%V`pNHAI)$wTWqtXL8X|p_3?+Ph7CvB03 zR!sAxsX1x9hq=65_vnp$X?#xFD?oP7kVfaErF%j+s*K7oNX9NH9Mo`8839R?vtCyv zqx}g?GSE2&ERM!p+PE}KjFDpClpy9BRVBj#@hjWG1Q0SxC8BCMaH}38w;T#40jrHz zud9|H2Um`1wqxJP`g4VGy;(cZ@W{fz} zEYfCiqBKJww&hl8d|(PncjspQxsvorV{T1Zr8B`Sj*25OQ5z>?Vw^Mvfmmz-`UIF~C|^D!4YPwXxG!Ha2pQWl?vZp| zYCB;*)J_9ZlAx`SX7Hbl3&X^raS@m}A}$;gjWEQ;JET$Pq&vayV^{_y-I1Y@A~I-c zNQPDwrk)H2Kp3~Gbeix)Y2o9Q)pFrumEX!!Px=}=9#bsS_&4(SHx&D{x{mB?+}&9f zd|~E79^9nzOAGmmOlSeiO86YvrBnIR=9RxcxKgmf!o-HO#$cKjP6Lh`!Uk3d`B4bD z1n?B(DC8^m$Y>EJJ;7sKqRYuWTN)~?FBKxU0ml;($5Gox3*4W>u^zTm>v)T+}v=8lq5^!Y4pz#}mqtsh6M7jWmJP9jRLT{o@19M?G|p#wQK8 z5oxqr)2i_iQWzQ=M$S)iqqCqd3!hx1@rmP_@X=6I#glNdvjqUEs4eSt##l&k(Ob%K ziRK@{q)RruA}eUW3;Ii_Za1r(vx6I~GWVw+VVx};Ei8v6JLD4TGj+7ueR4YCBD*Bc zMl4cfb@<2Ih`W7q9?tcgnbd0Y5#kO!HK zDI_NNU1p%aLH+S)j!p+{;Gq3kKh7QYW;C>H~p*9oR3|TR*6`vMN@0QXFAfO#$+?`ka)PcplIO-*#o( zy@CP2Cut>o<1FM*v$6k_mDke^Xk*a5+I}9vuVTD9ykcRaT7Y(j>N$LSgF75{Yqu71 z%d`=KauUeVZf0_qAryA-7hvDcs=M6E%QAvCRgAUEdHS+kfBKS|h<0(eqy+2Iq{D)E zXOkXg-6p-EDWm`iC(E_4{}nczYGSm2gKmWP-7yrLS|f;XCn^hpfY~tfYJ;`BM;LlQ z?p{5he6(68131UsRtIPbReHJ>d1T=zN%b(_ROUoEx-ZoH9isDkX(I^n| z-WqS}8ou}IHGu$^T{g_JmUc&1t%a8-ylO3Ko}f}h_gZchB(Fos>)-{+>rnd-B(H0K z2CDjulglrQu{=$?qpF^UmuE=T(=ZZL&k&*;C>p-E`I#|bNrQJryE_bl5HLSz*i2Y% zPpYjvk~3*(mIP~uTe>Y&Sh5XyqNu2X5;a4aKBK{j7D5}zL}TF&8hreua1^|sW@${KPHX$FWmS&z z6~0h8-X|m$U*uV%KmjJg4MV8S1mA^;J}!#rU%BeJ6j;QP(IWO`Kg!M}QvJr>ASDji zRf}W8czM&hi10t zs#4W`HhAU+hkek3FPmi+N2oi3`_OabEcAR*ecn6!O35s*BTtAdNv6S#XA+lKHX?P6 zNOi}7tr2I5d(ssS!xj1fFoY|IW&;edXHAM8ndpaR3v;(2Z~{(PcAMez2PXqy0#?L# zM||>r`5pI7ieMQlBu4-S0>9}d;Zc)dji8kW$Db5$;en$?a5%eDNH)?)9YEP>5KF_> z2OKJzWfH+1fGDB@CQedZlLSizbhq+<*q&+Nfp@ltMrwY0ezx@OMQ(Ok0AsY4E26ASA#%f!1)25g~}*z0YknEQX^(BOzuT+mCI67z)%P@Ird!#$G)C}a?ju8o=@eT&tzzGov^?Nh{f5Ob2TS~HDi^p#tZYb z!osn_0+=usK%XVSI|<$ifc%(*C4{iTBrFHo@(2Lh`e+ynFiyZL9QvR;4ys7OA!O_Y zy6-{|wHmV;9J#=q%Q_kA*b2Q0bZMzlL&1@zupWmKOko}YXCy*)F;}W?)hAqPsnYda z$2dw$@CtZucjv&k2LEla7&WL!Ne7c^umsrVt8I(gwZYlG(KC!Au;qg|nMVtB=mO{Y zjZVwPPLGzOu<6|>eB7fCCN*#DbV44+vN0fzuG;8?KDh~&11K&Sj>+o2QDuxO(ez6c zp4isCLCDu418BY0sdP{P2*RAEF7fuC5eRXb>Rf}5J--HE#)Z#e_ZLF(>(#ADT`BGdU(ef#yZAHL%tr@J3-P~ zCcxKGHDTW@B+NAw2?uEgU`rk6)^)!M0mo~=_9|j~6`4P%-v)QIMWvOAzM`_qdwfN2 zRZjI4{k3wMuc)Ll$yZcdd9M$)xX@wtX+C9U_;bqUd6ABSQ;?&m&(IVXKb7cPJ=y2+?kRA*+`H*I zH}XY&Uy45 zdv!mM;P~qrl+`22J)LsTHMx6}K$Zois%KY#QA8JRs@M!XYGo$-R@Xsgpjb<)#vOJ! zRafULC#zCzWWL1qZVp!OFlQ`-tpzEC!+9s!z8S7{Y<^!N4sI3-gqSkkh0Y+#Acwl& zP|sY0EnTj)PemvzG-`+`ljqjP>TItADnoB3ps9lad_-un>G`Scpdnzll*aT z{zcB-$WQJtcb^d_4{r&h@@zPqzS_IxbkYT9X^XmLR|srRdSH99+bEH{_Z!tS%A@tF z4&eT*2dC@@7?1YnL=3y~LCVD=l=q0HT7LvK4d8JMj>Xj!;=tVF(6?Nzah&;wat?hM z8u&0M_%Pu+29knE#Ga1B(l^x_$V?p`_*@{Ht6BpNWBq~e!uq*Y0k;<6`U<@4cN@{T z?LS7eb81_V>6B;Wo|jV#+}b?_@h=;tWG{?FZR*P+c}YtA88%>WVP?M(9sJGn3}ur{ z@h@u%4#R;Wj8b|xH55Axb%#U5bl8bZ`4Fs=pV8qS^e<;B3-zYjMD3?G=w4})U@n6< z*p3uf?@P4Zlcc9kx5~j?ez;j2Zbmn9mYBt{W-%$4{(z8y*ygrRf*cvz^OGcSF$T)l zwi}o<38>&~3{*9GCm@~DP?ff1fTnA0m0^FO?7ZK3n)U@t(wW8InMIvh8lj4E{#y23 zaJ>SFb#mG0rUhAgy18FVqgfng79-4Jyje^%i}#wv*-BQbbf5CaR4EAz)%v|_m05Sy z0WQ53P64DboxdPNc_G0>NulaN0&tK@PbxGBtvYK19EZ*h$WlPy!x8kphBHxwM0mH> ztaCO`p5I-xcP;l)?KeKkkiHuy~6z+}wM#{lH7 zJ?>*0d_kyu?ZL_IlRcr3tE$LSG@3u&UDSUz2AXsYoQ;`^BW|k+)Bq`d&M6S3wC^bJXYQmVFEw#GuiTb+$; zyaEHKKzQkfo6Nw$#d%<)#!w_y55~L!ovEsqoyx(+qHRRJwAdC3cc7>|rDc8{xViRI zXTX{EOKlzmAE+0lek*4TTwQyqO#~kBQ~)r<&@V!DEdhKDuFODbw_Kevp<E{kNwe z={wRIiyj}rqyJ7*gOm61zWSqIHD-juOx^CU_w*Jic}2eZ;K&EtRNXPv?eJyoP!iky z8JfB;cI`smWjIjS*Ug>~< z(f+BtvIYV=`)BgXS{Z7X1h)5!6IC90fnyo?Ew}0jBYoHMvI9M zhuoG79EGrMt0){}7NgAKB+1g9DkMW@xT$mA1o`3GPQ`o_E1X~PK*xOLTtarmf@Tvj zAUY-&xgyZbCYZYiO71pE>zhrK#YB1xg$pW^>5c{UkaZngVHgeao)ey(4?bn{3AYAa z$C2hYLgGHQ4wcgJz_qyXm^e0$!bDS?2@~%`I9_NRj){?RqcAZ{(p%}ptK6ojuFnvb~-0oXaB3Ld68y#>J>(?p7#V#rUH z%{x-wvm8v55}?dqDmLKzxES3N8;Dp@1YH74C^?2knDomLraFoVR+d2bW+=>im^*OJ z0Lve`#p$_@&S|e?FDzPI4!6zD!Dj`Z*eG~`|AG!>LY_WNHabtS-jlt<+641e4Wz<4 znp|WpClCj^3F#CHgW~Rr71QF5FF@TmXOA`CK8XL5b_T|a(WZ%fMk&jAO`h; z%0*uJ+5+wYzxrzaLk|udsoCA~qOyQznB5~UdMn_Gu%DF|{S}=05L}`nRbZC=T4=D% z&*%KMaCFnLaCA9d#Gz}X8Vv4`ieYBaBqc!~0qFU-bT9Xl5^vCs`R?_A*Mz0&d^NCNjE5`@mQk+(=hQ;ako z9$=Xvl?*|Z&@2t^Z-~=)5g<;;&Obs*HQ+eYgyS~irUdZ?HHK8VG|%&-s`tu4?Jms| zQPHY0DxC3_zncGEO-!8U0~q8 z$ggK{6-aCoBW~+Pgo^#T!_ZoQ{$ZL>= 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; + } +} + + + +/********************************************//** +@W[ +@ +@todo twl init Ɠ? +@ +@rbg삪̂łĕsoςȂ + ***********************************************/ +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 = 9; + IICWL = 11; // 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.1E_spfl_dp2(sdk3PEE-spfl)/i2c_ctr.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/i2c_ctr.h new file mode 100644 index 0000000..16234ff --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/i2c_mcu.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/i2c_mcu.c new file mode 100644 index 0000000..e0842e7 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/i2c_mcu.c @@ -0,0 +1,651 @@ +/* ======================================================== + ȈI2CiytFgpjʐM + de JHL cJZ + '09 Feb - + $Id$ + ======================================================== */ +#ifndef _WIN32 +#pragma sfr +#pragma di +#pragma ei +#pragma nop +#pragma inline // memcpy()CCWJ(̕I) +#endif + +#include "incs_loader.h" +#include "i2c_mcu.h" +#include "loader.h" +#include "util_funcs.h" + +#include "i2c_mcu_sub.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( ); + +// *sub炵Ă΂Ȃ +void iic_mcu_send_re_st( ); +void iic_mcu_send_sp( ); +i2c_err iic_mcu_send_a_byte( u8 ); +i2c_err iic_mcu_call_slave( u8 slave ); + + +// ======================================================== +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 +} + + +/********************************************//** + ̒ʐMÎ҂B + + ^CAEgL + ***********************************************/ +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 + + G[R[h iic_mcu_result ɓĂ܂ + ***********************************************/ +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 + + 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 + + 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; + // ܂ + } + 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@@@@@@@@@@@@@@@@@@ԁFI2C_ERR_OK + +@NACK @XgbvRfBVoB@ԁFI2C_ERR_NOSLAVE + ***********************************************/ +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܂ + ***********************************************/ +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 + ***********************************************/ +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 + ***********************************************/ +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; +} + diff --git a/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/i2c_mcu.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/i2c_mcu.h new file mode 100644 index 0000000..16eeba8 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/i2c_twl.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/i2c_twl.c new file mode 100644 index 0000000..e4014d0 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/i2c_twl.c @@ -0,0 +1,244 @@ +/* ======================================================== + TWL ݊I2C + + $Id: i2c_twl.c 418 2011-09-22 01:35:37Z n2232 $ + ======================================================== */ +#ifndef _WIN32 + +#pragma sfr /* @\WX^gp */ + +#endif + + +/*============================================================================*/ +#ifndef _WIN32 +# pragma interrupt INTIICA0 int_iic_twl RB2 +#endif + +#include "incs.h" +#include "i2c_twl_defs.h" +#include "i2c_twl.h" +#include "vreg_twl.h" +#include "WDT.h" + + +#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 +#define DFC DFC0 + +#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; \ + } \ + } \ +} + + +/********************************************//** + isr + + TWL̓EFCg𗝉ĂꂸA܂Ao[XgR/W + ȂłĂ̂ŁAXgbvRfBV܂ňCɂĂ܂B + ***********************************************/ +__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(); + } + } +} + + + +/********************************************//** + W[ + ***********************************************/ +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 = 9; + IICWL = 11; // LԂ̒iHj + + SMC = 1; + DFC = 1; // fW^tB^on (@fast mode) + + IICAMK = 0; // 荞݂ + + IICE = 1; + + PM20 &= ~0x3; /* set clock pin for IICA */ + + LREL = 1; +} + + + +/********************************************//** + W[~ + ***********************************************/ +void IIC_twl_Stop( void ) +{ + IICE = 0; /* IICA disable */ + IICAEN = 0; +} + + +#endif diff --git a/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/i2c_twl.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/i2c_twl.h new file mode 100644 index 0000000..0f608b0 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/i2c_twl_defs.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/i2c_twl_defs.h new file mode 100644 index 0000000..be5d566 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/incs.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/incs.h new file mode 100644 index 0000000..014e6f2 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/incs.h @@ -0,0 +1,43 @@ +#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 "vreg_ctr.h" + +#include "util_funcs.h" + +//========================================================= + +#endif diff --git a/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/incs_loader.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/incs_loader.h new file mode 100644 index 0000000..79d921d --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/incs_loader.h @@ -0,0 +1,40 @@ +#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" + + +//========================================================= +void firm_update( ); +void firm_restore( ); diff --git a/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/ini_VECT.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/ini_VECT.c new file mode 100644 index 0000000..84da25c --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/ini_VECT.c @@ -0,0 +1,347 @@ +/* ======================================================== + 荞݃xN^e[u + $Id$ + ======================================================== */ + +#ifndef _WIN32 + +#pragma nop + +#endif + +#include "config.h" + +#ifndef _WIN32 + +#ifdef _WDT_CHECK_ +#pragma interrupt INTWDTI fn_intwdti // wdt debug +#endif + +//#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̃_~[֐` */ +/****************************************************/ +#ifdef _WDT_CHECK_ +__interrupt void fn_intwdti( ) +{ + while( 1 ) + { + NOP(); + } +} +#endif + +#ifdef _irq_debug_ +__interrupt void fn_intlvi( ) +{ + while( 1 ) + { + NOP(); + } +} + +__interrupt void fn_intp0(){ +while( 1 ) + { + NOP(); + } +} + +__interrupt void fn_intp1( ) +{ + while( 1 ) + { + NOP(); + } +} // +__interrupt void fn_intp2( ) +{ + while( 1 ) + { + NOP(); + } +} + +__interrupt void fn_intp3( ) +{ + while( 1 ) + { + NOP(); + } +} + +__interrupt void intp21_RFTx( ) +{ + while( 1 ) + { + NOP(); + } +} + + +//__interrupt void fn_intp4(){ while(1){} } // pm.c +//__interrupt void fn_intp5(){ while(1){} } // pm.c +//__interrupt void fn_intp6(){ while(1){} } // pm.c +//__interrupt void fn_intp7(){ while(1){} } // led.c +//__interrupt void fn_intp21(){ while(1){} } // led.c + +__interrupt void fn_intcmp0( ) +{ + while( 1 ) + { + NOP(); + } +} + +__interrupt void fn_intcmp1( ) +{ + while( 1 ) + { + NOP(); + } +} + +__interrupt void fn_intdma0( ) +{ + while( 1 ) + { + NOP(); + } +} + +//__interrupt void fn_intdma1(){} // i2c_mcu.cɂ + +__interrupt void fn_intst0( ) +{ + while( 1 ) + { + NOP(); + } +} + +/* __interrupt void fn_intcsi00(){} */ +__interrupt void fn_intsr0( ) +{ + while( 1 ) + { + NOP(); + } +} + +/* __interrupt void fn_intcsi01(){} */ +__interrupt void fn_intsre0( ) +{ + while( 1 ) + { + NOP(); + } +} + +__interrupt void fn_intst1( ) +{ + while( 1 ) + { + NOP(); + } +} + +/* __interrupt void fn_intcsi10(){} */ +//__interrupt void fn_intiic10(){ while(1){} } +__interrupt void fn_intsr1( ) +{ + while( 1 ) + { + NOP(); + } +} + +__interrupt void fn_intsre1( ) +{ + while( 1 ) + { + NOP(); + } +} + +//__interrupt void fn_intiica(){} // i2c.cɂ +/* __interrupt void fn_inttm00(){} *//* sub.cɂĒ` */ +__interrupt void fn_inttm01( ) +{ + while( 1 ) + { + NOP(); + } +} + +__interrupt void fn_inttm02( ) +{ + while( 1 ) + { + NOP(); + } +} +__interrupt void fn_inttm03( ) +{ + while( 1 ) + { + NOP(); + } +} + +//__interrupt void fn_intad(){ while(1){} } // adc.c +__interrupt void fn_intrtc( ) +{ + while( 1 ) + { + NOP(); + } +} + +//__interrupt void int_rtcint(){} // rtc.cɂ +//__interrupt void fn_intkr(){} // main.c +__interrupt void fn_intmd( ) +{ + while( 1 ) + { + NOP(); + } +} + +__interrupt void fn_inttm04( ) +{ + while( 1 ) + { + NOP(); + } +} + +__interrupt void fn_inttm05( ) +{ + while( 1 ) + { + NOP(); + } +} + +__interrupt void fn_inttm06( ) +{ + while( 1 ) + { + NOP(); + } +} + +__interrupt void fn_inttm07( ) +{ + while( 1 ) + { + NOP(); + } +} + +#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.1E_spfl_dp2(sdk3PEE-spfl)/jhl_defs.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/jhl_defs.h new file mode 100644 index 0000000..9a21ab3 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/jhl_defs.h @@ -0,0 +1,25 @@ +#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 + + +#define set_bit( cond, reg, pos ) \ +{ \ + if( cond ){ \ + reg |= pos; \ + }else{ \ + reg &= ~pos; \ + } \ +} + +#endif diff --git a/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/kanaria.asm b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/kanaria.asm new file mode 100644 index 0000000..9deaddb --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/kanaria.asm @@ -0,0 +1,12 @@ +PUBLIC _END_1,_END_2,_END_3,_END_4 + +@@DATA DSEG BASEP +_END_1: +@@INIT DSEG BASEP +_END_2: +@@INITL DSEG UNIT64KP +_END_3: +@@DATAL DSEG UNIT64KP +_END_4: +; +END diff --git a/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/kanaria_c.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/kanaria_c.c new file mode 100644 index 0000000..bbb5ec7 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/kanaria_c.c @@ -0,0 +1,18 @@ +/********************************************//** + X^bN̍Ō̒lǂ + + X^bNj󌟍̂ + + $Id$ + ***********************************************/ +#include "incs.h" + +extern unsigned char END_4; + +void f() +{ + unsigned char *tp; + + tp = &END_4; +} + diff --git a/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/led.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/led.c new file mode 100644 index 0000000..3fba2aa --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/led.c @@ -0,0 +1,373 @@ +/* ======================================================== + LED.c + + $Id: LED.c 418 2011-09-22 01:35:37Z n2232 $ + ======================================================== */ +#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 ) + + +/********************************************//** + now goal ɂȂ܂ inc / dec BxĂԂƃOf[V + + Ƃ肠AXebvŒ + ***********************************************/ +u8 fade_to( u8 now, u8 goal ) +{ + if( now != goal ) + { + if( now > goal ) + { + now --; + } + else + { + now ++; + } + } + return( now ); +} + + + + +/********************************************//** + XlăOf[V + ***********************************************/ +#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 ); +} + + + + +/********************************************//** + LED̏ + + HW^C}[ĝł̏s + ***********************************************/ +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; +} + + +/********************************************//** + LED̒~B + + HW^C}[̒~ + ***********************************************/ + +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; +} + + + + +/********************************************//** + WiFi LED ̍XV + + - WX^̐ݒ on / off + - off łĂW[̑MpX -_-_-_--------_-_-_-------̃p^[_ + ***********************************************/ +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 = 0; + } + 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 + + tF[hAEgvZ + ***********************************************/ +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; +} + + +/********************************************//** + m点LED + + Of[VvZ + ***********************************************/ +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; +} + + +/********************************************//** + m点LED + ***********************************************/ +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.1E_spfl_dp2(sdk3PEE-spfl)/led.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/led.h new file mode 100644 index 0000000..ce8541f --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/led_cam.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/led_cam.c new file mode 100644 index 0000000..7d4a1eb --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/led_cam.c @@ -0,0 +1,156 @@ +/******************************************************//** + LED_Cam TO02 + + BLINK,*_PLUSE ̎́A1͕K̏ԂɂȂ܂B + + ̊Ԃ OFFBLINK ȂǂƁAOFF܂B + + $Id$ + *********************************************************/ +#ifndef _WIN32 + +#pragma sfr + +#endif + +#include "incs.h" +#include "led.h" +#include "vreg_twl.h" + + +// ======================================================== +static u8 state_led_cam = 0; +static u16 task_interval; + +bit cam_led_update; + + + +// ======================================================== +static void cam_led_twl(); + + + + +/********************************************//** + 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 ... +} + + +/********************************************//** + TWLJLED𑀍삳 + ***********************************************/ +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.1E_spfl_dp2(sdk3PEE-spfl)/led_pow.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/led_pow.c new file mode 100644 index 0000000..4e52da5 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/led_pow.c @@ -0,0 +1,296 @@ +/* ======================================================== + dLED + LED_POW_B,R 6,7 + + TDR00@(0x03FFBTPS0250kHzŃJEgAbvB10bitȂ250HzʂɂȂ) + TDR0x@Duty 0ŏATDR00( =0x03FFȏ)œ_łB + $Id$ + ======================================================== */ + +/* ======================================================== + 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" +#include "pm.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; + + + +/********************************************//** + dLED + + {Iɂ́A + + 쎞A + - drc > 10% “_imaster_brightness̖邳j + - 5% ԓ_ (100%_AHWŒs) + - ȉ ԓ_Am点LEDԂBAA_v^h5%`̓ + + X[v + - drc > 10% “_imaster_brightness̖邳j + - 쎞Ɠ + + X[vɂ͎Ő؂ւȂ̂ŁAWX^삪Kvłi̕s悢ł傤Hj + + ̃p^[͐Ŷ߁B + ***********************************************/ +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] ); +} + + + +/********************************************//** + X[vz^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.1E_spfl_dp2(sdk3PEE-spfl)/loader.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/loader.c new file mode 100644 index 0000000..56a8ebb --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/loader.c @@ -0,0 +1,392 @@ +/* ======================================================== + MCU CTR BSR + 2009/03/30 - + JZp c + + u[g[_[ + zXg̒ʐMƁAȏAt@[̃`FbNsB + + $Id: loader.c 418 2011-09-22 01:35:37Z n2232 $ + ======================================================== */ +#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 "wdt.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 ɂcrt0猩ȂȂ܂BӁI +static void hdwinit2(); +static void chk_platform_type(); +static void chk_firm_broke(); + + +extern void main_loop(); + + +/********************************************//** + * - t@[Abvf[gAWDT̃ZbgA + * - t@[̔jA + * - {̎ނ̎ʁA + * - |[gA + * - ჌xȃytF̏A + * + * main_loop()ĂԁB + ***********************************************/ +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( ); + } +} + + + +/********************************************//** + * }WbNio[`FbNāA삳悤ƂĂt@[jĂȂ`FbN܂B + * + * Ăꍇ̓XgA݁AMCU̓Zbg܂B + ***********************************************/ +static void chk_firm_broke() +{ + 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 + } +} + + +/********************************************//** +vbgtH[̔sAsystem_statusɃZbg܂B + + 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 +} + + + + +/********************************************//** + ŏ̃WX^s܂B + + gݍ݃X^[gAbv[`Ă΂܂B + ***********************************************/ +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 = bits8(0,0,0,0, 0,0,0,1); /* 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.1E_spfl_dp2(sdk3PEE-spfl)/pedo_alg_thre_det2.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/pedo_alg_thre_det2.c new file mode 100644 index 0000000..4e69a04 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/pedo_alg_thre_det2.c @@ -0,0 +1,567 @@ +/* ******************************************************** + v + + 3x̃A^Cf[^AxNg̃moA + 臒l𒴂鎞ԁAԊuAm̑傫臒l؂ւȂ + + $Id$ +********************************************************* */ +#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 ); + + + +// ======================================================== +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; +} + + + +/********************************************//** +NAAuf[^vɏ + ***********************************************/ +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; +/********************************************//** + ṽ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.1E_spfl_dp2(sdk3PEE-spfl)/pedo_lpf_coeff.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/pedo_lpf_coeff.c new file mode 100644 index 0000000..877ef98 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/pedo_lpf_coeff.c @@ -0,0 +1,87 @@ +/********************************************//** + vŎgpALPF̃tB^W + $Id$ + ***********************************************/ + +#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.1E_spfl_dp2(sdk3PEE-spfl)/pedo_lpf_coeff.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/pedo_lpf_coeff.h new file mode 100644 index 0000000..f81d6c2 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/pedometer.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/pedometer.h new file mode 100644 index 0000000..8760308 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/pm.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/pm.c new file mode 100644 index 0000000..66e730b --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/pm.c @@ -0,0 +1,1443 @@ +/* ======================================================== + PMIC + cJZ + nintendo + '08 Dec + + $Id: pm.c 418 2011-09-22 01:35:37Z n2232 $ + ======================================================== */ +#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" + +#include "vreg_twl.h" +#include "i2c_mcu.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 + - PM_BT_AUTH AGPI in + - PM_CHARGE_n CCIC /CHG in + - PM_EXTDC_n /DOK INTP4 in + - PM_CHARGE_EN_n /CEN out + + ȉ͊̕֌W肻łʂ̂ƂŊĎĂ܂B + - LED Charge tsk_LED + - BT_TEMP,_P tsk_ADC + + PM_EXTDC͊荞݃Cɂ邩 + ***********************************************/ +#define INTERVAL_TSK_BATT 60 +// 100Ə[dG[ɂ܂_łȂ̂ + +/********************************************//** + d̊Ď + - A_v^̊Ď + - [dALEDXV + - cʎ擾ALEDXV + ***********************************************/ +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_ + - Aw^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 + /// 荞݂task_status()ōs +} + + + +/********************************************//** + x`FbN + xtqXeVXL + ***********************************************/ +#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 + +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; + } +} + + + +/********************************************//** + [d̃`FbN + + [dIC̃oO΍sB + ***********************************************/ +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 + ***********************************************/ +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; + + + +/********************************************//** + obẽ`FbNAƁA{̎ʎʁisp̂߁j + ***********************************************/ +void BT_chk() +{ + static 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 = false; + // vbgtH[ // + if( raw_adc_temperature > 0xF0 ) + { + // TS // + system_status.model = MODEL_TS_BOARD; + system_status.family = FAMILY_CTR; // Hł̌딻㏑ + pm_reg_bit_vddlcd = PM_REG_BIT_VDDLCD_CGS; + } + 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 = true; + } + } + 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; + } +} + + + +#define MGIC_CMD_QUICKSTART 0x4000 +/********************************************//** + MGICNCbNX^[giɃoO΍j + ***********************************************/ +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( MGIC_CMD_QUICKSTART ) ); + + wait_ms( 150 ); +} + + +/********************************************//** + drcʑ菉 + + drp[^Ȃǂ] + ***********************************************/ + +#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 + - WX^ɃZbg + - cICɃ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 + ***********************************************/ +err PM_LCD_on( ) +{ + err rv = ERR_ERR; + + PM_VDDLCD_on( ); // CGS AMO ؂ւĂ܂ + + if( system_status.family == FAMILY_SPFL ) + { + // SPFL ȂAt@XHV on Ԃɋ + wait_ms( 10 ); + SPFL_LCD_AMOL_HV_CONT = 1; + wait_ms( DELAY_PM_TSS_50B_AND_TCOM - 10 ); + } + else + { + // CTR + 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; +} + + +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 ); + } + + + // 50msƂ҂‚AmF܂傤ˁc + if( read_pmic( PM_REG_ADRS_VDD_LCD ) != 0 ) + { + PM_TCOM_off(); + wait_ms( 1 ); + PM_TCOM_VCS_off( ); + wait_ms( DELAY_PM_LCD_OFF ); + + if( system_status.family == FAMILY_SPFL ) + { + // td؂ // + SPFL_LCD_AMOL_HV_CONT = 0; // ̃t@~łLȂ̂ŕQȂ + wait_ms( 10 ); // At@X15V؂Ƃ̃EFCgB + } + + 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Ȃ̂Ŗʓ| + +@BL 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肫Ȃ + ***********************************************/ +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 ); + } +} + + +/********************************************//** + CODEC̊荞݂󂯂ā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 ) +{ + u16 temp = dat; // Mobt@ + 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 ); + } + } +} + + +/********************************************//** + drcʂǂł + ***********************************************/ +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 ) ); + } +} + + +/********************************************//** + drdǂł + ***********************************************/ +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.1E_spfl_dp2(sdk3PEE-spfl)/pm.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/pm.h new file mode 100644 index 0000000..942da87 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/pool.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/pool.h new file mode 100644 index 0000000..81c8091 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/reboot.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/reboot.c new file mode 100644 index 0000000..53912a5 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/reboot.c @@ -0,0 +1,23 @@ +/********************************************************//* + ނ胊u[g + + t@CɃCCAZuƁA + ̃W[SœKȂȂ邽ߒǂo + $Id$ + **********************************************************/ +#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.1E_spfl_dp2(sdk3PEE-spfl)/reboot.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/reboot.h new file mode 100644 index 0000000..c20e11e --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/reboot.h @@ -0,0 +1,6 @@ +#ifndef __MYREBOOT__ +#define __MYREBOOT__ + +void my_reboot(); + +#endif diff --git a/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/renge/renge.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/renge/renge.c new file mode 100644 index 0000000..bab45cc --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/renge/renge.c @@ -0,0 +1,313 @@ +#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" +#include "..\util_funcs.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 ] )(); + + + +/****************************************************************************** + +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.1E_spfl_dp2(sdk3PEE-spfl)/renge/renge.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/renge/renge.h new file mode 100644 index 0000000..9c7b2e4 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/renge/renge_defs.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/renge/renge_defs.h new file mode 100644 index 0000000..0199d76 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/renge/renge_task_config.rb b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/renge/renge_task_config.rb new file mode 100644 index 0000000..c2de509 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/renge/renge_task_immediate.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/renge/renge_task_immediate.h new file mode 100644 index 0000000..9ac3bd2 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/renge/renge_task_intval.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/renge/renge_task_intval.h new file mode 100644 index 0000000..9b0d9ea --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/renge/renge_tasks.txt b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/renge/renge_tasks.txt new file mode 100644 index 0000000..73af545 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/rtc.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/rtc.c new file mode 100644 index 0000000..dd2d1a9 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/rtc.c @@ -0,0 +1,182 @@ +/* ======================================================== + RTC + $Id$ + ======================================================== */ +#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; // set1߂ĝ DI()sv +} + diff --git a/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/rtc.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/rtc.h new file mode 100644 index 0000000..6b2d9f8 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/self_flash.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/self_flash.c new file mode 100644 index 0000000..a662d07 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/self_flash.c @@ -0,0 +1,635 @@ +/* ======================================================== + ȃAbvf[^ + $Id$ + ======================================================== */ +#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 "i2c_mcu.h" + +#include "pool.h" +#include "magic.h" + +#include "pm.h" +#include "WDT.h" +#include "util_funcs.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 P4.2 +#define LED_PM_POW1 PM4.2 +#else +#define LED_POW1 mcuRegP[ _P4_2 ] +#define LED_PM_POW1 mcuRegPM[ _P4_2 ] +#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( ); + + // pwsw҂ŐQ + KRM = ( KR_SW_POW ); // Mask ł͂ȂAMode + 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; // [v̂͂悭ȂƎv + +// while(1){ +// NOP(); // Ȃ +// } + } + } + + // EFCg + for( i = 1; i != 0; i++ ) + { + NOP(); + NOP(); + NOP(); + NOP(); + } + } + } + } + + // else{ // obNAbv͐Ă + + while( my_FSL_Init() != ERR_SUCCESS ){ // FSLs悤Ȃ~Ȃ... + // todo gC񐔏H + 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 + + FSL_ForceReset(); // ZbgA߂ĂȂ +} + + + +/********************************************//** +tbV̏̂߂̑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ւ +} + + + +/********************************************//** +tbV̏I + ***********************************************/ +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( 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 ); + +} + + + +/********************************************//** +ƔœtbV̏ + ***********************************************/ +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 ); +} + + +/********************************************//** +MCUZbg + +system_status.reboot ܂B + ***********************************************/ +task_status_immed tski_mcu_reset() +{ + // ʂɍċN + my_FSL_Init(); + + FSL_ForceReset(); // Zbg + FSL_Close( ); + + // یH // + mcu_wdt_reset; + return( ERR_SUCCESS ); // no reach +} + + + +/********************************************//** +ɃG[ۂLED_łăG[ʒm + +l悤ł͂ȂAIVȂǂŃpX`FbN + +fobKgȂԂȂ̂ LEDprintf fobÔ߁B + ***********************************************/ +#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; + } +} + + +/********************************************//** +ɃG[ۂLED_łăG[ʒmiQj + +l悤ł͂ȂAIVȂǂŃpX`FbN + +fobKgȂԂȂ̂ LEDprintf fobÔ߁B + ***********************************************/ +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.1E_spfl_dp2(sdk3PEE-spfl)/self_flash.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/self_flash.h new file mode 100644 index 0000000..768565e --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/self_flash.h @@ -0,0 +1,9 @@ +#ifndef _self_flash_h_ +#define _self_flash_h_ + + +void firm_update(); + + +#endif + diff --git a/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/sw.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/sw.c new file mode 100644 index 0000000..4cc3142 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/sw.c @@ -0,0 +1,205 @@ +/* ======================================================== +XCb` +EHOME +EPOWER +EWiFi +̊Ď^XN + +$Id$ +======================================================== */ +#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; \ + } \ + } \ + } + + +/********************************************//** + NbN(`^O)BKvɉĊ荞 + ***********************************************/ +#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Ȃǂ̌os + ***********************************************/ +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.1E_spfl_dp2(sdk3PEE-spfl)/sw.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/sw.h new file mode 100644 index 0000000..abe9715 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/task_debug.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/task_debug.c new file mode 100644 index 0000000..0fd66a7 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/task_debug.c @@ -0,0 +1,122 @@ +/* ======================================================== + fobO^XN + $Id$ + ======================================================== */ +#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 + +/********************************************//** + fobOp^XN + ***********************************************/ +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^ ); +*/ + +/********************************************//** +^XNЂȌ`(s) + ***********************************************/ +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.1E_spfl_dp2(sdk3PEE-spfl)/task_misc.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/task_misc.c new file mode 100644 index 0000000..37bb0d6 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/task_misc.c @@ -0,0 +1,424 @@ +/* ======================================================== + ̑Gȃ^XN + ^XN𕪂₷ȂC邪A\[X̖ŕȂ + + $Id: task_misc.c 418 2011-09-22 01:35:37Z n2232 $ + ======================================================== */ + +#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(); // X^bN̍Ō𓾂 + + +// ======================================================== +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(); + + + +/********************************************//** + PiŃ^XNɂȂGȏ + - xZT荞݂̎肱ڂmF(Ö) + - TWL PM݊WX^ւ݂̏Γǂ݂ɍs + - ݊J[lTWL`[̋Nʒm + - TWL̉ʕω荞݂`FbN + - 3Dv̍XV + - (HAL) vA₷ + - (fobO) SELWDTZbg𔭐 + ***********************************************/ +void tsk_misc( ) +{ + // 荞݂̎肱ڂH + if( ACC_VALID && ( ( vreg_ctr[ VREG_C_STATUS_1 ] & REG_BIT_ACCERO_ERR ) == 0 )) + { + if( renge_task_immed_add( tski_cbk_accero ) == ERR_SUCCESS ){ + // dbg_nop(); + } + } + + if( system_status.pwr_state == ON ) + { + /* ======================================================== + PM݊WX^ւ̏ + |[OőΉ + ======================================================== */ + 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(); + +#ifdef _ENABLE_HAL_ + // fobOHAL ₷ // + if( reserve_pedo_increnent ) + { + reserve_pedo_increnent = 0; + hosu_increment_if_necessary(); + } +#endif + +#ifdef _ENABLE_PRESS_SEL_TO_WDT_ + if(( system_status.pwr_state == ON ) + || ( system_status.pwr_state == SLEEP )) + { + 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ł͒ʏ펞A{^8iKBɍ킹Ċ荞݂B + ***********************************************/ +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 ); + } +} + + +/********************************************//** +3DvXV + ***********************************************/ +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 --; + } + } + } +} + + + + +/********************************************//** + COMMANDWX^ւ̏ + + 0ȂĂ΂܂BPAsv + + - sleep ʒm() + - ZbgnR}h + ***********************************************/ +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(); + + // SLPO(SoC->mcu) 񓯊̂߁ApX[ɂȂĂ܂Amcu SoC̈u + // X[vooASLPIgOoȂB炩ߒʒmĂ炢A + // ^CAEgsB + if( temp_command & REG_BIT_GOING_TO_SLEEP ) + { + going_to_sleep = true; + } + + // ZbgñR}h // + 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; + + + + +#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 ɒ */ +}; + +/********************************************//** +@fobOpɃXe[^XԂBigXe[^X 0x7Fj + +@Ԓ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 + ***********************************************/ +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 +/********************************************//** +ifobOpjI2C_mcu ɃvgRᔽ(g`)oꂽSLED_Ēʒm + ***********************************************/ +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.1E_spfl_dp2(sdk3PEE-spfl)/task_status.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/task_status.c new file mode 100644 index 0000000..644bd7a --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/task_status.c @@ -0,0 +1,89 @@ +/* ******************************************************** + ꕔ̃Xe[^XWX^XVAKvɉĊ荞݂܂B + + $Id$ +********************************************************* */ + +#ifndef _WIN32 + +#pragma SFR +#pragma NOP +#pragma HALT +#pragma STOP + +#endif + +#include "incs_loader.h" +#include "renge\renge.h" + +#include "pm.h" + +#include "accero.h" +#include "adc.h" +#include "i2c_mcu.h" +#include "led.h" + + +/********************************************//** + Xe[^XWX^́A + - WJ + + Ŋ荞݂KvłΔ܂B + todo: H + ***********************************************/ +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 + // REG_BIT_BT_CHG_START/STOP + + 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.1E_spfl_dp2(sdk3PEE-spfl)/task_sys.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/task_sys.c new file mode 100644 index 0000000..35ab583 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/task_sys.c @@ -0,0 +1,668 @@ +/* ======================================================== + task_sys + dĩ^XN + + $Id$ + ======================================================== */ +#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" +#include "i2c_mcu.h" +#include "vreg_twl.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͂ɖ߂ + + + +/********************************************//** + d̗グX[vȂǂǗ + ***********************************************/ +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 | INT_MSK0_WDTI ); + 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; + +#ifndef _TAIKENDAI_SEISAN_SPECIAL_ + // 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; + } +#endif + } + 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ɗƂ(bit0)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(0,0,0,0, 0,0,0,1); // 8MHz쏀 + renge_flg_interval = 0; + hal_update(); + + CKC = bits8(0,0,0,0, 1,0,0,0); // OSMC.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 + +#ifndef _TAIKENDAI_SEISAN_SPECIAL_ + if( system_status.taikendai ) + { + system_status.pwr_state = OFF_TRIG; + } +#endif + } + } +} + + + +/********************************************//** + 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; + } + } + } +} + + + +/********************************************//** + - d{^ + - dr؂ + - dr + + ł̋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 +} + + + + +/********************************************//** + ȃAbvf[g firm_update() ĂԁiisrsłȂ̂Łj + + 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.1E_spfl_dp2(sdk3PEE-spfl)/user_define.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/user_define.h new file mode 100644 index 0000000..15d426e --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/user_define.h @@ -0,0 +1,214 @@ +#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 ) + +/////////////////////////////////////////////////////////// +#ifdef _WDT_CHECK_ +# define INT_MSK0_WDTI 1<<15 +#else +# define INT_MSK0_WDTI 0 +#endif + +#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 | INT_MSK0_WDTI ) + +#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.1E_spfl_dp2(sdk3PEE-spfl)/util_funcs.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/util_funcs.c new file mode 100644 index 0000000..2edea63 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/util_funcs.c @@ -0,0 +1,65 @@ +/* ======================================================== + util_funcs + + Gȃ[eBeB֐ + + $Id$ + ======================================================== */ +#ifndef _WIN32 + +#pragma SFR +#pragma di +#pragma ei +#pragma nop +#pragma stop +#pragma halt +#pragma opc + +#endif +#include "incs_loader.h" +#include "wdt.h" + + + +/********************************************//** + Pʂ ms + + NOP񂷂Aw莞CPU *L܂* B + + 荞݂ƂƂ̕x܂B + + 덷܂B + ***********************************************/ +void wait_ms( u8 ms ){ + u16 fine; + + WDT_Restart(); + while( ms != 0 ){ + ms--; + fine = 860; + while( fine != 0 ){ + fine --; + } + } +} + + + + +extern unsigned char get_ei(); + +#ifdef _DI_WITH_CHECK_ +/********************************************//** + ł 荞݋֎~ԉ`FbNĂ犄荞݋֎~ɂ + + ]̌ʁAA#ifdef Ń`FbN DI + ***********************************************/ +void DI_wt_chk() +{ + if( !get_ei() ) + { + dbg_nop(); + } + DI(); +} +#endif // _DI_WITH_CHECK_ diff --git a/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/util_funcs.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/util_funcs.h new file mode 100644 index 0000000..4229413 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/util_funcs.h @@ -0,0 +1,16 @@ +#ifndef _util_funcs_h_ +#define _util_funcs_h_ + + +void wait_ms( u8 ); + + +# ifdef _DI_WITH_CHECK_ +void DI_wt_chk(); +# else +# define DI_wt_chk() DI() +# endif /* _DI_WITH_CHECK_ */ + + +#endif + diff --git a/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/voltable.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/voltable.c new file mode 100644 index 0000000..4d2e14a --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/voltable.c @@ -0,0 +1,64 @@ +/* ======================================================== + voltable.c + + $Id$ + ======================================================== */ +#include "incs.h" + +#define _10db_ + + + +/********************************************//** + XC_l CODEC ɃZbgہAőVol̊֌W + KɃXP[OKv + + yȂ̂Ńe[u + ***********************************************/ + + + +#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.1E_spfl_dp2(sdk3PEE-spfl)/voltable.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/voltable.h new file mode 100644 index 0000000..6ff34ab --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/vreg_ctr.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/vreg_ctr.c new file mode 100644 index 0000000..5d4b915 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/vreg_ctr.c @@ -0,0 +1,611 @@ +/* ======================================================== + + CTR MCU I2CWX^ + + $Id$ + ====================================================== */ +#include "incs.h" +#include "vreg_ctr.h" +#include "rtc.h" +#include "led.h" +#include "accero.h" +#include "pm.h" +#include "pool.h" +#include "vreg_twl.h" +#include "sw.h" +#include "WDT.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(); + + + +// ******************************************************** +#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; +} + + +/********************************************//** + lZbg + + VXeZbgɌĂ΂܂ + ***********************************************/ +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; + { + 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.1E_spfl_dp2(sdk3PEE-spfl)/vreg_ctr.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/vreg_ctr.h new file mode 100644 index 0000000..9e0b11e --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/vreg_twl.c b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/vreg_twl.c new file mode 100644 index 0000000..1cb1225 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/vreg_twl.c @@ -0,0 +1,169 @@ +/* ======================================================== + TWL݊I2CWX^ + + $Id$ + ======================================================== */ +#include "incs.h" +#include "jhl_defs.h" +#include "led.h" + +#include "vreg_twl.h" +//#include "vreg_ctr.h" +#include "adc.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.1E_spfl_dp2(sdk3PEE-spfl)/vreg_twl.h b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/vreg_twl.h new file mode 100644 index 0000000..63cdd94 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/yav_mcu_bsr.plg b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/yav_mcu_bsr.plg new file mode 100644 index 0000000..d6597bf --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/yav_mcu_bsr.plg @@ -0,0 +1,207 @@ +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 loader.c +loader.c(160) : CC78K0R warning W0401: Conversion may lose significant digits +loader.c(161) : CC78K0R warning W0401: Conversion may lose significant digits +Compilation complete, 0 error(s) and 2 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\loader.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 pm.c +pm.c(547) : CC78K0R warning W0401: Conversion may lose significant digits +pm.c(853) : CC78K0R warning W0401: Conversion may lose significant digits +pm.c(857) : CC78K0R warning W0401: Conversion may lose significant digits +pm.c(885) : CC78K0R warning W0401: Conversion may lose significant digits +pm.c(899) : CC78K0R warning W0401: Conversion may lose significant digits +pm.c(973) : CC78K0R warning W0401: Conversion may lose significant digits +pm.c(982) : CC78K0R warning W0401: Conversion may lose significant digits +pm.c(1186) : CC78K0R warning W0401: Conversion may lose significant digits +pm.c(1188) : 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 i2c_ctr.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\i2c_ctr.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 main.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\main.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\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 WDT.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\WDT.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 i2c_mcu.c +i2c_mcu.c(183) : CC78K0R warning W0401: Conversion may lose significant digits +Compilation complete, 0 error(s) and 1 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\i2c_mcu.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 i2c_twl.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\i2c_twl.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 led.c +led.c(89) : CC78K0R warning W0745: Expected function prototype +led.c(354) : CC78K0R warning W0401: Conversion may lose significant digits +Compilation complete, 0 error(s) and 2 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\led.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 rtc.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\rtc.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 -rd2s2m -qvjl2w -sainter_asm -zpb -no vreg_ctr.c +vreg_ctr.c(176) : CC78K0R warning W0401: Conversion may lose significant digits +vreg_ctr.c(177) : CC78K0R warning W0401: Conversion may lose significant digits +vreg_ctr.c(179) : CC78K0R warning W0401: Conversion may lose significant digits +vreg_ctr.c(181) : CC78K0R warning W0401: Conversion may lose significant digits +vreg_ctr.c(182) : CC78K0R warning W0401: Conversion may lose significant digits +vreg_ctr.c(230) : CC78K0R warning W0401: Conversion may lose significant digits +vreg_ctr.c(230) : CC78K0R warning W0401: Conversion may lose significant digits +vreg_ctr.c(235) : CC78K0R warning W0401: Conversion may lose significant digits +vreg_ctr.c(235) : CC78K0R warning W0401: Conversion may lose significant digits +vreg_ctr.c(239) : CC78K0R warning W0401: Conversion may lose significant digits +vreg_ctr.c(239) : CC78K0R warning W0401: Conversion may lose significant digits +vreg_ctr.c(243) : CC78K0R warning W0401: Conversion may lose significant digits +vreg_ctr.c(243) : CC78K0R warning W0401: Conversion may lose significant digits +vreg_ctr.c(247) : CC78K0R warning W0401: Conversion may lose significant digits +Compilation complete, 0 error(s) and 14 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\vreg_ctr.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 -rd2s2m -qvjl2w -sainter_asm -zpb -no vreg_twl.c +vreg_twl.c(68) : CC78K0R warning W0401: Conversion may lose significant digits +vreg_twl.c(72) : CC78K0R warning W0401: Conversion may lose significant digits +Compilation complete, 0 error(s) and 2 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\vreg_twl.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 adc.c +adc.c(104) : CC78K0R warning W0401: Conversion may lose significant digits +adc.c(190) : CC78K0R warning W0401: Conversion may lose significant digits +adc.c(241) : CC78K0R warning W0401: Conversion may lose significant digits +adc.c(308) : CC78K0R warning W0401: Conversion may lose significant digits +adc.c(434) : CC78K0R warning W0745: Expected function prototype +adc.c(463) : CC78K0R warning W0401: Conversion may lose significant digits +adc.c(468) : CC78K0R warning W0401: Conversion may lose significant digits +Compilation complete, 0 error(s) and 7 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\adc.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 -rd2s2m -qvjl2w -sainter_asm -zpb -no renge\renge.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\renge.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 accero.c +accero.c(121) : CC78K0R warning W0745: Expected function prototype +Compilation complete, 0 error(s) and 1 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\accero.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 -rd2 -qvjl2w -sainter_asm -zpb -no self_flash.c +self_flash.c(289) : CC78K0R warning W0401: Conversion may lose significant digits +self_flash.c(290) : CC78K0R warning W0401: Conversion may lose significant digits +Compilation complete, 0 error(s) and 2 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\self_flash.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 sw.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\sw.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 task_debug.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\task_debug.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 task_misc.c +task_misc.c(381) : CC78K0R warning W0401: Conversion may lose significant digits +task_misc.c(383) : CC78K0R warning W0401: Conversion may lose significant digits +task_misc.c(395) : CC78K0R warning W0401: Conversion may lose significant digits +Compilation complete, 0 error(s) and 3 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\task_misc.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 task_sys.c +task_sys.c(234) : CC78K0R warning W0401: Conversion may lose significant digits +task_sys.c(569) : CC78K0R warning W0401: Conversion may lose significant digits +Compilation complete, 0 error(s) and 2 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\task_sys.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 pedo_alg_thre_det2.c +pedo_alg_thre_det2.c(104) : CC78K0R warning W0745: Expected function prototype +pedo_alg_thre_det2.c(120) : CC78K0R warning W0401: Conversion may lose significant digits +Compilation complete, 0 error(s) and 2 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\pedo_alg_thre_det2.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 ini_VECT.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\ini_VECT.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 task_status.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\task_status.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 led_cam.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\led_cam.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 led_pow.c +led_pow.c(119) : CC78K0R warning W0401: Conversion may lose significant digits +led_pow.c(124) : CC78K0R warning W0401: Conversion may lose significant digits +led_pow.c(177) : CC78K0R warning W0401: Conversion may lose significant digits +led_pow.c(240) : CC78K0R warning W0401: Conversion may lose significant digits +led_pow.c(271) : CC78K0R warning W0401: Conversion may lose significant digits +Compilation complete, 0 error(s) and 5 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\led_pow.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 hal.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\hal.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 batt_params.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\batt_params.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 voltable.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\voltable.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 pedo_lpf_coeff.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\pedo_lpf_coeff.asm +Assembly 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 kanaria.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 kanaria_c.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\kanaria_c.asm +Assembly 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 get_ei.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 util_funcs.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\util_funcs.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 util_funcs.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) : 65 diff --git a/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/yav_mcu_bsr.pri b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/yav_mcu_bsr.pri new file mode 100644 index 0000000..023f915 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/yav_mcu_bsr.prj b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/yav_mcu_bsr.prj new file mode 100644 index 0000000..7f6fb3a --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/yav_mcu_bsr.prj @@ -0,0 +1,1406 @@ +[ProjectManager] +Version=6.00 +Path=C:\78k_data\yav-mcu-basara\branches\2.14_spfl_dp2(sdk_3)\ +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 +[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= +[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 +Source33=util_funcs.c +[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\branches\2.14_spfl_dp2(sdk_3)\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 +[IncFile] +Include1=incs_loader.h +Include2=config.h +Include3=jhl_defs.h +Include4=user_define.h +Include5=hal.h +Include6=bsr_system.h +Include7=renge\renge.h +Include8=renge\renge_defs.h +Include9=renge\renge_task_immediate.h +Include10=vreg_ctr.h +Include11=vreg_twl.h +Include12=loader.h +Include13=i2c_mcu.h +Include14=WDT.h +Include15=fsl_user.h +Include16=i2c_ctr.h +Include17=pm.h +Include18=rtc.h +Include19=reboot.h +Include20=magic.h +Include21=incs.h +Include22=i2c_twl.h +Include23=accero.h +Include24=pedometer.h +Include25=sw.h +Include26=adc.h +Include27=led.h +Include28=batt_params.h +Include29=pool.h +Include30=i2c_twl_defs.h +Include31=renge\renge_task_intval.h +Include32=self_flash.h +Include33=util_funcs.h +Include34=..\..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\fsl.h +Include35=..\..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\math.h diff --git a/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/yav_mcu_bsr.prk b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/yav_mcu_bsr.prk new file mode 100644 index 0000000..a4932c7 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/yav_mcu_bsr.prk @@ -0,0 +1,24 @@ +[ProjectManager] +FrameMax=1 +FrameX=4 +FrameY=0 +FrameCX=1235 +FrameCY=1076 +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=pm.c,0,373,197,1346,828,35,374,32,0 +OpenFile4=accero.c,0,200,200,1016,818,109,227,2,0 +OpenFile5=i2c_mcu.h,0,671,375,1487,993,16,7,16,0 +OpenFile6=task_sys.c,0,225,225,1471,947,0,445,0,0 +OpenFile7=loader.c,0,250,250,1841,957,6,157,1,0 +OpenFile8=main.c,0,402,105,1713,812,41,38,49,0 +OpenFile9=task_status.c,0,225,225,1478,880,16,22,16,0 +OpenFile10=ProjectWindow +PrjPos=0,0,706,0,291 +OpenFile11=batt_params.c,0,444,408,1697,1063,28,2,59,0 +OpenFile12=OutputWindow +OutputPos=0,419,870,220,1483 +OpenFile13=config.h,0,458,11,1285,414,22,21,22,0 +ActivePRJ=yav_mcu_bsr.prj +[ProjectWindow] +ProjectWindowDispType=0 diff --git a/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/yav_mcu_bsr.prw b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/yav_mcu_bsr.prw new file mode 100644 index 0000000..7c0bbd6 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/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.1E_spfl_dp2(sdk3PEE-spfl)/yav_mcu_bsr.sdb b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/yav_mcu_bsr.sdb new file mode 100644 index 0000000..4430d11 --- /dev/null +++ b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/yav_mcu_bsr.sdb @@ -0,0 +1,312 @@ +[SdbInfo] +Ver=5 +[loader.c] +T=4ee0527f +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=WDT.h +10=magic.h +[pm.c] +T=4ee052b1 +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 +9=vreg_twl.h +10=i2c_mcu.h +[i2c_ctr.c] +T=4ee051c8 +1=incs.h +2=rtc.h +3=pedometer.h +[main.c] +T=4ee051c8 +1=incs.h +2=rtc.h +3=pm.h +4=accero.h +5=led.h +6=adc.h +7=i2c_mcu.h +8=pool.h +[magic.c] +T=4ee051c8 +1=magic.h +2=config.h +[WDT.c] +T=4ee051c7 +1=incs_loader.h +[i2c_mcu.c] +T=4ee051c7 +1=incs_loader.h +2=i2c_mcu.h +3=loader.h +4=util_funcs.h +[i2c_twl.c] +T=4ee051c7 +1=incs.h +2=i2c_twl_defs.h +3=i2c_twl.h +4=vreg_twl.h +5=WDT.h +[led.c] +T=4ee05227 +1=incs.h +2=led.h +[rtc.c] +T=4ee051c8 +1=incs.h +[vreg_ctr.c] +T=4ee051c8 +1=incs.h +2=vreg_ctr.h +3=rtc.h +4=led.h +5=accero.h +6=pm.h +7=pool.h +8=vreg_twl.h +9=sw.h +10=WDT.h +11=..\..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\fsl.h +12=fsl_user.h +[vreg_twl.c] +T=4ee051c7 +1=incs.h +2=jhl_defs.h +3=led.h +4=vreg_twl.h +5=adc.h +[adc.c] +T=4ee0528c +1=incs.h +2=adc.h +3=pm.h +4=led.h +5=vreg_twl.h +6=i2c_mcu.h +[renge\renge.c] +T=4ee051c6 +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=util_funcs.h +8=bsr_system.h +[accero.c] +T=4ee051c7 +1=incs.h +2=accero.h +3=i2c_mcu.h +4=..\..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\math.h +[self_flash.c] +T=4ee051c7 +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=pool.h +7=magic.h +8=pm.h +9=WDT.h +10=util_funcs.h +[sw.c] +T=4ee051c7 +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=4ee051c8 +1=incs_loader.h +2=renge\renge.h +3=pm.h +4=accero.h +[task_misc.c] +T=4ee051c7 +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=4ee052ba +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 +11=i2c_mcu.h +12=vreg_twl.h +[pedo_alg_thre_det2.c] +T=4ee051c8 +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=4ee051c7 +1=config.h +[task_status.c] +T=4ee052cc +1=incs_loader.h +2=renge\renge.h +3=pm.h +4=accero.h +5=adc.h +6=i2c_mcu.h +7=led.h +[led_cam.c] +T=4ee051c8 +1=incs.h +2=led.h +3=vreg_twl.h +[led_pow.c] +T=4ee051c8 +1=incs.h +2=led.h +3=pm.h +[hal.c] +T=4ee051c8 +1=incs_loader.h +[batt_params.c] +T=4ee05212 +1=jhl_defs.h +2=batt_params.h +[voltable.c] +T=4ee051c8 +1=incs.h +[pedo_lpf_coeff.c] +T=4ee051c8 +1=incs.h +[kanaria.asm] +T=4ee051c7 +[kanaria_c.c] +T=4ee051c7 +1=incs.h +[get_ei.asm] +T=4ee051c8 +[util_funcs.c] +T=4ee051c7 +1=incs_loader.h +2=WDT.h +[incs_loader.h] +T=4ee051c8 +1=jhl_defs.h +2=user_define.h +3=hal.h +4=bsr_system.h +5=renge\renge.h +6=vreg_ctr.h +7=vreg_twl.h +[config.h] +T=4ee052f6 +[jhl_defs.h] +T=4ee051c7 +[user_define.h] +T=4ee051c8 +[hal.h] +T=4ee051c8 +[bsr_system.h] +T=4ee051c7 +[renge\renge.h] +T=4ee051c6 +1=renge\renge_defs.h +2=renge\renge_task_immediate.h +[renge\renge_defs.h] +T=4ee051c6 +[renge\renge_task_immediate.h] +T=4ee051c6 +1=renge\renge_defs.h +[vreg_ctr.h] +T=4ee051c8 +1=config.h +[vreg_twl.h] +T=4ee051c7 +[loader.h] +T=4ee051c7 +[i2c_mcu.h] +T=4ee051c7 +[WDT.h] +T=4ee051c7 +[fsl_user.h] +T=4ee051c7 +[i2c_ctr.h] +T=4ee051c8 +[pm.h] +T=4ee051c8 +[rtc.h] +T=4ee051c8 +[reboot.h] +T=4ee051c7 +[magic.h] +T=4ee051c8 +[incs.h] +T=4ee051c7 +1=jhl_defs.h +2=user_define.h +3=hal.h +4=bsr_system.h +5=renge\renge.h +6=vreg_ctr.h +7=util_funcs.h +[i2c_twl.h] +T=4ee051c7 +[accero.h] +T=4ee051c7 +1=jhl_defs.h +2=pedometer.h +[pedometer.h] +T=4ee051c7 +[sw.h] +T=4ee051c7 +1=config.h +[adc.h] +T=4ee051c7 +1=jhl_defs.h +[led.h] +T=4ee051c8 +[batt_params.h] +T=4ee051c8 +1=jhl_defs.h +[pool.h] +T=4ee051c7 +1=pedometer.h +[i2c_twl_defs.h] +T=4ee051c8 +[renge\renge_task_intval.h] +T=4ee051c6 +1=renge\renge_defs.h +[self_flash.h] +T=4ee051c7 +[util_funcs.h] +T=4ee051c7 +[..\..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\fsl.h] +T=49a3bd4e +[..\..\..\..\Program Files (x86)\NEC Electronics Tools\CC78K0R\W2.13\inc78k0r\math.h] +T=45f12258 diff --git a/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/ベースからの変更.xls b/tags/2.1E_spfl_dp2(sdk3PEE-spfl)/ベースからの変更.xls new file mode 100644 index 0000000000000000000000000000000000000000..5212dac6485080dca2bfd246e855585895ff82af GIT binary patch literal 26624 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 literal 0 HcmV?d00001