From 1e0ba50eadae7299cd0dde3fe8fdfa8b175326be Mon Sep 17 00:00:00 2001 From: yutaka Date: Thu, 5 Jul 2007 04:52:43 +0000 Subject: [PATCH] add DSP test program to develop DSP code with JTAG git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/twl_wrapsdk/trunk@174 4ee2a332-4b2b-5046-8439-1ba90f034370 --- build/libraries/dsp/ARM9/dsp_if.c | 50 ++++--- build/tests/Makefile | 1 + build/tests/dsp/Makefile | 31 +++++ build/tests/dsp/dsp-jtag/ARM7/Makefile | 44 ++++++ build/tests/dsp/dsp-jtag/ARM7/src/main.c | 166 +++++++++++++++++++++++ build/tests/dsp/dsp-jtag/ARM9/Makefile | 43 ++++++ build/tests/dsp/dsp-jtag/ARM9/src/main.c | 148 ++++++++++++++++++++ build/tests/dsp/dsp-jtag/Makefile | 32 +++++ include/twl/dsp/ARM9/dsp_if.h | 59 ++++++-- 9 files changed, 542 insertions(+), 32 deletions(-) create mode 100644 build/tests/dsp/Makefile create mode 100644 build/tests/dsp/dsp-jtag/ARM7/Makefile create mode 100644 build/tests/dsp/dsp-jtag/ARM7/src/main.c create mode 100644 build/tests/dsp/dsp-jtag/ARM9/Makefile create mode 100644 build/tests/dsp/dsp-jtag/ARM9/src/main.c create mode 100644 build/tests/dsp/dsp-jtag/Makefile diff --git a/build/libraries/dsp/ARM9/dsp_if.c b/build/libraries/dsp/ARM9/dsp_if.c index d115a02..ec7cbad 100644 --- a/build/libraries/dsp/ARM9/dsp_if.c +++ b/build/libraries/dsp/ARM9/dsp_if.c @@ -44,14 +44,14 @@ static volatile DSPData *const dspData = (DSPData*)REG_APBP_COM0_ADDR; /*---------------------------------------------------------------------------* Name: DSP_PowerOn - Description: power DSP block on but DSPR yet. + Description: power DSP block on but reset yet. you should call DSP_ResetOff() to boot DSP. Arguments: None. Returns: None. *---------------------------------------------------------------------------*/ -void DSP_PowerOn(void) +void DSP_PowerOn(void) // DSP_Init { reg_CFG_DSP_RST &= ~REG_CFG_DSP_RST_OFF_MASK; // DSPブロックのリセット確認 reg_CFG_CLK |= REG_CFG_CLK_DSP_MASK; // DSPブロックの電源On @@ -68,7 +68,7 @@ void DSP_PowerOn(void) Returns: None. *---------------------------------------------------------------------------*/ -void DSP_PowerOff(void) +void DSP_PowerOff(void) // DSP_End { reg_CFG_DSP_RST &= ~REG_CFG_DSP_RST_OFF_MASK; // DSPブロックのリセット設定 reg_CFG_CLK &= ~REG_CFG_CLK_DSP_MASK; // DSPブロックの電源Off @@ -77,7 +77,7 @@ void DSP_PowerOff(void) /*---------------------------------------------------------------------------* Name: DSP_ResetOn - Description: Reset DSP. + Description: Reset DSP unless Reset state. Arguments: None. @@ -85,9 +85,12 @@ void DSP_PowerOff(void) *---------------------------------------------------------------------------*/ void DSP_ResetOn(void) { - reg_DSP_PCFG |= REG_DSP_PCFG_DSPR_MASK; - while ( reg_DSP_PSTS & REG_DSP_PSTS_PRST_MASK ) + if ((reg_DSP_PCFG & REG_DSP_PCFG_DSPR_MASK) == 0) { + reg_DSP_PCFG |= REG_DSP_PCFG_DSPR_MASK; + while ( reg_DSP_PSTS & REG_DSP_PSTS_PRST_MASK ) + { + } } } /*---------------------------------------------------------------------------* @@ -119,13 +122,16 @@ void DSP_ResetOff(void) *---------------------------------------------------------------------------*/ void DSP_ResetInterface(void) { - u16 dummy; - reg_DSP_PCFG &= ~REG_DSP_PCFG_RRIE_MASK; - reg_DSP_PSEM = 0; - reg_DSP_PCLEAR = 0xFFFF; - dummy = dspData[0].recv; - dummy = dspData[1].recv; - dummy = dspData[2].recv; + if (reg_DSP_PCFG & REG_DSP_PCFG_DSPR_MASK) + { + u16 dummy; + reg_DSP_PCFG &= ~REG_DSP_PCFG_RRIE_MASK; + reg_DSP_PSEM = 0; + reg_DSP_PCLEAR = 0xFFFF; + dummy = dspData[0].recv; + dummy = dspData[1].recv; + dummy = dspData[2].recv; + } } /*---------------------------------------------------------------------------* @@ -254,7 +260,7 @@ void DSP_DisableFifoInterrupt(DSPFifoIntr type) } /*---------------------------------------------------------------------------* - Name: DSP_SendFifo + Name: DSP_SendFifoEx Description: write data into DSP memory space. @@ -268,7 +274,7 @@ void DSP_DisableFifoInterrupt(DSPFifoIntr type) Returns: None. *---------------------------------------------------------------------------*/ -void DSP_SendFifo(DSPFifoMemSel memsel, u16 dest, const u16 *src, int size, u16 flags) +void DSP_SendFifoEx(DSPFifoMemSel memsel, u16 dest, const u16 *src, int size, u16 flags) { u16 incmode = (u16)((flags & DSP_FIFO_FLAG_SRC_FIX) ? 0 : REG_DSP_PCFG_AIM_MASK); @@ -299,22 +305,22 @@ void DSP_SendFifo(DSPFifoMemSel memsel, u16 dest, const u16 *src, int size, u16 } /*---------------------------------------------------------------------------* - Name: DSP_RecvFifo + Name: DSP_RecvFifoEx Description: read data into DSP memory space. Arguments: memsel: one of DSPFifoMemSel without PROGRAM area - addr: source address (in half words). + dest: data to receive. + src: source address (in half words). if you want to set high address, ask DSP to set DMA register. - bufp: data to receive. size: data length to receive (in half words). ignore unless continuous mode flags: bitOR of DSPFifoFlag to specify special mode Returns: None. *---------------------------------------------------------------------------*/ -void DSP_RecvFifo(DSPFifoMemSel memsel, u16 addr, u16 *bufp, int size, u16 flags) +void DSP_RecvFifoEx(DSPFifoMemSel memsel, u16* dest, u16 src, int size, u16 flags) { DSPFifoRecvLength len; u16 incmode = (u16)((flags & DSP_FIFO_FLAG_SRC_FIX) ? 0 : REG_DSP_PCFG_AIM_MASK); @@ -340,7 +346,7 @@ void DSP_RecvFifo(DSPFifoMemSel memsel, u16 addr, u16 *bufp, int size, u16 flags break; } - reg_DSP_PADR = addr; + reg_DSP_PADR = src; reg_DSP_PCFG = (u16)((reg_DSP_PCFG & ~(REG_DSP_PCFG_MEMSEL_MASK|REG_DSP_PCFG_DRS_MASK|REG_DSP_PCFG_AIM_MASK)) | memsel | len | incmode | REG_DSP_PCFG_RS_MASK); @@ -351,7 +357,7 @@ void DSP_RecvFifo(DSPFifoMemSel memsel, u16 addr, u16 *bufp, int size, u16 flags while ((reg_DSP_PSTS & REG_DSP_PSTS_RFNEI_MASK) == 0) { } - *bufp = reg_DSP_PDATA; + *dest = reg_DSP_PDATA; } } else @@ -361,7 +367,7 @@ void DSP_RecvFifo(DSPFifoMemSel memsel, u16 addr, u16 *bufp, int size, u16 flags while ((reg_DSP_PSTS & REG_DSP_PSTS_RFNEI_MASK) == 0) { } - *bufp++ = reg_DSP_PDATA; + *dest++ = reg_DSP_PDATA; } } reg_DSP_PCFG &= ~REG_DSP_PCFG_RS_MASK; diff --git a/build/tests/Makefile b/build/tests/Makefile index 30e6d51..931c246 100644 --- a/build/tests/Makefile +++ b/build/tests/Makefile @@ -29,6 +29,7 @@ SUBDIRS += \ aes \ camera \ fatfs \ + dsp \ endif # TWL_PLATFORM != DSTEG diff --git a/build/tests/dsp/Makefile b/build/tests/dsp/Makefile new file mode 100644 index 0000000..1fd77b1 --- /dev/null +++ b/build/tests/dsp/Makefile @@ -0,0 +1,31 @@ +#! make -f +#---------------------------------------------------------------------------- +# Project: TwlSDK - tests - dsp +# File: Makefile +# +# 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: $ +#---------------------------------------------------------------------------- + +include $(TWLSDK_ROOT)/build/buildtools/commondefs + + +#---------------------------------------------------------------------------- + +SUBDIRS = dsp-jtag \ + + +#---------------------------------------------------------------------------- + +include $(TWLSDK_ROOT)/build/buildtools/modulerules + + +#===== End of Makefile ===== diff --git a/build/tests/dsp/dsp-jtag/ARM7/Makefile b/build/tests/dsp/dsp-jtag/ARM7/Makefile new file mode 100644 index 0000000..bd0a741 --- /dev/null +++ b/build/tests/dsp/dsp-jtag/ARM7/Makefile @@ -0,0 +1,44 @@ +#! make -f +#---------------------------------------------------------------------------- +# Project: TwlSDK - tests - dsp-jtag +# File: Makefile +# +# 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: $ +#---------------------------------------------------------------------------- + +SUBDIRS = + + +#---------------------------------------------------------------------------- + +#TWL_CODEGEN = THUMB +TWL_PROC = ARM7 + +TARGET_BIN = dsp_jtag7.axf + +SRCS = main.c + +#SRCDIR = # using default +#LCFILE = # using default + +include $(TWLSDK_ROOT)/build/buildtools/commondefs + + +#---------------------------------------------------------------------------- + +do-build: $(TARGETS) + + +include $(TWLSDK_ROOT)/build/buildtools/modulerules + + +#===== End of Makefile ===== diff --git a/build/tests/dsp/dsp-jtag/ARM7/src/main.c b/build/tests/dsp/dsp-jtag/ARM7/src/main.c new file mode 100644 index 0000000..5b979ea --- /dev/null +++ b/build/tests/dsp/dsp-jtag/ARM7/src/main.c @@ -0,0 +1,166 @@ +/*---------------------------------------------------------------------------* + Project: TwlSDK - tests - dsp - jtag + File: main.c + + 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: main.c,v $ + $NoKeywords: $ + *---------------------------------------------------------------------------*/ + +#include +#include + +/*---------------------------------------------------------------------------* + 定数定義 + *---------------------------------------------------------------------------*/ +// ===== スレッド優先度 ===== + +#define THREAD_PRIO_SPI 2 + +/*---------------------------------------------------------------------------* + 内部関数定義 + *---------------------------------------------------------------------------*/ +static OSHeapHandle InitializeAllocateSystem(void); +static void VBlankIntr(void); + +/*---------------------------------------------------------------------------* + Name: TwlSpMain + + Description: Initialize and do main + + Arguments: None. + + Returns: None. + *---------------------------------------------------------------------------*/ +void TwlSpMain(void) +{ + OSHeapHandle heapHandle; + + // OS初期化 + OS_Init(); + OS_InitThread(); + + // PXI初期化、ARM9と同期 + PXI_Init(); + + // ヒープ領域設定 + heapHandle = InitializeAllocateSystem(); + + // ボタン入力サーチ初期化 + (void)PAD_InitXYButton(); + + // 割込み許可 + (void)OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); + (void)OS_EnableIrqMask(OS_IE_V_BLANK); + (void)GX_VBlankIntr(TRUE); + (void)OS_EnableIrq(); + (void)OS_EnableInterrupts(); + + // サウンド初期化 + SND_I2SEnable(); + SND_I2SSetMixingRatio(0); // dsp only + MICi_Init(); + + // SPI初期化 + SPI_Init(THREAD_PRIO_SPI); + + // DSP JTAG + reg_CFG_DSP_JTAG = REG_CFG_DSP_JTAG_E_MASK; + if (reg_CFG_DSP_JTAG == 0) + { + OS_TPanic("DSP JTAG cannot be enabled.\n"); + } + OS_TPrintf("DSP JTAG has enabled.\n"); + + while (TRUE) + { + OS_Halt(); + + //---- check reset + if (OS_IsResetOccurred()) + { + OS_ResetSystem(); + } + } +} + +/*---------------------------------------------------------------------------* + Name: InitializeAllocateSystem + + Description: メモリ割当てシステムを初期化する。 + + Arguments: None. + + Returns: None. + *---------------------------------------------------------------------------*/ +static OSHeapHandle InitializeAllocateSystem(void) +{ + void *tempLo; + OSHeapHandle hh; + + OS_TPrintf("OS_GetWramSubPrivArenaLo() = %p\n", OS_GetWramSubPrivArenaLo()); + OS_TPrintf("OS_GetWramSubPrivArenaHi() = %p\n", OS_GetWramSubPrivArenaHi()); + OS_TPrintf("OS_GetWramSubArenaLo() = %p\n", OS_GetWramSubArenaLo()); + OS_TPrintf("OS_GetWramSubArenaHi() = %p\n", OS_GetWramSubArenaHi()); + OS_TPrintf("OS_GetSubPrivArenaLo() = %p\n", OS_GetSubPrivArenaLo()); + OS_TPrintf("OS_GetSubPrivArenaHi() = %p\n", OS_GetSubPrivArenaHi()); + + OS_TPrintf("call OS_SetWramSubPrivArenaHi(0x0380f980); to fix arena.\n"); + OS_SetWramSubPrivArenaHi((void*)0x0380f980); + + // メモリ割当て初期化 + tempLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, + OS_GetWramSubPrivArenaLo(), OS_GetWramSubPrivArenaHi(), 1); + + // アリーナを0クリア + MI_CpuClear8(tempLo, (u32)OS_GetWramSubPrivArenaHi() - (u32)tempLo); + + // アリーナ下位アドレスを設定 + OS_SetArenaLo(OS_ARENA_WRAM_SUBPRIV, tempLo); + + // ヒープ作成 + hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, + OS_GetWramSubPrivArenaLo(), OS_GetWramSubPrivArenaHi()); + + if (hh < 0) + { + OS_Panic("ARM7: Fail to create heap.\n"); + } + + // カレントヒープに設定 + (void)OS_SetCurrentHeap(OS_ARENA_WRAM_SUBPRIV, hh); + + return hh; +} + +/*---------------------------------------------------------------------------* + Name: VBlankIntr + + Description: VBlank interrupt handler + + Arguments: None + + Returns: None + *---------------------------------------------------------------------------*/ +extern BOOL PMi_Initialized; +void PM_SelfBlinkProc(void); + +static void VBlankIntr(void) +{ + //---- LED blink system + if (PMi_Initialized) + { + PM_SelfBlinkProc(); + } +} + +/*---------------------------------------------------------------------------* + End of file + *---------------------------------------------------------------------------*/ diff --git a/build/tests/dsp/dsp-jtag/ARM9/Makefile b/build/tests/dsp/dsp-jtag/ARM9/Makefile new file mode 100644 index 0000000..c758a33 --- /dev/null +++ b/build/tests/dsp/dsp-jtag/ARM9/Makefile @@ -0,0 +1,43 @@ +#! make -f +#---------------------------------------------------------------------------- +# Project: TwlSDK - tests - dsp-jtag +# File: Makefile +# +# 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: $ +#---------------------------------------------------------------------------- + +SUBDIRS = + + +#---------------------------------------------------------------------------- + +#TWL_CODEGEN = THUMB + +TARGET_BIN = dsp_jtag9.axf + +SRCS = main.c + +#SRCDIR = # using default +#LCFILE = # using default + +include $(TWLSDK_ROOT)/build/buildtools/commondefs + + +#---------------------------------------------------------------------------- + +do-build: $(TARGETS) + + +include $(TWLSDK_ROOT)/build/buildtools/modulerules + + +#===== End of Makefile ===== diff --git a/build/tests/dsp/dsp-jtag/ARM9/src/main.c b/build/tests/dsp/dsp-jtag/ARM9/src/main.c new file mode 100644 index 0000000..934e572 --- /dev/null +++ b/build/tests/dsp/dsp-jtag/ARM9/src/main.c @@ -0,0 +1,148 @@ +/*---------------------------------------------------------------------------* + Project: TwlSDK - SND - tests - channel + File: main.c + + 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: main.c,v $ + $NoKeywords: $ + *---------------------------------------------------------------------------*/ + +#include +#include + +void VBlankIntr(void); + + +#define WRAM_BNK_PACK( master, ofs, enable ) \ +( \ + (((enable) != FALSE) * REG_MI_WRAM_A0_E_MASK) \ + | (ofs) \ + | (master) \ +) + +/*---------------------------------------------------------------------------* + Name: TwlMain + + Description: main + + Arguments: None + + Returns: None + *---------------------------------------------------------------------------*/ +void TwlMain() +{ + u16 Cont = 0xFFFF; + + // 初期化 + OS_Init(); + GX_Init(); + + // Vブランク割り込み設定 + OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); + (void)OS_EnableIrqMask(OS_IE_V_BLANK); + (void)OS_EnableIrq(); + (void)GX_VBlankIntr(TRUE); + + // USAGE + OS_TPrintf("\n"); + OS_TPrintf("===================================\n"); + OS_TPrintf("START: DSP_ResetOn and DSP_ResetOff\n\n"); + OS_TPrintf(" A: DSP_ResetOff\n"); + OS_TPrintf(" B: DSP_ResetOn\n"); + OS_TPrintf(" X: DSP_ResetInterface\n"); + OS_TPrintf("===================================\n"); + +#if 0 + // DSP初期コード(JTAG接続待ち)の書き込み + /* DSP_Iの先頭4Bを 0x5e47, 0x0000 (br ##0, ture) にするとか? */ + /* brr でも良いのか? */ +#endif + + // WRAMメモリマップ変更 + { + reg_MI_WRAM_B0 = WRAM_BNK_PACK(MI_WRAM_B_DSP_I, MI_WRAM_B_OFS_0KB, TRUE); + reg_MI_WRAM_B1 = WRAM_BNK_PACK(MI_WRAM_B_DSP_I, MI_WRAM_B_OFS_32KB, TRUE); + reg_MI_WRAM_B2 = WRAM_BNK_PACK(MI_WRAM_B_DSP_I, MI_WRAM_B_OFS_64KB, TRUE); + reg_MI_WRAM_B3 = WRAM_BNK_PACK(MI_WRAM_B_DSP_I, MI_WRAM_B_OFS_96KB, TRUE); + reg_MI_WRAM_B4 = WRAM_BNK_PACK(MI_WRAM_B_DSP_I, MI_WRAM_B_OFS_128KB, TRUE); + reg_MI_WRAM_B5 = WRAM_BNK_PACK(MI_WRAM_B_DSP_I, MI_WRAM_B_OFS_160KB, TRUE); + reg_MI_WRAM_B6 = WRAM_BNK_PACK(MI_WRAM_B_DSP_I, MI_WRAM_B_OFS_192KB, TRUE); + reg_MI_WRAM_B7 = WRAM_BNK_PACK(MI_WRAM_B_DSP_I, MI_WRAM_B_OFS_224KB, TRUE); + } + { + reg_MI_WRAM_C0 = WRAM_BNK_PACK(MI_WRAM_C_DSP_D, MI_WRAM_C_OFS_0KB, TRUE); + reg_MI_WRAM_C1 = WRAM_BNK_PACK(MI_WRAM_C_DSP_D, MI_WRAM_C_OFS_32KB, TRUE); + reg_MI_WRAM_C2 = WRAM_BNK_PACK(MI_WRAM_C_DSP_D, MI_WRAM_C_OFS_64KB, TRUE); + reg_MI_WRAM_C3 = WRAM_BNK_PACK(MI_WRAM_C_DSP_D, MI_WRAM_C_OFS_96KB, TRUE); + reg_MI_WRAM_C4 = WRAM_BNK_PACK(MI_WRAM_C_DSP_D, MI_WRAM_C_OFS_128KB, TRUE); + reg_MI_WRAM_C5 = WRAM_BNK_PACK(MI_WRAM_C_DSP_D, MI_WRAM_C_OFS_160KB, TRUE); + reg_MI_WRAM_C6 = WRAM_BNK_PACK(MI_WRAM_C_DSP_D, MI_WRAM_C_OFS_192KB, TRUE); + reg_MI_WRAM_C7 = WRAM_BNK_PACK(MI_WRAM_C_DSP_D, MI_WRAM_C_OFS_224KB, TRUE); + } + + // DSP初期化 & Go + OS_TPrintf("DSP_PowerOn..."); + DSP_PowerOn(); + OS_TPrintf("Done.\n"); + OS_TPrintf("DSP_ResetOff..."); + DSP_ResetOff(); + OS_TPrintf("Done.\n"); + + while (1) + { + u16 ReadData; + u16 Trg; + + OS_WaitVBlankIntr(); + + ReadData = PAD_Read(); + Trg = (u16)(ReadData & ~Cont); + Cont = ReadData; + + if (Trg & PAD_BUTTON_A) + { + OS_TPrintf("DSP_ResetOff..."); + DSP_ResetOff(); + OS_TPrintf("Done.\n"); + } + if (Trg & PAD_BUTTON_B) + { + OS_TPrintf("DSP_ResetOn..."); + DSP_ResetOn(); + OS_TPrintf("Done.\n"); + } + if (Trg & PAD_BUTTON_X) + { + OS_TPrintf("DSP_ResetInterface..."); + DSP_ResetInterface(); + OS_TPrintf("Done.\n"); + } + + if (Trg & PAD_BUTTON_START) + { + OS_TPrintf("DSP_ResetOn/DSP_ResetOff..."); + DSP_ResetOn(); +#if 0 + // DSP初期コード(JTAG接続待ち)の再書き込み + /* ここでやりたければ、一時的にWRAMメモリマップを変更する必要がある */ +#endif + DSP_ResetOff(); + OS_TPrintf("Done.\n"); + } + } +} + +//-------------------------------------------------------------------------------- +// Vブランク割り込み処理 +// +void VBlankIntr(void) +{ + OS_SetIrqCheckFlag(OS_IE_V_BLANK); // checking VBlank interrupt +} diff --git a/build/tests/dsp/dsp-jtag/Makefile b/build/tests/dsp/dsp-jtag/Makefile new file mode 100644 index 0000000..078ec37 --- /dev/null +++ b/build/tests/dsp/dsp-jtag/Makefile @@ -0,0 +1,32 @@ +#! make -f +#---------------------------------------------------------------------------- +# Project: TwlSDK - build +# File: Makefile +# +# 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: $ +#---------------------------------------------------------------------------- + +include $(TWLSDK_ROOT)/build/buildtools/commondefs + + +#---------------------------------------------------------------------------- + +SUBDIRS = \ + ARM7 \ + ARM9 \ + +#---------------------------------------------------------------------------- + +include $(TWLSDK_ROOT)/build/buildtools/modulerules + + +#===== End of Makefile ===== diff --git a/include/twl/dsp/ARM9/dsp_if.h b/include/twl/dsp/ARM9/dsp_if.h index 360c1e6..5b51886 100644 --- a/include/twl/dsp/ARM9/dsp_if.h +++ b/include/twl/dsp/ARM9/dsp_if.h @@ -83,8 +83,8 @@ DSPFifoFlag; /*---------------------------------------------------------------------------* Name: DSP_PowerOn - Description: power DSP block on but DSPR yet. - you should call DSP_DSPROff() to boot DSP. + Description: power DSP block on but reset yet. + you should call DSP_ResetOff() to boot DSP. Arguments: None. @@ -227,7 +227,7 @@ void DSP_EnableFifoInterrupt(DSPFifoIntr type); void DSP_DisableFifoInterrupt(DSPFifoIntr type); /*---------------------------------------------------------------------------* - Name: DSP_SendFifo + Name: DSP_SendFifoEx Description: write data into DSP memory space. @@ -238,28 +238,67 @@ void DSP_DisableFifoInterrupt(DSPFifoIntr type); src: data to send. size: data length to send (in half words). flags: bitOR of DSPFifoFlag to specify special mode + without DSP_FIFO_FLAG_RECV_UNIT_* Returns: None. *---------------------------------------------------------------------------*/ -void DSP_SendFifo(DSPFifoMemSel memsel, u16 dest, const u16 *src, int size, u16 flags); +void DSP_SendFifoEx(DSPFifoMemSel memsel, u16 dest, const u16 *src, int size, u16 flags); /*---------------------------------------------------------------------------* - Name: DSP_RecvFifo + Name: DSP_SendFifo - Description: read data into DSP memory space. + Description: write data into DSP memory space normally. - Arguments: memsel: one of DSPFifoMemSel without PROGRAM area - addr: source address (in half words). + Arguments: memsel: one of DSPFifoMemSel + dest: destination address (in half words). + if you want to set high address, ask DSP to set + DMA register. + src: data to send. + size: data length to send (in half words). + + Returns: None. + *---------------------------------------------------------------------------*/ +static inline void DSP_SendFifo(DSPFifoMemSel memsel, u16 dest, const u16 *src, int size) +{ + DSP_SendFifoEx(memsel, dest, src, size, 0); +} + +/*---------------------------------------------------------------------------* + Name: DSP_RecvFifoEx + + Description: read data from DSP memory space. + + Arguments: memsel: one of DSPFifoMemSel without PROGRAM area + dest: data to receive. + src: source address (in half words). if you want to set high address, ask DSP to set DMA register. - bufp: data to receive. size: data length to receive (in half words). ignore unless continuous mode flags: bitOR of DSPFifoFlag to specify special mode Returns: None. *---------------------------------------------------------------------------*/ -void DSP_RecvFifo(DSPFifoMemSel memsel, u16 addr, u16 *bufp, int size, u16 flags); +void DSP_RecvFifoEx(DSPFifoMemSel memsel, u16 *dest, u16 src, int size, u16 flags); + +/*---------------------------------------------------------------------------* + Name: DSP_RecvFifo + + Description: read data from DSP memory space normally. + + Arguments: memsel: one of DSPFifoMemSel + dest: data to receive. + src: source address (in half words). + if you want to set high address, ask DSP to set + DMA register. + size: data length to receive (in half words). + + Returns: None. + *---------------------------------------------------------------------------*/ +static inline void DSP_RecvFifo(DSPFifoMemSel memsel, u16* dest, u16 src, int size) +{ + DSP_RecvFifoEx(memsel, dest, src, size, 0); +} /*---------------------------------------------------------------------------* Name: DSP_SetSemaphore