From 7db4bae3dbf1fc23f2e25649571c844139b97ecf Mon Sep 17 00:00:00 2001 From: nakasima Date: Fri, 15 Feb 2008 00:31:07 +0000 Subject: [PATCH] =?UTF-8?q?TS-X2/X3=E3=83=90=E3=83=83=E3=82=AF=E3=83=A9?= =?UTF-8?q?=E3=82=A4=E3=83=88=E8=BC=9D=E5=BA=A6=E5=A4=89=E6=9B=B4=E3=81=AE?= =?UTF-8?q?=E5=8B=95=E7=9A=84=E5=88=87=E3=82=8A=E6=9B=BF=E3=81=88=E3=81=AE?= =?UTF-8?q?=E3=81=9F=E3=82=81=E3=81=AE=E3=83=9E=E3=82=A4=E3=82=B3=E3=83=B3?= =?UTF-8?q?=E3=82=B9=E3=83=AC=E3=83=83=E3=83=89=E8=BF=BD=E5=8A=A0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@664 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- build/buildtools/commondefs.sysmenu | 4 +- build/components/hyena.TWL/hyena.lsf | 3 +- build/components/hyena.TWL/src/main.c | 8 +- build/libraries_sysmenu/Makefile | 2 +- build/libraries_sysmenu/mcu/ARM7/Makefile | 52 +++ build/libraries_sysmenu/mcu/ARM7/src/mcu.c | 261 +++++++++++++++ build/libraries_sysmenu/mcu/ARM9/Makefile | 52 +++ build/libraries_sysmenu/mcu/ARM9/src/mcu.c | 311 ++++++++++++++++++ build/libraries_sysmenu/mcu/Makefile | 30 ++ .../sysmenu/ARM9/src/device.c | 13 +- .../sysmenu/common/src/pxi.c | 19 +- build/systemMenu_RED/Launcher/ARM9/Makefile | 2 + build/systemMenu_RED/Launcher/ARM9/src/main.c | 3 +- include/sysmenu/mcu.h | 39 +++ include/sysmenu/mcu/ARM7/mcu.h | 44 +++ include/sysmenu/mcu/ARM9/mcu.h | 69 ++++ include/sysmenu/mcu/common/fifo.h | 86 +++++ include/sysmenu/sysmenu_lib/common/pxi.h | 8 +- 18 files changed, 990 insertions(+), 16 deletions(-) create mode 100644 build/libraries_sysmenu/mcu/ARM7/Makefile create mode 100644 build/libraries_sysmenu/mcu/ARM7/src/mcu.c create mode 100644 build/libraries_sysmenu/mcu/ARM9/Makefile create mode 100644 build/libraries_sysmenu/mcu/ARM9/src/mcu.c create mode 100644 build/libraries_sysmenu/mcu/Makefile create mode 100644 include/sysmenu/mcu.h create mode 100644 include/sysmenu/mcu/ARM7/mcu.h create mode 100644 include/sysmenu/mcu/ARM9/mcu.h create mode 100644 include/sysmenu/mcu/common/fifo.h diff --git a/build/buildtools/commondefs.sysmenu b/build/buildtools/commondefs.sysmenu index b838c2fc..54cdb8fb 100644 --- a/build/buildtools/commondefs.sysmenu +++ b/build/buildtools/commondefs.sysmenu @@ -66,6 +66,7 @@ ifeq ($(CODEGEN_PROC),ARM9) SYSMENU_LIBS ?= \ liblcfg$(TWL_LIBSUFFIX).a \ libsysmenu$(TWL_LIBSUFFIX).a \ + libsysmmcu$(TWL_LIBSUFFIX).a \ libmbloader$(TWL_LIBSUFFIX).a \ libacsign$(TWL_LIBSUFFIX).a \ libboot$(TWL_LIBSUFFIX).a \ @@ -74,9 +75,10 @@ else # ($(CODEGEN_PROC),ARM7) SYSMENU_LIBS ?= \ libsysmenu_sp$(TWL_LIBSUFFIX).a \ + libsysmmcu_sp$(TWL_LIBSUFFIX).a \ libmbloader_sp$(TWL_LIBSUFFIX).a \ libboot_sp$(TWL_LIBSUFFIX).a \ - libhotsw_sp$(TWL_LIBSUFFIX).a + libhotsw_sp$(TWL_LIBSUFFIX).a \ endif diff --git a/build/components/hyena.TWL/hyena.lsf b/build/components/hyena.TWL/hyena.lsf index d161ef36..0cb91d89 100644 --- a/build/components/hyena.TWL/hyena.lsf +++ b/build/components/hyena.TWL/hyena.lsf @@ -59,7 +59,8 @@ Autoload WRAM libreboot_sp$(LIBSUFFIX).a \ libhotsw_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 diff --git a/build/components/hyena.TWL/src/main.c b/build/components/hyena.TWL/src/main.c index dc1f8269..1320602d 100644 --- a/build/components/hyena.TWL/src/main.c +++ b/build/components/hyena.TWL/src/main.c @@ -36,6 +36,7 @@ #include #include #include +#include #include #include "nvram_sp.h" #include "pm_pmic.h" @@ -50,6 +51,7 @@ /* Priorities of each threads */ #define THREAD_PRIO_SPI 2 #define THREAD_PRIO_MCU 4 // 暫定 +#define THREAD_PRIO_SYSMMCU 6 #define THREAD_PRIO_SND 6 #define THREAD_PRIO_FATFS 8 #define THREAD_PRIO_RTC 12 @@ -121,9 +123,6 @@ TwlSpMain(void) OS_InitTick(); PrintDebugInfo(); - // PXIコールバックの設定 - SYSM_InitPXI(); - // ランチャーパラメター取得(Cold/Hotスタート判定含む) ReadLauncherParameter(); @@ -158,6 +157,9 @@ TwlSpMain(void) (void)OS_EnableIrq(); (void)OS_EnableInterrupts(); + // PXIコールバックの設定 + SYSM_InitPXI(THREAD_PRIO_SYSMMCU); + // ファイルシステム初期化 FS_Init(FS_DMA_NOT_USE); FS_CreateReadServerThread(THREAD_PRIO_FS); diff --git a/build/libraries_sysmenu/Makefile b/build/libraries_sysmenu/Makefile index c2fee359..7070ea9a 100644 --- a/build/libraries_sysmenu/Makefile +++ b/build/libraries_sysmenu/Makefile @@ -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 #---------------------------------------------------------------------------- diff --git a/build/libraries_sysmenu/mcu/ARM7/Makefile b/build/libraries_sysmenu/mcu/ARM7/Makefile new file mode 100644 index 00000000..c2e313a0 --- /dev/null +++ b/build/libraries_sysmenu/mcu/ARM7/Makefile @@ -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 ===== + diff --git a/build/libraries_sysmenu/mcu/ARM7/src/mcu.c b/build/libraries_sysmenu/mcu/ARM7/src/mcu.c new file mode 100644 index 00000000..30c8c27c --- /dev/null +++ b/build/libraries_sysmenu/mcu/ARM7/src/mcu.c @@ -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 +#include + +#include + +/*---------------------------------------------------------------------------* + 定数定義 + *---------------------------------------------------------------------------*/ +#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 diff --git a/build/libraries_sysmenu/mcu/ARM9/Makefile b/build/libraries_sysmenu/mcu/ARM9/Makefile new file mode 100644 index 00000000..619e6b9c --- /dev/null +++ b/build/libraries_sysmenu/mcu/ARM9/Makefile @@ -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 ===== + diff --git a/build/libraries_sysmenu/mcu/ARM9/src/mcu.c b/build/libraries_sysmenu/mcu/ARM9/src/mcu.c new file mode 100644 index 00000000..ebe66b3e --- /dev/null +++ b/build/libraries_sysmenu/mcu/ARM9/src/mcu.c @@ -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 +#include + +#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 + +/*---------------------------------------------------------------------------* + 静的変数定義 + *---------------------------------------------------------------------------*/ +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 diff --git a/build/libraries_sysmenu/mcu/Makefile b/build/libraries_sysmenu/mcu/Makefile new file mode 100644 index 00000000..e89234c0 --- /dev/null +++ b/build/libraries_sysmenu/mcu/Makefile @@ -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 ===== diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/device.c b/build/libraries_sysmenu/sysmenu/ARM9/src/device.c index b2e020e6..fd673ae5 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/device.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/device.c @@ -17,6 +17,7 @@ #include #include +#include #include #include "internal_api.h" @@ -46,7 +47,17 @@ void SYSM_SetBackLightBrightness( u8 brightness ) if( brightness > LCFG_TWL_BACKLIGHT_LEVEL_MAX ) { 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 ); diff --git a/build/libraries_sysmenu/sysmenu/common/src/pxi.c b/build/libraries_sysmenu/sysmenu/common/src/pxi.c index 5f1f8b12..1fa77efd 100644 --- a/build/libraries_sysmenu/sysmenu/common/src/pxi.c +++ b/build/libraries_sysmenu/sysmenu/common/src/pxi.c @@ -18,6 +18,7 @@ #include #include #include +#include #include "internal_api.h" #ifdef SDK_ARM7 #include @@ -44,11 +45,14 @@ typedef union SYSMPXIPacket { // global variable------------------------------------------------------------- // static variable------------------------------------------------------------- static volatile BOOL s_sending[SYSM_PXI_COMM_NUM]; -static u8 mcu_ver; // const data------------------------------------------------------------------ // PXI初期化 +#ifdef SDK_ARM9 void SYSM_InitPXI( void ) +#else // SDK_ARM7 +void SYSM_InitPXI( u32 mcu_prio ) +#endif // SDK_ARM7 { static BOOL isInitialized; int i; @@ -59,15 +63,18 @@ void SYSM_InitPXI( void ) } isInitialized = TRUE; + // マイコンPXI初期化とマイコンバージョン取得 +#ifdef SDK_ARM9 + SYSM_InitMcuPxi(); +#else // SDK_ARM7 + SYSM_InitMcuPxi( mcu_prio ); +#endif // SDK_ARM7 + for (i=0; i> MCU_REG_VER_INFO_VERSION_SHIFT); -#endif // SDK_ARM7 && SDK_SUPPORT_PMIC_2 - //---- setting PXI PXI_Init(); #ifdef SDK_ARM9 @@ -141,7 +148,7 @@ void SYSMi_PXIFifoRecvCallback( PXIFifoTag tag, u32 data, BOOL err ) { case SYSM_PXI_COMM_BL_BRIGHT: #ifdef SDK_SUPPORT_PMIC_2 - if ( mcu_ver <= 1 ) + if ( SYSMi_GetMcuVersion() <= 1 ) { PMi_SetRegister( REG_PMIC_BL_BRT_B_ADDR, (u8)packet.data ); } diff --git a/build/systemMenu_RED/Launcher/ARM9/Makefile b/build/systemMenu_RED/Launcher/ARM9/Makefile index f6a9c22e..2f06fc6b 100644 --- a/build/systemMenu_RED/Launcher/ARM9/Makefile +++ b/build/systemMenu_RED/Launcher/ARM9/Makefile @@ -22,6 +22,8 @@ SUBDIRS = \ ../../../components/hyena.TWL # ../../../libraries_sysmenu/reloc_info \ # ../../../libraries_sysmenu/boot \ +# ../../../libraries_sysmenu/mcu \ +# $(TWLSDK_ROOT)/build/libraries/reboot \ #---------------------------------------------------------------------------- diff --git a/build/systemMenu_RED/Launcher/ARM9/src/main.c b/build/systemMenu_RED/Launcher/ARM9/src/main.c index 8c2a504c..b6234a1e 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/main.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/main.c @@ -91,7 +91,6 @@ void TwlMain( void ) SYSM_Init( Alloc, Free ); // OS_Initの前でコールする必要あり。 OS_Init(); SYSM_SetArena(); // OS_Initの後でコールする必要あり。 - SYSM_InitPXI(); // OS_Initの後でコールする必要あり。 // OS初期化------------------------ OS_InitTick(); @@ -100,6 +99,8 @@ void TwlMain( void ) (void)OS_EnableIrq(); (void)OS_EnableInterrupts(); + SYSM_InitPXI(); // 割り込み許可後にコールする必要あり。 + FS_Init( FS_DMA_NOT_USE ); #ifdef DEBUG_LAUNCHER_DUMP diff --git a/include/sysmenu/mcu.h b/include/sysmenu/mcu.h new file mode 100644 index 00000000..9a3427e1 --- /dev/null +++ b/include/sysmenu/mcu.h @@ -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 + +#include +#ifdef SDK_ARM9 +#include +#else // SDK_ARM7 +#include +#endif // SDK_ARM7 + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +/* SYSM_MCU_H_ */ +#endif diff --git a/include/sysmenu/mcu/ARM7/mcu.h b/include/sysmenu/mcu/ARM7/mcu.h new file mode 100644 index 00000000..01735e2b --- /dev/null +++ b/include/sysmenu/mcu/ARM7/mcu.h @@ -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_ + +/*---------------------------------------------------------------------------* + 定数定義 + *---------------------------------------------------------------------------*/ + +#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 + *---------------------------------------------------------------------------*/ diff --git a/include/sysmenu/mcu/ARM9/mcu.h b/include/sysmenu/mcu/ARM9/mcu.h new file mode 100644 index 00000000..a6e083cf --- /dev/null +++ b/include/sysmenu/mcu/ARM9/mcu.h @@ -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 +#include +#include "../common/fifo.h" + +/*---------------------------------------------------------------------------* + 定数定義 + *---------------------------------------------------------------------------*/ + +#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 + *---------------------------------------------------------------------------*/ diff --git a/include/sysmenu/mcu/common/fifo.h b/include/sysmenu/mcu/common/fifo.h new file mode 100644 index 00000000..d0785542 --- /dev/null +++ b/include/sysmenu/mcu/common/fifo.h @@ -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 +#include + +/*---------------------------------------------------------------------------* + 定数定義 + *---------------------------------------------------------------------------*/ +#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 + *---------------------------------------------------------------------------*/ diff --git a/include/sysmenu/sysmenu_lib/common/pxi.h b/include/sysmenu/sysmenu_lib/common/pxi.h index c02212ad..eb0be5ef 100644 --- a/include/sysmenu/sysmenu_lib/common/pxi.h +++ b/include/sysmenu/sysmenu_lib/common/pxi.h @@ -27,7 +27,8 @@ extern "C" { //---------------------------------------------------------------------- // 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 { SYSM_PXI_COMM_BL_BRIGHT = 0, @@ -41,7 +42,11 @@ typedef enum SYSMPXICommand { *---------------------------------------------------------------------------*/ // PXI初期化 +#ifdef SDK_ARM9 void SYSM_InitPXI( void ); +#else // SDK_ARM7 +void SYSM_InitPXI( u32 mcu_prio ); +#endif // SDK_ARM7 // PXIコマンド送信 BOOL SYSMi_TrySendPXICommand( SYSMPXICommand cmd, u16 data ); @@ -50,7 +55,6 @@ BOOL SYSMi_SendPXICommand( SYSMPXICommand command, u16 data ); // PXIコマンド受信 void SYSMi_PXIFifoRecvCallback( PXIFifoTag tag, u32 data, BOOL err ); - #ifdef __cplusplus } #endif