フルからーLEDマージ中

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@147 013db118-44a6-b54f-8bf7-843cb86687b1
This commit is contained in:
N2232 2010-05-17 04:46:14 +00:00
parent 6bc39a3e62
commit 83f69cc519
12 changed files with 467 additions and 237 deletions

View File

@ -106,9 +106,9 @@ task_status_immed tsk_cbk_accero( )
( ( vreg_ctr[VREG_C_ACC_CONFIG] & VREG_BITMASK_ACC_CONF_HOSU ) != 0 )
)
{
DBG_LED_WIFI_2_on;
DBG_LED_on;
pedometer(); // •ŕ<E280A2>”Śv
DBG_LED_WIFI_2_off;
DBG_LED_off;
}
}
return ( ERR_SUCCESS );

View File

@ -20,7 +20,7 @@
//#define _MODEL_TS0_
// <20>ªTEG2 CPU <20>{ Type-C
#define _MODEL_CTR_
//#define _MODEL_CTR_
// <20>ªTS board, WM1,1 TS-CTRC
#define _MODEL_CTR_NOTIFY_FULLCOLOR_

View File

@ -29,6 +29,8 @@
// ========================================================
static void led_pow_normal( );
static void led_pow_hotaru( );
static void led_pow_normal_old( );
static void led_pow_hotaru_old( );
@ -133,7 +135,7 @@ void LED_init( )
TOE0 = 0b0000000011101110; // TOxをタイマーモジュールが制御
TS0 = 0b0000000011101111; // 動作開始
TDR00 = LED_BRIGHT_MAX - 1; // 10bit, ŽüŠú
TDR00 = LED_BRIGHT_MAX - 1; // 周期 10bit
if( system_status.reboot )
{
@ -179,51 +181,103 @@ enum LED_ILUM_MODE{
======================================================== */
void tsk_led_pow( )
{
switch ( vreg_ctr[VREG_C_LED_POW] )
// tsk_led_powを呼び出すrengeどんが、タスク関数の配列をリンク時
// に決めるてROMにもっているので、ここで分岐するしかない orz
if( system_status.info_fullcolor )
{
// Ž©“®<E2809C>ØèÖ¦
case ( LED_POW_ILM_AUTO ):
switch ( system_status.pwr_state )
// お知らせランプフルカラー版 /////////////////////
switch ( vreg_ctr[VREG_C_LED_POW] )
{
case SLEEP:
// 自動切り替え
case ( LED_POW_ILM_AUTO ):
switch ( system_status.pwr_state )
{
case SLEEP:
led_pow_hotaru( );
break;
case ON:
led_pow_normal( );
break;
default:
break;
}
break;
case ( LED_POW_ILM_HOTARU ):
led_pow_hotaru( );
break;
case ON:
case ( LED_POW_ILM_ON ):
default:
led_pow_normal( );
break;
default:
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;
}
break;
// ­<E280B9>§
case ( LED_POW_ILM_OFF ):
led_fade_to( LED_duty_pow_blu, 0 );
LED_pow_red = 0;
break;
case ( LED_POW_ILM_HOTARU ):
led_pow_hotaru( );
break;
case ( LED_POW_ILM_ON ):
default:
led_pow_normal( );
break;
case ( LED_POW_ILM_ONLY_RED ):
led_fade_to( LED_duty_pow_blu, 0 );
LED_pow_red = 1;
break;
case ( LED_POW_ILM_ONLY_BLUE ):
led_fade_to( LED_duty_pow_blu, LED_BRIGHT_MAX );
LED_pow_red = 0;
break;
}
else
{
// 旧仕様 /////////////////////////////////////////
switch ( vreg_ctr[VREG_C_LED_POW] )
{
// 自動切り替え
case ( LED_POW_ILM_AUTO ):
switch ( system_status.pwr_state )
{
case SLEEP:
led_pow_hotaru_old( );
break;
case ON:
led_pow_normal_old( );
break;
default:
break;
}
break;
case ( LED_POW_ILM_HOTARU ):
led_pow_hotaru_old( );
break;
case ( LED_POW_ILM_ON ):
default:
led_pow_normal_old( );
break;
case ( LED_POW_ILM_OFF ):
led_fade_to( LED_duty_old_pow_blu, 0 );
led_fade_to( LED_duty_old_pow_red, 0 );
break;
case ( LED_POW_ILM_ONLY_RED ):
LED_duty_old_pow_blu = 0;
LED_duty_old_pow_red = LED_BRIGHT_MAX;
case ( LED_POW_ILM_ONLY_BLUE ):
LED_duty_old_pow_blu = LED_BRIGHT_MAX;
LED_duty_old_pow_red = 0;
break;
}
}
}
@ -232,6 +286,65 @@ void tsk_led_pow( )
 
======================================================== */
static void led_pow_normal( )
{
static u8 delay;
static u8 red_blink_poi;
u8 temp;
if( vreg_ctr[VREG_C_BT_REMAIN] <= BATT_TH_EMPTY )
{
// 赤点滅
led_fade_to( LED_duty_pow_blu, 0 );
// 赤の点滅パターンも指定できる
delay += 1;
if( delay < 16 ) // フレームの保持時間稼ぎ
{
return;
}
delay = 0;
if( ( led_red_batt_empty.bits & ( 1 << red_blink_poi )) != 1 )
{
LED_pow_red = 1;
LED_duty_notify_red = 255;
}
else
{
LED_pow_red = 0;
LED_duty_notify_red = 0;
}
red_blink_poi += 1;
if( red_blink_poi >= 32 )
{
red_blink_poi = 0;
}
}
else if( vreg_ctr[VREG_C_BT_REMAIN] <= BATT_TH_LO )
{
// 赤点灯
led_fade_to( LED_duty_pow_blu, 0 );
LED_pow_red = 1;
return;
}
else
{
// 青点灯
led_fade_to( LED_duty_pow_blu, vreg_ctr[VREG_C_LED_BRIGHT] );
LED_pow_red = 0;
}
return;
}
/* ========================================================
 
======================================================== */
static void led_pow_normal_old( )
{
static u8 state;
static u8 red_blink_poi;
@ -372,6 +485,80 @@ static void led_pow_hotaru( )
/* ========================================================
======================================================== */
static void led_pow_hotaru_old( )
{
static u8 delay;
static u8 state;
static u16 blue_to;
if( delay != 0 )
{
delay -= 1;
return;
}
delay = 10;
switch ( state )
{
// フェードイン
case ( 0 ):
case ( 2 ):
case ( 4 ):
if( vreg_ctr[VREG_C_BT_REMAIN] <= BATT_TH_LO )
{
blue_to = 0;
LED_pow_red = 1;
}
else
{
blue_to = vreg_ctr[VREG_C_LED_BRIGHT];
LED_pow_red = 0;
}
break;
default:
// フェードアウト
if( vreg_ctr[VREG_C_BT_REMAIN] <= BATT_TH_LO )
{
LED_pow_red = 0;
}
else
{
blue_to = 2;
}
break;
}
// LED更新
if( LED_duty_pow_blu != blue_to )
{
if( LED_duty_pow_blu > blue_to )
{
LED_duty_pow_blu -= 1;
}
else
{
LED_duty_pow_blu += 2;
}
}
if( LED_duty_pow_blu == blue_to )
{
state += 1;
}
return;
}
/* ========================================================
* 使 *
LED_Wifi 3

View File

@ -4,8 +4,6 @@
// ====================================
#ifdef _MODEL_CTR_NOTIFY_FULLCOLOR_
// LED_DUTY
#define LED_duty_pow_blu TDR05
#define LED_duty_WiFi TDR02
@ -15,30 +13,28 @@
#define LED_duty_notify_grn TDR03
#define LED_duty_notify_blu TDR06
// これらはduty変えられません
#define LED_pow_red P7.5
#define LED_CAM P4.2
#else
// ŒŽd—l
// LED_DUTY
#define LED_duty_pow_L TDR07
#define LED_duty_pow_blu TDR06
#define LED_duty_WiFi TDR03
#define LED_duty_NOTIFY TDR05
#define LED_duty_CAM TDR02
#define LED_duty_3d TDR01
#define LED_duty_old_pow_blu TDR06
#define LED_duty_old_pow_red TDR07
#define LED_duty_old_WiFi TDR03
#define LED_duty_old_NOTIFY TDR05
#define LED_duty_old_CAM TDR02
#define LED_duty_old_3d TDR01
// wifi2はPWMできません。
#endif
#define LED_CHARGE P2.4
#define NOTIFY_LED_TERM 32
#define LED_BRIGHT_MAX 0x0100
#define LED_BRIGHT_MAX 0x00FF
// ====================================
#ifdef _MCU_BSR_ // 電波送信パルス

View File

@ -133,7 +133,6 @@ void main( )
if( comp != 0 )
{
DBG_LED_WIFI_2_on
// ファームリストアを試みる
firm_restore( );
// 帰ってこない。リセットをかける。

View File

@ -50,11 +50,10 @@ tasklist.each{|dat|
}
conf << "\n"
conf << "static const task_status ( *tasks[ TSK_LAST ] )() = {\n"
conf << "const void ( *tasks[ TSK_LAST ] )() = {\n"
tasklist.each{|dat|
conf << " tsk_" << dat << ",\n"
}
conf << " };\n"
conf << "\n\n#endif\n"
conf << "\n#endif\n"

View File

@ -1,42 +1,40 @@
/*スクリプトによる自動生成です。手動で書き換えない方がよいです*/
#include "renge_defs.h"
#ifndef __renge_task__
#define __renge_task__
enum {
TSK_SW, TSK_ADC, TSK_BATT, TSK_LED_POW, TSK_LED_WIFI, TSK_LED_NOTIFY, TSK_LED_CAM, TSK_MISC_STAT, TSK_DEBUG, TSK_DEBUG2, TSK_SYS, TSK_LAST
};
extern void tsk_sw();
extern void tsk_adc();
extern void tsk_batt();
extern void tsk_led_pow();
extern void tsk_led_wifi();
extern void tsk_led_notify();
extern void tsk_led_cam();
extern void tsk_misc_stat();
extern void tsk_debug();
extern void tsk_debug2();
extern void tsk_sys();
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_stat,
tsk_debug,
tsk_debug2,
tsk_sys,
};
#endif
/*スクリプトによる自動生成です。手動で書き換えない方がよいです*/
#ifndef __renge_task__
#define __renge_task__
#include "renge_defs.h"
enum {
TSK_SW, TSK_ADC, TSK_BATT, TSK_LED_POW, TSK_LED_WIFI, TSK_LED_NOTIFY, TSK_LED_CAM, TSK_MISC, TSK_STATUS, TSK_DEBUG, TSK_DEBUG2, TSK_SYS, TSK_LAST
};
extern void tsk_sw();
extern void tsk_adc();
extern void tsk_batt();
extern void tsk_led_pow();
extern void tsk_led_wifi();
extern void tsk_led_notify();
extern void tsk_led_cam();
extern void tsk_misc();
extern void tsk_status();
extern void tsk_debug();
extern void tsk_debug2();
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_debug,
tsk_debug2,
tsk_sys,
};
#endif

View File

@ -5,7 +5,8 @@ led_pow
led_wifi
led_notify
led_cam
misc_stat
misc
status
debug
debug2
sys

View File

@ -57,14 +57,10 @@ bit twl_ver_read;
/* ========================================================
======================================================== */
void tsk_misc_stat( )
void tsk_misc( )
{
static u8 interval_task_misc_stat = 0;
static u8 state_old; // ステータス変化検出→割り込み の為
#ifdef _BL_INDEPENDENT_
static u8 state2_old;
#endif
u8 diff;
/*
static u8 interval_task_misc = 0;
if( interval_task_misc_stat != 0 )
{
@ -75,86 +71,49 @@ void tsk_misc_stat( )
{
interval_task_misc_stat = ( INTERVAL_TSK_MISC_STAT / SYS_INTERVAL_TICK );
}
set_bit( SHELL_OPEN, vreg_ctr[VREG_C_STATUS], REG_BIT_ST_SHELL_OPEN );
// ステータスレジスタ関係 → 割り込み //
if( ( system_status.pwr_state == ON ) || ( system_status.pwr_state == SLEEP ) )
{
// pm.c で、その場で行います。
// REG_BIT_LCD_ON/OFF
// REG_BIT_BL_ON/OFF
// REG_BIT_BT_DC_CONNECT/DISC
diff = vreg_ctr[VREG_C_STATUS] ^ state_old;
if( diff != 0 )
{
state_old = vreg_ctr[VREG_C_STATUS];
if( diff & REG_BIT_BATT_CHARGE )
{
// 充電状態に以下略
if( vreg_ctr[VREG_C_STATUS] & REG_BIT_BATT_CHARGE )
{
set_irq( VREG_C_IRQ1, REG_BIT_BT_CHG_START );
}
else
{
set_irq( VREG_C_IRQ1, REG_BIT_BT_CHG_STOP );
}
}
if( diff & REG_BIT_ST_SHELL_OPEN )
{
// 蓋の開け閉め
if( vreg_ctr[VREG_C_STATUS] & REG_BIT_ST_SHELL_OPEN )
{
set_irq( VREG_C_IRQ0, REG_BIT_SHELL_OPEN );
}
else
{
set_irq( VREG_C_IRQ0, REG_BIT_SHELL_CLOSE );
}
}
}
*/
//#ifdef _MCU_KE3_
// KE3では必須です。
/* ========================================================
BSRマイコンはaccero.cで割り込みルーチンからタスク登録します
======================================================== */
// 割り込みの取りこぼし?
if( ( vreg_ctr[VREG_C_ACC_CONFIG] & 0x03 ) != 0x00 )
// KE3では必須です。
/* ========================================================
BSRマイコンはaccero.cで割り込みルーチンからタスク登録します
======================================================== */
// 割り込みの取りこぼし?
if( ( vreg_ctr[VREG_C_ACC_CONFIG] & 0x03 ) != 0x00 )
{
if( ACC_VALID == 1 )
{
if( ACC_VALID == 1 )
{
if( renge_task_immed_add( tsk_cbk_accero ) == ERR_SUCCESS ){
NOP();
}
if( renge_task_immed_add( tsk_cbk_accero ) == ERR_SUCCESS ){
NOP();
}
}
}
//#endif
// 割り込みの取りこぼし?
if( system_status.pwr_state == ON )
{
/* ========================================================
PM互換レジスタへの書き込み
...
todo
======================================================== */
if( !PM_IRQ_n ){
renge_task_immed_add( ntr_pmic_comm );
NOP();
}
/* ========================================================
TWLランチャーが起動したことをCTRが知りたいらしい
======================================================== */
if( twl_ver_read )
{
twl_ver_read = 0;
set_irq( VREG_C_IRQ2, REG_BIT_TWL_VER_READ );
}
}
if( twl_ver_read )
{
twl_ver_read = 0;
set_irq( VREG_C_IRQ2, REG_BIT_TWL_VER_READ );
}
return;
}

91
trunk/task_status.c Normal file
View File

@ -0,0 +1,91 @@
#pragma SFR
#pragma NOP
#pragma HALT
#pragma STOP
#include "incs.h"
#include "renge.h"
#include "pm.h"
#include "accero.h"
#include "adc.h"
#include "i2c_mcu.h"
// ========================================================
#define INTERVAL_TSK_STATUS 4
/* ========================================================
======================================================== */
void tsk_status( )
{
static u8 interval_task_status = 0;
static u8 state_old; // ステータス変化検出→割り込み の為
u8 diff;
if( interval_task_status != 0 )
{
interval_task_status -= 1;
return;
}
else
{
interval_task_status = ( INTERVAL_TSK_STATUS / SYS_INTERVAL_TICK );
}
// 蓋開けチェック
set_bit( SHELL_OPEN, vreg_ctr[VREG_C_STATUS], REG_BIT_ST_SHELL_OPEN );
// ステータスレジスタ関係 → 割り込み //
// pm.c で、その場で行います。
// REG_BIT_LCD_ON/OFF
// REG_BIT_BL_ON/OFF
// REG_BIT_BT_DC_CONNECT/DISC
diff = vreg_ctr[VREG_C_STATUS] ^ state_old;
if( diff != 0 )
{
state_old = vreg_ctr[VREG_C_STATUS];
if( system_status.pwr_state == ON )
{
if( diff & REG_BIT_BATT_CHARGE )
{
// 充電状態に以下略
if( vreg_ctr[VREG_C_STATUS] & REG_BIT_BATT_CHARGE )
{
set_irq( VREG_C_IRQ1, REG_BIT_BT_CHG_START );
}
else
{
set_irq( VREG_C_IRQ1, REG_BIT_BT_CHG_STOP );
}
}
}
if(( system_status.pwr_state == ON ) ||
( system_status.pwr_state == SLEEP_TRIG ) ||
( system_status.pwr_state == SLEEP )
)
{
if( diff & REG_BIT_ST_SHELL_OPEN )
{
// 蓋の開け閉め
if( vreg_ctr[VREG_C_STATUS] & REG_BIT_ST_SHELL_OPEN )
{
set_irq( VREG_C_IRQ0, REG_BIT_SHELL_OPEN );
}
else
{
set_irq( VREG_C_IRQ0, REG_BIT_SHELL_CLOSE );
}
}
}
}
return;
}

View File

@ -22,14 +22,14 @@
#ifdef _debug_led_
# define DBG_LED_WIFI_2_on { PM2.4 = 0; P2.4 = 1; }
# define DBG_LED_WIFI_2_off { PM2.4 = 1; P2.4 = 0; }
# define DBG_LED_WIFI_2_toggle ( P2.4 ^= 1 )
# define DBG_LED_on { PM2.4 = 0; P2.4 = 1; }
# define DBG_LED_off { PM2.4 = 1; P2.4 = 0; }
# define DBG_LED_toggle ( P2.4 ^= 1 )
#else
# define DBG_LED_WIFI_2_on ;
# define DBG_LED_WIFI_2_off ;
# define DBG_LED_WIFI_2_toggle ;
# define DBG_LED_on ;
# define DBG_LED_off ;
# define DBG_LED_toggle ;
#endif

View File

@ -397,65 +397,6 @@ CommandFile=0
[BuildBefore-AfterCmd]
Before1=touch magic.c
After1=ruby nec_s_2_bsrbin2.rb bsr.hex
[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=led_old.c
[IncFile]
Include1=incs_loader.h
Include2=jhl_defs.h
Include3=config.h
Include4=user_define.h
Include5=bsr_system.h
Include6=renge\renge.h
Include7=renge\renge_defs.h
Include8=renge\renge_task_immediate.h
Include9=vreg_ctr.h
Include10=vreg_twl.h
Include11=loader.h
Include12=i2c_mcu.h
Include13=WDT.h
Include14=fsl.h
Include15=fsl_user.h
Include16=i2c_ctr.h
Include17=pm.h
Include18=rtc.h
Include19=reboot.h
Include20=incs.h
Include21=accero.h
Include22=pedometer.h
Include23=adc.h
Include24=led.h
Include25=batt_params.h
Include26=..\..\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r\fsl.h
Include27=i2c_twl_defs.h
Include28=renge\renge_task_intval.h
Include29=..\..\Program Files\NEC Electronics Tools\CC78K0R\W2.10\inc78k0r\math.h
Include30=i2c_twl.h
Include31=sw.h
Include32=self_flash.h
Include33=pool.h
Include34=pedo_lpf_coeff.h
[ToolSet]
ToolSetName=(•Ï<E280A2>X)78K0R Software Package V1.10
Tool1=CC78K0R|W2.10
@ -1045,3 +986,62 @@ 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
[IncFile]
Include1=incs_loader.h
Include2=jhl_defs.h
Include3=config.h
Include4=user_define.h
Include5=bsr_system.h
Include6=renge\renge.h
Include7=renge\renge_defs.h
Include8=renge\renge_task_immediate.h
Include9=vreg_ctr.h
Include10=vreg_twl.h
Include11=loader.h
Include12=i2c_mcu.h
Include13=WDT.h
Include14=fsl.h
Include15=fsl_user.h
Include16=i2c_ctr.h
Include17=pm.h
Include18=rtc.h
Include19=reboot.h
Include20=incs.h
Include21=accero.h
Include22=pedometer.h
Include23=adc.h
Include24=led.h
Include25=batt_params.h
Include26=..\..\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r\fsl.h
Include27=i2c_twl_defs.h
Include28=renge\renge_task_intval.h
Include29=..\..\Program Files\NEC Electronics Tools\CC78K0R\W2.10\inc78k0r\math.h
Include30=i2c_twl.h
Include31=sw.h
Include32=self_flash.h
Include33=pool.h
Include34=pedo_lpf_coeff.h