git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@27 013db118-44a6-b54f-8bf7-843cb86687b1

This commit is contained in:
fujita_ryohei 2009-11-17 06:24:37 +00:00
parent 10e2a9b12c
commit 94400442d5
13 changed files with 316 additions and 338 deletions

View File

@ -34,14 +34,13 @@ void tsk_adc( )
static u8 sndvol_codec; static u8 sndvol_codec;
static u8 bt_temp_old; static u8 bt_temp_old;
if( task_interval != 0 ) if( task_interval != system_time )
{ {
task_interval -= 1;
return; return;
} }
else else
{ {
task_interval = ( INTERVAL_TSK_ADC / SYS_INTERVAL_TICK ); task_interval += (u8)( INTERVAL_TSK_ADC / SYS_INTERVAL_TICK );
} }
@ -49,6 +48,7 @@ void tsk_adc( )
{ {
if( system_status.pwr_state == ON ) if( system_status.pwr_state == ON )
{ {
// Tune //
#if 0 #if 0
tune tune
// tune // tune
@ -112,12 +112,18 @@ void tsk_adc( )
break; break;
case ( 2 ): // case ( 2 ): //
default: // <20>Á“”
#ifdef _MODEL_WM0_
LED_duty_TUNE = vreg_ctr[VREG_C_TUNE] / 16;
#else
LED_duty_TUNE = LED_BRIGHT_MAX - vreg_ctr[VREG_C_TUNE]; LED_duty_TUNE = LED_BRIGHT_MAX - vreg_ctr[VREG_C_TUNE];
#endif
break; break;
#if 0
default: // 消灯 default: // 消灯
LED_duty_TUNE = 0; LED_duty_TUNE = 0;
break; break;
#endif
} }
} }
@ -188,7 +194,11 @@ __interrupt void int_adc( )
{ {
case ( ADC_SEL_TUNE ): case ( ADC_SEL_TUNE ):
hist_tune[index] = ADCRH; hist_tune[index] = ADCRH;
#ifdef _MODEL_WM0_
vreg_ctr[VREG_C_TUNE] = 255 - getmean3( hist_tune );
#else
vreg_ctr[VREG_C_TUNE] = getmean3( hist_tune ); vreg_ctr[VREG_C_TUNE] = getmean3( hist_tune );
#endif
break; break;
case ( ADC_SEL_VOL ): case ( ADC_SEL_VOL ):

View File

@ -89,6 +89,7 @@ __interrupt void int_iic_ctr( )
// まだ読まれてない割り込みがあれば、再度アサート // まだ読まれてない割り込みがあれば、再度アサート
if( irq_readed ) if( irq_readed )
{ {
IRQ0_neg;
irq_readed = 0; irq_readed = 0;
if( !( ( vreg_ctr[VREG_C_IRQ0] == 0 ) if( !( ( vreg_ctr[VREG_C_IRQ0] == 0 )
&& ( vreg_ctr[VREG_C_IRQ1] == 0 ) && ( vreg_ctr[VREG_C_IRQ1] == 0 )
@ -96,18 +97,10 @@ __interrupt void int_iic_ctr( )
&& ( vreg_ctr[VREG_C_IRQ3] == 0 ) && ( vreg_ctr[VREG_C_IRQ3] == 0 )
&& ( vreg_ctr[VREG_C_IRQ4] == 0 ) ) ) && ( vreg_ctr[VREG_C_IRQ4] == 0 ) ) )
{ {
IRQ0_neg; while( !IRQ0 ){;} // 時間稼ぎ不要かも
while( !IRQ0 )
{;
}
IRQ0_ast; IRQ0_ast;
} }
else
{
IRQ0_neg;
} }
}
return; return;
} }
@ -134,7 +127,6 @@ __interrupt void int_iic_ctr( )
// レジスタアドレス受信 // レジスタアドレス受信
reg_adrs = IICA; reg_adrs = IICA;
WREL = 1; WREL = 1;
// reg_adrs_internal = adrs_table_ctr_ext2int( reg_adrs );
trx_buf = vreg_ctr_read( reg_adrs ); // データの準備をしておく trx_buf = vreg_ctr_read( reg_adrs ); // データの準備をしておく
state = IIC_TX_OR_RX; state = IIC_TX_OR_RX;
break; break;
@ -178,11 +170,9 @@ __interrupt void int_iic_ctr( )
WREL = 1; WREL = 1;
} }
reg_adrs += 1; reg_adrs += 1;
// reg_adrs_internal = adrs_table_ctr_ext2int( reg_adrs );
if( state == IIC_TX ) if( state == IIC_TX )
{ {
trx_buf = vreg_ctr_read( reg_adrs ); trx_buf = vreg_ctr_read( reg_adrs );
// temp = vreg_ctr[ reg_adrs ];
} }
break; break;
} }

View File

@ -299,6 +299,8 @@ static void led_pow_hotaru( )
* 使 * * 使 *
LED_Wifi 3 LED_Wifi 3
2 P24 2 P24
todo ¼<EFBFBD>«Ì_ÅŠÔŠuÈÇ
======================================================== */ ======================================================== */
void tsk_led_wifi( ) void tsk_led_wifi( )
{ {
@ -308,13 +310,11 @@ void tsk_led_wifi( )
static u8 flag_wifi_TX; static u8 flag_wifi_TX;
if( task_interval != 0 ) if( task_interval != system_time )
{ {
task_interval -= 1;
return; return;
} }
// 送信パルスのラッチ // 送信パルスのラッチ
if( vreg_ctr[VREG_C_LED_WIFI] == WIFI_LED_TXAUTO ) if( vreg_ctr[VREG_C_LED_WIFI] == WIFI_LED_TXAUTO )
{ {
@ -371,7 +371,7 @@ void tsk_led_wifi( )
state_wifi_tx = 0; state_wifi_tx = 0;
flag_wifi_TX -= 1; flag_wifi_TX -= 1;
} }
task_interval = 22; task_interval += 22;
return; return;
} }
@ -379,7 +379,7 @@ void tsk_led_wifi( )
{ {
LED_duty_WiFi = vreg_ctr[VREG_C_LED_BRIGHT]; LED_duty_WiFi = vreg_ctr[VREG_C_LED_BRIGHT];
LED_WIFI_2 = 1; LED_WIFI_2 = 1;
task_interval = 200; task_interval += 200;
return; return;
} }
break; break;
@ -402,7 +402,7 @@ void tsk_led_wifi( )
{ {
state_wifi_tx = 0; state_wifi_tx = 0;
} }
task_interval = 50; task_interval += 50;
return; return;
case ( WIFI_LED_PTN1 ): case ( WIFI_LED_PTN1 ):
@ -415,7 +415,7 @@ void tsk_led_wifi( )
{ {
LED_duty_WiFi = 0; LED_duty_WiFi = 0;
remain_wifi_tx = 0; remain_wifi_tx = 0;
task_interval = MSG_SPD; task_interval += MSG_SPD;
return; return;
} }
@ -427,26 +427,26 @@ void tsk_led_wifi( )
case ( 0b00000000 ): case ( 0b00000000 ):
LED_duty_WiFi = 0; LED_duty_WiFi = 0;
remain_wifi_tx = 0; remain_wifi_tx = 0;
task_interval = ( MSG_SPD * 3 ); task_interval += ( MSG_SPD * 3 );
break; break;
case ( 0b01000000 ): case ( 0b01000000 ):
default: default:
LED_duty_WiFi = 0; LED_duty_WiFi = 0;
remain_wifi_tx = 1; remain_wifi_tx = 1;
task_interval = ( MSG_SPD ); task_interval += ( MSG_SPD );
break; break;
case ( 0b10000000 ): case ( 0b10000000 ):
LED_duty_WiFi = vreg_ctr[VREG_C_LED_BRIGHT]; LED_duty_WiFi = vreg_ctr[VREG_C_LED_BRIGHT];
remain_wifi_tx = 1; remain_wifi_tx = 1;
task_interval = ( MSG_SPD ); task_interval += ( MSG_SPD );
break; break;
case ( 0b11000000 ): case ( 0b11000000 ):
LED_duty_WiFi = vreg_ctr[VREG_C_LED_BRIGHT]; LED_duty_WiFi = vreg_ctr[VREG_C_LED_BRIGHT];
remain_wifi_tx = 1; remain_wifi_tx = 1;
task_interval = ( MSG_SPD * 3 ); task_interval += ( MSG_SPD * 3 );
break; break;
} }
return; return;
@ -469,12 +469,12 @@ void tsk_led_cam( )
static u8 task_interval; static u8 task_interval;
static u8 state_led_cam_twl; static u8 state_led_cam_twl;
if( task_interval != 0 ) if( task_interval != system_time )
{ {
task_interval -= 1;
return; return;
} }
switch ( vreg_ctr[VREG_C_LED_CAM] ) switch ( vreg_ctr[VREG_C_LED_CAM] )
{ {
case ( CAM_LED_OFF ): case ( CAM_LED_OFF ):
@ -499,7 +499,7 @@ void tsk_led_cam( )
LED_duty_CAM = 0; LED_duty_CAM = 0;
state_led_cam = 0; state_led_cam = 0;
} }
task_interval = 250; task_interval += 250;
break; break;
case ( CAM_LED_ON_PLUSE ): case ( CAM_LED_ON_PLUSE ):
@ -507,7 +507,7 @@ void tsk_led_cam( )
{ {
LED_duty_CAM = vreg_ctr[VREG_C_LED_BRIGHT]; LED_duty_CAM = vreg_ctr[VREG_C_LED_BRIGHT];
state_led_cam = 1; state_led_cam = 1;
task_interval = 250; task_interval += 250;
} }
else else
{ {
@ -520,7 +520,7 @@ void tsk_led_cam( )
{ {
LED_duty_CAM = 0; LED_duty_CAM = 0;
state_led_cam = 1; state_led_cam = 1;
task_interval = 250; task_interval += 250;
} }
else else
{ {
@ -546,7 +546,7 @@ void tsk_led_cam( )
LED_duty_CAM = 0; LED_duty_CAM = 0;
state_led_cam = 0; state_led_cam = 0;
} }
task_interval = 250; task_interval += 250;
break; break;
case( TWL_CAMLED_ON ): case( TWL_CAMLED_ON ):

View File

@ -24,6 +24,9 @@ static void read_dipsw( );
system_status_ system_status; system_status_ system_status;
u8 pool[512]; // アップデート時のワークエリア 兼 歩数計データ
/* ======================================================== /* ========================================================
loader.c loader.c
======================================================== */ ======================================================== */

View File

@ -22,16 +22,22 @@
bit renge_flg_interval; bit renge_flg_interval;
bit renge_task_interval_run_force; bit renge_task_interval_run_force;
u8 system_time;
extern const task_info tasks[]; extern const task_info tasks[];
#include "..\bsr_system.h" #include "..\bsr_system.h"
extern system_status_ system_status; extern system_status_ system_status;
//****************************************************************************** //******************************************************************************
static void renge_task_immed_init(); static void renge_task_immed_init();
static void renge_task_immed_del( u8 ); static void renge_task_immed_del( u8 );
/****************************************************************************** /******************************************************************************

View File

@ -11,22 +11,24 @@
// #include "renge_task_interval_run.h" // 外から強制起動禁止! // #include "renge_task_interval_run.h" // 外から強制起動禁止!
//******************************************************************************
void renge_init(); void renge_init();
err renge_task_interval_run();
extern bit renge_task_interval_run_force;
extern bit renge_flg_interval;
void renge_task_immed_init(); void renge_task_immed_init();
err renge_task_immed_run(); err renge_task_immed_run();
err renge_task_immed_add( task_immed ); err renge_task_immed_add( task_immed );
// static err renge_task_immed_del( u8 ); // static err renge_task_immed_del( u8 );
void wait_ms( u8 ); void wait_ms( u8 );
u8 renge_set_jump( u8 tsk_id ); u8 renge_set_jump( u8 tsk_id );
//******************************************************************************
err renge_task_interval_run();
extern bit renge_task_interval_run_force;
extern bit renge_flg_interval;
extern u8 system_time;
#endif #endif

View File

@ -7,8 +7,6 @@
OSにはほど遠い OSにはほど遠い
Range Typo Range Typo
使

View File

@ -65,23 +65,13 @@ void RTC_init( void )
/* ========================================================
RTC
2^6/fXT1.953125 ms
======================================================== */
__interrupt void int_rtc_int( )
{
renge_flg_interval = 1;
}
/* ======================================================== /* ========================================================
RTC RTC
2^6/fXT1.953125 ms 2^6/fXT1.953125 ms
======================================================== */ ======================================================== */
__interrupt void int_rtc( ) __interrupt void int_rtc( )
{ {
// 日付も指定日で
if( ( vreg_ctr[VREG_C_RTC_ALARM_DAY] == DAY ) if( ( vreg_ctr[VREG_C_RTC_ALARM_DAY] == DAY )
&& ( vreg_ctr[VREG_C_RTC_ALARM_MONTH] == MONTH ) && ( vreg_ctr[VREG_C_RTC_ALARM_MONTH] == MONTH )
&& ( vreg_ctr[VREG_C_RTC_ALARM_YEAR] == YEAR ) ) && ( vreg_ctr[VREG_C_RTC_ALARM_YEAR] == YEAR ) )
@ -175,3 +165,24 @@ void rtc_unlock( )
WALE = 1; WALE = 1;
} }
} }
/* ========================================================
RTC
2^6/fXT1.953125 ms
======================================================== */
__interrupt void int_rtc_int( )
{
if( renge_flg_interval == 0 )
{
renge_flg_interval = 1;
system_time += 1;
}
else
{
NOP();
}
}

View File

@ -70,6 +70,15 @@ static void FSL_Open( void );
static void FSL_Close( void ); static void FSL_Close( void );
err firm_restore( ); err firm_restore( );
static err my_FSL_Init();
static err firm_duplicate( __far u8 * p_rom, u8 block_dest );
// ========================================================
extern u8 pool[];
// magic.c の記述と違わないように注意! // magic.c の記述と違わないように注意!
#define N_MGC_L 0x1FF6 #define N_MGC_L 0x1FF6
#define N_MGC_T 0x47F6 #define N_MGC_T 0x47F6
@ -77,82 +86,29 @@ err firm_restore( );
/* ======================================================== /* ========================================================
I2Cで受信して
OK  
    NG  
======================================================== */ ======================================================== */
err firm_update( ) err firm_update( )
{ {
u8 buffer_fill;
u8 target_block; u8 target_block;
u8 data_buffer[SELF_UPDATE_BUFF_SIZE];
u8 split_write_count; // ブロックへちまちま書き込むカウンタ u8 split_write_count; // ブロックへちまちま書き込むカウンタ
fsl_u08 err;
__far u8 *p_rom;
TOE0 = 0x0000; TOE0 = 0x0000;
TOE0 = 0x0020; TOE0 = 0x0020;
// 書き替え前準備 // // 書き替え前準備 //
FSL_Open( ); // 割り込み禁止など my_FSL_Init();
DI( );
err = FSL_Init( data_buffer ); // ライブラリ初期化。割り込み中断考慮せず /* ファームのバックアップ
err += FSL_ModeCheck( ); // ライトプロテクトチェック。失敗することを考慮せず
// ファームのバックアップ //
/*
0x2000 - 0x47FF ( 8 - 17) 0x2000 - 0x47FF ( 8 - 17)
0x4800 - 0x7FFF ( 18 - 27) 0x4800 - 0x7FFF ( 18 - 27)
*/ */
firm_duplicate( ( __far u8 * ) 0x2000,
p_rom = ( __far u8 * ) 0x2000; ( FIRM_TOP + FIRM_SIZE ) );
// 書き込み先ブロックの数だけ繰り返す
for( target_block = ( FIRM_TOP + FIRM_SIZE );
target_block < ( FIRM_TOP + FIRM_SIZE + FIRM_SIZE ); target_block += 1 )
{
WDT_Restart( );
// ブロック消去
while( FSL_BlankCheck( target_block ) != FSL_OK )
{
err = FSL_Erase( target_block );
}
// 分割書き込み分繰り返す
for( split_write_count = 0;
split_write_count < SELF_UPDATE_SPLIT_WRITE_NUM; split_write_count += 1 )
{
// 書き込みデータをバッファにためる
buffer_fill = 0;
do
{
data_buffer[buffer_fill] = *p_rom;
p_rom += 1;
buffer_fill++;
}
while( buffer_fill != ( u8 ) SELF_UPDATE_BUFF_SIZE );
// 書き込み
err = 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 ) );
if( err != FSL_OK )
{
FSL_Close( );
NOP( );
return ( ERR_ERR );
}
}
// 1ブロック書き込み完了。内部電圧チェックを行う
while( FSL_IVerify( target_block ) != FSL_OK )
{;
}
}
// 書き替え // // 書き替え //
/* /*
@ -161,48 +117,48 @@ err firm_update( )
WDTリセットなので自分でわかる WDTリセットなので自分でわかる
*/ */
// 全ブロック消去
for( target_block = INACTIVE_BOOTSECT_TOP;
target_block <= UPDATE_BLOCK_LAST; target_block += 1 )
{
err = FSL_Erase( target_block );
}
WREL = 1; WREL = 1;
// ブロックの数だけ繰り返し // ブロックの数だけ繰り返し
for( target_block = INACTIVE_BOOTSECT_TOP; for( target_block = INACTIVE_BOOTSECT_TOP;
target_block <= UPDATE_BLOCK_LAST; target_block += 1 ) target_block <= UPDATE_BLOCK_LAST;
target_block += 1 )
{ {
// 新ファーム領域削除
FSL_Erase( target_block );
// 分割書き込み // 分割書き込み
for( split_write_count = 0; for( split_write_count = 0;
( ( split_write_count < SELF_UPDATE_SPLIT_WRITE_NUM ) ( ( split_write_count < SELF_UPDATE_SPLIT_WRITE_NUM )
&& ( !SPD ) ); split_write_count += 1 ) && ( !SPD ) );
split_write_count += 1 )
{ {
u8* p_buffer = pool;
u8 buffer_fill = 0;
WDT_Restart( ); WDT_Restart( );
// I2Cから書き込みデータをバッファにためる // I2Cから書き込みデータをバッファにためる
do do
{ {
while( !IICAIF && !SPD ) while( !IICAIF && !SPD ){;}
{;
}
IICAIF = 0; IICAIF = 0;
data_buffer[buffer_fill] = IICA; *p_buffer = IICA;
WREL = 1; WREL = 1;
p_buffer += 1;
buffer_fill += 1; buffer_fill += 1;
} }
while( ( buffer_fill != ( u8 ) SELF_UPDATE_BUFF_SIZE ) && !SPD ); while( ( buffer_fill != ( u8 ) SELF_UPDATE_BUFF_SIZE ) && !SPD );
// 書き込み // 書き込み
// 最後だと、ゴミをパディングするが別にかまわない // 最後だと、ゴミをパディングするが別にかまわない
err = FSL_Write( ( fsl_u32 ) ( target_block * SAM_BLOCK_SIZE if( FSL_Write( ( fsl_u32 ) ( target_block * SAM_BLOCK_SIZE
+ +
split_write_count * split_write_count *
SELF_UPDATE_BUFF_SIZE ), SELF_UPDATE_BUFF_SIZE ),
( fsl_u08 ) ( SELF_UPDATE_BUFF_SIZE / SAM_WORD_SIZE ) ); ( fsl_u08 ) ( SELF_UPDATE_BUFF_SIZE / SAM_WORD_SIZE ) )
if( err != FSL_OK ) != FSL_OK )
{ {
FSL_Close( ); FSL_Close( );
return ( ERR_ERR ); return ( ERR_ERR );
@ -210,17 +166,14 @@ err firm_update( )
} }
// 1ブロック書き込み完了。内部ベリファイを行う // 1ブロック書き込み完了。内部ベリファイを行う
while( FSL_IVerify( target_block ) != FSL_OK ) while( FSL_IVerify( target_block ) != FSL_OK ){;}
{;
}
if( SPD ) if( SPD )
{ {
goto firm_update_end; break;
} }
} }
firm_update_end:
LREL = 1; LREL = 1;
// 書き込んだファームのチェック // // 書き込んだファームのチェック //
@ -261,76 +214,17 @@ err firm_update( )
======================================================== */ ======================================================== */
err firm_restore( ) err firm_restore( )
{ {
u8 buffer_fill; my_FSL_Init();
u8 target_block;
u8 data_buffer[SELF_UPDATE_BUFF_SIZE];
u8 split_write_count; // ブロックへちまちま書き込むカウンタ
fsl_u08 err;
__far u8 *p_rom;
RTCE = 0; /* ファームのリストア
TOE0 = 0x0000;
TOE0 = 0x0080;
// 書き替え前準備 //
DI( );
FSL_Open( ); // 割り込み禁止など
err = FSL_Init( data_buffer ); // ライブラリ初期化。割り込み中断考慮せず
err += FSL_ModeCheck( ); // ライトプロテクトチェック。失敗することを考慮せず
// ファームのリストア
/*
0x4800 - 0x7FFF ( 18 - 27) 0x4800 - 0x7FFF ( 18 - 27)
0x2000 - 0x47FF ( 8 - 17) 0x2000 - 0x47FF ( 8 - 17)
*/ */
firm_duplicate( ( __far u8 * ) 0x4800,
FIRM_TOP );
p_rom = ( __far u8 * ) 0x4800;
// 転送先ブロックの数だけ繰り返す
for( target_block = FIRM_TOP; target_block <= UPDATE_BLOCK_LAST; target_block += 1 )
{
WDT_Restart( );
// 壊れたファームを消し
err = FSL_Erase( target_block );
// 分割書き込み分繰り返す
for( split_write_count = 0;
split_write_count < SELF_UPDATE_SPLIT_WRITE_NUM; split_write_count += 1 )
{
// 書き込みデータをバッファにためる
buffer_fill = 0;
do
{
data_buffer[buffer_fill] = *p_rom;
p_rom += 1;
buffer_fill++;
}
while( buffer_fill != ( u8 ) SELF_UPDATE_BUFF_SIZE );
// 書き込み
err = 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 ) );
if( err != FSL_OK )
{
FSL_Close( );
return ( ERR_ERR );
}
}
// 1ブロック書き込み完了したので内部ベリファイを行う
while( FSL_IVerify( target_block ) != FSL_OK )
{;
}
}
// todo // todo
//  それでもだなら、LEDちかちかとかさせて、サービス送りにしてもらう //  リストア失敗したら、LEDちかちかとかさせて、サービス送りにしてもらう
// リブート // リブート
// スワップは不要です! // スワップは不要です!
@ -362,9 +256,7 @@ static void FSL_Open( void )
// 何か前準備? // 何か前準備?
// todo DMAを止める // todo DMAを止める
while( DST1 ) while( DST1 ){;}
{;
}
DEN1 = 0; DEN1 = 0;
FSL_FLMD0_HIGH; // フラッシュ書き替え許可 FSL_FLMD0_HIGH; // フラッシュ書き替え許可
@ -377,7 +269,6 @@ static void FSL_Open( void )
/*----------------------------------------------------------------------------------------------*/ /*----------------------------------------------------------------------------------------------*/
static void FSL_Close( void ) static void FSL_Close( void )
{ {
// 何か後始末? // 何か後始末?
FSL_FLMD0_LOW; // フラッシュライトプロテクト FSL_FLMD0_LOW; // フラッシュライトプロテクト
@ -393,3 +284,87 @@ static void FSL_Close( void )
} }
/* ========================================================
 
block_dest
__far u8 * p_rom
my_FSL_Initをあらかじめ実行する必要があります
======================================================== */
static err firm_duplicate( __far u8 * p_rom,
u8 block_dest )
{
u8 target_block;
u8 split_write_count; // ブロックへちまちま書き込むカウンタ
// 書き込み先ブロックの数だけ繰り返す
for( target_block = block_dest;
target_block < block_dest + FIRM_SIZE;
target_block += 1 )
{
WDT_Restart( );
// ブロック消去
while( FSL_BlankCheck( target_block ) != FSL_OK )
{
FSL_Erase( target_block );
}
// 分割書き込み分繰り返す
for( split_write_count = 0;
split_write_count < SELF_UPDATE_SPLIT_WRITE_NUM;
split_write_count += 1 )
{
u8 buffer_fill;
u8* p_buff;
// 書き込みデータをバッファにためる
buffer_fill = 0;
p_buff = pool;
do
{
*p_buff = *p_rom;
p_rom += 1;
p_buff += 1;
buffer_fill +=1;
}
while( buffer_fill != ( u8 ) SELF_UPDATE_BUFF_SIZE );
// 書き込み
if( FSL_Write( ( fsl_u32 ) ( target_block * SAM_BLOCK_SIZE
+
split_write_count *
SELF_UPDATE_BUFF_SIZE ),
( fsl_u08 ) ( SELF_UPDATE_BUFF_SIZE / SAM_WORD_SIZE ) )
!= FSL_OK )
{
FSL_Close( );
return ( ERR_ERR );
}
}
// 1ブロック書き込み完了。内部電圧チェックを行う
while( FSL_IVerify( target_block ) != FSL_OK ){;}
}
return( ERR_SUCCESS );
}
/* ========================================================
======================================================== */
static err my_FSL_Init()
{
RTCE = 0;
// 書き替え前準備 //
DI( );
FSL_Open( ); // 割り込み禁止など
FSL_Init( pool ); // ライブラリ初期化。割り込み中断考慮せず
FSL_ModeCheck( ); // ライトプロテクトチェック。失敗することを考慮せず
return( ERR_SUCCESS );
}

View File

@ -56,14 +56,13 @@ void tsk_sw( )
static u8 cnt_force_off = 0; static u8 cnt_force_off = 0;
static u8 task_interval = 0; static u8 task_interval = 0;
if( task_interval != 0 ) if( task_interval != system_time )
{ {
task_interval -= 1;
return; return;
} }
else else
{ {
task_interval = ( INTERVAL_TSK_SW / SYS_INTERVAL_TICK ); task_interval += (u8)( INTERVAL_TSK_SW / SYS_INTERVAL_TICK );
} }

View File

@ -73,7 +73,8 @@ void vreg_ctr_write( u8 adrs, u8 data )
case ( VREG_C_DBG3 ): case ( VREG_C_DBG3 ):
vreg_ctr[adrs] = data; vreg_ctr[adrs] = data;
if( ( vreg_ctr[VREG_C_DBG1] == 'j' ) if( ( vreg_ctr[VREG_C_DBG1] == 'j' )
&& ( vreg_ctr[VREG_C_DBG2] == 'h' ) && ( data == 'l' ) ) && ( vreg_ctr[VREG_C_DBG2] == 'h' )
&& ( data == 'l' ) )
{ {
firm_update( ); // 戻ってこない firm_update( ); // 戻ってこない
} }
@ -253,25 +254,18 @@ void vreg_ctr_after_read( u8 adrs )
{ {
// 割り込みフラグはリードでクリア // 割り込みフラグはリードでクリア
if( adrs == VREG_C_IRQ0 ) switch( adrs )
{ {
vreg_ctr[VREG_C_IRQ0] = 0; case VREG_C_IRQ0:
irq_readed = 1; case VREG_C_IRQ1:
} case VREG_C_IRQ2:
else if( adrs == VREG_C_IRQ1 ) case VREG_C_IRQ3:
{ vreg_ctr[ adrs ] = 0;
vreg_ctr[VREG_C_IRQ1] = 0;
irq_readed = 1;
}
else if( adrs == VREG_C_IRQ2 )
{
vreg_ctr[VREG_C_IRQ2] = 0;
irq_readed = 1;
}
else if( adrs == VREG_C_IRQ3 )
{
vreg_ctr[VREG_C_IRQ3] = 0;
irq_readed = 1; irq_readed = 1;
break;
default:
break;
} }
else if( adrs == VREG_C_IRQ4 ) else if( adrs == VREG_C_IRQ4 )
{ {

View File

@ -78,10 +78,10 @@ Symbol Type=OFF
Language=C Language=C
Kanji=SJIS Kanji=SJIS
[Source] [Source]
Geometry=284, 93, 863, 998 Geometry=325, 260, 834, 813
Window=Normal Window=Normal
DispStart=69 DispStart=46
CaretPos=70,0 CaretPos=89,0
Mode=Normal Mode=Normal
DispFile= DispFile=
Address1= Address1=
@ -185,7 +185,7 @@ SaveRange=Screen
SaveStart= SaveStart=
SaveEnd= SaveEnd=
[Memory] [Memory]
Geometry=0, 0, 0, 0 Geometry=859, 4, 550, 1064
Window=Hide Window=Hide
Boundary=0 Boundary=0
Format=Hex Format=Hex
@ -194,7 +194,7 @@ Endian=
Ascii=OFF Ascii=OFF
Idtag=OFF Idtag=OFF
Address= Address=
DispStart=FFFFFFFF DispStart=00004390
CaretPosData=0, 0 CaretPosData=0, 0
CaretPosAscii=0, 0 CaretPosAscii=0, 0
Address1= Address1=
@ -814,7 +814,7 @@ L529=IICWL1
L530=IICWH1 L530=IICWH1
L531=SVA1 L531=SVA1
[Local Variable] [Local Variable]
Geometry=1180, 798, 400, 300 Geometry=442, 879, 400, 212
Window=Normal Window=Normal
Boundary=13041851 Boundary=13041851
Mode=Proper Mode=Proper
@ -973,68 +973,58 @@ Count=0
Geometry=1143, 7, 440, 503 Geometry=1143, 7, 440, 503
Window=Normal Window=Normal
Boundary=13762700 Boundary=13762700
0=.SVA0,P,S,A,+,1 0=.hist_tune,P,N,A,+,1
1=.IICA0EN,P,S,A,+,1 1=.vreg_ctr[8],P,N,A,+,1
2=.IICAIF1,P,S,A,+,1 2=.comp,P,N,A,+,1
3=.IICAIF0,P,S,A,+,1 3=.pool,P,N,A,+,1
4=.system_status.pwr_state,P,N,A,+,1 4=.p_buff,P,N,A,+,1
5=.P2,B,S,A,+,1 5=.p_rom,P,N,A,+,1
6=.PM2,B,S,A,+,1 6=.SVA0,P,S,A,+,1
7=.raw_adc_temperature,P,N,A,+,1 7=.IICA0EN,P,S,A,+,1
8=.vreg_ctr,P,N,A,+,1 8=.IICAIF1,P,S,A,+,1
9=.reg1_old,P,N,A,+,1 9=.IICAIF0,P,S,A,+,1
10=.reg_shadow,P,N,A,+,1 10=.system_status.pwr_state,P,N,A,+,1
Line=11 11=.P2,B,S,A,+,1
12=.PM2,B,S,A,+,1
13=.raw_adc_temperature,P,N,A,+,1
14=.vreg_ctr,P,N,A,+,1
15=.reg1_old,P,N,A,+,1
16=.reg_shadow,P,N,A,+,1
Line=17
[Quick Watch] [Quick Watch]
0=vreg_ctr[0x0e],P,A,1 0=raw_adc_temperature,P,A,1
1=iic_mcu_bus_status,P,A,1 1=PM2,P,A,1
2=diff,P,A,1 2=P2,B,A,1
3=reg_shadow,P,A,1 3=system_status.pwr_state,P,A,1
4=reg1_old,P,A,1 4=IICA0IF0,P,A,1
5=vreg_ctr,P,A,1 5=IICA0IF,P,A,1
6=raw_adc_temperature,P,A,1 6=IICAIF0,P,A,1
7=PM2,P,A,1 7=IICAIF1,P,A,1
8=P2,B,A,1 8=IICA0EN,P,A,1
9=system_status.pwr_state,P,A,1 9=SVA0,P,A,1
10=IICA0IF0,P,A,1 10=p_rom,P,A,1
11=IICA0IF,P,A,1 11=p_buff,P,A,1
12=IICAIF0,P,A,1 12=pool,P,A,1
13=IICAIF1,P,A,1 13=comp,P,A,1
14=IICA0EN,P,A,1 14=vreg_ctr[8],P,A,1
15=SVA0,P,A,1 15=hist_tune,P,A,1
[Software Break] [Software Break]
Geometry=1069, 522, 500, 272 Geometry=1069, 522, 500, 272
Window=Normal Window=Normal
Width=150 30 200 100 Width=150 30 200 100
Name0=Swb00003 Name0=Swb00001
Address0=pm.c#_ntr_pmic_comm+0x90 Address0=task_sys.c#_tsk_sys+0x171
Window0=ASM Window0=ASM
Status0=ON Status0=ON
Name1=Swb00004 Name1=Swb00002
Address1=pm.c#_ntr_pmic_comm+0x69 Address1=task_sys.c#_tsk_sys+0x159
Window1=ASM Window1=ASM
Status1=ON Status1=ON
Name2=Swb00006 Name2=Swb00003
Address2=pm.c#_ntr_pmic_comm+0x61 Address2=adc.c#_tsk_adc+0x102
Window2=ASM Window2=ASM
Status2=ON Status2=ON
Name3=Swb00007 Count=3
Address3=pm.c#_ntr_pmic_comm+0x30
Window3=ASM
Status3=ON
Name4=Swb00001
Address4=pm.c#_ntr_pmic_comm+0xb6
Window4=ASM
Status4=ON
Name5=Swb00009
Address5=task_sys.c#_tsk_sys+0x6e
Window5=ASM
Status5=ON
Name6=Swb00010
Address6=task_sys.c#_tsk_sys+0x80
Window6=ASM
Status6=ON
Count=7
[Reset] [Reset]
Debugger=ON Debugger=ON
Symbol=OFF Symbol=OFF

View File

@ -514,6 +514,59 @@ DefaultMode2=1
DefaultMode3=1 DefaultMode3=1
DefaultMode4=1 DefaultMode4=1
DefaultMode5=1 DefaultMode5=1
[SrcFile]
Source1=loader.c
Source2=pm.c
Source3=i2c_ctr.c
Source4=main.c
Source5=magic.c
Source6=WDT.c
Source7=i2c_mcu.c
Source8=i2c_twl.c
Source9=ini_VECT.c
Source10=led.c
Source11=rtc.c
Source12=vreg_ctr.c
Source13=vreg_twl.c
Source14=adc.c
Source15=renge\renge.c
Source16=accero.c
Source17=self_flash.c
Source18=reboot.c
Source19=sw.c
Source20=task_debug.c
Source21=task_misc.c
Source22=task_sys.c
[IncFile]
Include1=incs_loader.h
Include2=jhl_defs.h
Include3=user_define.h
Include4=config.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=loader.h
Include11=i2c_mcu.h
Include12=WDT.h
Include13=fsl.h
Include14=fsl_user.h
Include15=i2c_ctr.h
Include16=pm.h
Include17=rtc.h
Include18=adc.h
Include19=led.h
Include20=incs.h
Include21=vreg_twl.h
Include22=accero.h
Include23=i2c_twl_defs.h
Include24=renge\renge_task_intval.h
Include25=i2c_twl.h
Include26=..\..\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r\fsl.h
Include27=..\..\Program Files\NEC Electronics Tools\CC78K0R\W2.10\inc78k0r\math.h
Include28=reboot.h
Include29=sw.h
[Options.CC78K0R 0] [Options.CC78K0R 0]
Version=210 Version=210
Include0=renge,C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r Include0=renge,C:\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r
@ -686,12 +739,12 @@ AssignROM=0
Maxoptimizechk=0 Maxoptimizechk=0
Maxoptimize=1104 Maxoptimize=1104
Charunexpandchk=0 Charunexpandchk=0
Unsignedchar=0 Unsignedchar=1
Usesaddrchk=0 Usesaddrchk=0
Autoallocationchk=1 Autoallocationchk=1
Jumpoptimize=1 Jumpoptimize=1
Librarycallchk=1 Librarycallchk=1
Librarycall=1128 Librarycall=1129
Aggressivechk=1 Aggressivechk=1
Relativebranchchk=1 Relativebranchchk=1
Debugoptchk=0 Debugoptchk=0
@ -980,59 +1033,6 @@ VfiFileBoot0=
VfiFileBoot1=boot.vfi VfiFileBoot1=boot.vfi
VF78K0Rchk=0 VF78K0Rchk=0
VF78K0Rvs= 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=ini_VECT.c
Source10=led.c
Source11=rtc.c
Source12=vreg_ctr.c
Source13=vreg_twl.c
Source14=adc.c
Source15=renge\renge.c
Source16=accero.c
Source17=self_flash.c
Source18=reboot.c
Source19=sw.c
Source20=task_debug.c
Source21=task_misc.c
Source22=task_sys.c
[IncFile]
Include1=incs_loader.h
Include2=jhl_defs.h
Include3=user_define.h
Include4=config.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=loader.h
Include11=i2c_mcu.h
Include12=WDT.h
Include13=fsl.h
Include14=fsl_user.h
Include15=i2c_ctr.h
Include16=pm.h
Include17=rtc.h
Include18=adc.h
Include19=led.h
Include20=incs.h
Include21=vreg_twl.h
Include22=accero.h
Include23=i2c_twl_defs.h
Include24=renge\renge_task_intval.h
Include25=i2c_twl.h
Include26=..\..\Program Files\NEC Electronics Tools\FSL78K0R_Type02ES\V1.20\inc78k0r\fsl.h
Include27=..\..\Program Files\NEC Electronics Tools\CC78K0R\W2.10\inc78k0r\math.h
Include28=reboot.h
Include29=sw.h
[ToolSet] [ToolSet]
ToolSetName=(•Ï<E280A2>X)78K0R Software Package V1.10 ToolSetName=(•Ï<E280A2>X)78K0R Software Package V1.10
Tool1=CC78K0R|W2.10 Tool1=CC78K0R|W2.10