📄 wave.c
字号:
//*----------------------------------------------------------------------------
//* ATMEL Microcontroller Software Support - ROUSSET -
//*----------------------------------------------------------------------------
//* The software is delivered "AS IS" without warranty or condition of any
//* kind, either express, implied or statutory. This includes without
//* limitation any warranty or condition with respect to merchantability or
//* fitness for any particular purpose, or against the infringements of
//* intellectual property rights of others.
//*----------------------------------------------------------------------------
//* File Name : wave.c
//* Object : wave description file for Audio extention board
//*
//* 1.0 21/01/02 JPP : Creation,
//* 1.1 07/Apr/05 JPP : Change for PWM
//*----------------------------------------------------------------------------
//* --------------------------- include file ----------------------------------
#include "init.h"
#include "wave.h"
#include "audio.h"
//* Wave parameter
WaveITDESC IT_buff;
//* --------------------------- Constant definition ---------------------------
//*----------------------------------------------------------------------------
//* \fn Setwave
//* \brief Set wawe para
//*----------------------------------------------------------------------------
void Setwave(void)
{
WaveHeaderDESC *ptHeader;
ptHeader = (WaveHeaderDESC *) FILE_LOCATION;
wave_print_header(ptHeader);
IT_buff.File= ptHeader;
IT_buff.cmpt=0;
IT_buff.block_size =0;
IT_buff.ptr = (char*)&(IT_buff.File->dataStart);
}
//*----------------------------------------------------------------------------
//* Function Name : wave_print_header
//* Object : Print wave header information
//* Input Parameters : ptHeader Header wave file
//* Output Parameters : none
//*----------------------------------------------------------------------------
void wave_print_header(WaveHeaderDESC *ptHeader)
//* Begin
{
sprintf(message,"size:%d, %dKb\n\r",ptHeader->fileSize,ptHeader->fileSize/1024);
AT91F_DBGU_Printk(message);
if ( ptHeader->wavType == WAVE_TYPE_PCM ) AT91F_DBGU_Printk("PCM ");
else AT91F_DBGU_Printk("Uncknown TYPE !!! ");
if ( ptHeader->monoStereo == WAVE_MONO ) AT91F_DBGU_Printk("MONO, ");
if ( ptHeader->monoStereo == WAVE_STEREO ) AT91F_DBGU_Printk("STEREO, ");
sprintf(message,"sample:%dHz,%d Bits/s\n\r",ptHeader->sampleRate,ptHeader->sampleSpeed);
AT91F_DBGU_Printk(message);
sprintf(message,"Wave %dKHz, ",ptHeader->sampleRate/1000);
AT91F_DBGU_Printk(message);
sprintf(message,"align:%d, ",ptHeader->alignment);
AT91F_DBGU_Printk(message);
sprintf(message,"Width:%d\n\r",ptHeader->sampleWidth);
AT91F_DBGU_Printk(message);
//* End
}
//*----------------------------------------------------------------------------
//* Function Name : wave_interrupt
//* Object : Wave file Interrupt Management
//* Input Parameters : IT_buff Wave descriptor
//* Output Parameters : none
//*----------------------------------------------------------------------------
__ramfunc void OutputWave(char *ptr_data,int size)
{
char sample_r[4];
char Sample;
int cmpt,cmpt_read;
for (cmpt=0 ; cmpt < size ; cmpt++,IT_buff.cmpt+=IT_buff.File->alignment)
{
// read one sample can be 1 for 8 bits to 4 32 bits
for (cmpt_read=0 ; cmpt_read < (IT_buff.File->sampleWidth/8) ; cmpt_read++)
{
sample_r[cmpt_read]=*(IT_buff.ptr);
IT_buff.ptr++;
}
//
switch (cmpt_read)
{
case 1:// 8 bits unsigned
Sample= (sample_r[0]);
break;
case 2:// 16 bits signed
Sample= (sample_r[1]);
break;
case 3:// 24 bits signed
Sample = (sample_r[2]);
break;
case 4:// 32 bits signed
Sample = (sample_r[3]) ;
break;
}
#ifdef TEST_WAVE_STEREO
if ( IT_buff.File->monoStereo == WAVE_STEREO)
{
for (cmpt_read=0 ; cmpt_read < (IT_buff.File->sampleWidth/8) ; cmpt_read++)
{
sample_r[cmpt_read]=*(IT_buff.ptr);
IT_buff.ptr++;
}
}
#endif
ptr_data[cmpt] = Sample;
if (IT_buff.cmpt >= IT_buff.File->chunkSize )
{
ptr_data[cmpt]=0x00;
}
}
if (IT_buff.cmpt >= IT_buff.File->chunkSize )
{
AT91F_DBGU_Printk("Wave done:\n\r");
SetConstant(0);
OutputSample_init(OutputConstant);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -