?? mainfilter.c
字號:
/*******************************************************************************
本程序實現音頻的IIR濾波操作
*******************************************************************************/
#define CHIP_6713
#include <stdio.h>
#include <csl.h>
#include <csl_dma.h> /* DMA_SUPPORT */
#include <csl_irq.h> /* IRQ_SUPPORT */
#include <csl_mcbsp.h> /* MCBSP_SUPPORT */
#include <csl_gpio.h>
#define DSPF_SP_BIQUAD_ASM
#include "DSPF_sp_biquad.h"
#include "intr.h"
#include "c6x.h"
#include "c6713dsk.h"
#include "regs.h"
#include "iirtable.h"
//CSLi handle for GPIO_DEV0 Declaration
GPIO_Handle hGpio;
#define FALSE 0
#define TRUE 1
#define PING 0
#define PONG 1
volatile int recv0_done = FALSE;
volatile int xmit0_done = FALSE;
#define nDelayBuf 9000
#pragma DATA_SECTION(inbuf,"edmain")
int inbuf[nDelayBuf];
#pragma DATA_SECTION(outbuf,"edmaout")
int outbuf[nDelayBuf];
#pragma DATA_SECTION(FeedBack,"edmafeed")
int FeedBack[nDelayBuf];
#pragma DATA_SECTION(ProcessBuff,"edmabuf")
Uint32 ProcessBuff[BUFFSIZE];
short pingORpong=PING;
int gBufferXmtPing[BUFFSIZE];
int gBufferXmtPong[BUFFSIZE];
int gBufferRcvPing[BUFFSIZE];
int gBufferRcvPong[BUFFSIZE];
float Buffer_iir_l[512];
float Buffer_iir_r[512];
float mid_iir[512];
Uint16 j=0;
MCBSP_Handle hMcbsp0; /*handle of the Mcbsp0*/
static MCBSP_Config mcbspCfg0={
0x00060000, //SPCR
0x000401a0, //RCR
0x000401a0, //XCR
0x103f1f03, //SRGR
MCBSP_MCR_DEFAULT,
MCBSP_RCER_DEFAULT,
MCBSP_XCER_DEFAULT,
0x00000a03 //PCR
};
MCBSP_Handle hMcbsp1; /*handle of the Mcbsp1*/
static MCBSP_Config mcbspCfg1={
0x00060000, //SPCR
0x80a400a0, //RCR
0x80a400a0, //XCR
0x103f1f03, //SRGR
MCBSP_MCR_DEFAULT,
MCBSP_RCER_DEFAULT,
MCBSP_XCER_DEFAULT,
0x00000a03 //PCR
};
/*******************************************************************************
* Function prototypes
*******************************************************************************/
void delay_msec(short msec);
void iis_init();
void spi_init();
extern void TI_EDMA_CFG(void);
Uint32 RecvMcbspDat=0,SendMcbspDat=0;
Uint32 SendCnt=0;
void initGpio(void)
{
hGpio=GPIO_open(GPIO_DEV0,GPIO_OPEN_RESET);
GPIO_pinEnable(hGpio,GPIO_PIN13|GPIO_PIN15);
GPIO_pinDirection(hGpio,GPIO_PIN13|GPIO_PIN15,GPIO_OUTPUT);
GPIO_pinWrite(hGpio,GPIO_PIN13|GPIO_PIN15,1);
IRQ_reset(IRQ_EVT_EXTINT4);
IRQ_disable(IRQ_EVT_EXTINT4);
IRQ_clear(IRQ_EVT_EXTINT4);
IRQ_enable(IRQ_EVT_EXTINT4);
}
void SdramInit(void)
{
/*************************************************************************
* Standard 6211/6711 DSK includes 2 MT48LC1M16A1-7 devices = 4MB SDRAM *
* For these devices use the following parameter: *
* EMIF_SDCTRL=0x07126000 *
* If MT48LC1M16A1-10 devices are installed use the following parameter: *
* EMIF_SDCTRL=0x07227000 *
* /|\ 16Mb parts = 4MB SDRAM /|\ *-------------------------------------*
*----------------------------------* \|/ 64Mb parts = 16MB SDRAM \|/ *
* If MT48LC4M16A2-10 devices are installed use the following parameter: *
* EMIF_SDCTRL=0x57227000 *
*************************************************************************/
*(unsigned volatile int *)EMIF_GCR = 0x3068; /* EMIF global control */
*(unsigned volatile int *)EMIF_CE1 = CE1_8; /* EMIF CE1 control, 8bit */
*(unsigned volatile int *)EMIF_SDCTRL = 0x53116000;//0x57126000; /* EMIF SDRAM control */
*(unsigned volatile int *)EMIF_CE0 = 0x90; /* EMIF CE0 control */
*(unsigned volatile int *)EMIF_SDRP = 0x61a; /* EMIF SDRM refresh period */
*(unsigned volatile int *)EMIF_SDEXT= 0x54529; /* EMIF SDRM extension */
/*****************************************************************************
* Start state
****************************************************************************/
*(unsigned int *)0x807ffff0=0x7799aabb;
}
/*
void IntSelInit(void)
{
*(unsigned volatile int *)IML=0x250f39ac;
*(unsigned volatile int *)IMH=0x04402d43;
}
*/
void iis0_init(void)
{
hMcbsp0=MCBSP_open(MCBSP_DEV0,MCBSP_OPEN_RESET);
MCBSP_config(hMcbsp0,&mcbspCfg0);
MCBSP_start(hMcbsp0,MCBSP_XMIT_START|MCBSP_RCV_START|
MCBSP_SRGR_START|MCBSP_SRGR_FRAMESYNC,220);
}
void iis1_init(void)
{
hMcbsp1=MCBSP_open(MCBSP_DEV1,MCBSP_OPEN_RESET);
MCBSP_config(hMcbsp1,&mcbspCfg1);
MCBSP_start(hMcbsp1,MCBSP_XMIT_START|MCBSP_RCV_START|
MCBSP_SRGR_START|MCBSP_SRGR_FRAMESYNC,220);
}
void set_interrupts_edma(void)
{
IRQ_reset(IRQ_EVT_EDMAINT);
IRQ_disable(IRQ_EVT_EDMAINT);
EDMA_intDisable(12); /* ch 12 for McBSP transmit event XEVT0 */
EDMA_intDisable(13); /* ch 13 for McBSP receive event REVT0 */
IRQ_clear(IRQ_EVT_EDMAINT);
EDMA_intClear(12);
EDMA_intClear(13);
IRQ_enable(IRQ_EVT_EDMAINT);
EDMA_intEnable(12);
EDMA_intEnable(13);
}
void init_edma(void)
{
TI_EDMA_CFG();
set_interrupts_edma();
*(unsigned volatile int *)McBSP0_DXR=SendMcbspDat;
*(unsigned volatile int *)McBSP1_DXR=SendMcbspDat;
RecvMcbspDat=*(unsigned volatile int *)McBSP0_DRR;
}
/***********************************/
interrupt void xint0()
{
if(SendCnt>10000)
{SendCnt=0;}
else
{SendCnt++;}
SendMcbspDat=RecvMcbspDat;
}
interrupt void rint0()
{
RecvMcbspDat=*(unsigned volatile int *)McBSP0_DRR;
*(unsigned volatile int *)McBSP0_DXR=SendMcbspDat;
}
interrupt void timer0_isr()
{
static unsigned int i=0,j=0;
if(i>100)
{
i=0;
j++;
}
else
{i++;}
if(j>200)
{
j=0;
}
if(j>0&&j<100)
{
GPIO_pinWrite(hGpio,GPIO_PIN13,1);
GPIO_pinWrite(hGpio,GPIO_PIN15,0);
}
else
{
GPIO_pinWrite(hGpio,GPIO_PIN13,0);
GPIO_pinWrite(hGpio,GPIO_PIN15,1);
}
}
interrupt void ext_int4(void)
{
static Uint32 ExtIntCnt=0;
if(ExtIntCnt<0xffff)
{ExtIntCnt++;}
else
{ExtIntCnt=0;}
}
interrupt void c_int08(void) /* vecs.asm hooks this up to IRQ 08 */
{
if (EDMA_intTest(12))
{
xmit0_done = TRUE;
EDMA_intClear(12); /* clear CIPR bit so future interrupts can be recognized */
}
else if (EDMA_intTest(13))
{
recv0_done = TRUE;
EDMA_intClear(13); /* clear CIPR bit so future interrupts can be recognized */
}
return;
}
void initrecsendbuf(void)
{
Uint32 i;
for(i=0;i<256;i++)
{ gBufferRcvPing[i]=0x0;
gBufferRcvPong[i]=0x0;
gBufferXmtPing[i]=i+0xaaaa5555;
gBufferXmtPong[i]=i+0xaaaa5555;
}
for(i=0;i<1000;i++)
{
inbuf[i]=0x5432+i;
outbuf[i]=0x1000+i;
}
}
Uint16 bypass_bit=0;
void ProcessBlock(short pingpong)
{
Uint16 i=0;
if(pingpong==PING) //Ping module
{
for(i=0;i<512;i++)
{
Buffer_iir_l[i]=(float)(gBufferRcvPing[i*2]);
Buffer_iir_r[i]=(float)(gBufferRcvPing[i*2+1]);
}
if(bypass_bit==1)
{
DSPF_sp_biquad(Buffer_iir_l,b0,a0,dlyl_0,mid_iir,512);
DSPF_sp_biquad(mid_iir,b1,a1,dlyl_1,Buffer_iir_l,512);
DSPF_sp_biquad(Buffer_iir_r,b0,a0,dlyr_0,mid_iir,512);
DSPF_sp_biquad(mid_iir,b1,a1,dlyr_1,Buffer_iir_r,512);
}
for(i=0;i<512;i++)
{
gBufferXmtPing[i*2]=(int)(Buffer_iir_l[i]);
gBufferXmtPing[i*2+1]=(int)(Buffer_iir_r[i]);
}
}
if(pingpong==PONG) //Pong module
{
for(i=0;i<512;i++)
{
Buffer_iir_l[i]=(float)gBufferRcvPong[i*2];
Buffer_iir_r[i]=(float)gBufferRcvPong[i*2+1];
}
if(bypass_bit==1)
{
DSPF_sp_biquad(Buffer_iir_l,b0,a0,dlyl_0,mid_iir,512);
DSPF_sp_biquad(mid_iir,b1,a1,dlyl_1,Buffer_iir_l,512);
DSPF_sp_biquad(Buffer_iir_r,b0,a0,dlyr_0,mid_iir,512);
DSPF_sp_biquad(mid_iir,b1,a1,dlyr_1,Buffer_iir_r,512);
}
for(i=0;i<512;i++)
{
gBufferXmtPong[i*2]=(int)Buffer_iir_l[i];
gBufferXmtPong[i*2+1]=(int)Buffer_iir_r[i];
}
}
}
int main()
{
/* DSP initialization*/
IRQ_globalDisable(); /* Disable all interrupts */
IER=1; /* Disable all interrupts except NMI */
IRQ_setVecs((void *)0x800); /* point to the IRQ vector table */
PLLInit();
CSL_init();
SdramInit();
//IntSelInit();
iis0_init();
iis1_init();
initrecsendbuf();
init_edma();
init_IIR();
TIMER_Init();
initGpio();
/************************************************************/
IER|=0x0003; /* enable interrupts except NMI */
IRQ_globalEnable(); /*enable all interrupts*/
/************************************************************/
while(1)
{
if(xmit0_done&&recv0_done)
{
xmit0_done=0;
recv0_done=0;
if(pingORpong==PING)
{
ProcessBlock(PING);
pingORpong=PONG;
}
else
{
ProcessBlock(PONG);
pingORpong=PING;
}
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -