X3以降のマイコンへ対応。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/twl_wrapsdk/trunk@327 4ee2a332-4b2b-5046-8439-1ba90f034370
This commit is contained in:
nakasima 2008-03-21 05:42:39 +00:00
parent 5c26b23b71
commit 772b56225b
7 changed files with 1007 additions and 93 deletions

View File

@ -42,6 +42,13 @@ TWL_MEMSIZE ?= 8M
TWL_CODEGEN ?= ARM
TWL_PROC ?= ARM9
#
# TS Board Version
# TWL_TS_VERSION = [200/300/400]
#
TWL_TS_VERSION ?= 400
TS_VERSION ?= $(if $(TWL_TS_VERSION),_TS$(TWL_TS_VERSION))
# replace NitroSDK
NITRO_PLATFORM = TS
NITRO_MEMSIZE = $(TWL_MEMSIZE)

View File

@ -32,7 +32,8 @@ SUBDIRS += \
dsp \
spi \
el \
mcu \
# mcu \
endif # TWL_PLATFORM != DSTEG

View File

@ -18,7 +18,10 @@
#define TWL_MCU_H_
#ifdef SDK_ARM7
#include <twl/mcu/ARM7/mcu.h>
#include <twl/mcu/ARM7/mcu_reg.h>
#include <twl/mcu/ARM7/i2c.h>
#include <twl/mcu/ARM7/control.h>
#include <twl/mcu/ARM7/intr.h>
#endif
/* TWL_MCU_H_ */

View File

@ -0,0 +1,652 @@
/*---------------------------------------------------------------------------*
Project: TwlSDK - mcu - include
File: control.h
Copyright 2007 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date:: 2008-03-06#$
$Rev: 4551 $
$Author: yutaka $
*---------------------------------------------------------------------------*/
#ifndef TWL_MCU_CONTROL_H_
#define TWL_MCU_CONTROL_H_
#include <twl/mcu/ARM7/mcu_reg.h>
#include <twl/mcu/ARM7/i2c.h>
/*
MCUはSDK_TS_VERSIONによらず 300
SDK_TS_VERSION <= 200 APIに限り 200
Supported: GetVersion, GetRevision, GetFreeRegister, SetFreeRegister
*/
#if SDK_TS_VERSION <= 200
#define MCU_OLD_REG_TEMP_ADDR 0x18
#endif
/*
*/
#define MCU_VERSION_MIN (2 << MCU_REG_VER_INFO_VERSION_SHIFT)
#define MCU_BL_BRIGHTNESS_MAX 4
#define MCU_VOLUME_MAX 31
#define MCU_FREE_REG_NUMBER_MAX (MCU_REG_TEMP_LAST_ADDR - MCU_REG_TEMP_ADDR)
/*
alias
*/
#define MCU_GetHotBootFlag() (MCU_GetFreeRegister(0) & OS_MCU_RESET_VALUE_BUF_HOTBT_MASK ? TRUE : FALSE)
#define MCU_SetHotBootFlag(hotboot) MCU_SetFreeRegister(0, (u8)(hotboot ? OS_MCU_RESET_VALUE_BUF_HOTBT_MASK : 0))
#ifdef _cplusplus
extern "C" {
#endif
typedef enum
{
MCU_SYSTEMMODE_NITRO = (0 << MCU_REG_MODE_SYSTEM_SHIFT),
MCU_SYSTEMMODE_TWL = (1 << MCU_REG_MODE_SYSTEM_SHIFT)
}
MCUSystemMode;
typedef enum
{
MCU_CAMERA_LED_OFF = (0 << MCU_REG_CAMERA_LED_SHIFT),
MCU_CAMERA_LED_ON = (1 << MCU_REG_CAMERA_LED_SHIFT),
MCU_CAMERA_LED_BLINK = (2 << MCU_REG_CAMERA_LED_SHIFT),
MCU_CAMERA_LED_RESERVED1 = (3 << MCU_REG_CAMERA_LED_SHIFT)
}
MCUCameraLed;
typedef enum
{
MCU_GPIO_DIR_OUTPUT = 0,
MCU_GPIO_DIR_INPUT = 1
}
MCUGpioDir;
#ifdef SDK_ARM7
/*---------------------------------------------------------------------------*
Name: MCU_GetVersion
Description: get MCU version.
Arguments: None
Returns: MCU version (0-15)
*---------------------------------------------------------------------------*/
static inline u8 MCU_GetVersion( void )
{
u8 data = MCU_ReadRegister( MCU_REG_VER_INFO_ADDR );
if ( data < MCU_VERSION_MIN )
{
#if SDK_TS_VERSION <= 200
OS_TWarning("MCU version is too old to support this library.");
#else
OS_TPanic("MCU version is too old to support this library.");
#endif
}
return (u8)( ( data & MCU_REG_VER_INFO_VERSION_MASK ) >> MCU_REG_VER_INFO_VERSION_SHIFT );
}
/*---------------------------------------------------------------------------*
Name: MCU_GetRevision
Description: get MCU revision.
Arguments: None
Returns: MCU revision (0-15)
*---------------------------------------------------------------------------*/
static inline u8 MCU_GetRevision( void )
{
u8 data = MCU_ReadRegister( MCU_REG_VER_INFO_ADDR );
if ( data < MCU_VERSION_MIN )
{
#if SDK_TS_VERSION <= 200
OS_TWarning("MCU version is too old to support this library.");
#else
OS_TPanic("MCU version is too old to support this library.");
#endif
}
return (u8)( ( data & MCU_REG_VER_INFO_REVISION_MASK ) >> MCU_REG_VER_INFO_REVISION_SHIFT );
}
/*---------------------------------------------------------------------------*
Name: MCU_GetPmicManufacturer
Description: get PMIC manufacturer.
Arguments: None
Returns: manufacturer ID (0-7)
*---------------------------------------------------------------------------*/
static inline u8 MCU_GetPmicManufacturer( void )
{
u8 data = MCU_ReadRegister( MCU_REG_PMIC_INFO_ADDR );
return (u8)( ( data & MCU_REG_PMIC_INFO_MAKER_MASK ) >> MCU_REG_PMIC_INFO_MAKER_SHIFT );
}
/*---------------------------------------------------------------------------*
Name: MCU_GetPmicVersion
Description: get PMIC version.
Arguments: None
Returns: MCU version (0-3)
*---------------------------------------------------------------------------*/
static inline u8 MCU_GetPmicVersion( void )
{
u8 data = MCU_ReadRegister( MCU_REG_PMIC_INFO_ADDR );
return (u8)( ( data & MCU_REG_VER_INFO_REVISION_MASK ) >> MCU_REG_VER_INFO_REVISION_SHIFT );
}
/*---------------------------------------------------------------------------*
Name: MCU_GetBatteryManufacturer
Description: get battery manufacturer.
Arguments: None
Returns: manufacturer ID (0-7)
*---------------------------------------------------------------------------*/
static inline u8 MCU_GetBatteryManufacturer( void )
{
u8 data = MCU_ReadRegister( MCU_REG_BATT_INFO_ADDR );
return (u8)( ( data & MCU_REG_BATT_INFO_MAKER_MASK ) >> MCU_REG_BATT_INFO_MAKER_SHIFT );
}
/*---------------------------------------------------------------------------*
Name: MCU_NotifyShutdown
Description: notify system is going to shutdown
Arguments: None
Returns: TRUE if success
*---------------------------------------------------------------------------*/
static inline BOOL MCU_NotifyShutdown( void )
{
return MCU_WriteRegister( MCU_REG_COMMAND_ADDR, MCU_REG_COMMAND_PWOFF_MASK );
// return MCU_SetFlags( MCU_REG_COMMAND_ADDR, MCU_REG_COMMAND_PWOFF_MASK );
}
/*---------------------------------------------------------------------------*
Name: MCU_HardwareReset
Description: execute hardware reset routine
Arguments: None
Returns: TRUE if success
*---------------------------------------------------------------------------*/
static inline BOOL MCU_HardwareReset( void )
{
return MCU_WriteRegister( MCU_REG_COMMAND_ADDR, MCU_REG_COMMAND_RESET_MASK );
// return MCU_SetFlags( MCU_REG_COMMAND_ADDR, MCU_REG_COMMAND_RESET_MASK );
}
/*---------------------------------------------------------------------------*
Name: MCU_GoDsMode
Description: set system mode to MCU_SYSTEMMODE_NITRO in MCU.
Arguments: None
Returns: TRUE if success
*---------------------------------------------------------------------------*/
static inline BOOL MCU_GoDsMode( void )
{
return MCU_WriteRegister( MCU_REG_MODE_ADDR, MCU_SYSTEMMODE_NITRO );
// return MCU_SetParams( MCU_REG_MODE_ADDR, MCU_SYSTEMMODE_NITRO, MCU_REG_MODE_SYSTEM_MASK );
}
/*---------------------------------------------------------------------------*
Name: MCU_GoTwlMode
Description: set system mode to MCU_SYSTEMMODE_TWL in MCU.
Arguments: None
Returns: TRUE if success
*---------------------------------------------------------------------------*/
static inline BOOL MCU_GoTwlMode( void )
{
return MCU_WriteRegister( MCU_REG_MODE_ADDR, MCU_SYSTEMMODE_TWL );
// return MCU_SetParams( MCU_REG_MODE_ADDR, MCU_SYSTEMMODE_TWL, MCU_REG_MODE_SYSTEM_MASK );
}
/*---------------------------------------------------------------------------*
Name: MCU_IsExternalDC
Description: check external DC ( AC adapter ) is plugged.
NOTE: it's not meaning that power is supplied or not.
Arguments: None
Returns: TRUE if plugged.
*---------------------------------------------------------------------------*/
static inline BOOL MCU_IsExternalDC( void )
{
u8 data = MCU_ReadRegister( MCU_REG_POWER_INFO_ADDR );
return (BOOL)( (data & MCU_REG_POWER_INFO_EXTDC_MASK) >> MCU_REG_POWER_INFO_EXTDC_SHIFT );
}
/*---------------------------------------------------------------------------*
Name: MCU_IsExtesionMode
Description: check extension mode is available.
Arguments: None
Returns: TRUE if extension mode is available.
*---------------------------------------------------------------------------*/
static inline BOOL MCU_IsExtesionMode( void )
{
u8 data = MCU_ReadRegister( MCU_REG_POWER_MODE_ADDR );
return (BOOL)( (data & MCU_REG_POWER_MODE_EXT_MASK) >> MCU_REG_POWER_MODE_EXT_SHIFT );
}
/*---------------------------------------------------------------------------*
Name: MCU_SetExtesionMode
Description: enable/disable extension mode.
Arguments: enabled enable/dislabe
Returns: TRUE if success
*---------------------------------------------------------------------------*/
static inline BOOL MCU_SetExtesionMode( BOOL enabled )
{
return MCU_WriteRegister( MCU_REG_POWER_MODE_ADDR, (u8)(enabled ? MCU_REG_POWER_MODE_EXT_MASK : 0) );
// return MCU_SetParams( MCU_REG_POWER_MODE_ADDR, (u8)(enabled ? MCU_REG_POWER_MODE_EXT_MASK : 0), MCU_REG_POWER_MODE_EXT_MASK );
}
/*---------------------------------------------------------------------------*
Name: MCU_GetBatteryLevel
Description: get battery level
Arguments: None
Returns: battery level
0(Empty) -0 % Red (blink)
1(Low) 0-5 % Red (blink)
3 1-12 % Red
7 10-25 % Blue
11 20-50 % Blue
15 40-100 % Blue
*---------------------------------------------------------------------------*/
static inline u8 MCU_GetBatteryLevel( void )
{
u8 data = MCU_ReadRegister( MCU_REG_POWER_INFO_ADDR );
return (u8)( (data & MCU_REG_POWER_INFO_LEVEL_MASK) >> MCU_REG_POWER_INFO_LEVEL_SHIFT );
}
/*---------------------------------------------------------------------------*
Name: MCU_GetWifiLedStatus
Description: get wifi LED status
Arguments: None
Returns: TRUE is on
*---------------------------------------------------------------------------*/
static inline BOOL MCU_GetWifiLedStatus( void )
{
u8 data = MCU_ReadRegister( MCU_REG_WIFI_ADDR );
return (BOOL)( ( data & MCU_REG_WIFI_LED_MASK ) >> MCU_REG_WIFI_LED_SHIFT );
}
/*---------------------------------------------------------------------------*
Name: MCU_SetWifiLedStatus
Description: set wifi LED status
Arguments: enabled TRUE if enabled
Returns: TRUE if success
*---------------------------------------------------------------------------*/
static inline BOOL MCU_SetWifiLedStatus( BOOL enabled )
{
return MCU_SetParams( MCU_REG_WIFI_ADDR, (u8)(enabled ? MCU_REG_WIFI_LED_MASK : 0), MCU_REG_WIFI_LED_MASK );
}
/*---------------------------------------------------------------------------*
Name: MCU_GetWifiStatus
Description: whether wifi is enabled
Arguments: None
Returns: TRUE means enabled, otherwise in hardware reset
*---------------------------------------------------------------------------*/
static inline BOOL MCU_GetWifiStatus( void )
{
u8 data = MCU_ReadRegister( MCU_REG_WIFI_ADDR );
return (BOOL)( ( data & MCU_REG_WIFI_NRESET_MASK ) >> MCU_REG_WIFI_NRESET_SHIFT );
}
/*---------------------------------------------------------------------------*
Name: MCU_SetWifiStatus
Description: set wifi to be enabled/disabled
Arguments: enabled TRUE if set enabled
Returns: TRUE if success
*---------------------------------------------------------------------------*/
static inline BOOL MCU_SetWifiStatus( BOOL enabled )
{
return MCU_SetParams( MCU_REG_WIFI_ADDR, (u8)( enabled ? MCU_REG_WIFI_NRESET_MASK : 0), MCU_REG_WIFI_NRESET_MASK );
}
/*---------------------------------------------------------------------------*
Name: MCU_GetCameraLedStatus
Description: get camera LED status
Arguments: None
Returns: one of MCUCameraLed
*---------------------------------------------------------------------------*/
static inline MCUCameraLed MCU_GetCameraLedStatus( void )
{
u8 data = MCU_ReadRegister( MCU_REG_CAMERA_ADDR );
return (MCUCameraLed)( ( data & MCU_REG_CAMERA_LED_MASK ) >> MCU_REG_CAMERA_LED_SHIFT );
}
/*---------------------------------------------------------------------------*
Name: MCU_SetCameraLedStatus
Description: set camera LED status
Arguments: led one of MCUCameraLed
Returns: TRUE if success
*---------------------------------------------------------------------------*/
static inline BOOL MCU_SetCameraLedStatus( MCUCameraLed led )
{
return MCU_WriteRegister( MCU_REG_CAMERA_ADDR, led );
// return MCU_SetParams( MCU_REG_CAMERA_ADDR, led, MCU_REG_CAMERA_LED_MASK );
}
/*---------------------------------------------------------------------------*
Name: MCU_GetGpioDirection
Description: get GPIO direction
Arguments: pin pin number (only 0 is suppined)
Returns: one of MCUGpioDir
*---------------------------------------------------------------------------*/
static inline MCUGpioDir MCU_GetGpioDirection( u8 pin )
{
u8 data = MCU_ReadRegister( MCU_REG_GPIO_DIR_ADDR );
SDK_ASSERT( pin == 0 );
return (MCUGpioDir)( ( data >> pin ) & 1 );
}
/*---------------------------------------------------------------------------*
Name: MCU_SetGpioDirection
Description: set GPIO direction
Arguments: pin pin number (only 0 is suppined)
dir one of MCUGpioDir
Returns: TRUE if success
*---------------------------------------------------------------------------*/
static inline BOOL MCU_SetGpioDirection( u8 pin, MCUGpioDir dir )
{
SDK_ASSERT( pin == 0 );
return MCU_SetParams( MCU_REG_GPIO_DIR_ADDR, (u8)( dir << pin ), (u8)( 1 << pin ) );
}
/*---------------------------------------------------------------------------*
Name: MCU_GetGpioData
Description: get GPIO data
Arguments: pin pin number (only 0 is suppined)
Returns: 1 bit data
*---------------------------------------------------------------------------*/
static inline BOOL MCU_GetGpioData( u8 pin )
{
u8 data = MCU_ReadRegister( MCU_REG_GPIO_DATA_ADDR );
SDK_ASSERT( pin == 0 );
return (BOOL)( ( data >> pin ) & 1 );
}
/*---------------------------------------------------------------------------*
Name: MCU_SetGpioData
Description: set GPIO data
Arguments: pin pin number (only 0 is suppined)
data 0(FALSE) or 1(TRUE)
Returns: TRUE if success
*---------------------------------------------------------------------------*/
static inline BOOL MCU_SetGpioData( u8 pin, BOOL data )
{
SDK_ASSERT( pin == 0 );
return MCU_SetParams( MCU_REG_GPIO_DATA_ADDR, (u8)( (data & 1) << pin ), (u8)( 1 << pin ) );
}
/*---------------------------------------------------------------------------*
Name: MCU_GetVolume
Description: get current volume.
Arguments: None
Returns: volume (0-31)
*---------------------------------------------------------------------------*/
static inline u8 MCU_GetVolume( void )
{
u8 data = MCU_ReadRegister( MCU_REG_VOLUME_ADDR );
return (u8)( ( data & MCU_REG_VOLUME_VOLUME_MASK ) >> MCU_REG_VOLUME_VOLUME_SHIFT );
}
/*---------------------------------------------------------------------------*
Name: MCU_SetVolume
Description: set current volume.
Arguments: volume volume (0-31)
Returns: TRUE if success
*---------------------------------------------------------------------------*/
static inline BOOL MCU_SetVolume( u8 volume )
{
if ( volume <= MCU_VOLUME_MAX )
{
return MCU_WriteRegister( MCU_REG_VOLUME_ADDR, (u8)( volume << MCU_REG_VOLUME_VOLUME_SHIFT ) );
// return MCU_SetParams( MCU_REG_VOLUME_ADDR, (u8)( volume << MCU_REG_VOLUME_VOLUME_SHIFT ), MCU_REG_VOLUME_VOLUME_MASK );
}
return FALSE; // invalid parameters
}
/*---------------------------------------------------------------------------*
Name: MCU_GetBackLightBrightness
Description: get current back light brightness.
Arguments: None
Returns: brightness (0-MCU_BL_BRIGHTNESS_MAX)
*---------------------------------------------------------------------------*/
static inline u8 MCU_GetBackLightBrightness( void )
{
u8 data = MCU_ReadRegister( MCU_REG_BL_ADDR );
return (u8)( ( data & MCU_REG_BL_BRIGHTNESS_MASK ) >> MCU_REG_BL_BRIGHTNESS_SHIFT );
}
/*---------------------------------------------------------------------------*
Name: MCU_SetBackLightBrightness
Description: set current back light brightness.
Arguments: brightness back light brightness (0-MCU_BL_BRIGHTNESS_MAX)
Returns: TRUE if success
*---------------------------------------------------------------------------*/
static inline BOOL MCU_SetBackLightBrightness( u8 brightness )
{
if ( brightness <= MCU_BL_BRIGHTNESS_MAX )
{
return MCU_WriteRegister( MCU_REG_BL_ADDR, (u8)( brightness << MCU_REG_BL_BRIGHTNESS_SHIFT ) );
// return MCU_SetParams( MCU_REG_BL_ADDR, (u8)( brightness << MCU_REG_BL_BRIGHTNESS_SHIFT ), MCU_REG_BL_BRIGHTNESS_MASK );
}
return FALSE; // invalid parameter
}
/*---------------------------------------------------------------------------*
Name: MCU_GetFreeRegister
Description: get free register.
Arguments: number register number (0-7)
Returns: data
*---------------------------------------------------------------------------*/
static inline u8 MCU_GetFreeRegister( u8 number )
{
if ( number <= MCU_FREE_REG_NUMBER_MAX )
{
#if SDK_TS_VERSION <= 200
u8 data = MCU_ReadRegister( (u8)( MCU_OLD_REG_TEMP_ADDR + number ) );
if ( data == 0x5a )
{
return MCU_ReadRegister( (u8)( MCU_REG_TEMP_ADDR + number ) );
}
return data;
#else
return MCU_ReadRegister( (u8)( MCU_REG_TEMP_ADDR + number ) );
#endif
}
return 0x00; // invalid parameter
}
/*---------------------------------------------------------------------------*
Name: MCU_SetFreeRegister
Description: set free register.
Arguments: number register number (0-7)
data buffer to store data
Returns: TRUE if success
*---------------------------------------------------------------------------*/
static inline BOOL MCU_SetFreeRegister( u8 number, u8 value )
{
if ( number <= MCU_FREE_REG_NUMBER_MAX )
{
#if SDK_TS_VERSION <= 200
BOOL result = MCU_WriteRegister( (u8)( MCU_OLD_REG_TEMP_ADDR + number ), value );
return MCU_WriteRegister( (u8)( MCU_REG_TEMP_ADDR + number ), value ) & result;
#else
return MCU_WriteRegister( (u8)( MCU_REG_TEMP_ADDR + number ), value );
#endif
}
return FALSE; // invalid parameter
}
/*
使API (TODO: ARM9から呼び出せる必要あり)
*/
/*---------------------------------------------------------------------------*
Name: MCU_StartBatteryCalibration
Description: execute battery calibration ( un-official command )
Arguments: None
Returns: TRUE if success
*---------------------------------------------------------------------------*/
static inline BOOL MCU_StartBatteryCalibration( void )
{
return MCU_WriteRegister( MCU_REG_BATT_CALIB_ADDR, MCU_REG_BATT_CALIB_MODE_MASK );
// return MCU_SetFlags( MCU_REG_BATT_CALIB_ADDR, MCU_REG_BATT_CALIB_MODE_MASK );
}
/*---------------------------------------------------------------------------*
Name: MCU_GetBatteryCalibrationStatus
Description: whether battery calibration was done ( un-official command )
Arguments: None
Returns: 1 if done, 2 or 3 if error
*---------------------------------------------------------------------------*/
static inline u8 MCU_IsBatteryCalibrationDone( void )
{
return MCU_ReadRegister( MCU_REG_CALIB_STATUS_ADDR );
}
/*
API
*/
/*---------------------------------------------------------------------------*
Name: MCU_SetPowerSwitchThreshould
Description: set reset/no sense threshould time ( temporary command )
Arguments: ticks time parameter
Returns: TRUE if success
*---------------------------------------------------------------------------*/
static inline BOOL MCU_SetPowerSwitchThreshould( u8 ticks )
{
return MCU_WriteRegister( MCU_REG_RESET_TIME_ADDR, (u8)(ticks << MCU_REG_RESET_TIME_VALUE_SHIFT) );
// return MCU_SetParams( MCU_REG_RESET_TIME_ADDR, (u8)(ticks << MCU_REG_RESET_TIME_VALUE_SHIFT), MCU_REG_RESET_TIME_VALUE_MASK );
}
/*---------------------------------------------------------------------------*
Name: MCU_SetPowerOffThreshould
Description: set reset/power off threshould time ( temporary command )
Arguments: ticks time parameter
Returns: TRUE if success
*---------------------------------------------------------------------------*/
static inline BOOL MCU_SetPowerOffThreshould( u8 ticks )
{
return MCU_WriteRegister( MCU_REG_PWOFF_TIME_ADDR, (u8)(ticks << MCU_REG_PWOFF_TIME_VALUE_SHIFT) );
// return MCU_SetParams( MCU_REG_PWOFF_TIME_ADDR, (u8)(ticks << MCU_REG_PWOFF_TIME_VALUE_SHIFT), MCU_REG_PWOFF_TIME_VALUE_MASK );
}
/*---------------------------------------------------------------------------*
Name: MCU_MilliSecondsToThreshouldTicks
Description: calculate threshould value from msec
Arguments: msec msec value
Returns: threshould ticks
*---------------------------------------------------------------------------*/
static inline u8 MCU_MilliSecondsToThreshouldTicks( u32 msec )
{
SDK_ASSERT( msec > 20 );
return (u8)((msec - 20) / 5);
}
#endif // SDK_ARM7
#ifdef _cplusplus
} /* extern "C" */
#endif
#endif /* TWL_MCU_CONTROL_H_ */

View File

@ -1,5 +1,5 @@
/*---------------------------------------------------------------------------*
Project: TwlSDK - libraries - mcu
Project: TwlSDK - mcu - include
File: i2c.h
Copyright 2007 Nintendo. All rights reserved.
@ -10,13 +10,15 @@
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Log: $
$NoKeywords: $
$Date:: $
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef TWL_MCU_I2C_COMMON_H_
#define TWL_MCU_I2C_COMMON_H_
#ifndef TWL_MCU_I2C_H_
#define TWL_MCU_I2C_H_
#ifdef SDK_ARM7
#include <twl/types.h>
#include <twl/i2c/ARM7/i2c.h>
#ifdef _cplusplus
@ -63,46 +65,6 @@ static inline u8 MCU_ReadRegister( u8 reg )
return I2C_ReadRegister( I2C_SLAVE_MICRO_CONTROLLER, reg );
}
/*---------------------------------------------------------------------------*
Name: MCUi_WriteRegisters
Description: set value to decive registers through I2C.
Arguments: reg : decive register
bufp : data array to be written
size : data size
Returns: None
*---------------------------------------------------------------------------*/
static inline BOOL MCUi_WriteRegisters( u8 reg, const u8 *bufp, size_t size )
{
return I2Ci_WriteRegisters( I2C_SLAVE_MICRO_CONTROLLER, reg, bufp, size );
}
static inline BOOL MCU_WriteRegisters( u8 reg, const u8 *bufp, size_t size )
{
return I2C_WriteRegisters( I2C_SLAVE_MICRO_CONTROLLER, reg, bufp, size );
}
/*---------------------------------------------------------------------------*
Name: MCUi_ReadRegisters
Description: get value from decive registers through I2C.
Arguments: reg : decive register
bufp : data array to be read
size : data size
Returns: value which is read from specified decive register
*---------------------------------------------------------------------------*/
static inline BOOL MCUi_ReadRegisters( u8 reg, u8 *bufp, size_t size )
{
return I2Ci_ReadRegisters( I2C_SLAVE_MICRO_CONTROLLER, reg, bufp, size );
}
static inline BOOL MCU_ReadRegisters( u8 reg, u8 *bufp, size_t size )
{
return I2C_ReadRegisters( I2C_SLAVE_MICRO_CONTROLLER, reg, bufp, size );
}
//================================================================================
// I2C BIT CONTROL
//================================================================================
@ -119,11 +81,20 @@ static inline BOOL MCU_ReadRegisters( u8 reg, u8 *bufp, size_t size )
*---------------------------------------------------------------------------*/
static inline BOOL MCUi_SetParams( u8 reg, u8 setBits, u8 maskBits )
{
return I2Ci_SetParams( I2C_SLAVE_MICRO_CONTROLLER, reg, setBits, maskBits );
u8 tmp;
tmp = MCU_ReadRegister( reg );
tmp &= ~maskBits;
setBits &= maskBits;
tmp |= setBits;
return MCU_WriteRegister( reg, tmp );
}
static inline BOOL MCU_SetParams( u8 reg, u8 setBits, u8 maskBits )
{
return I2C_SetParams( I2C_SLAVE_MICRO_CONTROLLER, reg, setBits, maskBits );
BOOL result;
(void)I2C_Lock();
result = MCUi_SetParams( reg, setBits, maskBits );
(void)I2C_Unlock();
return result;
}
/*---------------------------------------------------------------------------*
@ -168,5 +139,7 @@ static inline BOOL MCU_ClearFlags( u8 reg, u8 clrBits )
} /* extern "C" */
#endif
/* TWL_MCU_I2C_COMMON_H_ */
#endif // SDK_ARM7
/* TWL_MCU_I2C_H_ */
#endif

172
include/twl/mcu/ARM7/intr.h Normal file
View File

@ -0,0 +1,172 @@
/*---------------------------------------------------------------------------*
Project: TwlSDK - mcu - include
File: intr.h
Copyright 2007 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date:: 2008-02-15#$
$Rev: 4187 $
$Author: yutaka $
*---------------------------------------------------------------------------*/
#ifndef TWL_MCU_INTR_H_
#define TWL_MCU_INTR_H_
#include <twl/types.h>
#include <twl/mcu/ARM7/mcu_reg.h>
/*
CPU割り込み
*/
#define MCU_IE OS_IE_GPIO33_2
/*
MCU割り込みビット数
*/
#define MCU_IRQ_TABLE_MAX 8
/*
MCU割り込み種別
*/
// 外部DCプラグの挿抜が発生した (アプリケーションユーティリティ)
//#define MCU_IE_EXTERNAL_DC_TRIGGER MCU_REG_IRQ_EXTDC_MASK
// バッテリ切れ最終予告水域になった (アプリケーションユーティリティ)
#define MCU_IE_BATTERY_LOW_TRIGGER MCU_REG_IRQ_BATTLOW_MASK
// バッテリ切れ水域になった (電源OFFと同様の処理開始)
#define MCU_IE_BATTERY_EMPTY_TRIGGER MCU_REG_IRQ_BATTEMP_MASK
// 電源ボタンが不感時間を超えて押された (リセット/電源OFFのどちらかの発生が確定)
#define MCU_IE_POWER_SWITCH_PRESSED MCU_REG_IRQ_PWSW_MASK
// 電源ボタンによる電源OFF指示
#define MCU_IE_POWER_OFF_REQUEST MCU_REG_IRQ_PWOFF_MASK
// 電源ボタンによるリセット指示
#define MCU_IE_RESET_REQUEST MCU_REG_IRQ_RESET_MASK
/*
*/
#define MCU_BLOCK OS_MESSAGE_BLOCK
#define MCU_NOBLOCK OS_MESSAGE_NOBLOCK
#ifdef _cplusplus
extern "C" {
#endif
/*
*/
typedef void (*MCUIrqFunction)(void);
/*
*/
typedef enum MCUPwswStatus
{
MCU_PWSW_UNKNOWN, // 押されていない
MCU_PWSW_IN_PROGRESS, // 押しているが未確定
MCU_PWSW_RESET, // リセットと確定した
MCU_PWSW_POWER_OFF, // 電源OFFと確定した
MCU_PWSW_MAX
}
MCUPwswStatus;
/*---------------------------------------------------------------------------*
Name: MCU_InitIrq
Description: MCUの割り込みを利用可能とする
Arguments: priority ()
Returns: None.
*---------------------------------------------------------------------------*/
void MCU_InitIrq(u32 priority);
/*---------------------------------------------------------------------------*
Name: MCU_SetIrqFunction
Description: MCU割り込みハンドラの登録
Arguments: intrBit MCU割り込み要因
function
Returns: None
*---------------------------------------------------------------------------*/
void MCU_SetIrqFunction(u8 intrBit, MCUIrqFunction function);
/*---------------------------------------------------------------------------*
Name: MCU_GetIrqFunction
Description: MCU割り込みハンドラの取得
Arguments: intrBit MCU割り込み要因
Returns:
*---------------------------------------------------------------------------*/
MCUIrqFunction MCU_GetIrqFunction(u8 intrBit);
/*---------------------------------------------------------------------------*
Name: MCU_CallIrqFunction
Description:
PwswStatusは更新しません
Arguments: intrBit
MCU割り込み要因のビットOR
Returns: None
*---------------------------------------------------------------------------*/
void MCU_CallIrqFunction(u8 intrBit);
/*---------------------------------------------------------------------------*
Name: MCU_CheckIrq
Description: MCUの割り込みが発生していないか確認する
MCU_REG_IRQ_ADDRを直接Readする代わりにこれを使用してください
MCU_CallIrqFunction()
Arguments: callHandler
Returns: MCU_IE_*OR
*---------------------------------------------------------------------------*/
u8 MCU_CheckIrq(BOOL callHandler);
/*---------------------------------------------------------------------------*
Name: MCU_GetPwswStatus
Description: MCUの電源ボタンの状態を取得する
IN_PROGRESSであればRESETまたはPOWER_OFFに
OS_Sleep(1)
Arguments: block
MCU_BLOCK:
MCU_NOBLOCK:
Returns: one of MCUPwswStatus
*---------------------------------------------------------------------------*/
MCUPwswStatus MCU_GetPwswStatus(s32 block);
#if 0
/*---------------------------------------------------------------------------*
Name: MCU_ResetPwswStatus
Description: MCUの電源ボタンの状態をクリアする ()
MCU_PWSW_IN_PROGRESSの場合は無視される
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void MCU_ResetPwswStatus(void);
#endif
#ifdef _cplusplus
} /* extern "C" */
#endif
#endif // TWL_MCU_INTR_H_

View File

@ -17,76 +17,182 @@
#ifndef TWL_MCU_MCU_REG_H_
#define TWL_MCU_MCU_REG_H_
#define MCU_REG_INFO_ADDR 0x00
#define MCU_REG_IRQ_ADDR 0x01
#define MCU_REG_MODE_ADDR 0x02
#define MCU_REG_VER_INFO_ADDR 0x00
#define MCU_REG_PMIC_INFO_ADDR 0x01
#define MCU_REG_BATT_INFO_ADDR 0x02
#define MCU_REG_WIFILED_ADDR 0x10
#define MCU_REG_CAMLED_ADDR 0x11
#define MCU_REG_CARDLED_1_ADDR 0x12
#define MCU_REG_CARDLED_2_ADDR 0x13
#define MCU_REG_IRQ_ADDR 0x10
#define MCU_REG_COMMAND_ADDR 0x11
#define MCU_REG_MODE_ADDR 0x12
#define MCU_REG_TEMP_ADDR 0x18
#define MCU_REG_TEMP_LAST_ADDR 0x1f
#define MCU_REG_POWER_INFO_ADDR 0x20
#define MCU_REG_POWER_MODE_ADDR 0x21
#define MCU_REG_VOLUME_ADDR 0x20
#define MCU_REG_WIFI_ADDR 0x30
#define MCU_REG_CAMERA_ADDR 0x31
#define MCU_REG_GPIO_DIR_ADDR 0x32
#define MCU_REG_GPIO_DATA_ADDR 0x33
/* MCU_REG_INFO */
#define MCU_REG_VOLUME_ADDR 0x40
#define MCU_REG_BL_ADDR 0x41
#define MCU_REG_INFO_VERSION_SHIFT 4
#define MCU_REG_INFO_VERSION_SIZE 4
#define MCU_REG_INFO_VERSION_MASK 0xf0
#define MCU_REG_BATT_CALIB_ADDR 0x60
#define MCU_REG_CALIB_STATUS_ADDR 0x61
#define MCU_REG_INFO_REVISION_SHIFT 0
#define MCU_REG_INFO_REVISION_SIZE 4
#define MCU_REG_INFO_REVISION_MASK 0x0f
#define MCU_REG_TEMP_ADDR 0x70
#define MCU_REG_TEMP_LAST_ADDR 0x77
#define MCU_REG_RESET_TIME_ADDR 0x80 // temporary
#define MCU_REG_PWOFF_TIME_ADDR 0x81 // temporary
/* MCU_REG_VER_INFO */
#define MCU_REG_VER_INFO_VERSION_SHIFT 4
#define MCU_REG_VER_INFO_VERSION_SIZE 4
#define MCU_REG_VER_INFO_VERSION_MASK 0xf0
#define MCU_REG_VER_INFO_REVISION_SHIFT 0
#define MCU_REG_VER_INFO_REVISION_SIZE 4
#define MCU_REG_VER_INFO_REVISION_MASK 0x0f
/* MCU_REG_PMIC_INFO */
#define MCU_REG_PMIC_INFO_MAKER_SHIFT 4
#define MCU_REG_PMIC_INFO_MAKER_SIZE 3
#define MCU_REG_PMIC_INFO_MAKER_MASK 0x70
#define MCU_REG_PMIC_INFO_VERSION_SHIFT 0
#define MCU_REG_PMIC_INFO_VERSION_SIZE 2
#define MCU_REG_PMIC_INFO_VERSION_MASK 0x03
/* MCU_REG_BATT_INFO */
#define MCU_REG_BATT_INFO_MAKER_SHIFT 4
#define MCU_REG_BATT_INFO_MAKER_SIZE 3
#define MCU_REG_BATT_INFO_MAKER_MASK 0x70
/* MCU_REG_IRQ */
#define MCU_REG_IRQ_EXTDC_SHIFT 7 // not worked
#define MCU_REG_IRQ_EXTDC_SIZE 1 // not worked
#define MCU_REG_IRQ_EXTDC_MASK 0x80 // not worked
#define MCU_REG_IRQ_BATTLOW_SHIFT 5
#define MCU_REG_IRQ_BATTLOW_SIZE 1
#define MCU_REG_IRQ_BATTLOW_MASK 0x20
#define MCU_REG_IRQ_BATTEMP_SHIFT 4
#define MCU_REG_IRQ_BATTEMP_SIZE 1
#define MCU_REG_IRQ_BATTEMP_MASK 0x10
#define MCU_REG_IRQ_PWSW_SHIFT 3
#define MCU_REG_IRQ_PWSW_SIZE 1
#define MCU_REG_IRQ_PWSW_MASK 0x08
#define MCU_REG_IRQ_PWOFF_SHIFT 1
#define MCU_REG_IRQ_PWOFF_SIZE 1
#define MCU_REG_IRQ_PWOFF_MASK 0x02
#define MCU_REG_IRQ_RESET_SHIFT 0
#define MCU_REG_IRQ_RESET_SIZE 1
#define MCU_REG_IRQ_RESET_MASK 0x01
/* MCU_REG_COMMAND */
#define MCU_REG_COMMAND_PWOFF_SHIFT 1 // not worked but using to notify to MCU
#define MCU_REG_COMMAND_PWOFF_SIZE 1 // not worked but using to notify to MCU
#define MCU_REG_COMMAND_PWOFF_MASK 0x02 // not worked but using to notify to MCU
#define MCU_REG_COMMAND_RESET_SHIFT 0
#define MCU_REG_COMMAND_RESET_SIZE 1
#define MCU_REG_COMMAND_RESET_MASK 0x01
/* MCU_REG_MODE */
#define MCU_REG_MODE_SYSTEM_SHIFT 0
#define MCU_REG_MODE_SYSTEM_SIZE 2
#define MCU_REG_MODE_SYSTEM_MASK 0x03
/* MCU_REG_WIFILED */
/* MCU_REG_POWER_INFO */
#define MCU_REG_WIFILED_SHIFT 0
#define MCU_REG_WIFILED_SIZE 1
#define MCU_REG_WIFILED_MASK 0x01
#define MCU_REG_POWER_INFO_EXTDC_SHIFT 7
#define MCU_REG_POWER_INFO_EXTDC_SIZE 1
#define MCU_REG_POWER_INFO_EXTDC_MASK 0x80
/* MCU_REG_CAMLED */
#define MCU_REG_POWER_INFO_LEVEL_SHIFT 0
#define MCU_REG_POWER_INFO_LEVEL_SIZE 4
#define MCU_REG_POWER_INFO_LEVEL_MASK 0x0f
#define MCU_REG_CAMLED_PATTERN_SHIFT 4
#define MCU_REG_CAMLED_PATTERN_SIZE 4
#define MCU_REG_CAMLED_PATTERN_MASK 0xf0
/* MCU_REG_POWER_MODE */
#define MCU_REG_CAMLED_PARAM_SHIFT 0
#define MCU_REG_CAMLED_PARAM_SIZE 4
#define MCU_REG_CAMLED_PARAM_MASK 0x0f
#define MCU_REG_POWER_MODE_EXT_SHIFT 0
#define MCU_REG_POWER_MODE_EXT_SIZE 1
#define MCU_REG_POWER_MODE_EXT_MASK 0x01
/* MCU_REG_CARDLED_1, MCU_REG_CARDLED_2 */
/* MCU_REG_WIFI */
#define MCU_REG_CARDLED_SHIFT 0
#define MCU_REG_CARDLED_SIZE 2
#define MCU_REG_CARDLED_MASK 0x03
#define MCU_REG_WIFI_NRESET_SHIFT 4
#define MCU_REG_WIFI_NRESET_SIZE 1
#define MCU_REG_WIFI_NRESET_MASK 0x10
#define MCU_REG_CARDLED_1_SHIFT MCU_REG_CARDLED_SHIFT
#define MCU_REG_CARDLED_1_SIZE MCU_REG_CARDLED_SIZE
#define MCU_REG_CARDLED_1_MASK MCU_REG_CARDLED_MASK
#define MCU_REG_WIFI_LED_SHIFT 0
#define MCU_REG_WIFI_LED_SIZE 1
#define MCU_REG_WIFI_LED_MASK 0x01
#define MCU_REG_CARDLED_2_SHIFT MCU_REG_CARDLED_SHIFT
#define MCU_REG_CARDLED_2_SIZE MCU_REG_CARDLED_SIZE
#define MCU_REG_CARDLED_2_MASK MCU_REG_CARDLED_MASK
/* MCU_REG_CAMERA */
/* MCU_REG_VOL */
#define MCU_REG_CAMERA_LED_SHIFT 0
#define MCU_REG_CAMERA_LED_SIZE 2
#define MCU_REG_CAMERA_LED_MASK 0x03
#define MCU_REG_VOLUME_SHIFT 0
#define MCU_REG_VOLUME_SIZE 5
#define MCU_REG_VOLUME_MASK 0x1f
/* MCU_REG_GPIO_DIR */
#define MCU_REG_GPIO_DIR_PIN0_SHIFT 0
#define MCU_REG_GPIO_DIR_PIN0_SIZE 1
#define MCU_REG_GPIO_DIR_PIN0_MASK 0x01
/* MCU_REG_GPIO_DATA */
#define MCU_REG_GPIO_DATA_PORT0_SHIFT 0
#define MCU_REG_GPIO_DATA_PORT0_SIZE 1
#define MCU_REG_GPIO_DATA_PORT0_MASK 0x01
/* MCU_REG_VOLUME */
#define MCU_REG_VOLUME_VOLUME_SHIFT 0
#define MCU_REG_VOLUME_VOLUME_SIZE 5
#define MCU_REG_VOLUME_VOLUME_MASK 0x1f
/* MCU_REG_BL */
#define MCU_REG_BL_BRIGHTNESS_SHIFT 0
#define MCU_REG_BL_BRIGHTNESS_SIZE 3
#define MCU_REG_BL_BRIGHTNESS_MASK 0x07
/* MCU_REG_BATT_CALIB */
#define MCU_REG_BATT_CALIB_MODE_SHIFT 0
#define MCU_REG_BATT_CALIB_MODE_SIZE 1
#define MCU_REG_BATT_CALIB_MODE_MASK 0x01
/* MCU_REG_CALIB_STATUS */
#define MCU_REG_CALIB_STATUS_STATUS_SHIFT 0
#define MCU_REG_CALIB_STATUS_STATUS_SIZE 2
#define MCU_REG_CALIB_STATUS_STATUS_MASK 0x03
/* MCU_REG_TEMP */
/* MCU_REG_RESET_TIME */
#define MCU_REG_RESET_TIME_VALUE_SHIFT 0
#define MCU_REG_RESET_TIME_VALUE_SIZE 8
#define MCU_REG_RESET_TIME_VALUE_MASK 0xff
/* MCU_REG_PWOFF_TIME */
#define MCU_REG_PWOFF_TIME_VALUE_SHIFT 0
#define MCU_REG_PWOFF_TIME_VALUE_SIZE 8
#define MCU_REG_PWOFF_TIME_VALUE_MASK 0xff
#endif /* TWL_MCU_MCU_REG_H_ */