mirror of
https://github.com/rvtr/twl_wrapsdk.git
synced 2025-10-31 06:11:10 -04:00
CODEC関連コードを更新。 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/twl_wrapsdk/trunk@287 4ee2a332-4b2b-5046-8439-1ba90f034370
226 lines
8.5 KiB
C
226 lines
8.5 KiB
C
/*---------------------------------------------------------------------------*
|
||
Project: NitroSDK - libraries - spi
|
||
File: tp_sp.h
|
||
|
||
Copyright 2003-2006 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.
|
||
|
||
$Log: tp_sp.h,v $
|
||
Revision 1.7 2006/01/18 02:12:27 kitase_hirotake
|
||
do-indent
|
||
|
||
Revision 1.6 2005/02/28 05:26:27 yosizaki
|
||
do-indent.
|
||
|
||
Revision 1.5 2004/12/29 02:03:59 takano_makoto
|
||
SetStability関数のretryパラメータを廃止, rangeの自動調整スイッチを有効に変更
|
||
|
||
Revision 1.4 2004/12/20 00:40:55 takano_makoto
|
||
自動サンプリング時のVAlarmのdelayを設定
|
||
|
||
Revision 1.3 2004/12/15 09:12:40 takano_makoto
|
||
rangeの自動調整を追加。SDK_TP_AUTO_ADJUST_RANGEによって有効になる。
|
||
|
||
Revision 1.2 2004/11/05 05:47:24 terui
|
||
SPIコマンドについての制約事項をコメントに追加。
|
||
|
||
Revision 1.1 2004/09/06 12:54:18 terui
|
||
libraries/spi/includeからlibraries/spi/ARM7/includeに移動。
|
||
SPI処理予約方式の実装に伴う修正。
|
||
|
||
Revision 1.9 2004/08/09 13:23:25 takano_makoto
|
||
MIC自動サンプリングの合間にTPの1回サンプリングが実行できるように修正
|
||
|
||
Revision 1.8 2004/07/31 08:06:45 terui
|
||
サンプリングコマンドをターゲットHWにより振り分ける仕様を追加
|
||
|
||
Revision 1.7 2004/06/17 11:07:43 terui
|
||
接触判定コマンド定義を変更。0x94 -> 0x84
|
||
|
||
Revision 1.6 2004/05/25 00:58:01 terui
|
||
SPI各デバイス用ライブラリ細分化に伴う修正
|
||
|
||
Revision 1.5 2004/05/14 04:50:36 yosiokat
|
||
TEGとTSの両方に対応するよう変更
|
||
|
||
Revision 1.4 2004/04/29 10:25:59 terui
|
||
関数定義の引数削除に伴う変更
|
||
|
||
Revision 1.3 2004/04/14 06:26:46 terui
|
||
SPIライブラリのソース整理に伴う更新
|
||
|
||
Revision 1.2 2004/04/05 04:47:05 terui
|
||
Change composition.
|
||
|
||
$NoKeywords: $
|
||
*---------------------------------------------------------------------------*/
|
||
|
||
#ifndef LIBRARIES_TP_SP_H_
|
||
#define LIBRARIES_TP_SP_H_
|
||
|
||
#include <nitro/types.h>
|
||
#include "spi_sp.h"
|
||
/////////////////////////////// TWL
|
||
#include "tp_reg.h"
|
||
///////////////////////////////
|
||
|
||
|
||
#ifdef __cplusplus
|
||
extern "C" {
|
||
#endif
|
||
|
||
/*===========================================================================*/
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
定数定義
|
||
*---------------------------------------------------------------------------*/
|
||
/* 2004/11/04 照井
|
||
*
|
||
* 新規別デバイスのために、以下のコマンド以外は予約とします。
|
||
* ARM7がTPコントローラにこれら以外のコマンドを発行する必要がある場合は
|
||
* 予約されていることを考慮して注意して使用して下さい。
|
||
*
|
||
* 0x0000 ダミー命令
|
||
* 0x0084 接触判定
|
||
* 0x0091 Y方向サンプリング
|
||
* 0x0093 Y方向サンプリング(旧バージョン)
|
||
* 0x00D1 X方向サンプリング
|
||
* 0x00D3 X方向サンプリング(旧バージョン)
|
||
*
|
||
*/
|
||
#ifdef SDK_TEG
|
||
// 内部リファレンスを使用
|
||
#define TP_COMMAND_SAMPLING_X 0x00D3 // X方向サンプリング命令
|
||
#define TP_COMMAND_SAMPLING_Y 0x0093 // Y方向サンプリング命令
|
||
#else // SDK_TS
|
||
#if ( SDK_TS_VERSION >= 100 ) // 青箱Ver.D以降
|
||
// 外部リファレンスを使用
|
||
#define TP_COMMAND_SAMPLING_X 0x00D1 // X方向サンプリング命令
|
||
#define TP_COMMAND_SAMPLING_Y 0x0091 // Y方向サンプリング命令
|
||
#else // 青箱Ver.D未満
|
||
// 内部リファレンスを使用
|
||
#define TP_COMMAND_SAMPLING_X 0x00D3 // X方向サンプリング命令
|
||
#define TP_COMMAND_SAMPLING_Y 0x0093 // Y方向サンプリング命令
|
||
#endif
|
||
#endif
|
||
|
||
#define TP_COMMAND_DETECT_TOUCH 0x0084 // 接触判定命令
|
||
|
||
#define TP_VALID_BIT_MASK 0x7ff8 // 有効データビット
|
||
#define TP_VALID_BIT_SHIFT 3 // xooooooo oooooxxx
|
||
|
||
#define TP_VALARM_DELAY_MAX 10
|
||
|
||
#define TP_DATA_SAMPLE_DEPTH_MAX 8
|
||
#define TP_DATA_SAMPLE_DEPTH_DEFAULT 5
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
構造体定義
|
||
*---------------------------------------------------------------------------*/
|
||
// タッチパネルに関する内部的な状態
|
||
typedef enum TPStatus
|
||
{
|
||
TP_STATUS_READY = 0, // 通常操作待ち状態
|
||
TP_STATUS_AUTO_START, // 自動サンプリング開始待ち状態
|
||
TP_STATUS_AUTO_SAMPLING, // 自動サンプリング中
|
||
TP_STATUS_AUTO_WAIT_END // 自動サンプリング停止待ち状態
|
||
}
|
||
TPStatus;
|
||
|
||
// タッチパネル用ワーク構造体
|
||
typedef struct TPWork
|
||
{
|
||
u16 command[SPI_PXI_CONTINUOUS_PACKET_MAX];
|
||
TPStatus status; // タッチパネル内部状態管理変数
|
||
s32 range; // 安定判定時の許容する振れ幅のデフォルト値
|
||
s32 rangeMin; // 安定判定時の許容する振れ幅の最小値(range自動調整で使用)
|
||
OSVAlarm vAlarm[SPI_TP_SAMPLING_FREQUENCY_MAX]; // タッチパネル用Vアラーム
|
||
u16 vCount[SPI_TP_SAMPLING_FREQUENCY_MAX]; // タッチパネル用Vカウント退避エリア
|
||
|
||
}
|
||
TPWork;
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
関数定義
|
||
*---------------------------------------------------------------------------*/
|
||
void TP_Init(void);
|
||
void TP_AnalyzeCommand(u32 data);
|
||
void TP_ExecuteProcess(SPIEntry * entry);
|
||
|
||
//////////////////////////// TWL
|
||
void TWL_TP_Init(void);
|
||
//void TWL_TP_AnalyzeCommand(u32 data);
|
||
//void TWL_TP_ExecuteProcess(SPIEntry * entry);
|
||
|
||
void TWL_TP_SetStabilizationTime( TpSetupTime_t time );
|
||
void TWL_TP_SetPrechargeTime( TpSetupTime_t time );
|
||
void TWL_TP_SetSenseTime( TpSetupTime_t time );
|
||
void TWL_TP_SetDebounceTime( tpDebounce_t time );
|
||
void TWL_TP_SetResolution( TpResolution_t res );
|
||
void TWL_TP_GetResolution( TpResolution_t *res );
|
||
void TWL_TP_SetTouchPanelDataDepth(u8 depth);
|
||
void TWL_TP_SetConversionMode( TpCnversionControl_t control, TpConversionMode_t mode, TpCnversionPin_t pin );
|
||
void TWL_TP_SetInterval( tpInterval_t interval );
|
||
void TWL_TP_EnableNewBufferMode( void );
|
||
void TWL_TP_DisableNewBufferMode( void );
|
||
////////////////////////////
|
||
|
||
#define SDK_TP_AUTO_ADJUST_RANGE // range自動調整スイッチ
|
||
|
||
#ifdef SDK_TP_AUTO_ADJUST_RANGE // range自動調整スイッチ
|
||
void TP_ExecSampling(SPITpData *data, s32 range, u16 *density);
|
||
BOOL TWL_TP_ReadBuffer( SPITpData *data, u8 range, u16* density );
|
||
#else
|
||
void TP_ExecSampling(SPITpData *data, s32 range);
|
||
BOOL TWL_TP_ReadBuffer( SPITpData *data, u8 range );
|
||
#endif
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
インライン関数定義
|
||
*---------------------------------------------------------------------------*/
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
Name: TP_SPIChangeMode
|
||
|
||
Description: SPIコントロールレジスタを編集してタッチパネル用コマンド転送準備を
|
||
整える。この時同時に、SPI連続クロック発振モードを切り替える。
|
||
|
||
CODECの制限により、
|
||
DSモードではSPIクロックは2MHzが限度となるので注意。
|
||
TWLモードではSPIクロックは4MHzとなるため、
|
||
この関数ではなくCDCi_ChangeSpiModeを使用する。
|
||
|
||
Arguments: continuous - SPI連続クロック発振可否。'1'で1byte通信の都度CSを上げ
|
||
ないモード。ただし連続転送の最後の1バイトでは'0'にして
|
||
1byte転送モードにしないと永久にCSが上がらない。
|
||
|
||
Returns: None.
|
||
*---------------------------------------------------------------------------*/
|
||
static inline void TP_SPIChangeMode(SPITransMode continuous)
|
||
{
|
||
reg_SPI_SPICNT = (u16)((0x0001 << REG_SPI_SPICNT_E_SHIFT) | (0x0000 << REG_SPI_SPICNT_I_SHIFT) | (SPI_COMMPARTNER_TP << REG_SPI_SPICNT_SEL_SHIFT) | // 吉岡変更
|
||
// ( SPI_COMMPARTNER_PMIC << REG_SPI_SPICNT_SEL_SHIFT ) | // 吉岡変更前
|
||
(continuous << REG_SPI_SPICNT_MODE_SHIFT) |
|
||
(0x0000 << REG_SPI_SPICNT_BUSY_SHIFT) |
|
||
(SPI_BAUDRATE_2MHZ << REG_SPI_SPICNT_BAUDRATE_SHIFT));
|
||
}
|
||
|
||
|
||
|
||
/*===========================================================================*/
|
||
|
||
#ifdef __cplusplus
|
||
} /* extern "C" */
|
||
#endif
|
||
|
||
#endif /* LIBRARIES_TP_SP_H_ */
|
||
|
||
/*---------------------------------------------------------------------------*
|
||
End of file
|
||
*---------------------------------------------------------------------------*/
|