⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 play-pcm.c

📁 S3C2410例子程序
💻 C
字号:
#include "def.h"
#include "2410lib.h"
#include "option.h"
#include "2410addr.h"
#include "interrupt.h"

#include "coff.h"
#include "hpi.h"

//arm-elf-ld -r -o wave8k.o -b binary hong.pcm
//arm-elf-ld -r -o dsp.o -b binary exp-audio.out

#define  BIT_CLR(X, bits)		(X &= ~bits)
#define  BIT_SET(X, bits)		(X |=  bits)

		
#define TOTAL_WAV_SECS			30
#define TOTAL_WAV_BULK			(TOTAL_WAV_SECS * 8)

#define DSP_HPI_DRAM_BASE		HPI_MEMORY_BASE	
#define DSP_HPI_DRAM_START		0x1000	
#define DSP_HPI_DRAM_SIZE		4000	

extern unsigned long __input_data;
extern unsigned long __input_data_end;
extern unsigned long __input_coff;
extern unsigned long __input_coff_end;

int time_cnt = 0;
unsigned short* psrc = (unsigned short*)(unsigned long)(&__input_data);

void __vWDTInterrupt(void) 		__attribute__ ((interrupt("IRQ")));

void __vWDTInterrupt(void)
{
	int index;

	unsigned short* pdst = (unsigned short*)DSP_HPI_DRAM_BASE+DSP_HPI_DRAM_START;
	
    rSRCPND &= BIT_WDT;                        // Clear any pending WD int
    rINTPND &= BIT_WDT;
    
    if(time_cnt&1)
    {
    	pdst += (DSP_HPI_DRAM_SIZE/2);
    }
    
    time_cnt++;
    
    if( time_cnt >= TOTAL_WAV_BULK ) 
    {
    	psrc = (unsigned short*)(unsigned long)(&__input_data);
    	time_cnt = 0;
    }
   		
	// Copy wave data
	for( index = 0; index < 2000; index++)
	{
   		*pdst++ = *psrc++;
   	}
}

/********************************************************************
// Function name	: Main
// Description	    : JXARM9-2410 -> DSP 放音实验主程序
//                    实现功能:
//                    实现JXRAM9-2410与DSP通过HPI的串口通讯
// Return type		: void
// Argument         : void
*********************************************************************/
void Main(void)
{
    time_cnt = 0;
    
	/* 配置系统时钟 */
    ChangeClockDivider(1,1);        	// 1:2:4
    ChangeMPllValue(0xcd,0x0b,0x0);  	// FCLK=196.615387MHz (PCLK=49.153847MHz)
    Uart_Init(49153847, 115200);
    Uart_Select(0);
    Port_Init();
    
    Uart_Printf("Begin....\n");
    
    load_coff((unsigned long)(&__input_coff), (unsigned long)(&__input_coff_end));
    
    // 初始化定时器,产生每秒8次中断,在每次中断中传递4k数据到DSP
	rWTCON = 0;                                 	// Disable watchdog

    rSRCPND &= BIT_WDT;                         	// Clear any pending WD int
    rINTPND &= BIT_WDT;

    pISR_WDT = (U32)__vWDTInterrupt;

    rWTDAT = 49153847 / (128 * 64 * 8); 			//set up the WDT for wTicksPerSec
        
    rWTCON = (63<<8)|(1<<5)|(3<<3)|(1<<2)|(0<<0);	// Enable: WD, WD interrupts, disable reset

    BIT_CLR(rINTMSK, BIT_WDT);                  	// Enable WatchDog interrupts
    
    while(1);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -