mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
TS-X2/X3バックライト輝度変更の動的切り替えのためのマイコンスレッド追加。
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@664 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
1f3312d787
commit
7db4bae3db
@ -66,6 +66,7 @@ ifeq ($(CODEGEN_PROC),ARM9)
|
|||||||
SYSMENU_LIBS ?= \
|
SYSMENU_LIBS ?= \
|
||||||
liblcfg$(TWL_LIBSUFFIX).a \
|
liblcfg$(TWL_LIBSUFFIX).a \
|
||||||
libsysmenu$(TWL_LIBSUFFIX).a \
|
libsysmenu$(TWL_LIBSUFFIX).a \
|
||||||
|
libsysmmcu$(TWL_LIBSUFFIX).a \
|
||||||
libmbloader$(TWL_LIBSUFFIX).a \
|
libmbloader$(TWL_LIBSUFFIX).a \
|
||||||
libacsign$(TWL_LIBSUFFIX).a \
|
libacsign$(TWL_LIBSUFFIX).a \
|
||||||
libboot$(TWL_LIBSUFFIX).a \
|
libboot$(TWL_LIBSUFFIX).a \
|
||||||
@ -74,9 +75,10 @@ else # ($(CODEGEN_PROC),ARM7)
|
|||||||
|
|
||||||
SYSMENU_LIBS ?= \
|
SYSMENU_LIBS ?= \
|
||||||
libsysmenu_sp$(TWL_LIBSUFFIX).a \
|
libsysmenu_sp$(TWL_LIBSUFFIX).a \
|
||||||
|
libsysmmcu_sp$(TWL_LIBSUFFIX).a \
|
||||||
libmbloader_sp$(TWL_LIBSUFFIX).a \
|
libmbloader_sp$(TWL_LIBSUFFIX).a \
|
||||||
libboot_sp$(TWL_LIBSUFFIX).a \
|
libboot_sp$(TWL_LIBSUFFIX).a \
|
||||||
libhotsw_sp$(TWL_LIBSUFFIX).a
|
libhotsw_sp$(TWL_LIBSUFFIX).a \
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|||||||
@ -59,7 +59,8 @@ Autoload WRAM
|
|||||||
libreboot_sp$(LIBSUFFIX).a \
|
libreboot_sp$(LIBSUFFIX).a \
|
||||||
libhotsw_sp$(LIBSUFFIX).a \
|
libhotsw_sp$(LIBSUFFIX).a \
|
||||||
libreloc_info_sp$(LIBSUFFIX).a \
|
libreloc_info_sp$(LIBSUFFIX).a \
|
||||||
libsysmenu_sp$(LIBSUFFIX).a
|
libsysmenu_sp$(LIBSUFFIX).a \
|
||||||
|
libsysmmcu_sp$(LIBSUFFIX).a \
|
||||||
|
|
||||||
Library libsdio_sp$(LIBSUFFIX).a
|
Library libsdio_sp$(LIBSUFFIX).a
|
||||||
|
|
||||||
|
|||||||
@ -36,6 +36,7 @@
|
|||||||
#include <twl/mcu.h>
|
#include <twl/mcu.h>
|
||||||
#include <twl/hw/common/mmap_wramEnv.h>
|
#include <twl/hw/common/mmap_wramEnv.h>
|
||||||
#include <sysmenu.h>
|
#include <sysmenu.h>
|
||||||
|
#include <sysmenu/mcu.h>
|
||||||
#include <firm/memorymap.h>
|
#include <firm/memorymap.h>
|
||||||
#include "nvram_sp.h"
|
#include "nvram_sp.h"
|
||||||
#include "pm_pmic.h"
|
#include "pm_pmic.h"
|
||||||
@ -50,6 +51,7 @@
|
|||||||
/* Priorities of each threads */
|
/* Priorities of each threads */
|
||||||
#define THREAD_PRIO_SPI 2
|
#define THREAD_PRIO_SPI 2
|
||||||
#define THREAD_PRIO_MCU 4 // 暫定
|
#define THREAD_PRIO_MCU 4 // 暫定
|
||||||
|
#define THREAD_PRIO_SYSMMCU 6
|
||||||
#define THREAD_PRIO_SND 6
|
#define THREAD_PRIO_SND 6
|
||||||
#define THREAD_PRIO_FATFS 8
|
#define THREAD_PRIO_FATFS 8
|
||||||
#define THREAD_PRIO_RTC 12
|
#define THREAD_PRIO_RTC 12
|
||||||
@ -121,9 +123,6 @@ TwlSpMain(void)
|
|||||||
OS_InitTick();
|
OS_InitTick();
|
||||||
PrintDebugInfo();
|
PrintDebugInfo();
|
||||||
|
|
||||||
// PXIコールバックの設定
|
|
||||||
SYSM_InitPXI();
|
|
||||||
|
|
||||||
// ランチャーパラメター取得(Cold/Hotスタート判定含む)
|
// ランチャーパラメター取得(Cold/Hotスタート判定含む)
|
||||||
ReadLauncherParameter();
|
ReadLauncherParameter();
|
||||||
|
|
||||||
@ -158,6 +157,9 @@ TwlSpMain(void)
|
|||||||
(void)OS_EnableIrq();
|
(void)OS_EnableIrq();
|
||||||
(void)OS_EnableInterrupts();
|
(void)OS_EnableInterrupts();
|
||||||
|
|
||||||
|
// PXIコールバックの設定
|
||||||
|
SYSM_InitPXI(THREAD_PRIO_SYSMMCU);
|
||||||
|
|
||||||
// ファイルシステム初期化
|
// ファイルシステム初期化
|
||||||
FS_Init(FS_DMA_NOT_USE);
|
FS_Init(FS_DMA_NOT_USE);
|
||||||
FS_CreateReadServerThread(THREAD_PRIO_FS);
|
FS_CreateReadServerThread(THREAD_PRIO_FS);
|
||||||
|
|||||||
@ -22,7 +22,7 @@ include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
|
|||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
SUBDIRS_P = reloc_info sysmenu mb_loader acsign boot hotsw namut
|
SUBDIRS_P = reloc_info sysmenu mb_loader acsign boot hotsw namut mcu
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
52
build/libraries_sysmenu/mcu/ARM7/Makefile
Normal file
52
build/libraries_sysmenu/mcu/ARM7/Makefile
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
#! make -f
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# Project: TwlIPL
|
||||||
|
# File: Makefile
|
||||||
|
#
|
||||||
|
# Copyright 2008 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:: #$
|
||||||
|
# $Rev: $
|
||||||
|
# $Author: $
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
SUBDIRS =
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
TARGET_FIRM = SYSTEMMENU
|
||||||
|
TARGET_PLATFORM = TWL
|
||||||
|
TWL_ARCHGEN = LIMITED
|
||||||
|
TWL_PROC = ARM7
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
SRCDIR = ./src
|
||||||
|
|
||||||
|
INCDIR = ./include ../common/include
|
||||||
|
|
||||||
|
SRCS = mcu.c
|
||||||
|
|
||||||
|
TARGET_LIB = libsysmmcu_sp$(TWL_LIBSUFFIX).a
|
||||||
|
|
||||||
|
|
||||||
|
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
|
||||||
|
include $(TWLSDK_ROOT)/build/libraries/reboot/commondefs.reboot
|
||||||
|
|
||||||
|
INSTALL_TARGETS = $(TARGETS)
|
||||||
|
INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR)
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
do-build: $(TARGETS)
|
||||||
|
|
||||||
|
include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules
|
||||||
|
|
||||||
|
|
||||||
|
#===== End of Makefile =====
|
||||||
|
|
||||||
261
build/libraries_sysmenu/mcu/ARM7/src/mcu.c
Normal file
261
build/libraries_sysmenu/mcu/ARM7/src/mcu.c
Normal file
@ -0,0 +1,261 @@
|
|||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Project: TwlIPL
|
||||||
|
File: mcu.c
|
||||||
|
|
||||||
|
Copyright 2008 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-01-25#$
|
||||||
|
$Rev: 3844 $
|
||||||
|
$Author: yutaka $
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
#include <twl.h>
|
||||||
|
#include <sysmenu/mcu.h>
|
||||||
|
|
||||||
|
#include <twl/ltdwram_begin.h>
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
定数定義
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
#define MCUTEST_MESSAGE_ARRAY_MAX 4 // スレッド同期用メッセージキューのサイズ
|
||||||
|
#define MCUTEST_THREAD_STACK_SIZE 512 // スレッドのスタックサイズ
|
||||||
|
|
||||||
|
#define MCUTEST_THREAD_PRIORITY 6
|
||||||
|
|
||||||
|
// アライメント調整してコピーする
|
||||||
|
#define MCU_UNPACK_U16(d, s) \
|
||||||
|
(*(d) = (u16)((((u8*)s)[0] << 0) | (((u8*)s)[1] << 8)))
|
||||||
|
#define MCU_UNPACK_U32(d, s) \
|
||||||
|
(*(d) = (u32)((((u8*)s)[0] << 0) | (((u8*)s)[1] << 8) | (((u8*)s)[2] << 16) | (((u8*)s)[3] << 24)))
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
型定義
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
typedef struct SYSMMcuWork
|
||||||
|
{
|
||||||
|
u32 total;
|
||||||
|
u32 current;
|
||||||
|
SYSMMcuCommand command;
|
||||||
|
u8 data[MCUTEST_PXI_DATA_SIZE_MAX]; // 後続データ格納用
|
||||||
|
|
||||||
|
OSMessageQueue msgQ; // スレッド同期用メッセージキュー
|
||||||
|
OSMessage msgArray[MCUTEST_MESSAGE_ARRAY_MAX];
|
||||||
|
// メッセージを格納するバッファ
|
||||||
|
OSThread thread; // MCU用スレッド
|
||||||
|
u64 stack[MCUTEST_THREAD_STACK_SIZE / sizeof(u64)];
|
||||||
|
// MCU用スレッドのスタック
|
||||||
|
}
|
||||||
|
SYSMMcuWork;
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
静的変数定義
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
static BOOL mcuInitialized;
|
||||||
|
static SYSMMcuWork mcuWork;
|
||||||
|
static u8 mcu_ver;
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
内部関数定義
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
static void SYSM_McuPxiCallback(PXIFifoTag tag, u32 data, BOOL err);
|
||||||
|
static void SYSM_ReturnMcuResult(SYSMMcuCommand command, SYSMMcuPxiResult result);
|
||||||
|
static void SYSM_ReturnMcuResultEx(SYSMMcuCommand command, SYSMMcuPxiResult result, u8 size, u8* data);
|
||||||
|
static void SYSM_McuThread(void *arg);
|
||||||
|
#if 0
|
||||||
|
static void SYSM_McuHandlerExternalDC(void)
|
||||||
|
{
|
||||||
|
OS_TPrintf("MCU_IE_EXTERNAL_DC_TRIGGER\n");
|
||||||
|
SYSM_ReturnMcuResult(MCU_TEST_COMMAND_INTERRUPT, (SYSMMcuPxiResult)MCU_IE_EXTERNAL_DC_TRIGGER);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
static void SYSM_McuHandlerBatteryLow(void)
|
||||||
|
{
|
||||||
|
OS_TPrintf("MCU_IE_BATTERY_LOW_TRIGGER\n");
|
||||||
|
SYSM_ReturnMcuResult(MCU_TEST_COMMAND_INTERRUPT, (SYSMMcuPxiResult)MCU_IE_BATTERY_LOW_TRIGGER);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SYSM_McuHandlerBatteryEmpty(void)
|
||||||
|
{
|
||||||
|
OS_TPrintf("MCU_IE_BATTERY_EMPTY_TRIGGER\n");
|
||||||
|
SYSM_ReturnMcuResult(MCU_TEST_COMMAND_INTERRUPT, (SYSMMcuPxiResult)MCU_IE_BATTERY_EMPTY_TRIGGER);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SYSM_McuHandlerPowerSwitch(void)
|
||||||
|
{
|
||||||
|
OS_TPrintf("MCU_IE_POWER_SWITCH_PRESSED\n");
|
||||||
|
SYSM_ReturnMcuResult(MCU_TEST_COMMAND_INTERRUPT, (SYSMMcuPxiResult)MCU_IE_POWER_SWITCH_PRESSED);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SYSM_McuHandlerPowerOffRequest(void)
|
||||||
|
{
|
||||||
|
OS_TPrintf("MCU_IE_POWER_OFF_REQUEST\n");
|
||||||
|
SYSM_ReturnMcuResult(MCU_TEST_COMMAND_INTERRUPT, (SYSMMcuPxiResult)MCU_IE_POWER_OFF_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SYSM_McuHandlerResetRequest(void)
|
||||||
|
{
|
||||||
|
OS_TPrintf("MCU_IE_RESET_REQUEST\n");
|
||||||
|
SYSM_ReturnMcuResult(MCU_TEST_COMMAND_INTERRUPT, (SYSMMcuPxiResult)MCU_IE_RESET_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef SDK_SUPPORT_PMIC_2
|
||||||
|
// マイコンバージョン取得
|
||||||
|
u8 SYSMi_GetMcuVersion( void )
|
||||||
|
{
|
||||||
|
return (u8)(mcu_ver >> MCU_REG_VER_INFO_VERSION_SHIFT);
|
||||||
|
}
|
||||||
|
#endif // SDK_SUPPORT_PMIC_2
|
||||||
|
|
||||||
|
// 初期化
|
||||||
|
void SYSM_InitMcuPxi( u32 prio )
|
||||||
|
{
|
||||||
|
if (mcuInitialized)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mcuInitialized = TRUE;
|
||||||
|
|
||||||
|
OS_InitMessageQueue(&mcuWork.msgQ, mcuWork.msgArray, MCUTEST_MESSAGE_ARRAY_MAX);
|
||||||
|
OS_CreateThread(&mcuWork.thread, SYSM_McuThread, 0,
|
||||||
|
(void *)(mcuWork.stack + (MCUTEST_THREAD_STACK_SIZE / sizeof(u64))),
|
||||||
|
MCUTEST_THREAD_STACK_SIZE, prio);
|
||||||
|
OS_WakeupThreadDirect(&mcuWork.thread);
|
||||||
|
|
||||||
|
PXI_Init();
|
||||||
|
PXI_SetFifoRecvCallback(PXI_FIFO_TAG_MCUTEST, SYSM_McuPxiCallback);
|
||||||
|
|
||||||
|
#ifdef SDK_SUPPORT_PMIC_2
|
||||||
|
// マイコンバージョン取得
|
||||||
|
mcu_ver = (u8)(MCU_ReadRegister( MCU_REG_VER_INFO_ADDR ));
|
||||||
|
#endif // SDK_SUPPORT_PMIC_2
|
||||||
|
|
||||||
|
#if 0
|
||||||
|
#if 0
|
||||||
|
MCU_SetIrqFunction(MCU_IE_EXTERNAL_DC_TRIGGER, McuHandlerExternalDC);
|
||||||
|
#endif
|
||||||
|
MCU_SetIrqFunction(MCU_IE_BATTERY_LOW_TRIGGER, McuHandlerBatteryLow);
|
||||||
|
MCU_SetIrqFunction(MCU_IE_BATTERY_EMPTY_TRIGGER, McuHandlerBatteryEmpty);
|
||||||
|
MCU_SetIrqFunction(MCU_IE_POWER_SWITCH_PRESSED, McuHandlerPowerSwitch);
|
||||||
|
MCU_SetIrqFunction(MCU_IE_POWER_OFF_REQUEST, McuHandlerPowerOffRequest);
|
||||||
|
MCU_SetIrqFunction(MCU_IE_RESET_REQUEST, McuHandlerResetRequest);
|
||||||
|
|
||||||
|
{
|
||||||
|
OSTick tick = OS_GetTick();
|
||||||
|
MCU_ReadRegister(0x70);
|
||||||
|
OS_TPrintf("Read: %d usec\n", (u32)OS_TicksToMicroSeconds(OS_GetTick()-tick));
|
||||||
|
tick = OS_GetTick();
|
||||||
|
MCU_WriteRegister(0x70, 0);
|
||||||
|
OS_TPrintf("Write: %d usec\n", (u32)OS_TicksToMicroSeconds(OS_GetTick()-tick));
|
||||||
|
}
|
||||||
|
|
||||||
|
// PMICへの電源ボタン割り込み削除 (あれば)
|
||||||
|
OS_DisableIrqMaskEx(OS_IE_GPIO33_0);
|
||||||
|
// (再)初期化
|
||||||
|
MCU_InitIrq(1);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SYSM_McuPxiCallback(PXIFifoTag tag, u32 data, BOOL err)
|
||||||
|
{
|
||||||
|
#pragma unused( tag )
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (data & MCUTEST_PXI_START_BIT) // 先頭データ
|
||||||
|
{
|
||||||
|
mcuWork.total = (u8)((data & MCUTEST_PXI_DATA_NUMS_MASK) >> MCUTEST_PXI_DATA_NUMS_SHIFT);
|
||||||
|
mcuWork.current = 0;
|
||||||
|
mcuWork.command = (SYSMMcuCommand)((data & MCUTEST_PXI_COMMAND_MASK) >> MCUTEST_PXI_COMMAND_SHIFT);
|
||||||
|
mcuWork.data[mcuWork.current++] = (u8)((data & MCUTEST_PXI_1ST_DATA_MASK) >> MCUTEST_PXI_1ST_DATA_SHIFT);
|
||||||
|
}
|
||||||
|
else if (mcuWork.command) // 後続データ
|
||||||
|
{
|
||||||
|
mcuWork.data[mcuWork.current++] = (u8)((data & 0xFF0000) >> 16);
|
||||||
|
mcuWork.data[mcuWork.current++] = (u8)((data & 0x00FF00) >> 8);
|
||||||
|
mcuWork.data[mcuWork.current++] = (u8)((data & 0x0000FF) >> 0);
|
||||||
|
}
|
||||||
|
if (mcuWork.current >= mcuWork.total)
|
||||||
|
{
|
||||||
|
switch (mcuWork.command)
|
||||||
|
{
|
||||||
|
case MCU_TEST_COMMAND_READ_REGISTER:
|
||||||
|
case MCU_TEST_COMMAND_WRITE_REGISTER:
|
||||||
|
if (!OS_SendMessage(&mcuWork.msgQ, NULL, OS_MESSAGE_NOBLOCK))
|
||||||
|
{
|
||||||
|
SYSM_ReturnMcuResult(mcuWork.command, MCU_PXI_RESULT_FATAL_ERROR);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
SYSM_ReturnMcuResult(mcuWork.command, MCU_PXI_RESULT_INVALID_COMMAND);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SYSM_ReturnMcuResult(SYSMMcuCommand command, SYSMMcuPxiResult result)
|
||||||
|
{
|
||||||
|
u32 pxiData = (u32)(MCUTEST_PXI_START_BIT | MCUTEST_PXI_RESULT_BIT |
|
||||||
|
((command << MCUTEST_PXI_COMMAND_SHIFT) & MCUTEST_PXI_COMMAND_MASK) |
|
||||||
|
((1 << MCUTEST_PXI_DATA_NUMS_SHIFT) & MCUTEST_PXI_DATA_NUMS_MASK) |
|
||||||
|
((result << MCUTEST_PXI_1ST_DATA_SHIFT) & MCUTEST_PXI_1ST_DATA_MASK));
|
||||||
|
while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_MCUTEST, pxiData, 0))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SYSM_ReturnMcuResultEx(SYSMMcuCommand command, SYSMMcuPxiResult result, u8 size, u8* data)
|
||||||
|
{
|
||||||
|
u32 pxiData = (u32)(MCUTEST_PXI_START_BIT | MCUTEST_PXI_RESULT_BIT |
|
||||||
|
((command << MCUTEST_PXI_COMMAND_SHIFT) & MCUTEST_PXI_COMMAND_MASK) |
|
||||||
|
(((size+1) << MCUTEST_PXI_DATA_NUMS_SHIFT) & MCUTEST_PXI_DATA_NUMS_MASK) |
|
||||||
|
((result << MCUTEST_PXI_1ST_DATA_SHIFT) & MCUTEST_PXI_1ST_DATA_MASK));
|
||||||
|
OSIntrMode enabled = OS_DisableInterrupts();
|
||||||
|
int i;
|
||||||
|
while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_MCUTEST, pxiData, 0))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
for (i = 0; i < size; i+= 3)
|
||||||
|
{
|
||||||
|
pxiData = (u32)((data[i] << 16) | (data[i+1] << 8) | data[i+2]);
|
||||||
|
while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_MCUTEST, pxiData, 0))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
OS_RestoreInterrupts(enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SYSM_McuThread(void *arg)
|
||||||
|
{
|
||||||
|
#pragma unused( arg )
|
||||||
|
OSMessage msg;
|
||||||
|
u8 value;
|
||||||
|
|
||||||
|
while (TRUE)
|
||||||
|
{
|
||||||
|
(void)OS_ReceiveMessage(&mcuWork.msgQ, &msg, OS_MESSAGE_BLOCK);
|
||||||
|
switch (mcuWork.command)
|
||||||
|
{
|
||||||
|
case MCU_TEST_COMMAND_READ_REGISTER:
|
||||||
|
value = MCU_ReadRegister(mcuWork.data[0]);
|
||||||
|
SYSM_ReturnMcuResultEx(mcuWork.command, MCU_PXI_RESULT_SUCCESS, 1, &value);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case MCU_TEST_COMMAND_WRITE_REGISTER:
|
||||||
|
value = (u8)MCU_WriteRegister(mcuWork.data[0], mcuWork.data[1]);
|
||||||
|
SYSM_ReturnMcuResult(mcuWork.command, value ? MCU_PXI_RESULT_SUCCESS : MCU_PXI_RESULT_ILLEGAL_STATUS);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
SYSM_ReturnMcuResult(mcuWork.command, MCU_PXI_RESULT_INVALID_COMMAND);
|
||||||
|
}
|
||||||
|
mcuWork.command = MCU_TEST_COMMAND_NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <twl/ltdwram_end.h>
|
||||||
52
build/libraries_sysmenu/mcu/ARM9/Makefile
Normal file
52
build/libraries_sysmenu/mcu/ARM9/Makefile
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
#! make -f
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# Project: TwlIPL
|
||||||
|
# File: Makefile
|
||||||
|
#
|
||||||
|
# Copyright 2008 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-07#$
|
||||||
|
# $Rev: 612 $
|
||||||
|
# $Author: yutaka $
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
SUBDIRS =
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
TARGET_FIRM = SYSTEMMENU
|
||||||
|
TARGET_PLATFORM = TWL
|
||||||
|
TWL_ARCHGEN = LIMITED
|
||||||
|
TWL_PROC = ARM9
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
SRCDIR = ./src
|
||||||
|
|
||||||
|
INCDIR = ./include ../common/include
|
||||||
|
|
||||||
|
SRCS = mcu.c
|
||||||
|
|
||||||
|
TARGET_LIB = libsysmmcu$(TWL_LIBSUFFIX).a
|
||||||
|
|
||||||
|
|
||||||
|
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
|
||||||
|
include $(TWLSDK_ROOT)/build/libraries/reboot/commondefs.reboot
|
||||||
|
|
||||||
|
INSTALL_TARGETS = $(TARGETS)
|
||||||
|
INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR)
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
do-build: $(TARGETS)
|
||||||
|
|
||||||
|
include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules
|
||||||
|
|
||||||
|
|
||||||
|
#===== End of Makefile =====
|
||||||
|
|
||||||
311
build/libraries_sysmenu/mcu/ARM9/src/mcu.c
Normal file
311
build/libraries_sysmenu/mcu/ARM9/src/mcu.c
Normal file
@ -0,0 +1,311 @@
|
|||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Project: TwlIPL
|
||||||
|
File: mcu.c
|
||||||
|
|
||||||
|
Copyright 2008 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-01-29#$
|
||||||
|
$Rev: 3905 $
|
||||||
|
$Author: yutaka $
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
#include <twl.h>
|
||||||
|
#include <sysmenu/mcu.h>
|
||||||
|
|
||||||
|
#define DMA_WILL_STOP // MCU_GetMaxLinesRoundならdefine、MCU_GET_MAX_LINESならundef
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
定数定義
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
// 詰めてコピーする
|
||||||
|
#define MCU_PACK_U16(d, s) \
|
||||||
|
((d)[0] = (u8)((*((u16*)s) >> 0) & 0xFF), \
|
||||||
|
(d)[1] = (u8)((*((u16*)s) >> 8) & 0xFF))
|
||||||
|
|
||||||
|
#define MCU_PACK_U32(d, s) \
|
||||||
|
((d)[0] = (u8)((*((u32*)s) >> 0) & 0xFF), \
|
||||||
|
(d)[1] = (u8)((*((u32*)s) >> 8) & 0xFF), \
|
||||||
|
(d)[2] = (u8)((*((u32*)s) >> 16) & 0xFF), \
|
||||||
|
(d)[3] = (u8)((*((u32*)s) >> 24) & 0xFF))
|
||||||
|
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
型定義
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
typedef struct SYSMMcuWork
|
||||||
|
{
|
||||||
|
BOOL lock;
|
||||||
|
|
||||||
|
SYSMMcuCommand command;
|
||||||
|
SYSMMcuPxiResult result;
|
||||||
|
SYSMMcuCallback callback;
|
||||||
|
SYSMMcuCallback handler;
|
||||||
|
void* arg;
|
||||||
|
|
||||||
|
u32 total;
|
||||||
|
u32 current;
|
||||||
|
u8* data;
|
||||||
|
}
|
||||||
|
SYSMMcuWork;
|
||||||
|
|
||||||
|
#include <twl/ltdmain_begin.h>
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
静的変数定義
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
static BOOL mcuInitialized;
|
||||||
|
static SYSMMcuWork mcuWork;
|
||||||
|
static u8 mcu_ver;
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
内部関数定義
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
static BOOL SYSM_SendMcuPxiCommand(SYSMMcuCommand command, u8 size, u8 data);
|
||||||
|
static void SYSM_SendMcuPxiData(u8 *pData);
|
||||||
|
static void SYSM_McuPxiCallback(PXIFifoTag tag, u32 data, BOOL err);
|
||||||
|
static void SYSM_DoneMcu(SYSMMcuResult result);
|
||||||
|
static void SYSM_WaitMcuBusy(void);
|
||||||
|
|
||||||
|
|
||||||
|
// 初期化
|
||||||
|
void SYSM_InitMcuPxi( void )
|
||||||
|
{
|
||||||
|
if (mcuInitialized)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mcuInitialized = TRUE;
|
||||||
|
mcuWork.lock = TRUE;
|
||||||
|
mcuWork.handler = NULL;
|
||||||
|
|
||||||
|
PXI_Init();
|
||||||
|
while ( !PXI_IsCallbackReady(PXI_FIFO_TAG_MCUTEST, PXI_PROC_ARM7 ))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
PXI_SetFifoRecvCallback(PXI_FIFO_TAG_MCUTEST, SYSM_McuPxiCallback);
|
||||||
|
|
||||||
|
mcuWork.lock = TRUE;
|
||||||
|
mcuWork.callback = NULL;
|
||||||
|
if ( 0 > PXI_SendWordByFifo(PXI_FIFO_TAG_MCUTEST, 0, 0))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
while (*(vu32*)&mcuWork.lock)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef SDK_SUPPORT_PMIC_2
|
||||||
|
// マイコンバージョン取得
|
||||||
|
while ( SYSM_ReadMcuRegisterAsync( MCU_REG_VER_INFO_ADDR, &mcu_ver, NULL, NULL ) != MCU_RESULT_SUCCESS ) {}
|
||||||
|
#endif // SDK_SUPPORT_PMIC_2
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef SDK_SUPPORT_PMIC_2
|
||||||
|
// マイコンバージョン取得
|
||||||
|
u8 SYSMi_GetMcuVersion( void )
|
||||||
|
{
|
||||||
|
return (u8)(mcu_ver >> MCU_REG_VER_INFO_VERSION_SHIFT);
|
||||||
|
}
|
||||||
|
#endif // SDK_SUPPORT_PMIC_2
|
||||||
|
|
||||||
|
SYSMMcuResult SYSM_ReadMcuRegisterAsync( u8 addr, u8 *pValue, SYSMMcuCallback callback, void* arg )
|
||||||
|
{
|
||||||
|
OSIntrMode enabled = OS_DisableInterrupts();
|
||||||
|
if (mcuWork.lock)
|
||||||
|
{
|
||||||
|
(void)OS_RestoreInterrupts(enabled);
|
||||||
|
return MCU_RESULT_BUSY;
|
||||||
|
}
|
||||||
|
mcuWork.lock = TRUE;
|
||||||
|
mcuWork.callback = callback;
|
||||||
|
mcuWork.arg = arg;
|
||||||
|
mcuWork.data = pValue;
|
||||||
|
(void)OS_RestoreInterrupts(enabled);
|
||||||
|
|
||||||
|
if (SYSM_SendMcuPxiCommand(MCU_TEST_COMMAND_READ_REGISTER, 1, (u8)addr))
|
||||||
|
{
|
||||||
|
return MCU_RESULT_SUCCESS;
|
||||||
|
}
|
||||||
|
return MCU_RESULT_SEND_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
SYSMMcuResult SYSM_WriteMcuRegisterAsync( u8 addr, u8 value, SYSMMcuCallback callback, void* arg )
|
||||||
|
{
|
||||||
|
OSIntrMode enabled;
|
||||||
|
u8 data[3];
|
||||||
|
|
||||||
|
enabled = OS_DisableInterrupts();
|
||||||
|
if (mcuWork.lock)
|
||||||
|
{
|
||||||
|
(void)OS_RestoreInterrupts(enabled);
|
||||||
|
return MCU_RESULT_BUSY;
|
||||||
|
}
|
||||||
|
mcuWork.lock = TRUE;
|
||||||
|
mcuWork.callback = callback;
|
||||||
|
mcuWork.arg = arg;
|
||||||
|
mcuWork.data = NULL;
|
||||||
|
data[0] = value;
|
||||||
|
(void)OS_RestoreInterrupts(enabled);
|
||||||
|
|
||||||
|
if (SYSM_SendMcuPxiCommand(MCU_TEST_COMMAND_WRITE_REGISTER, 2, (u8)addr))
|
||||||
|
{
|
||||||
|
SYSM_SendMcuPxiData(data);
|
||||||
|
return MCU_RESULT_SUCCESS;
|
||||||
|
}
|
||||||
|
return MCU_RESULT_SEND_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SYSM_SetMcuInterruptHandler( SYSMMcuCallback handler )
|
||||||
|
{
|
||||||
|
mcuWork.handler = handler;
|
||||||
|
}
|
||||||
|
|
||||||
|
/////////
|
||||||
|
static BOOL SYSM_SendMcuPxiCommand(SYSMMcuCommand command, u8 size, u8 data)
|
||||||
|
{
|
||||||
|
u32 pxiData = (u32)(MCUTEST_PXI_START_BIT |
|
||||||
|
((command << MCUTEST_PXI_COMMAND_SHIFT) & MCUTEST_PXI_COMMAND_MASK) |
|
||||||
|
((size << MCUTEST_PXI_DATA_NUMS_SHIFT) & MCUTEST_PXI_DATA_NUMS_MASK) |
|
||||||
|
((data << MCUTEST_PXI_1ST_DATA_SHIFT) & MCUTEST_PXI_1ST_DATA_MASK));
|
||||||
|
if (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_MCUTEST, pxiData, 0))
|
||||||
|
{
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SYSM_SendMcuPxiData(u8 *pData)
|
||||||
|
{
|
||||||
|
u32 pxiData = (u32)((pData[0] << 16) | (pData[1] << 8) | pData[2]);
|
||||||
|
while (0 > PXI_SendWordByFifo(PXI_FIFO_TAG_MCUTEST, pxiData, 0))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SYSM_McuPxiCallback(PXIFifoTag tag, u32 data, BOOL err)
|
||||||
|
{
|
||||||
|
#pragma unused( tag )
|
||||||
|
if (err)
|
||||||
|
{
|
||||||
|
SYSM_DoneMcu(MCU_RESULT_FATAL_ERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (data & MCUTEST_PXI_START_BIT) // 先頭データ
|
||||||
|
{
|
||||||
|
if (data & MCUTEST_PXI_RESULT_BIT)
|
||||||
|
{
|
||||||
|
mcuWork.total = (u8)((data & MCUTEST_PXI_DATA_NUMS_MASK) >> MCUTEST_PXI_DATA_NUMS_SHIFT);
|
||||||
|
mcuWork.current = 0;
|
||||||
|
mcuWork.command = (SYSMMcuCommand)((data & MCUTEST_PXI_COMMAND_MASK) >> MCUTEST_PXI_COMMAND_SHIFT);
|
||||||
|
mcuWork.result = (SYSMMcuPxiResult)((data & MCUTEST_PXI_1ST_DATA_MASK) >> MCUTEST_PXI_1ST_DATA_SHIFT);
|
||||||
|
}
|
||||||
|
else // 未知のデータ
|
||||||
|
{
|
||||||
|
SYSM_DoneMcu(MCU_RESULT_FATAL_ERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (mcuWork.command) // 後続データ
|
||||||
|
{
|
||||||
|
if (mcuWork.data == NULL)
|
||||||
|
{
|
||||||
|
SYSM_DoneMcu(MCU_RESULT_FATAL_ERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (mcuWork.current < mcuWork.total-1)
|
||||||
|
{
|
||||||
|
mcuWork.data[mcuWork.current++] = (u8)((data & 0xFF0000) >> 16);
|
||||||
|
}
|
||||||
|
if (mcuWork.current < mcuWork.total-1)
|
||||||
|
{
|
||||||
|
mcuWork.data[mcuWork.current++] = (u8)((data & 0x00FF00) >> 8);
|
||||||
|
}
|
||||||
|
if (mcuWork.current < mcuWork.total-1)
|
||||||
|
{
|
||||||
|
mcuWork.data[mcuWork.current++] = (u8)((data & 0x0000FF) >> 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mcuWork.command == MCU_TEST_COMMAND_NULL)
|
||||||
|
{
|
||||||
|
SYSM_DoneMcu(MCU_RESULT_SUCCESS);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mcuWork.command == MCU_TEST_COMMAND_INTERRUPT)
|
||||||
|
{
|
||||||
|
if (mcuWork.handler)
|
||||||
|
{
|
||||||
|
mcuWork.handler(MCU_RESULT_SUCCESS, (void*)mcuWork.result);
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mcuWork.current == mcuWork.total-1)
|
||||||
|
{
|
||||||
|
SYSMMcuResult result;
|
||||||
|
switch (mcuWork.result)
|
||||||
|
{
|
||||||
|
case MCU_PXI_RESULT_SUCCESS: // alias MCU_PXI_RESULT_SUCCESS_TRUE
|
||||||
|
result = MCU_RESULT_SUCCESS; // alias MCU_RESULT_SUCCESS_TRUE
|
||||||
|
break;
|
||||||
|
case MCU_PXI_RESULT_SUCCESS_FALSE:
|
||||||
|
result = MCU_RESULT_SUCCESS_FALSE;
|
||||||
|
break;
|
||||||
|
case MCU_PXI_RESULT_INVALID_COMMAND:
|
||||||
|
result = MCU_RESULT_INVALID_COMMAND;
|
||||||
|
break;
|
||||||
|
case MCU_PXI_RESULT_INVALID_PARAMETER:
|
||||||
|
result = MCU_RESULT_ILLEGAL_PARAMETER;
|
||||||
|
break;
|
||||||
|
case MCU_PXI_RESULT_ILLEGAL_STATUS:
|
||||||
|
result = MCU_RESULT_ILLEGAL_STATUS;
|
||||||
|
break;
|
||||||
|
case MCU_PXI_RESULT_BUSY:
|
||||||
|
result = MCU_RESULT_BUSY;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
result = MCU_RESULT_FATAL_ERROR;
|
||||||
|
}
|
||||||
|
SYSM_DoneMcu(result);
|
||||||
|
mcuWork.command = MCU_TEST_COMMAND_NULL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void SYSM_DoneMcu(SYSMMcuResult result)
|
||||||
|
{
|
||||||
|
SYSMMcuCallback callback = mcuWork.callback;
|
||||||
|
void* arg = mcuWork.arg;
|
||||||
|
mcuWork.callback = NULL;
|
||||||
|
mcuWork.arg = NULL;
|
||||||
|
if (mcuWork.lock)
|
||||||
|
{
|
||||||
|
mcuWork.lock = FALSE;
|
||||||
|
}
|
||||||
|
if (callback)
|
||||||
|
{
|
||||||
|
callback(result, arg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
extern void PXIi_HandlerRecvFifoNotEmpty(void);
|
||||||
|
static void SYSM_WaitMcuBusy(void)
|
||||||
|
{
|
||||||
|
volatile BOOL *p = &mcuWork.lock;
|
||||||
|
|
||||||
|
while (*p)
|
||||||
|
{
|
||||||
|
if (OS_GetCpsrIrq() == OS_INTRMODE_IRQ_DISABLE)
|
||||||
|
{
|
||||||
|
PXIi_HandlerRecvFifoNotEmpty();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#include <twl/ltdmain_end.h>
|
||||||
30
build/libraries_sysmenu/mcu/Makefile
Normal file
30
build/libraries_sysmenu/mcu/Makefile
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
#! make -f
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
# Project: TwlIPL
|
||||||
|
# File: Makefile
|
||||||
|
#
|
||||||
|
# Copyright 2008 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:: #$
|
||||||
|
# $Rev: $
|
||||||
|
# $Author: $
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
TARGET_FIRM = SYSTEMMENU
|
||||||
|
SUBDIRS = ARM7 ARM9
|
||||||
|
|
||||||
|
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
|
||||||
|
|
||||||
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
do-build: $(TARGETS)
|
||||||
|
|
||||||
|
include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules
|
||||||
|
|
||||||
|
#===== End of Makefile =====
|
||||||
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
#include <twl.h>
|
#include <twl.h>
|
||||||
#include <sysmenu.h>
|
#include <sysmenu.h>
|
||||||
|
#include <sysmenu/mcu.h>
|
||||||
#include <spi.h>
|
#include <spi.h>
|
||||||
#include "internal_api.h"
|
#include "internal_api.h"
|
||||||
|
|
||||||
@ -46,7 +47,17 @@ void SYSM_SetBackLightBrightness( u8 brightness )
|
|||||||
if( brightness > LCFG_TWL_BACKLIGHT_LEVEL_MAX ) {
|
if( brightness > LCFG_TWL_BACKLIGHT_LEVEL_MAX ) {
|
||||||
OS_Panic( "Backlight brightness over : %d\n", brightness );
|
OS_Panic( "Backlight brightness over : %d\n", brightness );
|
||||||
}
|
}
|
||||||
( void )SYSMi_SendPXICommand( SYSM_PXI_COMM_BL_BRIGHT, brightness );
|
#ifdef SDK_SUPPORT_PMIC_2
|
||||||
|
if ( SYSMi_GetMcuVersion() <= 1 )
|
||||||
|
{
|
||||||
|
( void )PMi_WriteRegister( REG_PMIC_BL_BRT_B_ADDR, brightness );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
#endif // SDK_SUPPORT_PMIC_2
|
||||||
|
{
|
||||||
|
( void )SYSM_WriteMcuRegisterAsync( MCU_REG_BL_ADDR, brightness, NULL, NULL );
|
||||||
|
}
|
||||||
|
// ( void )SYSMi_SendPXICommand( SYSM_PXI_COMM_BL_BRIGHT, brightness );
|
||||||
|
|
||||||
LCFG_TSD_SetBacklightBrightness( brightness );
|
LCFG_TSD_SetBacklightBrightness( brightness );
|
||||||
|
|
||||||
|
|||||||
@ -18,6 +18,7 @@
|
|||||||
#include <twl.h>
|
#include <twl.h>
|
||||||
#include <twl/mcu.h>
|
#include <twl/mcu.h>
|
||||||
#include <sysmenu.h>
|
#include <sysmenu.h>
|
||||||
|
#include <sysmenu/mcu.h>
|
||||||
#include "internal_api.h"
|
#include "internal_api.h"
|
||||||
#ifdef SDK_ARM7
|
#ifdef SDK_ARM7
|
||||||
#include <pm_pmic.h>
|
#include <pm_pmic.h>
|
||||||
@ -44,11 +45,14 @@ typedef union SYSMPXIPacket {
|
|||||||
// global variable-------------------------------------------------------------
|
// global variable-------------------------------------------------------------
|
||||||
// static variable-------------------------------------------------------------
|
// static variable-------------------------------------------------------------
|
||||||
static volatile BOOL s_sending[SYSM_PXI_COMM_NUM];
|
static volatile BOOL s_sending[SYSM_PXI_COMM_NUM];
|
||||||
static u8 mcu_ver;
|
|
||||||
// const data------------------------------------------------------------------
|
// const data------------------------------------------------------------------
|
||||||
|
|
||||||
// PXI<58>‰Šú‰»
|
// PXI<58>‰Šú‰»
|
||||||
|
#ifdef SDK_ARM9
|
||||||
void SYSM_InitPXI( void )
|
void SYSM_InitPXI( void )
|
||||||
|
#else // SDK_ARM7
|
||||||
|
void SYSM_InitPXI( u32 mcu_prio )
|
||||||
|
#endif // SDK_ARM7
|
||||||
{
|
{
|
||||||
static BOOL isInitialized;
|
static BOOL isInitialized;
|
||||||
int i;
|
int i;
|
||||||
@ -59,15 +63,18 @@ void SYSM_InitPXI( void )
|
|||||||
}
|
}
|
||||||
isInitialized = TRUE;
|
isInitialized = TRUE;
|
||||||
|
|
||||||
|
// マイコンPXI初期化とマイコンバージョン取得
|
||||||
|
#ifdef SDK_ARM9
|
||||||
|
SYSM_InitMcuPxi();
|
||||||
|
#else // SDK_ARM7
|
||||||
|
SYSM_InitMcuPxi( mcu_prio );
|
||||||
|
#endif // SDK_ARM7
|
||||||
|
|
||||||
for (i=0; i<SYSM_PXI_COMM_NUM; i++)
|
for (i=0; i<SYSM_PXI_COMM_NUM; i++)
|
||||||
{
|
{
|
||||||
s_sending[i] = FALSE;
|
s_sending[i] = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(SDK_ARM7) && defined(SDK_SUPPORT_PMIC_2)
|
|
||||||
mcu_ver = (u8)(MCU_ReadRegister( MCU_REG_VER_INFO_ADDR ) >> MCU_REG_VER_INFO_VERSION_SHIFT);
|
|
||||||
#endif // SDK_ARM7 && SDK_SUPPORT_PMIC_2
|
|
||||||
|
|
||||||
//---- setting PXI
|
//---- setting PXI
|
||||||
PXI_Init();
|
PXI_Init();
|
||||||
#ifdef SDK_ARM9
|
#ifdef SDK_ARM9
|
||||||
@ -141,7 +148,7 @@ void SYSMi_PXIFifoRecvCallback( PXIFifoTag tag, u32 data, BOOL err )
|
|||||||
{
|
{
|
||||||
case SYSM_PXI_COMM_BL_BRIGHT:
|
case SYSM_PXI_COMM_BL_BRIGHT:
|
||||||
#ifdef SDK_SUPPORT_PMIC_2
|
#ifdef SDK_SUPPORT_PMIC_2
|
||||||
if ( mcu_ver <= 1 )
|
if ( SYSMi_GetMcuVersion() <= 1 )
|
||||||
{
|
{
|
||||||
PMi_SetRegister( REG_PMIC_BL_BRT_B_ADDR, (u8)packet.data );
|
PMi_SetRegister( REG_PMIC_BL_BRT_B_ADDR, (u8)packet.data );
|
||||||
}
|
}
|
||||||
|
|||||||
@ -22,6 +22,8 @@ SUBDIRS = \
|
|||||||
../../../components/hyena.TWL
|
../../../components/hyena.TWL
|
||||||
# ../../../libraries_sysmenu/reloc_info \
|
# ../../../libraries_sysmenu/reloc_info \
|
||||||
# ../../../libraries_sysmenu/boot \
|
# ../../../libraries_sysmenu/boot \
|
||||||
|
# ../../../libraries_sysmenu/mcu \
|
||||||
|
# $(TWLSDK_ROOT)/build/libraries/reboot \
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
@ -91,7 +91,6 @@ void TwlMain( void )
|
|||||||
SYSM_Init( Alloc, Free ); // OS_Initの前でコールする必要あり。
|
SYSM_Init( Alloc, Free ); // OS_Initの前でコールする必要あり。
|
||||||
OS_Init();
|
OS_Init();
|
||||||
SYSM_SetArena(); // OS_Initの後でコールする必要あり。
|
SYSM_SetArena(); // OS_Initの後でコールする必要あり。
|
||||||
SYSM_InitPXI(); // OS_Initの後でコールする必要あり。
|
|
||||||
|
|
||||||
// OS初期化------------------------
|
// OS初期化------------------------
|
||||||
OS_InitTick();
|
OS_InitTick();
|
||||||
@ -100,6 +99,8 @@ void TwlMain( void )
|
|||||||
(void)OS_EnableIrq();
|
(void)OS_EnableIrq();
|
||||||
(void)OS_EnableInterrupts();
|
(void)OS_EnableInterrupts();
|
||||||
|
|
||||||
|
SYSM_InitPXI(); // 割り込み許可後にコールする必要あり。
|
||||||
|
|
||||||
FS_Init( FS_DMA_NOT_USE );
|
FS_Init( FS_DMA_NOT_USE );
|
||||||
|
|
||||||
#ifdef DEBUG_LAUNCHER_DUMP
|
#ifdef DEBUG_LAUNCHER_DUMP
|
||||||
|
|||||||
39
include/sysmenu/mcu.h
Normal file
39
include/sysmenu/mcu.h
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Project: TwlIPL - MCU
|
||||||
|
File: mcu.h
|
||||||
|
|
||||||
|
Copyright 2008 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:: 2007-09-06$
|
||||||
|
$Rev: 651 $
|
||||||
|
$Author: nakasima $
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef SYSM_MCU_H_
|
||||||
|
#define SYSM_MCU_H_
|
||||||
|
|
||||||
|
#include <twl/mcu.h>
|
||||||
|
|
||||||
|
#include <sysmenu/mcu/common/fifo.h>
|
||||||
|
#ifdef SDK_ARM9
|
||||||
|
#include <sysmenu/mcu/ARM9/mcu.h>
|
||||||
|
#else // SDK_ARM7
|
||||||
|
#include <sysmenu/mcu/ARM7/mcu.h>
|
||||||
|
#endif // SDK_ARM7
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* SYSM_MCU_H_ */
|
||||||
|
#endif
|
||||||
44
include/sysmenu/mcu/ARM7/mcu.h
Normal file
44
include/sysmenu/mcu/ARM7/mcu.h
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Project: TwlIPL
|
||||||
|
File: mcu.h
|
||||||
|
|
||||||
|
Copyright 2008 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-01-23#$
|
||||||
|
$Rev: 3784 $
|
||||||
|
$Author: yutaka $
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
#ifndef SYSM_MCU_ARM7_H_
|
||||||
|
#define SYSM_MCU_ARM7_H_
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
’è<EFBFBD>”’è‹`
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
void SYSM_InitMcuPxi( u32 prio );
|
||||||
|
u8 SYSMi_GetMcuVersion( void );
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* SYSM_MCU_ARM7_H_ */
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
End of file
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
69
include/sysmenu/mcu/ARM9/mcu.h
Normal file
69
include/sysmenu/mcu/ARM9/mcu.h
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Project: TwlIPL
|
||||||
|
File: mcu.h
|
||||||
|
|
||||||
|
Copyright 2008 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-01-23#$
|
||||||
|
$Rev: 3784 $
|
||||||
|
$Author: yutaka $
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
#ifndef SYSM_MCU_ARM9_H_
|
||||||
|
#define SYSM_MCU_ARM9_H_
|
||||||
|
|
||||||
|
#include <twl/mcu.h>
|
||||||
|
#include <twl/mcu/ARM7/mcu_reg.h>
|
||||||
|
#include "../common/fifo.h"
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
’è<EFBFBD>”’è‹`
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef enum SYSMMcuResult
|
||||||
|
{
|
||||||
|
MCU_RESULT_SUCCESS = 0,
|
||||||
|
MCU_RESULT_SUCCESS_TRUE = 0,
|
||||||
|
MCU_RESULT_SUCCESS_FALSE,
|
||||||
|
MCU_RESULT_BUSY,
|
||||||
|
MCU_RESULT_ILLEGAL_PARAMETER,
|
||||||
|
MCU_RESULT_SEND_ERROR,
|
||||||
|
MCU_RESULT_INVALID_COMMAND,
|
||||||
|
MCU_RESULT_ILLEGAL_STATUS,
|
||||||
|
MCU_RESULT_FATAL_ERROR,
|
||||||
|
MCU_RESULT_MAX
|
||||||
|
}
|
||||||
|
SYSMMcuResult;
|
||||||
|
|
||||||
|
typedef void (*SYSMMcuCallback)(SYSMMcuResult result, void *arg);
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
void SYSM_InitMcuPxi( void );
|
||||||
|
u8 SYSMi_GetMcuVersion( void );
|
||||||
|
|
||||||
|
SYSMMcuResult SYSM_ReadMcuRegisterAsync( u8 addr, u8* pValue, SYSMMcuCallback callback, void* arg );
|
||||||
|
SYSMMcuResult SYSM_WriteMcuRegisterAsync( u8 addr, u8 value, SYSMMcuCallback callback, void* arg );
|
||||||
|
void SYSM_SetMcuInterruptHandler( SYSMMcuCallback handler );
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* SYSM_MCU_ARM9_H_ */
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
End of file
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
86
include/sysmenu/mcu/common/fifo.h
Normal file
86
include/sysmenu/mcu/common/fifo.h
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Project: TwlSDK - mcu-test - include
|
||||||
|
File: fifo.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-01-25#$
|
||||||
|
$Rev: 3844 $
|
||||||
|
$Author: yutaka $
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
#ifndef SYSM_MCU_COMMON_FIFO_H_
|
||||||
|
#define SYSM_MCU_COMMON_FIFO_H_
|
||||||
|
|
||||||
|
#include <twl/types.h>
|
||||||
|
#include <sysmenu/sysmenu_lib/common/pxi.h>
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
定数定義
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
#define MCUTEST_PXI_CONTINUOUS_PACKET_MAX 2
|
||||||
|
|
||||||
|
#define MCUTEST_PXI_DATA_SIZE_MAX ((MCUTEST_PXI_CONTINUOUS_PACKET_MAX-1)*3+1) // 最大データ数
|
||||||
|
|
||||||
|
#define MCUTEST_PXI_START_BIT 0x02000000 // 先頭パケットを意味する
|
||||||
|
#define MCUTEST_PXI_RESULT_BIT 0x00008000 // PXIの応答を示す
|
||||||
|
|
||||||
|
#define MCUTEST_PXI_DATA_NUMS_SHIFT 16 // データ数位置
|
||||||
|
#define MCUTEST_PXI_DATA_NUMS_MASK 0x00ff0000 // データ数領域
|
||||||
|
#define MCUTEST_PXI_COMMAND_SHIFT 8 // コマンド格納部分の位置
|
||||||
|
#define MCUTEST_PXI_COMMAND_MASK 0x00007f00 // コマンド格納部分のマスク
|
||||||
|
#define MCUTEST_PXI_1ST_DATA_SHIFT 0 // 先頭パケットのデータ位置
|
||||||
|
#define MCUTEST_PXI_1ST_DATA_MASK 0x000000ff // 先頭パケットのデータ領域
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
typedef enum McuTestCommand
|
||||||
|
{
|
||||||
|
MCU_TEST_COMMAND_NULL = 0,
|
||||||
|
|
||||||
|
MCU_TEST_COMMAND_READ_REGISTER,
|
||||||
|
MCU_TEST_COMMAND_WRITE_REGISTER,
|
||||||
|
|
||||||
|
MCU_TEST_COMMAND_INTERRUPT,
|
||||||
|
|
||||||
|
MCU_TEST_COMMAND_MAX
|
||||||
|
}
|
||||||
|
SYSMMcuCommand;
|
||||||
|
|
||||||
|
// 応答定義
|
||||||
|
typedef enum SYSMMcuPxiResult
|
||||||
|
{
|
||||||
|
MCU_PXI_RESULT_SUCCESS = 0, // 処理成功 (void/void*型) // 場合により後続パケットあり
|
||||||
|
MCU_PXI_RESULT_SUCCESS_TRUE = 0, // 処理成功 (BOOL型)
|
||||||
|
MCU_PXI_RESULT_SUCCESS_FALSE, // 処理成功 (BOOL型)
|
||||||
|
MCU_PXI_RESULT_INVALID_COMMAND, // 不正なPXIコマンド
|
||||||
|
MCU_PXI_RESULT_INVALID_PARAMETER, // 不正なパラメータ
|
||||||
|
MCU_PXI_RESULT_ILLEGAL_STATUS, // MCUの状態により処理を実行不可
|
||||||
|
MCU_PXI_RESULT_BUSY, // 他のリクエストを実行中
|
||||||
|
MCU_PXI_RESULT_FATAL_ERROR, // その他何らかの原因で処理に失敗
|
||||||
|
MCU_PXI_RESULT_MAX
|
||||||
|
}
|
||||||
|
SYSMMcuPxiResult;
|
||||||
|
|
||||||
|
|
||||||
|
/*===========================================================================*/
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
} /* extern "C" */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* SYSM_MCU_COMMON_FIFO_H_ */
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
End of file
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
@ -27,7 +27,8 @@ extern "C" {
|
|||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
// PXIコマンド
|
// PXIコマンド
|
||||||
//----------------------------------------------------------------------
|
//----------------------------------------------------------------------
|
||||||
#define SYSMENU_PXI_FIFO_TAG PXI_FIFO_TAG_USER_1
|
#define SYSMENU_PXI_FIFO_TAG (PXI_MAX_FIFO_TAG - 1)
|
||||||
|
#define PXI_FIFO_TAG_MCUTEST (PXI_MAX_FIFO_TAG - 2)
|
||||||
|
|
||||||
typedef enum SYSMPXICommand {
|
typedef enum SYSMPXICommand {
|
||||||
SYSM_PXI_COMM_BL_BRIGHT = 0,
|
SYSM_PXI_COMM_BL_BRIGHT = 0,
|
||||||
@ -41,7 +42,11 @@ typedef enum SYSMPXICommand {
|
|||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
// PXI初期化
|
// PXI初期化
|
||||||
|
#ifdef SDK_ARM9
|
||||||
void SYSM_InitPXI( void );
|
void SYSM_InitPXI( void );
|
||||||
|
#else // SDK_ARM7
|
||||||
|
void SYSM_InitPXI( u32 mcu_prio );
|
||||||
|
#endif // SDK_ARM7
|
||||||
|
|
||||||
// PXIコマンド送信
|
// PXIコマンド送信
|
||||||
BOOL SYSMi_TrySendPXICommand( SYSMPXICommand cmd, u16 data );
|
BOOL SYSMi_TrySendPXICommand( SYSMPXICommand cmd, u16 data );
|
||||||
@ -50,7 +55,6 @@ BOOL SYSMi_SendPXICommand( SYSMPXICommand command, u16 data );
|
|||||||
// PXIコマンド受信
|
// PXIコマンド受信
|
||||||
void SYSMi_PXIFifoRecvCallback( PXIFifoTag tag, u32 data, BOOL err );
|
void SYSMi_PXIFifoRecvCallback( PXIFifoTag tag, u32 data, BOOL err );
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user