mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
製品技術部のリクエストに対応。
・NandInitializer と同じプログラムで基板検査も実施するためにカメラやサウンドなどこれまで削っていたライブラリをリンクするようにしました。 マイコンをアドレス指定でアクセスできる関数を追加しました。CODECのモードをDSモードへと遷移させる関数をARM9側に用意しました。 (同一プログラムでCODEC-TWLモードとCODEC-DSモードの両方をテストするため) git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1076 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
6265e414db
commit
95645a3dba
@ -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)
|
||||
|
||||
@ -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)
|
||||
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -16,14 +16,14 @@
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
#include <twl.h>
|
||||
#include <twl/exi/ARM7/genPort2.h>
|
||||
#include <twl/exi/ARM7/genPort2.h>
|
||||
#include "kami_pxi.h"
|
||||
#include "fifo.h"
|
||||
#include "twl/cdc.h"
|
||||
#include "formatter.h"
|
||||
#include "nvram.h"
|
||||
|
||||
#include "nvram.h"
|
||||
#include <twl/ltdmain_begin.h>
|
||||
#include <twl/mcu.h>
|
||||
|
||||
//#include <c:/TWL_SDK/build/libraries/fatfs/ARM7.TWL/include/twl/rtfs.h>
|
||||
//#include <c:/TWL_SDK/build/libraries/fatfs/ARM7.TWL/include/twl/devices/sdmc/ARM7/sdmc.h>
|
||||
@ -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);
|
||||
|
||||
@ -25,6 +25,7 @@
|
||||
#include <twl/sea.h>
|
||||
#include <twl/fatfs.h>
|
||||
#include <twl/nwm.h>
|
||||
#include <twl/camera.h>
|
||||
#include <twl/mcu.h>
|
||||
#include <twl/cdc.h>
|
||||
#include <nitro/snd.h>
|
||||
@ -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);
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
/*===========================================================================*/
|
||||
|
||||
|
||||
@ -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: ƒtƒH<EFBFBD>[ƒ}ƒbƒgŽÀ<EFBFBD>sŠÖ<EFBFBD>”
|
||||
|
||||
@ -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 |
|
||||
|
||||
@ -71,7 +71,7 @@ TwlMain()
|
||||
OS_InitReset();
|
||||
GX_Init();
|
||||
FX_Init();
|
||||
// SND_Init();
|
||||
SND_Init();
|
||||
TP_Init();
|
||||
RTC_Init();
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user