📄 l1_audio.c
字号:
/*++
Copyright (c) 2001 Sunplus Technology Co., Ltd.
Module Name:
L1_PC.c
Abstract:
PC related upload/download function
Environment:
Keil C51 Compiler
Revision History:
11/30/2001 cclin created
--*/
//=============================================================================
//Header file
//=============================================================================
#include "general.h"
#include "main.h"
//=============================================================================
//Symbol
//=============================================================================
//-----------------------------------------------------------------------------
//Constant
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
//Variable
//-----------------------------------------------------------------------------
//=============================================================================
//Program
//=============================================================================
//-----------------------------------------------------------------------------
//L1_RecordAudio
//-----------------------------------------------------------------------------
UCHAR L1_RecordAudio(ULONG DRAMAddr, ULONG FlashAddr, ULONG FileSize, UCHAR AudFormat)
{
ULONG DMAAudCnt;
ULONG AudBufCnt;
ULONG DMANandCnt;
ULONG DMANandSize;
ULONG *pAudBufCnt = 0; // WWWW
//PRINT_L1(" L1_RecordAudio: Enter.\n");
DMANandSize = FileSize/0x2000; // DMA to Nand 8K at a time
//PRINT_L1("DMANandSize = %lx\n", DMANandSize);
//PRINT_L1("AudFormat = %bx\n", AudFormat);
//PRINT_L1("FlashAddr = %lx\n", FlashAddr);
//PRINT_L1("DRAMAddr = %lx\n", DRAMAddr);
L2_StopAud();
//L2_RecordAud(DRAMAddr, AudBufSize, AudFormat);
//L2_RecordAud(0, 0x03, 0x62); // adpcm
L2_RecordAudDMAMode(AudFormat);
//L2_RecordAudDMAMode(0x62);
for(DMANandCnt=0;DMANandCnt<DMANandSize;DMANandCnt++)
{
for(DMAAudCnt=0;DMAAudCnt<0x10;DMAAudCnt++) // 16 times DMA to DRAM account for 8K bytes {
{
L2_ReadAudBufCnt(pAudBufCnt);
AudBufCnt = ((ULONG)XBYTE[0x26b5]<<8) | ((ULONG)XBYTE[0x26b4]);
while (AudBufCnt<0x200) // DMA to DRAM when audio data over 512 bytes
{
AudBufCnt = ((ULONG)XBYTE[0x26b5]<<8) | ((ULONG)XBYTE[0x26b4]);
}
L2_SetDRAMDMA(DRAMAddr + DMAAudCnt*0x100);
L2_DoDMA(3,0,0x200,0,0);
} // for (DMAAudCnt
L1_DRAMtoNAND(0, FlashAddr+DMANandCnt*0x2000, 0x2000);
} // for (DMANandCnt
L2_StopAud();
//PRINT_L1(" L1_RecordAudio: Exit.\n");
return L1K_SUCCESS;
}
//-----------------------------------------------------------------------------
//L1_PlaybackAudio
//-----------------------------------------------------------------------------
UCHAR L1_PlaybackAudio(ULONG DRAMAddr, ULONG FlashAddr, ULONG FileSize, UCHAR AudFormat, UCHAR PlayFreq)
{
ULONG DMACnt;
ULONG AudBufCnt;
ULONG DMASize;
//ULONG *pDRAMAudBufCnt;
//PRINT_L1(" L1_PlaybackAudio: Enter.\n");
L2_StopAud();
DMASize = FileSize/0x1000; // DMA to DRAM 4K at a time
L2_PlayAud(DRAMAddr, 3, AudFormat, PlayFreq);
L2_SetDRAMAudDMACnt(1);
// 8K audio buffer in DRAM as 4K-4K AB buffer
for (DMACnt=0;DMACnt<DMASize;DMACnt++)
{
if(DMACnt%2==0)
L1_NANDtoDRAM(DRAMAddr, FlashAddr+DMACnt*0x1000, 0x1000);
else
L1_NANDtoDRAM(DRAMAddr + 0x800, FlashAddr+DMACnt*0x1000, 0x1000);
L2_ReadDRAMAudBufCnt(&AudBufCnt);
while (AudBufCnt>512)
{
L2_ReadDRAMAudBufCnt(&AudBufCnt);
}
}
//L2_StopAud();
//PRINT_L1(" L1_PlaybackAudio: Exit.\n");
return L1K_SUCCESS;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -