From e48811bca0bc5508a576d17bcfe7374f0081eb76 Mon Sep 17 00:00:00 2001 From: kamikawa Date: Fri, 28 Sep 2007 10:49:21 +0000 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E8=A6=8F=E3=83=9E=E3=82=A4=E3=82=AF?= =?UTF-8?q?=E3=83=A9=E3=82=A4=E3=83=96=E3=83=A9=E3=83=AA=E7=94=A8=E3=83=98?= =?UTF-8?q?=E3=83=83=E3=83=80=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=82=92?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/twl_wrapsdk/trunk@288 4ee2a332-4b2b-5046-8439-1ba90f034370 --- include/twl/mic/ARM7/twl_mic_api.h | 155 +++++++++++++++ include/twl/mic/ARM7/twl_mic_server.h | 98 ++++++++++ include/twl/mic/ARM9/twl_mic_api.h | 263 ++++++++++++++++++++++++++ include/twl/mic/common/fifo.h | 97 ++++++++++ 4 files changed, 613 insertions(+) create mode 100644 include/twl/mic/ARM7/twl_mic_api.h create mode 100644 include/twl/mic/ARM7/twl_mic_server.h create mode 100644 include/twl/mic/ARM9/twl_mic_api.h create mode 100644 include/twl/mic/common/fifo.h diff --git a/include/twl/mic/ARM7/twl_mic_api.h b/include/twl/mic/ARM7/twl_mic_api.h new file mode 100644 index 0000000..7051d73 --- /dev/null +++ b/include/twl/mic/ARM7/twl_mic_api.h @@ -0,0 +1,155 @@ +/*---------------------------------------------------------------------------* + Project: TwlSDK - library - camera + File: control.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. + + $Log: $ + $NoKeywords: $ + *---------------------------------------------------------------------------*/ + +#ifndef TWL_MIC_API_H_ +#define TWL_MIC_API_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/*===========================================================================*/ + +/*---------------------------------------------------------------------------* + 型定義 + *---------------------------------------------------------------------------*/ + +typedef void (*TWLMICFullCallback) (u8 loop); + +/*---------------------------------------------------------------------------* + 定数定義 + *---------------------------------------------------------------------------*/ + +typedef enum +{ + MIC_INTR_DISABLE = (0x0UL << REG_SND_MICCNT_IM_SHIFT), + MIC_INTR_HALF = (0x1UL << REG_SND_MICCNT_IM_SHIFT), + MIC_INTR_OVERFLOW = (0x2UL << REG_SND_MICCNT_IM_SHIFT), + MIC_INTR_HALF_OVERFLOW = (0x3UL << REG_SND_MICCNT_IM_SHIFT) +} +MICIntrCond; + +typedef enum +{ + MIC_SMP_ALL = (0x0UL << REG_SND_MICCNT_FIFO_SMP_SHIFT), + MIC_SMP_1_2 = (0x1UL << REG_SND_MICCNT_FIFO_SMP_SHIFT), + MIC_SMP_1_3 = (0x2UL << REG_SND_MICCNT_FIFO_SMP_SHIFT), + MIC_SMP_1_4 = (0x3UL << REG_SND_MICCNT_FIFO_SMP_SHIFT) +} +MICSampleRate; + +// マイク用タイマー定義 +#define reg_MIC_TMCNT_L reg_OS_TM3CNT_L +#define reg_MIC_TMCNT_H reg_OS_TM3CNT_H +#define MIC_TMCNT_H_E_MASK REG_OS_TM3CNT_H_E_MASK + + +/*---------------------------------------------------------------------------* + 構造体定義 + *---------------------------------------------------------------------------*/ +// MICライブラリ用ワーク構造体 + +typedef struct _TWLMICParam +{ + u8 dmaNo; // DMA No + MICSampleRate frequency; // サンプリング頻度 + u8 loop; // ループ + void* buffer; // データストア先のバッファ + u32 size; // 自動サンプリング格納先バッファサイズ + TWLMICFullCallback callback; +} +TWLMICParam; + +/*---------------------------------------------------------------------------* + 関数定義 + *---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------* + Name: TWL_MIC_DoSampling + + Description: start MIC + + Arguments: + + Returns: None + *---------------------------------------------------------------------------*/ +void TWL_MIC_DoSampling( u16* buffer ); + +/*---------------------------------------------------------------------------* + Name: TWL_MIC_StartAutoSampling + + Description: start MIC + + Arguments: id : slave id + + Returns: None + *---------------------------------------------------------------------------*/ +void TWL_MIC_StartAutoSampling( TWLMICParam param ); + +/*---------------------------------------------------------------------------* + Name: TWL_MIC_StopAutoSampling + + Description: stop MIC + + Arguments: None + + Returns: None + *---------------------------------------------------------------------------*/ +void TWL_MIC_StopAutoSampling( void ); + +/*---------------------------------------------------------------------------* + Name: TWL_MIC_GetLastSamplingAddress + + Description: stop MIC + + Arguments: None + + Returns: None + *---------------------------------------------------------------------------*/ +void* TWL_MIC_GetLastSamplingAddress( void ); + +/*---------------------------------------------------------------------------* + Name: TWL_MIC_SetAmpGain + + Description: TWLモードのマイクゲイン(PGAB)を設定します。 + PGABはAutoGainControlが無効になっているときのみ有効です。 + + Arguments: gain : 設定ゲイン(0〜119 = 0〜59.5dB) + + Returns: None + *---------------------------------------------------------------------------*/ +void TWL_MIC_SetAmpGain( u8 gain ); + +/*---------------------------------------------------------------------------* + Name: TWL_MIC_GetAmpGain + + Description: TWLモードのマイクゲイン(PGAB)を取得します。 + + Arguments: None + + Returns: gain + *---------------------------------------------------------------------------*/ +u8 TWL_MIC_GetAmpGain( void ); + +/*===========================================================================*/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* TWL_MIC_API_H_ */ diff --git a/include/twl/mic/ARM7/twl_mic_server.h b/include/twl/mic/ARM7/twl_mic_server.h new file mode 100644 index 0000000..7e692e8 --- /dev/null +++ b/include/twl/mic/ARM7/twl_mic_server.h @@ -0,0 +1,98 @@ +/*---------------------------------------------------------------------------* + Project: TwlSDK - library - camera + File: control.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. + + $Log: $ + $NoKeywords: $ + *---------------------------------------------------------------------------*/ + +#ifndef TWL_MIC_SERVER_H_ +#define TWL_MIC_SERVER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/*===========================================================================*/ + +/*---------------------------------------------------------------------------* + 定数定義 + *---------------------------------------------------------------------------*/ +#define TWL_MIC_MESSAGE_ARRAY_MAX 4 // スレッド同期用メッセージキューのサイズ +#define TWL_MIC_THREAD_STACK_SIZE 512 // スレッドのスタックサイズ +#define TWL_MIC_MESSAGE_ARGS_MAX 7 // メッセージ引数の最大値 + +// マイクに関する内部的な状態 +typedef enum _TWLMICStatus +{ + TWL_MIC_STATUS_READY = 0, // 通常操作待ち状態 + TWL_MIC_STATUS_ONE_SAMPLING_START, // 単発サンプリング開始待ち + TWL_MIC_STATUS_AUTO_START, // 自動サンプリング開始待ち + TWL_MIC_STATUS_AUTO_SAMPLING, // 自動サンプリング中 + TWL_MIC_STATUS_AUTO_END, // 自動サンプリング終了待ち + TWL_MIC_STATUS_END_WAIT // 自動サンプリング完了待ち(バッファFULL時の自動終了) +} +TWLMICStatus; + +/*---------------------------------------------------------------------------* + 構造体定義 + *---------------------------------------------------------------------------*/ + +// TWLマイク用メッセージデータ構造体 +typedef struct _TWLMICMessageData +{ + TWLMICPxiCommand command; + u32 arg[TWL_MIC_MESSAGE_ARGS_MAX]; +} +TWLMICMessageData; + +// MICライブラリ用ワーク構造体 + +typedef struct _TWLMICServerWork +{ + OSMessageQueue msgQ; // スレッド同期用メッセージキュー + OSMessage msgArray[TWL_MIC_MESSAGE_ARRAY_MAX]; // メッセージを格納するバッファ + TWLMICMessageData entry[TWL_MIC_MESSAGE_ARRAY_MAX]; // メッセージの実体 + u32 entryIndex; // エントリーインデックス + OSThread thread; // TWL-MIC用スレッド + u64 stack[TWL_MIC_THREAD_STACK_SIZE / sizeof(u64)]; // TWL-MIC用スレッドのスタック(小さくできる) + TWLMICStatus status; // マイク内部状態管理変数 + TWLMICPxiCommand command; // ARM9からのコマンド保存用 + u8 data[TWL_MIC_PXI_DATA_SIZE_MAX]; // ARM9からのデータ保存用 + u8 current; // 受信済みデータ個数 (バイト単位) + u8 total; // 最終データ個数 (1 + 後続コマンド*3) +} +TWLMICServerWork; + +/*---------------------------------------------------------------------------* + 関数定義 + *---------------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------------* + Name: TWL_MIC_InitServer + + Description: ARM7側とやりとりを行うための準備を行います。 + + Arguments: priority + + Returns: None. + *---------------------------------------------------------------------------*/ +void TWL_MIC_InitServer( u32 priority ); // 初期化、及びスレッドを開始 + +/*===========================================================================*/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* TWL_MIC_SERVER_H_ */ diff --git a/include/twl/mic/ARM9/twl_mic_api.h b/include/twl/mic/ARM9/twl_mic_api.h new file mode 100644 index 0000000..29cf795 --- /dev/null +++ b/include/twl/mic/ARM9/twl_mic_api.h @@ -0,0 +1,263 @@ +/*---------------------------------------------------------------------------* + Project: TwlSDK - library - twl-mic + File: twl_mic_api.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. + + $Log: $ + $NoKeywords: $ + *---------------------------------------------------------------------------*/ + +#ifndef TWL_MIC_MIC_API_H_ +#define TWL_MIC_MIC_API_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/*===========================================================================*/ + +// 処理結果定義 +typedef enum _TWLMICResult +{ + TWL_MIC_RESULT_SUCCESS = 0, + TWL_MIC_RESULT_ILLEGAL_PARAMETER, + TWL_MIC_RESULT_INVALID_COMMAND, + TWL_MIC_RESULT_ILLEGAL_STATUS, + TWL_MIC_RESULT_BUSY, + TWL_MIC_RESULT_SEND_ERROR, + TWL_MIC_RESULT_FATAL_ERROR, + TWL_MIC_RESULT_MAX +} +TWLMICResult; + +typedef enum +{ + TWL_MIC_FREQUENCY_ALL = 0x0, // 47.61 / 32.73 kHz + TWL_MIC_FREQUENCY_1_2 = 0x1, // 23.81 / 16.36 kHz + TWL_MIC_FREQUENCY_1_3 = 0x2, // 15.87 / 10.91 kHz + TWL_MIC_FREQUENCY_1_4 = 0x3, // 11.90 / 8.18 kHz + TWL_MIC_FREQUENCY_NUM = 0x4 +} +TwlMicFrequency; + +// コールバック +typedef void (*TwlMicCallback)(TWLMICResult result, void* arg); + +// オートサンプリング用設定定義 +typedef struct TwlMicAutoParam +{ + u32 dmaNo; // DMA No + void *buffer; // 結果格納バッファへのポインタ(DMAを使うため4byteアライメント) + u32 size; // バッファサイズ(DMAを使うため4byte単位) + TwlMicFrequency frequency; // サンプリング頻度 + BOOL loop_enable; // バッファフル時のループ可否 + TwlMicCallback full_callback; // バッファフル時のコールバック + void* full_arg; // 上記コールバックに指定する引数 +} +TwlMicAutoParam; + + +/*---------------------------------------------------------------------------* + Name: MIC_Init + + Description: MICライブラリを初期化する。 + + Arguments: None. + + Returns: None. + *---------------------------------------------------------------------------*/ +void +TWL_MIC_Init(void); + +/*---------------------------------------------------------------------------* + Name: MIC_End + + Description: MICライブラリを終了する。 + + Arguments: None. + + Returns: None. + *---------------------------------------------------------------------------*/ +void +TWL_MIC_End(void); + +/*---------------------------------------------------------------------------* + Name: TWL_MIC_DoSamplingAsync + + Description: マイク単発サンプリング開始(非同期版) + + Arguments: + + Returns: TWLMICResult + *---------------------------------------------------------------------------*/ +TWLMICResult +TWL_MIC_DoSamplingAsync(u16* buf, TwlMicCallback callback, void* callbackArg); + +/*---------------------------------------------------------------------------* + Name: TWL_MIC_DoSampling + + Description: マイク単発サンプリング開始(同期版) + + Arguments: + + Returns: TWLMICResult + *---------------------------------------------------------------------------*/ +TWLMICResult +TWL_MIC_DoSampling(u16* buf); + +/*---------------------------------------------------------------------------* + Name: TWL_MIC_StartAutoSamplingAsync + + Description: マイク自動サンプリング開始(非同期版) + + Arguments: param + + Returns: TWLMICResult + *---------------------------------------------------------------------------*/ +TWLMICResult +TWL_MIC_StartAutoSamplingAsync(TwlMicAutoParam* param, TwlMicCallback callback, void* callbackArg); + +/*---------------------------------------------------------------------------* + Name: TWL_MIC_StartAutoSampling + + Description: マイク自動サンプリング開始(同期版) + + Arguments: param + + Returns: TWLMICResult + *---------------------------------------------------------------------------*/ +TWLMICResult +TWL_MIC_StartAutoSampling(TwlMicAutoParam* param); + +/*---------------------------------------------------------------------------* + Name: TWL_MIC_StopAutoSampling + + Description: マイク自動サンプリング停止(同期版) + + Arguments: param + + Returns: TWLMICResult + *---------------------------------------------------------------------------*/ +TWLMICResult +TWL_MIC_StopAutoSampling( void ); + +/*---------------------------------------------------------------------------* + Name: TWL_MIC_StopAutoSamplingAsync + + Description: マイク自動サンプリング停止(非同期版) + + Arguments: none + + Returns: TWLMICResult + *---------------------------------------------------------------------------*/ +TWLMICResult +TWL_MIC_StopAutoSamplingAsync( TwlMicCallback callback, void* callbackArg ); + +/*---------------------------------------------------------------------------* + Name: TWL_MIC_GetLastSamplingAddressAsync + + Description: 最新のサンプリングデータの格納アドレスを返します。 + 但し、アドレスはサンプリング時間を元に算出したものである + ため誤差を含んでいます。さらにARM7からARM9へと通知してい + る間にサンプリングは進んでいる可能性があります。 + (非同期版) + + Arguments: adress : アドレス格納ポインタのアドレス + callback : + callbackArg : + + Returns: TWLMICResult + *---------------------------------------------------------------------------*/ +TWLMICResult +TWL_MIC_GetLastSamplingAddressAsync( void** adress, TwlMicCallback callback, void* callbackArg ); + +/*---------------------------------------------------------------------------* + Name: TWL_MIC_GetLastSamplingAddress + + Description: 最新のサンプリングデータの格納アドレスを返します。 + 但し、アドレスはサンプリング時間を元に算出したものである + ため誤差を含んでいます。さらにARM7からARM9へと通知してい + る間にサンプリングは進んでいる可能性があります。 + (同期版) + + Arguments: adress : アドレス格納ポインタのアドレス + + Returns: TWLMICResult + *---------------------------------------------------------------------------*/ +TWLMICResult +TWL_MIC_GetLastSamplingAddress( void** adress ); + +/*---------------------------------------------------------------------------* + Name: TWL_MIC_SetAmpGainAsync + + Description: プログラマブルゲインアンプの設定を行います。(非同期版) + この関数で設定したゲインはオートゲインコントロールが + 無効になっているときのみ有効となることに注意してください。 + + Arguments: gain : 設定ゲイン(0〜119 = 0〜59.5dB) + callback : + callbackArg : + + Returns: TWLMICResult + *---------------------------------------------------------------------------*/ +TWLMICResult +TWL_MIC_SetAmpGainAsync( u8 gain, TwlMicCallback callback, void* callbackArg ); + +/*---------------------------------------------------------------------------* + Name: TWL_MIC_SetAmpGain + + Description: プログラマブルゲインアンプの設定を行います。(同期版) + この関数で設定したゲインはオートゲインコントロールが + 無効になっているときのみ有効となることに注意してください。 + + Arguments: gain : 設定ゲイン(0〜119 = 0〜59.5dB) + + Returns: TWLMICResult + *---------------------------------------------------------------------------*/ +TWLMICResult +TWL_MIC_SetAmpGain( u8 gain ); + +/*---------------------------------------------------------------------------* + Name: TWL_MIC_GetAmpGainAsync + + Description: TWLモードのマイクゲイン(PGAB)を取得します。 + (非同期版) + + Arguments: gain : マイクゲイン値の格納アドレス + callback : + callbackArg : + + Returns: TWLMICResult + *---------------------------------------------------------------------------*/ +TWLMICResult +TWL_MIC_GetAmpGainAsync( u8* gain, TwlMicCallback callback, void* callbackArg ); + +/*---------------------------------------------------------------------------* + Name: TWL_MIC_GetAmpGain + + Description: TWLモードのマイクゲイン(PGAB)を取得します。 + (同期版) + + Arguments: gain : マイクゲイン値の格納アドレス + + Returns: TWLMICResult + *---------------------------------------------------------------------------*/ +TWLMICResult +TWL_MIC_GetAmpGain( u8* gain ); + +/*===========================================================================*/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* TWL_MIC_MIC_API_H_ */ diff --git a/include/twl/mic/common/fifo.h b/include/twl/mic/common/fifo.h new file mode 100644 index 0000000..ea00600 --- /dev/null +++ b/include/twl/mic/common/fifo.h @@ -0,0 +1,97 @@ +/*---------------------------------------------------------------------------* + Project: TwlSDK - mic - 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. + + $Log: $ + $NoKeywords: $ + *---------------------------------------------------------------------------*/ +#ifndef TWL_MIC_FIFO_H_ +#define TWL_MIC_FIFO_H_ + +/*---------------------------------------------------------------------------* + 定数定義 + *---------------------------------------------------------------------------*/ +// プロトコル関連定義 +#define TWL_MIC_PXI_CONTINUOUS_PACKET_MAX 10 // 連続パケットの最大連続回数 +#define TWL_MIC_PXI_DATA_SIZE_MAX ((TWL_MIC_PXI_CONTINUOUS_PACKET_MAX-1)*3+1) // 最大データ数 + +#define TWL_MIC_PXI_START_BIT 0x02000000 // 先頭パケットを意味する +#define TWL_MIC_PXI_RESULT_BIT 0x00008000 // PXIの応答を示す + +/* 先頭パケットのみの規則 */ +#define TWL_MIC_PXI_DATA_NUMS_MASK 0x00ff0000 // データ数領域 +#define TWL_MIC_PXI_DATA_NUMS_SHIFT 16 // データ数位置 +#define TWL_MIC_PXI_COMMAND_MASK 0x00007f00 // コマンド格納部分のマスク +#define TWL_MIC_PXI_COMMAND_SHIFT 8 // コマンド格納部分の位置 +#define TWL_MIC_PXI_1ST_DATA_MASK 0x000000ff // 先頭パケットのデータ領域 +#define TWL_MIC_PXI_1ST_DATA_SHIFT 0 // 先頭パケットのデータ位置 + +/* 後続パケットのみの規則 */ +#define TWL_MIC_PXI_DATA_MASK 0x00ffffff // データ領域 +#define TWL_MIC_PXI_DATA_SHIFT 0 // データ位置 + +#ifdef __cplusplus +extern "C" { +#endif + +/*===========================================================================*/ + +// PXIコマンド定義 +typedef enum _TWLMICPxiCommand +{ + TWL_MIC_PXI_COMMAND_ONE_SAMPLING = 0x34, // 単発サンプリング + TWL_MIC_PXI_COMMAND_AUTO_START = 0x35, // 自動サンプリングスタート + TWL_MIC_PXI_COMMAND_AUTO_STOP = 0x36, // 自動サンプリングストップ + TWL_MIC_PXI_COMMAND_GET_LAST_SAMPLING_ADDRESS = 0x37, // 最新サンプリングデータのアドレス取得 + TWL_MIC_PXI_COMMAND_SET_AMP_GAIN = 0x38, // PGAB設定 + TWL_MIC_PXI_COMMAND_GET_AMP_GAIN = 0x39, // PGAB取得 + TWL_MIC_PXI_COMMAND_MIC_BUFFER_FULL = 0x50, // バッファフルの通知 + TWL_MIC_PXI_COMMAND_UNKNOWN +} +TWLMICPxiCommand; + +// PXIコマンド付加データサイズ定義 +typedef enum TWLMICPxiSize +{ + TWL_MIC_PXI_SIZE_ONE_SAMPLING = 0, // 0 + TWL_MIC_PXI_SIZE_AUTO_START = 11, // dmaNo(u8) buffer(u32) size(u32) frequency(u8) loop_erable(u8) + TWL_MIC_PXI_SIZE_AUTO_STOP = 0, // 0 + TWL_MIC_PXI_SIZE_GET_LAST_SAMPLING_ADDRESS = 0, // 0 + TWL_MIC_PXI_SIZE_SET_AMP_GAIN = 1, // gain(u8) + TWL_MIC_PXI_SIZE_GET_AMP_GAIN = 0, // 0 + TWL_MIC_PXI_SIZE_UNKNOWN +} +TWLMICPxiSize; + +// 応答定義 +typedef enum TWLMICPxiResult +{ + TWL_MIC_PXI_RESULT_SUCCESS = 0, // 処理成功 (void/void*型) // 場合により後続パケットあり + TWL_MIC_PXI_RESULT_INVALID_COMMAND, // 不正なPXIコマンド + TWL_MIC_PXI_RESULT_INVALID_PARAMETER, // 不正なパラメータ + TWL_MIC_PXI_RESULT_ILLEGAL_STATUS, // 状態により処理を実行不能 + TWL_MIC_PXI_RESULT_BUSY, // 他のリクエストを実行中 + TWL_MIC_PXI_RESULT_FATAL_ERROR, // その他何らかの原因で処理に失敗 + TWL_MIC_PXI_RESULT_MAX +} +TWLMICPxiResult; + +/*===========================================================================*/ + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* TWL_MIC_FIFO_H_ */ + +/*---------------------------------------------------------------------------* + End of file + *---------------------------------------------------------------------------*/