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
This commit is contained in:
yutaka 2007-07-05 04:52:43 +00:00
parent a2b5acb237
commit 1e0ba50ead
9 changed files with 542 additions and 32 deletions

View File

@ -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;

View File

@ -29,6 +29,7 @@ SUBDIRS += \
aes \
camera \
fatfs \
dsp \
endif # TWL_PLATFORM != DSTEG

31
build/tests/dsp/Makefile Normal file
View File

@ -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 =====

View File

@ -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 =====

View File

@ -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 <twl_sp.h>
#include <twl/snd/ARM7/i2s.h>
/*---------------------------------------------------------------------------*
*---------------------------------------------------------------------------*/
// ===== スレッド優先度 =====
#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
*---------------------------------------------------------------------------*/

View File

@ -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 =====

View File

@ -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 <twl.h>
#include <twl/dsp.h>
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
}

View File

@ -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 =====

View File

@ -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