From 95645a3dbacc9f8e23772028a2a014977772ac2a Mon Sep 17 00:00:00 2001 From: kamikawa Date: Tue, 8 Apr 2008 01:05:13 +0000 Subject: [PATCH] =?UTF-8?q?=E8=A3=BD=E5=93=81=E6=8A=80=E8=A1=93=E9=83=A8?= =?UTF-8?q?=E3=81=AE=E3=83=AA=E3=82=AF=E3=82=A8=E3=82=B9=E3=83=88=E3=81=AB?= =?UTF-8?q?=E5=AF=BE=E5=BF=9C=E3=80=82=20=E3=83=BBNandInitializer=20?= =?UTF-8?q?=E3=81=A8=E5=90=8C=E3=81=98=E3=83=97=E3=83=AD=E3=82=B0=E3=83=A9?= =?UTF-8?q?=E3=83=A0=E3=81=A7=E5=9F=BA=E6=9D=BF=E6=A4=9C=E6=9F=BB=E3=82=82?= =?UTF-8?q?=E5=AE=9F=E6=96=BD=E3=81=99=E3=82=8B=E3=81=9F=E3=82=81=E3=81=AB?= =?UTF-8?q?=E3=82=AB=E3=83=A1=E3=83=A9=E3=82=84=E3=82=B5=E3=82=A6=E3=83=B3?= =?UTF-8?q?=E3=83=89=E3=81=AA=E3=81=A9=E3=81=93=E3=82=8C=E3=81=BE=E3=81=A7?= =?UTF-8?q?=E5=89=8A=E3=81=A3=E3=81=A6=E3=81=84=E3=81=9F=E3=83=A9=E3=82=A4?= =?UTF-8?q?=E3=83=96=E3=83=A9=E3=83=AA=E3=82=92=E3=83=AA=E3=83=B3=E3=82=AF?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB=E3=81=97=E3=81=BE?= =?UTF-8?q?=E3=81=97=E3=81=9F=E3=80=82=20=E3=80=80=E3=83=9E=E3=82=A4?= =?UTF-8?q?=E3=82=B3=E3=83=B3=E3=82=92=E3=82=A2=E3=83=89=E3=83=AC=E3=82=B9?= =?UTF-8?q?=E6=8C=87=E5=AE=9A=E3=81=A7=E3=82=A2=E3=82=AF=E3=82=BB=E3=82=B9?= =?UTF-8?q?=E3=81=A7=E3=81=8D=E3=82=8B=E9=96=A2=E6=95=B0=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82CODEC?= =?UTF-8?q?=E3=81=AE=E3=83=A2=E3=83=BC=E3=83=89=E3=82=92DS=E3=83=A2?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=81=B8=E3=81=A8=E9=81=B7=E7=A7=BB=E3=81=95?= =?UTF-8?q?=E3=81=9B=E3=82=8B=E9=96=A2=E6=95=B0=E3=82=92ARM9=E5=81=B4?= =?UTF-8?q?=E3=81=AB=E7=94=A8=E6=84=8F=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F?= =?UTF-8?q?=E3=80=82=20=E3=80=80=EF=BC=88=E5=90=8C=E4=B8=80=E3=83=97?= =?UTF-8?q?=E3=83=AD=E3=82=B0=E3=83=A9=E3=83=A0=E3=81=A7CODEC-TWL=E3=83=A2?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=81=A8CODEC-DS=E3=83=A2=E3=83=BC=E3=83=89?= =?UTF-8?q?=E3=81=AE=E4=B8=A1=E6=96=B9=E3=82=92=E3=83=86=E3=82=B9=E3=83=88?= =?UTF-8?q?=E3=81=99=E3=82=8B=E3=81=9F=E3=82=81=EF=BC=89?= 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@1076 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../NandInitializer/ARM7.TWL/armadillo.lsf | 2 +- .../NandInitializerRed/ARM7.TWL/Makefile | 2 +- .../NandInitializerRed/ARM7.TWL/armadillo.lsf | 2 +- .../ARM7.TWL/src/kami_pxi.c | 47 +++- .../NandInitializerRed/ARM7.TWL/src/main.c | 14 +- .../ARM9.TWL/include/kami_pxi.h | 18 +- .../ARM9.TWL/src/kami_pxi.c | 217 ++++++++---------- .../NandInitializerRed/ARM9.TWL/src/main.c | 2 +- .../NandInitializerRed/common/include/fifo.h | 10 +- 9 files changed, 159 insertions(+), 155 deletions(-) diff --git a/build/systemMenu_RED/NandInitializer/ARM7.TWL/armadillo.lsf b/build/systemMenu_RED/NandInitializer/ARM7.TWL/armadillo.lsf index 0cda7e58..68393048 100644 --- a/build/systemMenu_RED/NandInitializer/ARM7.TWL/armadillo.lsf +++ b/build/systemMenu_RED/NandInitializer/ARM7.TWL/armadillo.lsf @@ -74,7 +74,7 @@ Ltdautoload SCRWRAM Library libathdrv_sp$(LIBSUFFIX).a Library libfs_sp$(LIBSUFFIX).a Library libcard_sp$(LIBSUFFIX).a -# Library libcamera_sp$(LIBSUFFIX).a + Library libcamera_sp$(LIBSUFFIX).a Object * (.wram) Object * (.ltdwram) diff --git a/build/systemMenu_RED/NandInitializerRed/ARM7.TWL/Makefile b/build/systemMenu_RED/NandInitializerRed/ARM7.TWL/Makefile index dfb5738b..e7696f5a 100644 --- a/build/systemMenu_RED/NandInitializerRed/ARM7.TWL/Makefile +++ b/build/systemMenu_RED/NandInitializerRed/ARM7.TWL/Makefile @@ -56,7 +56,7 @@ LINCLUDES = $(ROOT)/build/libraries/spi/ARM7/include ../common/include LLIBRARIES += libwl_sp$(TWL_LIBSUFFIX).a \ libsdio_sp$(TWL_LIBSUFFIX).a \ libathdrv_sp$(TWL_LIBSUFFIX).a \ - libwpa_sp$(TWL_LIBSUFFIX).a \ + libwpa_sp$(TWL_LIBSUFFIX).a LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES) diff --git a/build/systemMenu_RED/NandInitializerRed/ARM7.TWL/armadillo.lsf b/build/systemMenu_RED/NandInitializerRed/ARM7.TWL/armadillo.lsf index ea34348d..c8ee8fec 100644 --- a/build/systemMenu_RED/NandInitializerRed/ARM7.TWL/armadillo.lsf +++ b/build/systemMenu_RED/NandInitializerRed/ARM7.TWL/armadillo.lsf @@ -77,7 +77,7 @@ Ltdautoload SCRWRAM Library libathdrv_sp$(LIBSUFFIX).a Library libfs_sp$(LIBSUFFIX).a Library libcard_sp$(LIBSUFFIX).a -# Library libcamera_sp$(LIBSUFFIX).a + Library libcamera_sp$(LIBSUFFIX).a Object * (.wram) Object * (.ltdwram) diff --git a/build/systemMenu_RED/NandInitializerRed/ARM7.TWL/src/kami_pxi.c b/build/systemMenu_RED/NandInitializerRed/ARM7.TWL/src/kami_pxi.c index d0a1daa1..6c243b6f 100644 --- a/build/systemMenu_RED/NandInitializerRed/ARM7.TWL/src/kami_pxi.c +++ b/build/systemMenu_RED/NandInitializerRed/ARM7.TWL/src/kami_pxi.c @@ -16,14 +16,14 @@ *---------------------------------------------------------------------------*/ #include -#include +#include #include "kami_pxi.h" #include "fifo.h" #include "twl/cdc.h" #include "formatter.h" -#include "nvram.h" - +#include "nvram.h" #include +#include //#include //#include @@ -126,12 +126,11 @@ static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err) { switch (kamiWork.command) { - case CODEC_READ_REGISTER: - case CODEC_WRITE_REGISTER: - case GPIO333_WRITE: - case EXE_FORMAT: + case KAMI_EXE_FORMAT: case KAMI_NAND_IO: case KAMI_NVRAM_IO: + case KAMI_MCU_IO: + case KAMI_CDC_GO_DSMODE: if (!OS_SendMessage(&kamiWork.msgQ, NULL, OS_MESSAGE_NOBLOCK)) { KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_FATAL_ERROR); @@ -185,8 +184,7 @@ static void KamiThread(void *arg) (void)OS_ReceiveMessage(&kamiWork.msgQ, &msg, OS_MESSAGE_BLOCK); switch (kamiWork.command) { -//////////////////////////////////////////////////////// - case EXE_FORMAT: + case KAMI_EXE_FORMAT: { result = ExeFormat((FormatMode)kamiWork.data[0]); // Quick or Full if (result) @@ -248,7 +246,36 @@ static void KamiThread(void *arg) } break; -//////////////////////////////////////////////////////// + case KAMI_MCU_IO: + { + BOOL is_read; + u32 reg_no; + void* buffer; + u32 value; + + is_read = (BOOL)kamiWork.data[0]; + KAMI_UNPACK_U32(®_no, &kamiWork.data[1]); + KAMI_UNPACK_U32((u32 *)(&buffer), &kamiWork.data[5]); + KAMI_UNPACK_U32(&value, &kamiWork.data[9]); + + if (is_read) + { + *(u8 *)buffer = MCU_ReadRegister( (u8)reg_no ); + } + else + { + MCU_WriteRegister( (u8)reg_no, (u8)value ); + } + KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS); + } + break; + + case KAMI_CDC_GO_DSMODE: + { + CDC_GoDsMode(); + KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS); + } + break; default: KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_INVALID_COMMAND); diff --git a/build/systemMenu_RED/NandInitializerRed/ARM7.TWL/src/main.c b/build/systemMenu_RED/NandInitializerRed/ARM7.TWL/src/main.c index afd9cfc9..8cd856d8 100644 --- a/build/systemMenu_RED/NandInitializerRed/ARM7.TWL/src/main.c +++ b/build/systemMenu_RED/NandInitializerRed/ARM7.TWL/src/main.c @@ -25,6 +25,7 @@ #include #include #include +#include #include #include #include @@ -111,13 +112,12 @@ TwlSpMain(void) (void)GX_VBlankIntr(TRUE); (void)OS_EnableIrq(); (void)OS_EnableInterrupts(); -/////////////////////////////// + // 強制AESモード AttachAES(); - // フォーマットを行うためにFATFS_Initの前にHW_SD_NAND_CONTEXT_BUFのクリアが必要 MI_CpuClear8((void *)HW_SD_NAND_CONTEXT_BUF, HW_SD_NAND_CONTEXT_BUF_END - HW_SD_NAND_CONTEXT_BUF); -/////////////////////////////// + /* 各ライブラリ初期化 */ AES_Init(); // AES SEA_Init(); // SEA @@ -126,13 +126,15 @@ TwlSpMain(void) InitializeFatfs(); // FAT-FS // InitializeNwm(heapHandle); // TWL 無線 MCU_InitIrq(THREAD_PRIO_MCU); // マイコン + if (OSi_IsCodecTwlMode() == TRUE) { InitializeCdc(); // CODEC -// CAMERA_Init(); // カメラ + CAMERA_Init(); // カメラ } -// SND_Init(THREAD_PRIO_SND); // サウンド -// SNDEX_Init(THREAD_PRIO_SNDEX); // サウンド拡張 + + SND_Init(THREAD_PRIO_SND); // サウンド + SNDEX_Init(THREAD_PRIO_SNDEX); // サウンド拡張 RTC_Init(THREAD_PRIO_RTC); // RTC // WVR_Begin(heapHandle); // NITRO 無線 SPI_Init(THREAD_PRIO_SPI); diff --git a/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/include/kami_pxi.h b/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/include/kami_pxi.h index 9bc0c63f..c35eb26a 100644 --- a/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/include/kami_pxi.h +++ b/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/include/kami_pxi.h @@ -58,13 +58,15 @@ typedef void (*KAMICallback)(KAMIResult result, void *arg); void KamiPxiInit( void ); -KAMIResult CDC_ReadRegister(u8 page, u8 reg_no, u8* pData); -KAMIResult CDC_WriteRegister(u8 page, u8 reg_no, u8 value); -KAMIResult GPIO333_Write(BOOL value); KAMIResult ExeFormatAsync(FormatMode format_mode, KAMICallback callback); KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read); KAMIResult kamiNvramIo(u32 address, void* buffer, u32 size, BOOL is_read); +KAMIResult kamiMcuIo(u32 reg_no, void* buffer, u32 value, BOOL is_read); +KAMIResult kamiCDC_GoDsMode( void ); +// (重要) +// ARM7が読み書きするためリード後はInvalidate、ライト前はフラッシュしてください。 +// static KAMIResult kamiNandRead(u32 block, void* buffer, u32 count) { return kamiNandIo(block, buffer, count, TRUE); @@ -81,8 +83,14 @@ static KAMIResult kamiNvramWrite(u32 adress, void* buffer, u32 size) { return kamiNvramIo(adress, buffer, size, FALSE); } - - +static KAMIResult kamiMcuRead(u8 reg_no, void* buffer) +{ + return kamiMcuIo((u32)reg_no, buffer, 0, TRUE); +} +static KAMIResult kamiMcuWrite(u8 reg_no, u8 value) +{ + return kamiMcuIo((u32)reg_no, NULL, (u32)value, FALSE); +} /*===========================================================================*/ diff --git a/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/src/kami_pxi.c b/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/src/kami_pxi.c index fc247b14..c6ae12d7 100644 --- a/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/src/kami_pxi.c +++ b/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/src/kami_pxi.c @@ -77,12 +77,14 @@ void KamiPxiInit( void ) { } PXI_SetFifoRecvCallback(PXI_FIFO_TAG_KAMITEST, KamiPxiCallback); - if ( 0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, 0, 0)) + if ( 0 > PXI_SendWordByFifo(PXI_FIFO_TAG_KAMITEST, KAMITEST_PXI_START_BIT | (KAMI_TEST_COMMAND << KAMITEST_PXI_COMMAND_SHIFT), 0)) { return; } } + + /////////////////////////////////////////////////////////////////// //typedef void (*KAMICallback)(KAMIResult result, void *arg); @@ -94,127 +96,6 @@ void CDC_ReadCallback(KAMIResult result, void* arg) } */ -/*---------------------------------------------------------------------------* - Name: CODEC レジスタリード関数 - - Description: - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult CDC_ReadRegister(u8 page, u8 reg_no, u8* pData) -{ - OSIntrMode enabled; - - - // ロック - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = (u8*)pData; - - if (KamiSendPxiCommand(CODEC_READ_REGISTER, 2, page)) - { - KamiSendPxiData(®_no); - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: CODEC レジスタライト関数 - - Description: - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult CDC_WriteRegister(u8 page, u8 reg_no, u8 value) -{ - OSIntrMode enabled; - u8 data[2]; - int i; - - - // ロック - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = 0; - - // データ作成 - data[0] = reg_no; - data[1] = value; - - if (KamiSendPxiCommand(CODEC_WRITE_REGISTER, 3, page)) - { - for (i = 0; i < 2; i++) - { - KamiSendPxiData(&data[i]); - } - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - -/*---------------------------------------------------------------------------* - Name: GPIO333 アクセス関数 - - Description: - - Arguments: None. - - Returns: - *---------------------------------------------------------------------------*/ - -KAMIResult GPIO333_Write(BOOL value) -{ - OSIntrMode enabled; - - // ロック - enabled = OS_DisableInterrupts(); - if (kamiWork.lock) - { - (void)OS_RestoreInterrupts(enabled); - return KAMI_RESULT_BUSY; - } - kamiWork.lock = TRUE; - (void)OS_RestoreInterrupts(enabled); - - kamiWork.callback = NULL; - kamiWork.arg = 0; - kamiWork.data = 0; - - if (KamiSendPxiCommand(GPIO333_WRITE, 1, (u8)value)) - { - KamiWaitBusy(); - return (KAMIResult)kamiWork.result; - } - return KAMI_RESULT_SEND_ERROR; -} - /*---------------------------------------------------------------------------* Name: フォーマット実行関数 @@ -243,7 +124,7 @@ KAMIResult ExeFormatAsync(FormatMode format_mode, KAMICallback callback) kamiWork.arg = 0; kamiWork.data = 0; - if (KamiSendPxiCommand(EXE_FORMAT, 1, format_mode) == FALSE) + if (KamiSendPxiCommand(KAMI_EXE_FORMAT, 1, format_mode) == FALSE) { return KAMI_RESULT_SEND_ERROR; } @@ -306,6 +187,7 @@ KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read) Returns: *---------------------------------------------------------------------------*/ + KAMIResult kamiNvramIo(u32 address, void* buffer, u32 size, BOOL is_read) { OSIntrMode enabled; @@ -342,10 +224,95 @@ KAMIResult kamiNvramIo(u32 address, void* buffer, u32 size, BOOL is_read) } return KAMI_RESULT_SEND_ERROR; } -/////////////////////////////////////////////////////////////////// -///////// +/*---------------------------------------------------------------------------* + Name: MCUアクセス関数 + + Description: + + Arguments: None. + + Returns: + *---------------------------------------------------------------------------*/ + +KAMIResult kamiMcuIo(u32 reg_no, void* buffer, u32 value, BOOL is_read) +{ + OSIntrMode enabled; + u8 data[12]; + int i; + + // ロック + enabled = OS_DisableInterrupts(); + if (kamiWork.lock) + { + (void)OS_RestoreInterrupts(enabled); + return KAMI_RESULT_BUSY; + } + kamiWork.lock = TRUE; + (void)OS_RestoreInterrupts(enabled); + + kamiWork.callback = NULL; + kamiWork.arg = 0; + kamiWork.data = 0; + + // データ作成 + KAMI_PACK_U32(&data[0], ®_no); + KAMI_PACK_U32(&data[4], &buffer); + KAMI_PACK_U32(&data[8], &value); + + if (KamiSendPxiCommand(KAMI_MCU_IO, 12, (u8)is_read)) + { + for (i = 0; i < 12; i+=3) + { + KamiSendPxiData(&data[i]); + } + KamiWaitBusy(); + return (KAMIResult)kamiWork.result; + } + return KAMI_RESULT_SEND_ERROR; +} + +/*---------------------------------------------------------------------------* + Name: kamiCDC_GoDsMode + + Description: CODECをDSモードへ遷移させる関数 + + Arguments: None. + + Returns: + *---------------------------------------------------------------------------*/ + +KAMIResult kamiCDC_GoDsMode( void ) +{ + OSIntrMode enabled; + + // ロック + enabled = OS_DisableInterrupts(); + if (kamiWork.lock) + { + (void)OS_RestoreInterrupts(enabled); + return KAMI_RESULT_BUSY; + } + kamiWork.lock = TRUE; + (void)OS_RestoreInterrupts(enabled); + + kamiWork.callback = NULL; + kamiWork.arg = 0; + kamiWork.data = 0; + + if (KamiSendPxiCommand(KAMI_CDC_GO_DSMODE, 0, (u8)0)) + { + KamiWaitBusy(); + return (KAMIResult)kamiWork.result; + } + return KAMI_RESULT_SEND_ERROR; +} + +/*---------------------------------------------------------------------------* + PXI関連 + *---------------------------------------------------------------------------*/ + static BOOL KamiSendPxiCommand(KamiCommand command, u8 size, u8 data) { u32 pxiData = (u32)(KAMITEST_PXI_START_BIT | diff --git a/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/src/main.c b/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/src/main.c index 090c6d00..67ebae44 100644 --- a/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/src/main.c +++ b/build/systemMenu_RED/NandInitializerRed/ARM9.TWL/src/main.c @@ -71,7 +71,7 @@ TwlMain() OS_InitReset(); GX_Init(); FX_Init(); -// SND_Init(); + SND_Init(); TP_Init(); RTC_Init(); diff --git a/build/systemMenu_RED/NandInitializerRed/common/include/fifo.h b/build/systemMenu_RED/NandInitializerRed/common/include/fifo.h index 92e94642..47af57a9 100644 --- a/build/systemMenu_RED/NandInitializerRed/common/include/fifo.h +++ b/build/systemMenu_RED/NandInitializerRed/common/include/fifo.h @@ -59,12 +59,12 @@ KAMIPxiResult; typedef enum KamiCommand { - CODEC_READ_REGISTER, - CODEC_WRITE_REGISTER, - GPIO333_WRITE, - EXE_FORMAT, + KAMI_TEST_COMMAND, + KAMI_EXE_FORMAT, KAMI_NAND_IO, - KAMI_NVRAM_IO + KAMI_NVRAM_IO, + KAMI_MCU_IO, + KAMI_CDC_GO_DSMODE } KamiCommand;