📄 rtdemo55.c
字号:
/******************************************************************************/
/* rtDemo() - Real time demo for playing continuous processed samples */
/* */
/* This example plays back data in continuous (dma) pulling mode. */
/* */
/* Dec. 3, 2001 */
/* updated Dec 8, 2001 - add more input selections. */
/* On C5510 EVM, inductor L505, Ferrite Bead 600 ohm */
/* 500mA is missing. This causes the stereo line */
/* inputs fail. */
/* To fixed this, you will need to add it, or just */
/* use a wire to connect the path. */
/* If you want to fix it. The part you need is: */
/* HZ0805E601R by Steward or */
/* LCB0805H-601 by Inductor supply Inc. */
/* */
/******************************************************************************/
#include <board.h>
#include <aic27.h>
//*****************************************************************************/
//* defines
//*****************************************************************************/
#define BUF_SIZE 160 // samples per buffer
#define NUM_BUFFS_TO_PLAY 2000
#define L_MIC 1 // left mic used only
#define R_LINE 2 // right line only
#define L_LINE 3 // left line only (needs to fixed EVM L505 is missing)
#define LR_LINE 4 // left and right line (right line needs board work missing L505)
#define MIC_LINE 5 // left=line & right=mic
#define DEFAULT 6 // default all mute
void DSP_application(s16 *inOutBuf);
//*****************************************************************************/
//* globals data
//*****************************************************************************/
#pragma DATA_ALIGN(rxBuf, 2); // align to even word boundary for dma transfers
#pragma DATA_ALIGN(txBuf, 2);
s16 rxBuf[2][BUF_SIZE];
s16 txBuf[2][BUF_SIZE];
s16 inOutBuf[BUF_SIZE];
//*****************************************************************************/
//* MAIN
//*****************************************************************************/
static s16 *status;
void main()
{
s16 inSel,i;
u16 bufNum;
u32 bufsPlayed;
brd_init(160); // initialize board at 160 mHz
CPLD_CTRL2_REG &= ~1;
// select stereo output
// inSel = L_MIC;
// inSel = L_LINE;
// inSel = R_LINE;
inSel = LR_LINE;
// inSel = MIC_LINE;
// inSel = DEFAULT;
// reset and open codec
aic27_reset();
aic27_open();
aic27_write_reg(MASTER_VOL, 0x0000, 0xFFFF); // LineOut gain none
aic27_write_reg(PCMOUT_VOL, 0x0000, 0xFFFF); // PCMOut front gain none
aic27_write_reg(REC_SEL, 0x0505, 0xFFFF); // Select Stereo mix
aic27_write_reg(REC_GAIN, 0x0000, 0xFFFF); // Rec gain none
aic27_write_reg(FRONT_MIXER_VOL, 0x8000, 0xFFFF); // Front Mixer mute
aic27_write_reg(VENDOR_RSVD1, 0x0020, 0x0020); // Switch to ADCNDAC
switch(inSel)// input selection
{
case L_MIC:
aic27_write_reg(PCBEEP_VOL, 0x8000, 0xFFFF); // PCBeep mute
aic27_write_reg(PHONE_VOL, 0x8000, 0xFFFF); // Phone mute
aic27_write_reg(MIC_VOL, 0x001f, 0xFFFF); // Mic gain full
aic27_write_reg(LINEIN_VOL, 0x8000, 0xFFFF); // LineIn mute
aic27_write_reg(CD_VOL, 0x8000, 0xFFFF); // CD mute
aic27_write_reg(VIDE0_VOL, 0x8000, 0xFFFF); // Video mute
aic27_write_reg(AUX_VOL, 0x8000, 0xFFFF); // Aux mute
aic27_write_reg(REC_SEL, 0x0300, 0xFFFF); // Select Mic/Aux
break;
case R_LINE:
aic27_write_reg(PCBEEP_VOL, 0x8000, 0xFFFF); // PCBeep mute
aic27_write_reg(PHONE_VOL, 0x8000, 0xFFFF); // Phone mute
aic27_write_reg(MIC_VOL, 0x8000, 0xFFFF); // Mic mute
aic27_write_reg(LINEIN_VOL, 0x1F00, 0xFFFF); // LineIn gain full left
aic27_write_reg(CD_VOL, 0x8000, 0xFFFF); // CD mute
aic27_write_reg(VIDE0_VOL, 0x8000, 0xFFFF); // Video mute
aic27_write_reg(AUX_VOL, 0x8000, 0xFFFF); // Aux mute
aic27_write_reg(REC_SEL, 0x0305, 0xFFFF); // Select Stereo Mix/Aux
break;
case L_LINE:
aic27_write_reg(PCBEEP_VOL, 0x8000, 0xFFFF); // PCBeep mute
aic27_write_reg(PHONE_VOL, 0x8000, 0xFFFF); // Phone mute
aic27_write_reg(MIC_VOL, 0x8000, 0xFFFF); // Mic mute
aic27_write_reg(LINEIN_VOL, 0x001F, 0xFFFF); // LineIn gain full right
aic27_write_reg(CD_VOL, 0x8000, 0xFFFF); // CD mute
aic27_write_reg(VIDE0_VOL, 0x8000, 0xFFFF); // Video mute
aic27_write_reg(AUX_VOL, 0x8000, 0xFFFF); // Aux mute
aic27_write_reg(REC_SEL, 0x0503, 0xFFFF); // Select Stereo Mix/Aux
break;
case LR_LINE:
aic27_write_reg(PCBEEP_VOL, 0x8000, 0xFFFF); // PCBeep mute
aic27_write_reg(PHONE_VOL, 0x8000, 0xFFFF); // Phone mute
aic27_write_reg(MIC_VOL, 0x8000, 0xFFFF); // Mic mute
aic27_write_reg(LINEIN_VOL, 0x0000, 0xFFFF); // LineIn gain full both
aic27_write_reg(CD_VOL, 0x8000, 0xFFFF); // CD mute
aic27_write_reg(VIDE0_VOL, 0x8000, 0xFFFF); // Video mute
aic27_write_reg(AUX_VOL, 0x8000, 0xFFFF); // Aux mute
break;
default:
case MIC_LINE:
aic27_write_reg(PCBEEP_VOL, 0x8000, 0xFFFF); // PCBeep mute
aic27_write_reg(PHONE_VOL, 0x8000, 0xFFFF); // Phone mute
aic27_write_reg(MIC_VOL, 0x001F, 0xFFFF); // Mic gain full
aic27_write_reg(LINEIN_VOL, 0x001F, 0xFFFF); // LineIn gain full right
aic27_write_reg(CD_VOL, 0x8000, 0xFFFF); // CD mute
aic27_write_reg(VIDE0_VOL, 0x8000, 0xFFFF); // Video mute
aic27_write_reg(AUX_VOL, 0x8000, 0xFFFF); // Aux mute
aic27_write_reg(REC_SEL, 0x0500, 0xFFFF); // Select Mic/Stereo mix
break;
}
aic27_sample_rate(AUDIO_ADC_RRATE, AIC27_8000HZ); //set sample rate
aic27_sample_rate(FRONT_DAC_SRATE, AIC27_8000HZ);
for (i = 0; i < BUF_SIZE; i++) //clear buffers, etc.
{
txBuf[0][i] = 0;
txBuf[1][i] = 0;
}
bufsPlayed = 0;
bufNum = 0;
//setup for continuous capture and play
aic27_cont_play(txBuf[0], txBuf[1], BUF_SIZE, 0, &status);
*status = 1;
while (*status); // wait for buffer to be empty
aic27_cont_capture(rxBuf[0], rxBuf[1], BUF_SIZE, 0, &status);
*status = 1;
while (*status); // wait for buffer to be full
while (bufsPlayed++ < NUM_BUFFS_TO_PLAY)// loop through all buffers
{
*status = 1;
while (*status); // wait for buffer to be empty
for (i=0; i<BUF_SIZE; i++)
{
inOutBuf[i] = rxBuf[bufNum][i]; // getting samples from input
}
//////////////////////////////////////////////////////////
/////////////Your DSP Processing algorithm ///////////////
DSP_application(inOutBuf);
//////////////////////////////////////////////////////////
for (i=0; i<BUF_SIZE; i++)
{
txBuf[bufNum][i] = inOutBuf[i]; // passing samples to output
}
bufNum ^= 1;
}
for (i = 0; i < BUF_SIZE; i++)
txBuf[bufNum][i] = 0; // Flash the last tx buffer
// stop and close codec
aic27_stop_play();
aic27_stop_capture();
aic27_close();
}
/////////////Your DSP Processing algorithm ///////////////
void DSP_application(s16 *inOutBuf)
{
s16 i;
for (i=0; i< BUF_SIZE; i++)
inOutBuf[i] = inOutBuf[i];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -