マイコンアクセス用PXIを改善。カメラモジュールタイプ取得PXIを追加。(製品技術部:検査工程対応)

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1307 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
kamikawa 2008-05-09 08:40:55 +00:00
parent 0466cb01da
commit 7bc35270e1
4 changed files with 151 additions and 16 deletions

View File

@ -24,10 +24,9 @@
#include "nvram.h" #include "nvram.h"
#include <twl/ltdmain_begin.h> #include <twl/ltdmain_begin.h>
#include <twl/mcu.h> #include <twl/mcu.h>
#include <twl/camera.h>
//#include <c:/TWL_SDK/build/libraries/fatfs/ARM7.TWL/include/twl/rtfs.h> #include <twl/camera/ARM7/i2c_sharp.h>
//#include <c:/TWL_SDK/build/libraries/fatfs/ARM7.TWL/include/twl/devices/sdmc/ARM7/sdmc.h> #include <twl/camera/ARM7/i2c_micron.h>
typedef unsigned char byte; /* Don't change */ typedef unsigned char byte; /* Don't change */
typedef unsigned short word; /* Don't change */ typedef unsigned short word; /* Don't change */
@ -134,6 +133,7 @@ static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err)
case KAMI_ARM7_IO: case KAMI_ARM7_IO:
case KAMI_CDC_GO_DSMODE: case KAMI_CDC_GO_DSMODE:
case KAMI_CLEAR_NAND_ERRORLOG: case KAMI_CLEAR_NAND_ERRORLOG:
case KAMI_GET_CAMERA_MODULE_TYPE:
if (!OS_SendMessage(&kamiWork.msgQ, NULL, OS_MESSAGE_NOBLOCK)) if (!OS_SendMessage(&kamiWork.msgQ, NULL, OS_MESSAGE_NOBLOCK))
{ {
KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_FATAL_ERROR); KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_FATAL_ERROR);
@ -253,23 +253,23 @@ static void KamiThread(void *arg)
{ {
BOOL is_read; BOOL is_read;
u32 reg_no; u32 reg_no;
void* buffer; u32 write;
u32 value; u32 read;
is_read = (BOOL)kamiWork.data[0]; is_read = (BOOL)kamiWork.data[0];
KAMI_UNPACK_U32(&reg_no, &kamiWork.data[1]); KAMI_UNPACK_U32(&reg_no, &kamiWork.data[1]);
KAMI_UNPACK_U32((u32 *)(&buffer), &kamiWork.data[5]); KAMI_UNPACK_U32(&write, &kamiWork.data[5]);
KAMI_UNPACK_U32(&value, &kamiWork.data[9]);
if (is_read) if (is_read)
{ {
*(u8 *)buffer = MCU_ReadRegister( (u8)reg_no ); read = MCU_ReadRegister( (u8)reg_no );
KamiReturnResultEx(kamiWork.command, KAMI_PXI_RESULT_SUCCESS, sizeof(u8), (u8*)&read );
} }
else else
{ {
MCU_WriteRegister( (u8)reg_no, (u8)value ); MCU_WriteRegister( (u8)reg_no, (u8)write );
KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS);
} }
KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS);
} }
break; break;
@ -317,6 +317,37 @@ static void KamiThread(void *arg)
} }
break; break;
case KAMI_GET_CAMERA_MODULE_TYPE:
{
CameraModuleTypes types;
if (CAMERAi_IsSharpModule(CAMERA_SELECT_IN))
{
types.in = CAMERA_MODULE_TYPE_SHARP;
}
else if (CAMERAi_IsMicronModule(CAMERA_SELECT_IN))
{
types.in = CAMERA_MODULE_TYPE_MICRON;
}
else
{
types.in = CAMERA_MODULE_TYPE_UNKNOWN;
}
if (CAMERAi_IsSharpModule(CAMERA_SELECT_OUT))
{
types.out = CAMERA_MODULE_TYPE_SHARP;
}
else if (CAMERAi_IsMicronModule(CAMERA_SELECT_OUT))
{
types.out = CAMERA_MODULE_TYPE_MICRON;
}
else
{
types.out = CAMERA_MODULE_TYPE_UNKNOWN;
}
KamiReturnResultEx(kamiWork.command, KAMI_PXI_RESULT_SUCCESS, sizeof(CameraModuleTypes), (u8*)&types);
}
break;
default: default:
KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_INVALID_COMMAND); KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_INVALID_COMMAND);
} }

View File

@ -65,9 +65,11 @@ KAMIResult kamiMcuIo(u32 reg_no, void* buffer, u32 value, BOOL is_read);
KAMIResult kamiARM7Io(u32 addr, u32* buffer, u32 value, BOOL is_read); KAMIResult kamiARM7Io(u32 addr, u32* buffer, u32 value, BOOL is_read);
KAMIResult kamiCDC_GoDsMode( void ); KAMIResult kamiCDC_GoDsMode( void );
KAMIResult kamiClearNandErrorLog( void ); KAMIResult kamiClearNandErrorLog( void );
KAMIResult kamiGetCameraModuleTypesAsync( CameraModuleTypes *pTypes, KAMICallback callback, void* arg );
KAMIResult kamiGetCameraModuleTypes( CameraModuleTypes *pTypes );
// (<28>d—v) // (<28>d—v)
// ARM7が読み書きするためリードはInvalidate、ライト前はフラッシュしてください。 // ARM7が読み書きするためリードはInvalidate、ライト前はフラッシュしてください。
// //
static KAMIResult kamiNandRead(u32 block, void* buffer, u32 count) static KAMIResult kamiNandRead(u32 block, void* buffer, u32 count)
{ {

View File

@ -254,12 +254,18 @@ KAMIResult kamiMcuIo(u32 reg_no, void* buffer, u32 value, BOOL is_read)
kamiWork.callback = NULL; kamiWork.callback = NULL;
kamiWork.arg = 0; kamiWork.arg = 0;
kamiWork.data = 0; if (is_read)
{
kamiWork.data = (u8*)buffer;
}
else
{
kamiWork.data = 0;
}
// データ作成 // データ作成
KAMI_PACK_U32(&data[0], &reg_no); KAMI_PACK_U32(&data[0], &reg_no);
KAMI_PACK_U32(&data[4], &buffer); KAMI_PACK_U32(&data[4], &value);
KAMI_PACK_U32(&data[8], &value);
if (KamiSendPxiCommand(KAMI_MCU_IO, 12, (u8)is_read)) if (KamiSendPxiCommand(KAMI_MCU_IO, 12, (u8)is_read))
{ {
@ -400,6 +406,83 @@ KAMIResult kamiClearNandErrorLog( void )
return KAMI_RESULT_SEND_ERROR; return KAMI_RESULT_SEND_ERROR;
} }
/*---------------------------------------------------------------------------*
Name: kamiGetCameraModuleTypesAsync
Description:
Arguments: None.
Returns:
*---------------------------------------------------------------------------*/
KAMIResult kamiGetCameraModuleTypesAsync( CameraModuleTypes *pTypes, KAMICallback callback, void* arg )
{
OSIntrMode enabled;
if (pTypes == NULL)
{
return KAMI_RESULT_INVALID_PARAMETER;
}
enabled = OS_DisableInterrupts();
if (kamiWork.lock)
{
(void)OS_RestoreInterrupts(enabled);
return KAMI_RESULT_BUSY;
}
kamiWork.lock = TRUE;
kamiWork.callback = callback;
kamiWork.arg = arg;
kamiWork.data = (u8*)pTypes;
(void)OS_RestoreInterrupts(enabled);
if (KamiSendPxiCommand(KAMI_GET_CAMERA_MODULE_TYPE, 0, 0))
{
return KAMI_RESULT_SUCCESS;
}
return KAMI_RESULT_SEND_ERROR;
}
/*---------------------------------------------------------------------------*
Name: kamiGetCameraModuleTypes
Description:
Arguments: None.
Returns:
*---------------------------------------------------------------------------*/
KAMIResult kamiGetCameraModuleTypes( CameraModuleTypes *pTypes )
{
OSIntrMode enabled;
if (pTypes == NULL)
{
return KAMI_RESULT_INVALID_PARAMETER;
}
enabled = OS_DisableInterrupts();
if (kamiWork.lock)
{
(void)OS_RestoreInterrupts(enabled);
return KAMI_RESULT_BUSY;
}
kamiWork.lock = TRUE;
kamiWork.callback = NULL;
kamiWork.arg = 0;
kamiWork.data = (u8*)pTypes;
(void)OS_RestoreInterrupts(enabled);
if (KamiSendPxiCommand(KAMI_GET_CAMERA_MODULE_TYPE, 0, 0))
{
KamiWaitBusy();
return (KAMIResult)kamiWork.result;
}
return KAMI_RESULT_SEND_ERROR;
}
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
PXI関連 PXI関連
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/

View File

@ -57,6 +57,7 @@ typedef enum KAMIPxiResult
} }
KAMIPxiResult; KAMIPxiResult;
typedef enum KamiCommand typedef enum KamiCommand
{ {
KAMI_TEST_COMMAND, KAMI_TEST_COMMAND,
@ -66,10 +67,28 @@ typedef enum KamiCommand
KAMI_MCU_IO, KAMI_MCU_IO,
KAMI_ARM7_IO, KAMI_ARM7_IO,
KAMI_CDC_GO_DSMODE, KAMI_CDC_GO_DSMODE,
KAMI_CLEAR_NAND_ERRORLOG KAMI_CLEAR_NAND_ERRORLOG,
KAMI_GET_CAMERA_MODULE_TYPE
} }
KamiCommand; KamiCommand;
typedef enum CameraModuleType
{
CAMERA_MODULE_TYPE_UNKNOWN,
CAMERA_MODULE_TYPE_SHARP,
CAMERA_MODULE_TYPE_MICRON
}
CameraModuleType;
typedef struct CameraModuleTypes
{
CameraModuleType in;
CameraModuleType out;
}
CameraModuleTypes;
/*===========================================================================*/ /*===========================================================================*/