mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
(trunc 2045-2046のマージ)CODEC用のSPI排他制御処理を追加。
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/branches/20080724_SDK500rc_branch@2053 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
32b51b6971
commit
ed5066b6f3
@ -99,7 +99,7 @@ static void VBlankIntr(void);
|
|||||||
static void InitializeFatfs(void);
|
static void InitializeFatfs(void);
|
||||||
static void InitializeNwm(OSArenaId drvArenaId, OSHeapHandle drvHeapHandle,
|
static void InitializeNwm(OSArenaId drvArenaId, OSHeapHandle drvHeapHandle,
|
||||||
OSArenaId wpaArenaId, OSHeapHandle wpaHeapHandle);
|
OSArenaId wpaArenaId, OSHeapHandle wpaHeapHandle);
|
||||||
static void InitializeCdc(void);
|
static void InitializeCdc(u32 lockId);
|
||||||
static void AdjustVolume(void);
|
static void AdjustVolume(void);
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
外部シンボル参照
|
外部シンボル参照
|
||||||
@ -123,6 +123,7 @@ void
|
|||||||
TwlSpMain(void)
|
TwlSpMain(void)
|
||||||
{
|
{
|
||||||
OSHeapHandle wramHeapHandle, mainHeapHandle;
|
OSHeapHandle wramHeapHandle, mainHeapHandle;
|
||||||
|
u32 spiLockId;
|
||||||
|
|
||||||
// SYSMワークのクリア
|
// SYSMワークのクリア
|
||||||
MI_CpuClear32( SYSMi_GetWork(), sizeof(SYSM_work) );
|
MI_CpuClear32( SYSMi_GetWork(), sizeof(SYSM_work) );
|
||||||
@ -219,13 +220,20 @@ TwlSpMain(void)
|
|||||||
AdjustVolume();
|
AdjustVolume();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CODECアクセス用のSPIロックIDを取得する(ランチャーのみ 2008/07/31)
|
||||||
|
spiLockId = (u32)OS_GetLockID();
|
||||||
|
if (spiLockId == OS_LOCK_ID_ERROR)
|
||||||
|
{
|
||||||
|
OS_Warning("OS_GetLockID failed.\n");
|
||||||
|
}
|
||||||
|
|
||||||
if (OSi_IsCodecTwlMode() == TRUE)
|
if (OSi_IsCodecTwlMode() == TRUE)
|
||||||
{
|
{
|
||||||
// CODEC 初期化
|
// CODEC 初期化
|
||||||
// ランチャーのみCDC_InitForFirstBootで実際にCODECの初期化を行う。
|
// ランチャーのみCDC_InitForFirstBootで実際にCODECの初期化を行う。
|
||||||
// アプリ起動時にはCODECは既に初期化されているためmongooseなどでは
|
// アプリ起動時にはCODECは既に初期化されているためmongooseなどでは
|
||||||
// 簡易的な初期化CDC_InitLibで良い。 2008/07/14
|
// 簡易的な初期化CDC_InitLibで良い。 2008/07/14
|
||||||
InitializeCdc();
|
InitializeCdc(spiLockId);
|
||||||
|
|
||||||
// カメラ初期化
|
// カメラ初期化
|
||||||
CAMERA_Init();
|
CAMERA_Init();
|
||||||
@ -279,7 +287,9 @@ TwlSpMain(void)
|
|||||||
HOTSW_Init(THREAD_PRIO_HOTSW);
|
HOTSW_Init(THREAD_PRIO_HOTSW);
|
||||||
|
|
||||||
// 外部デポップ回路を無効にします。(ランチャーのみ 2008/07/14)
|
// 外部デポップ回路を無効にします。(ランチャーのみ 2008/07/14)
|
||||||
|
SPI_Lock(spiLockId);
|
||||||
CDC_DisableExternalDepop();
|
CDC_DisableExternalDepop();
|
||||||
|
SPI_Unlock(spiLockId);
|
||||||
|
|
||||||
while (TRUE)
|
while (TRUE)
|
||||||
{
|
{
|
||||||
@ -465,7 +475,7 @@ InitializeNwm(OSArenaId drvArenaId, OSHeapHandle drvHeapHandle,
|
|||||||
Returns: None.
|
Returns: None.
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
static void
|
static void
|
||||||
InitializeCdc(void)
|
InitializeCdc(u32 lockId)
|
||||||
{
|
{
|
||||||
OSThread thread;
|
OSThread thread;
|
||||||
u32 stack[18];
|
u32 stack[18];
|
||||||
@ -475,7 +485,9 @@ InitializeCdc(void)
|
|||||||
(void*)((u32)stack + (sizeof(u32) * 18)), sizeof(u32) * 18, OS_THREAD_PRIORITY_MAX);
|
(void*)((u32)stack + (sizeof(u32) * 18)), sizeof(u32) * 18, OS_THREAD_PRIORITY_MAX);
|
||||||
OS_WakeupThreadDirect(&thread);
|
OS_WakeupThreadDirect(&thread);
|
||||||
|
|
||||||
CDC_InitForFirstBoot(); // ※ランチャー特殊処理。
|
SPI_Lock(lockId); // CODEC用SPI排他ロック
|
||||||
|
CDC_InitForFirstBoot(); // ※ランチャー特殊処理。
|
||||||
|
SPI_Unlock(lockId); // CODEC用SPI排他ロック
|
||||||
|
|
||||||
// ダミースレッド破棄
|
// ダミースレッド破棄
|
||||||
OS_KillThread(&thread, NULL);
|
OS_KillThread(&thread, NULL);
|
||||||
|
|||||||
@ -28,6 +28,8 @@
|
|||||||
#include "reboot.h"
|
#include "reboot.h"
|
||||||
#include "internal_api.h"
|
#include "internal_api.h"
|
||||||
|
|
||||||
|
extern void SPI_Lock(u32 id);
|
||||||
|
extern void SPI_Unlock(u32 id);
|
||||||
|
|
||||||
// define data-------------------------------------------------------
|
// define data-------------------------------------------------------
|
||||||
#define MAINP_SEND_IF 0x2000
|
#define MAINP_SEND_IF 0x2000
|
||||||
@ -141,6 +143,7 @@ static void BOOTi_RebootCallback( void** entryp, void* mem_list_v, REBOOTTarget*
|
|||||||
ROM_Header *th = (void*)REBOOTi_GetTwlRomHeaderAddr();
|
ROM_Header *th = (void*)REBOOTi_GetTwlRomHeaderAddr();
|
||||||
ROM_Header *dh = (void*)REBOOTi_GetRomHeaderAddr();
|
ROM_Header *dh = (void*)REBOOTi_GetRomHeaderAddr();
|
||||||
BOOL isNtrMode;
|
BOOL isNtrMode;
|
||||||
|
u32 spiLockId;
|
||||||
|
|
||||||
(void)OS_DisableIrq(); // ここで割り込み禁止にしないとダメ。
|
(void)OS_DisableIrq(); // ここで割り込み禁止にしないとダメ。
|
||||||
(void)OS_SetIrqMask(0); // SDKバージョンのサーチに時間がかかると、ARM9がHALTにかかってしまい、ARM7のサウンドスレッドがARM9にFIFOでデータ送信しようとしてもFIFOが一杯で送信できない状態で無限ループに入ってしまう。
|
(void)OS_SetIrqMask(0); // SDKバージョンのサーチに時間がかかると、ARM9がHALTにかかってしまい、ARM7のサウンドスレッドがARM9にFIFOでデータ送信しようとしてもFIFOが一杯で送信できない状態で無限ループに入ってしまう。
|
||||||
@ -304,6 +307,13 @@ static void BOOTi_RebootCallback( void** entryp, void* mem_list_v, REBOOTTarget*
|
|||||||
// I2S停止(MCLKは動作継続)
|
// I2S停止(MCLKは動作継続)
|
||||||
reg_SND_SMX_CNT &= ~REG_SND_SMX_CNT_E_MASK;
|
reg_SND_SMX_CNT &= ~REG_SND_SMX_CNT_E_MASK;
|
||||||
|
|
||||||
|
spiLockId = (u32)OS_GetLockID();
|
||||||
|
if (spiLockId == OS_LOCK_ID_ERROR)
|
||||||
|
{
|
||||||
|
OS_Warning("%s: OS_GetLockID failed.\n", __FUNCTION__);
|
||||||
|
}
|
||||||
|
SPI_Lock(spiLockId); // CODEC用SPI排他ロック
|
||||||
|
|
||||||
// CODEC再初期化
|
// CODEC再初期化
|
||||||
CDC_Init();
|
CDC_Init();
|
||||||
|
|
||||||
@ -318,6 +328,8 @@ static void BOOTi_RebootCallback( void** entryp, void* mem_list_v, REBOOTTarget*
|
|||||||
CDC_GoDsMode();
|
CDC_GoDsMode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SPI_Unlock(spiLockId); // CODEC用SPI排他ロック
|
||||||
|
|
||||||
// I2S再開
|
// I2S再開
|
||||||
// DSサウンド:DSP = 8:0
|
// DSサウンド:DSP = 8:0
|
||||||
// 32KHz
|
// 32KHz
|
||||||
|
|||||||
@ -294,24 +294,23 @@ InitializeCdc(void)
|
|||||||
{
|
{
|
||||||
OSThread thread;
|
OSThread thread;
|
||||||
u32 stack[18];
|
u32 stack[18];
|
||||||
/*
|
u32 spiLockId;
|
||||||
// ランチャー経由で起動した場合はCODECは既に初期化されているため
|
|
||||||
// コンポーネントがCODECを初期化する必要はありません。
|
spiLockId = (u32)OS_GetLockID();
|
||||||
// 将来的にはバッサリと切る必要がありますが、
|
if (spiLockId == OS_LOCK_ID_ERROR)
|
||||||
// 暫定的にI2Sが有効かどうかでCODECが初期化済みかどうかを判定します。
|
|
||||||
if (reg_SND_SMX_CNT & REG_SND_SMX_CNT_E_MASK)
|
|
||||||
{
|
{
|
||||||
return;
|
OS_Warning("OS_GetLockID failed.\n");
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
/* ダミースレッド作成 */
|
/* ダミースレッド作成 */
|
||||||
OS_CreateThread(&thread, DummyThread, NULL,
|
OS_CreateThread(&thread, DummyThread, NULL,
|
||||||
(void*)((u32)stack + (sizeof(u32) * 18)), sizeof(u32) * 18, OS_THREAD_PRIORITY_MAX);
|
(void*)((u32)stack + (sizeof(u32) * 18)), sizeof(u32) * 18, OS_THREAD_PRIORITY_MAX);
|
||||||
OS_WakeupThreadDirect(&thread);
|
OS_WakeupThreadDirect(&thread);
|
||||||
|
|
||||||
/* CODEC 初期化 */
|
/* CODEC 初期化 */
|
||||||
|
SPI_Lock(spiLockId);
|
||||||
CDC_Init();
|
CDC_Init();
|
||||||
CDC_InitMic();
|
SPI_Unlock(spiLockId);
|
||||||
|
|
||||||
/* ダミースレッド破棄 */
|
/* ダミースレッド破棄 */
|
||||||
OS_KillThread(&thread, NULL);
|
OS_KillThread(&thread, NULL);
|
||||||
|
|||||||
@ -73,7 +73,6 @@
|
|||||||
static void PrintDebugInfo(void);
|
static void PrintDebugInfo(void);
|
||||||
static OSHeapHandle InitializeAllocateSystem(void);
|
static OSHeapHandle InitializeAllocateSystem(void);
|
||||||
static void InitializeFatfs(void);
|
static void InitializeFatfs(void);
|
||||||
static void InitializeCdc(void);
|
|
||||||
static void DummyThread(void* arg);
|
static void DummyThread(void* arg);
|
||||||
|
|
||||||
static void ReadUserInfo(void);
|
static void ReadUserInfo(void);
|
||||||
@ -125,12 +124,8 @@ TwlSpMain(void)
|
|||||||
InitializeFatfs(); // FAT-FS
|
InitializeFatfs(); // FAT-FS
|
||||||
// InitializeNwm(heapHandle); // TWL 無線
|
// InitializeNwm(heapHandle); // TWL 無線
|
||||||
MCU_InitIrq(THREAD_PRIO_MCU); // マイコン
|
MCU_InitIrq(THREAD_PRIO_MCU); // マイコン
|
||||||
|
CDC_InitLib(); // CODECライブラリ初期化
|
||||||
if (OSi_IsCodecTwlMode() == TRUE)
|
CAMERA_Init(); // カメラ
|
||||||
{
|
|
||||||
InitializeCdc(); // CODEC
|
|
||||||
CAMERA_Init(); // カメラ
|
|
||||||
}
|
|
||||||
|
|
||||||
SND_Init(THREAD_PRIO_SND); // サウンド
|
SND_Init(THREAD_PRIO_SND); // サウンド
|
||||||
SNDEX_Init(THREAD_PRIO_SNDEX); // サウンド拡張
|
SNDEX_Init(THREAD_PRIO_SNDEX); // サウンド拡張
|
||||||
@ -249,41 +244,6 @@ InitializeFatfs(void)
|
|||||||
OS_KillThread(&thread, NULL);
|
OS_KillThread(&thread, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
|
||||||
Name: InitializeCdc
|
|
||||||
Description: CDCライブラリを初期化する。CDC初期化関数内でスレッド休止する
|
|
||||||
為、休止中動作するダミーのスレッドを立てる。
|
|
||||||
Arguments: None.
|
|
||||||
Returns: None.
|
|
||||||
*---------------------------------------------------------------------------*/
|
|
||||||
static void
|
|
||||||
InitializeCdc(void)
|
|
||||||
{
|
|
||||||
OSThread thread;
|
|
||||||
u32 stack[18];
|
|
||||||
/*
|
|
||||||
// ランチャー経由で起動した場合はCODECは既に初期化されているため
|
|
||||||
// コンポーネントがCODECを初期化する必要はありません。
|
|
||||||
// 将来的にはバッサリと切る必要がありますが、
|
|
||||||
// 暫定的にI2Sが有効かどうかでCODECが初期化済みかどうかを判定します。
|
|
||||||
if (reg_SND_SMX_CNT & REG_SND_SMX_CNT_E_MASK)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
/* ダミースレッド作成 */
|
|
||||||
OS_CreateThread(&thread, DummyThread, NULL,
|
|
||||||
(void*)((u32)stack + (sizeof(u32) * 18)), sizeof(u32) * 18, OS_THREAD_PRIORITY_MAX);
|
|
||||||
OS_WakeupThreadDirect(&thread);
|
|
||||||
|
|
||||||
/* CODEC 初期化 */
|
|
||||||
CDC_Init();
|
|
||||||
CDC_InitMic();
|
|
||||||
|
|
||||||
/* ダミースレッド破棄 */
|
|
||||||
OS_KillThread(&thread, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: DummyThread
|
Name: DummyThread
|
||||||
Description: FATFSライブラリ、CDCライブラリを初期化する際に立てるダミーの
|
Description: FATFSライブラリ、CDCライブラリを初期化する際に立てるダミーの
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user