CTTS対応(accero)

最大音量を-4db対応(adc)
お知らせLED対応(i2c_ctr)
I2C_mで、書き込みデータが化ける? 巻き戻し
GYROのCSが機能していなかった(PM5の設定忘れ)

todo:
現状、温度無視して充電させてます

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_mcu@132 013db118-44a6-b54f-8bf7-843cb86687b1
This commit is contained in:
N2232 2010-05-13 06:01:44 +00:00
parent dfd5adae55
commit a6e9474ebf
15 changed files with 80 additions and 66 deletions

View File

@ -184,7 +184,8 @@ task_status_immed acc_hosu_set( )
#else
# ifdef _MODEL_CTR_
if( system_status.model == MODEL_TS_BOARD )
/*
if( system_status.model == MODEL_TS_BOARD )
{
// TS Final SoC
str_send_buf[2] = 0x02; // 3 IRQ pol :Active HI, Drive:Pushpull,
@ -194,6 +195,8 @@ task_status_immed acc_hosu_set( )
// 実機&派生種、白箱
str_send_buf[2] = 0x10; // 3 IRQ pol :Active HI, Drive:Pushpull,
}
*/
str_send_buf[2] = 0x12; // 面倒なので両方...。
# else
// TS( type T )
str_send_buf[2] = 0x02; // 3 IRQ pol :Active HI, Drive:Pushpull,
@ -252,9 +255,10 @@ __interrupt void intp23_ACC_ready( )
{
if( ( system_status.pwr_state == ON ) || ( system_status.pwr_state == SLEEP ) )
{
if( ACC_VALID )
if( ACC_VALID == 1 )
{
renge_task_immed_add( tsk_cbk_accero );
// todo
// renge_task_immed_add( tsk_cbk_accero );
}
}
}

View File

@ -10,6 +10,8 @@
#include "led.h"
//#define _4db_
#define _15db_
// ===================================================== //
bit adc_updated;
@ -26,6 +28,9 @@ extern void nop8();
// ===================================================== //
#define INTERVAL_TSK_ADC 3
/* ========================================================
ADC設定と
@ -41,6 +46,7 @@ extern void nop8();
 
======================================================== */
#ifdef _15db_
// max -15db
const u8 slider_to_codec[64] =
{
@ -53,7 +59,22 @@ const u8 slider_to_codec[64] =
81, 80, 79, 78, 77, 76, 75, 74,
73, 72, 71, 70, 69, 68, 67, 66
};
#endif
#ifdef _4db_
// max -4db
const u8 slider_to_codec[64] =
{
127, 127, 126, 125, 123, 122, 121, 119,
118, 117, 115, 114, 112, 111, 110, 108,
107, 106, 104, 103, 101, 100, 99, 97,
96, 94, 93, 92, 90, 89, 88, 86,
85, 83, 82, 81, 79, 78, 77, 75,
74, 72, 71, 70, 68, 67, 66, 64,
64, 63, 61, 60, 59, 57, 56, 54,
53, 52, 50, 49, 48, 46, 44, 44
};
#endif
void tsk_adc( )

View File

@ -6,7 +6,7 @@
#define MCU_VER_MAJOR 0x00
#define MCU_VER_MINOR 0x12
#define MCU_VER_MINOR 0x11
#define _OVERCLOCK_
@ -15,13 +15,16 @@
//#define _MODEL_TEG2_
// <20>ªTEG2 CPU <20>{ Type-T
//#define _MODEL_WM0_
//#define _MODEL_WM0_TEG2_CTRC_
//#define _MODEL_TS0_
// <20>ªTEG2 CPU <20>{ Type-C
#define _MODEL_CTR_
// <20>ªTS board, WM1,1 TS-CTRC
//#define _MODEL_CTR_NOTIFY_FULLCOLOR_
// <20>ªTS board, WM1,1 TS-CTRC

View File

@ -197,11 +197,14 @@ __interrupt void int_iic_ctr( )
// レジスタアドレスのインクリメント
/// アクセスポインタを進めない特殊なレジスタ
if( ( reg_adrs != VREG_C_ACC_HOSU_HIST )
&& ( reg_adrs != VREG_C_INFO )
&& ( reg_adrs != VREG_C_FREE_DATA )
)
switch( reg_adrs )
{
case( VREG_C_ACC_HOSU_HIST ):
case( VREG_C_INFO ):
case( VREG_C_FREE_DATA ):
case( VREG_C_LED_NOTIFY_DATA ):
break;
default:
reg_adrs += 1;
}

View File

@ -251,11 +251,11 @@ err iic_mcu_read( u8 slave, u8 adrs, u8 len, u8 * dest )
======================================================== */
err iic_mcu_write_a_byte( u8 SLA, u8 adrs, u8 dat )
{
#if 1
// ラッパー
static u8 temp; // 書きっぱなしで終了を見ずに関数を抜ける可能性が高いのでstatic
#if 0
// これをしないと、立て続けに書いたときに前のデータを破壊してしまう
while( iic_mcu_busy )
{
@ -303,7 +303,6 @@ err iic_mcu_write_a_byte( u8 SLA, u8 adrs, u8 dat )
******************************************************************************/
err iic_mcu_write( u8 slave, u8 adrs, u8 len, void * src )
{
if( iic_mcu_is_ready() != ERR_SUCCESS )
{
return( ERR_ERR );
@ -342,7 +341,7 @@ err iic_mcu_write( u8 slave, u8 adrs, u8 len, void * src )
DEN1 = 1;
DSA1 = ( u8 ) ( &SIO10 );
DRA1 = ( u16 ) iic_send_work;
DRA1 = &iic_send_work[0];
DBC1 = len;
DMC1 = DRS | 8; // RAM -> SFR, 8bit, IRQ, IIC10
@ -365,6 +364,7 @@ err iic_mcu_write( u8 slave, u8 adrs, u8 len, void * src )
p_iic_send_wo_dma_dat = src;
// 残りは割り込みルーチン内で
}
return ( ERR_SUCCESS );
}

View File

@ -38,6 +38,7 @@ uni_info_LED info_LED = {
32, // 1フレームの長さ
32, // グラデーション時間
0, // 最終フレームをn回繰り返す
0, // 予備
{
{255, 0,0},
{0,0,0},
@ -180,8 +181,7 @@ void LED_init( )
TOE0 = 0b0000000011101110; // TOxをタイマーモジュールが制御
TS0 = 0b0000000011101111; // 動作開始
// TDR00 = LED_BRIGHT_MAX - 1; // 10bit, 周期
TDR00 = LED_BRIGHT_MAX*5 - 1; // 10bit, 周期
TDR00 = LED_BRIGHT_MAX - 1; // 10bit, 周期
if( system_status.reboot )
{
@ -248,6 +248,7 @@ void tsk_led_pow( )
// 強制
case ( LED_POW_ILM_OFF ):
led_fade_to( LED_duty_pow_blu, 0 );
LED_pow_red = 0;
break;
@ -284,7 +285,7 @@ static void led_pow_normal( )
static u8 red_blink_poi;
u8 temp;
if( vreg_ctr[VREG_C_BT_REMAIN] <= BATT_TH_EMPTY )
{
// 赤点滅
@ -438,38 +439,15 @@ void tsk_led_wifi( )
}
// 送信パルスのラッチ
if( vreg_ctr[VREG_C_LED_WIFI] == WIFI_LED_TXAUTO )
{
if( WIFI_txLatch )
if( WIFI_txLatch ) // 割り込みフラグそのものを使ってしまう
{
WIFI_txLatch = 0;
flag_wifi_TX = 2;
}
}
else
{
flag_wifi_TX = 0;
}
switch ( vreg_ctr[VREG_C_LED_WIFI] )
{
case ( WIFI_LED_OFF ):
default:
LED_duty_WiFi = 0;
state_wifi_tx = 0;
remain_wifi_tx = 0;
break;
case ( WIFI_LED_ON ):
LED_duty_WiFi = vreg_ctr[VREG_C_LED_BRIGHT];
state_wifi_tx = 0;
remain_wifi_tx = 0;
break;
case ( WIFI_LED_TXAUTO ):
if( flag_wifi_TX != 0 ) // 短いパルスを捕まえるために、割り込みフラグを見る
if( flag_wifi_TX != 0 )
{
vreg_ctr[ VREG_C_STATUS_1 ] |= REG_BIT_WIFI_TX;
// 送信パターン
switch ( state_wifi_tx )
{
@ -493,12 +471,17 @@ void tsk_led_wifi( )
else
{
// 送信フラグ待ち
LED_duty_WiFi = vreg_ctr[VREG_C_LED_BRIGHT];
task_interval = 200;
return;
vreg_ctr[ VREG_C_STATUS_1 ] &= ~REG_BIT_WIFI_TX;
if( vreg_ctr[VREG_C_LED_WIFI] == WIFI_LED_OFF )
{
LED_duty_WiFi = 0;
}
break;
else
{
LED_duty_WiFi = vreg_ctr[VREG_C_LED_BRIGHT];
}
task_interval = 100;
return;
}
}

View File

@ -36,7 +36,7 @@
#define NOTIFY_LED_TERM 32
#define LED_BRIGHT_MAX 0x00FF
#define LED_BRIGHT_MAX 0x0100
// ====================================
#ifdef _MCU_BSR_ // 電波送信パルス
@ -110,6 +110,7 @@ typedef struct{
u8 term; // 1フレーム何チック
u8 fade_time; // 何チックで次のフレームの色に達するか
u8 last_loop; // 最終フレームを
u8 resv1;
st_info_LED_ptn ptn[ NOTIFY_LED_TERM ];
}st_info_LED;

View File

@ -245,7 +245,7 @@ void hdwinit2( )
PM4 = 0b11111011;
#endif
PM5 = 0b11110011;
PM5 = 0b11110010;
PM6 = 0b11111100; // I2CのラインがL出力になってしまうが、システムがOFFなのでかまわない
#ifdef _PMIC_CTR_
PM7 = 0b01011111;

View File

@ -255,6 +255,7 @@ err PM_sys_pow_on( )
// PM_reset_ast( ); 不要 PM_LDSW_onまかせ
RESET2_ast;
FCRAM_RST_ast;
GYRO_CS_DISABLE();
PM_LDSW_on( );
@ -634,8 +635,6 @@ void tsk_batt( )
}
#if 0
// todo
// 充電 ///////////////////////////
// 温度付きヒステリシス
if(( 86 < vreg_ctr[VREG_C_BT_TEMP] )
@ -656,19 +655,19 @@ void tsk_batt( )
if(( temp_zone_charge_enable == 1 )
&& ( battery_manufacturer <= BT_VENDER_6 ))
{
#ifndef _MODEL_WM0_
# ifndef _MODEL_WM0_
// CHG_ENABLEピンは /WL_RST に配線されているので
BT_CHG_ENABLE(); // 温度範囲OKで充電再開
}
else
{
BT_CHG_DISABLE(); // 温度危険! 充電停止
#endif
# endif
}
#else
// <EFBFBD>[“d ///////////////////////////
// 温度無視して充電
# ifndef _MODEL_WM0_
// CHG_ENABLEピンは /WL_RST に配線されているので
BT_CHG_ENABLE(); // 温度範囲OKで充電再開

View File

@ -35,12 +35,16 @@ void tsk_debug( )
return;
}
u8 temp_debug_3;
// 7セグ 4バイト版
# define IIC_SLA_DBG_MONITOR 0x24
void tsk_debug2( )
{
u8 str[4];
if( ( system_status.pwr_state == ON ) || ( system_status.pwr_state == SLEEP ) )
{
/*
@ -64,7 +68,7 @@ void tsk_debug2( )
// iic_mcu_write_a_byte( IIC_SLA_DBG_MONITOR, 1, vreg_ctr[ VREG_C_STATUS ] );
// iic_mcu_write_a_byte( IIC_SLA_DBG_MONITOR, 0, vreg_ctr[ VREG_C_ACC_ZH ] );
// iic_mcu_write( IIC_SLA_DBG_MONITOR, 0, 4, &str[0] );
iic_mcu_write( IIC_SLA_DBG_MONITOR, 0, 4, &str[0] );
}
return;
}

View File

@ -131,7 +131,7 @@ void tsk_misc_stat( )
// 割り込みの取りこぼし?
if( ( vreg_ctr[VREG_C_ACC_CONFIG] & 0x03 ) != 0x00 )
{
if( ACC_VALID )
if( ACC_VALID == 1 )
{
if( renge_task_immed_add( tsk_cbk_accero ) == ERR_SUCCESS ){
NOP();

View File

@ -244,7 +244,6 @@ void tsk_sys( )
IIC_ctr_Stop( );
IIC_twl_Stop( );
RTC_32k_off();
GYRO_CS_DISABLE();
vreg_ctr[VREG_C_IRQ0] = 0;
vreg_ctr[VREG_C_IRQ1] = 0;

View File

@ -20,6 +20,7 @@
#endif
#ifdef _debug_led_
# define DBG_LED_WIFI_2_on { PM2.4 = 0; P2.4 = 1; }
# define DBG_LED_WIFI_2_off { PM2.4 = 1; P2.4 = 0; }
@ -189,15 +190,15 @@
#endif
#ifdef _MODEL_CTR_
// P5.0 に加え、P5.5, P140 P141
// P5.3 に加え、P5.5, P140 P141
// P140が出力専用なので...
#define I2C_PU_on() { PM5.3 = 1; PM3.3 = 1; P14 |= 0x03; P5.3 = 1; PM5.3 = 0; P3.3 = 1; PM3.3 = 0; }
#define I2C_PU_on() { PM5.3 = 1; PM3.3 = 1; P14 |= 0x03; P5.3 = 1; PM5.3 = 0; P3.3 = 1; PM3.3 = 0; }
#define I2C_PU_off() { PM5.3 = 1; PM3.3 = 1; P14 &= ~0x03; P5.3 = 0; PM5.3 = 0; P3.3 = 0; PM3.3 = 0; }
#endif
#ifdef _MODEL_CTR_
#define GYRO_CS_ENABLE() P5.0 = 1
#define GYRO_CS_DISABLE() P5.0 = 0
#define GYRO_CS_ENABLE() P5.0 = 0
#define GYRO_CS_DISABLE() P5.0 = 1
#else
#define GYRO_CS_ENABLE() ;
#define GYRO_CS_DISABLE() ;

View File

@ -40,7 +40,7 @@ void vreg_ctr_init( )
{
vreg_ctr[VREG_C_LED_BRIGHT] = 0xFF;
#ifdef _MODEL_TEG2_
#ifdef _PMIC_TWL_
vreg_ctr[VREG_C_MCU_VER_MAJOR] = MCU_VER_MAJOR;
#else
vreg_ctr[VREG_C_MCU_VER_MAJOR] = MCU_VER_MAJOR | 0x10;

View File

@ -4,10 +4,6 @@
#include "config.h"
#define REG_BIT__SYS_MODE0 0b01000000
#define REG_BIT_MCU_FIRMBROKEN 0b10000000
// VREG_C_MCU_STATUS
#define REG_BIT_STATUS_WDT_RESET ( 1 << 1 )
#define REG_BIT_RTC_BLACKOUT ( 1 << 0 )