📄 main.c
字号:
#include <stdio.h>
#include <csl_pll.h>
#include <csl_mcbsp.h>
#include <csl_irq.h>
//#include <csl_wdtim.h>
#include "dsplib.h"
#include "math.h"
//---------Global data definition---------
MCBSP_Config Config= {
MCBSP_SPCR1_RMK(
MCBSP_SPCR1_DLB_OFF,
MCBSP_SPCR1_RJUST_LZF,
MCBSP_SPCR1_CLKSTP_DISABLE,
MCBSP_SPCR1_DXENA_NA,
MCBSP_SPCR1_ABIS_DISABLE,
MCBSP_SPCR1_RINTM_RRDY,
0,
MCBSP_SPCR1_RRST_ENABLE
),
MCBSP_SPCR2_RMK(
MCBSP_SPCR2_FREE_YES,
MCBSP_SPCR2_SOFT_YES,
MCBSP_SPCR2_FRST_FSG,
MCBSP_SPCR2_GRST_CLKG,
MCBSP_SPCR2_XINTM_XRDY,
0,
MCBSP_SPCR2_XRST_ENABLE
),
MCBSP_RCR1_RMK(
MCBSP_RCR1_RFRLEN1_OF(31),
MCBSP_RCR1_RWDLEN1_8BIT
),
MCBSP_RCR2_RMK(
MCBSP_RCR2_RPHASE_SINGLE,
MCBSP_RCR2_RFRLEN2_OF(0),
MCBSP_RCR2_RWDLEN2_8BIT,
MCBSP_RCR2_RCOMPAND_ULAW,
MCBSP_RCR2_RFIG_YES,
MCBSP_RCR2_RDATDLY_0BIT
),
MCBSP_XCR1_RMK(
MCBSP_XCR1_XFRLEN1_OF(31),
MCBSP_XCR1_XWDLEN1_8BIT
),
MCBSP_XCR2_RMK(
MCBSP_XCR2_XPHASE_SINGLE,
MCBSP_XCR2_XFRLEN2_OF(0),
MCBSP_XCR2_XWDLEN2_8BIT,
MCBSP_XCR2_XCOMPAND_ULAW,
MCBSP_XCR2_XFIG_YES,
MCBSP_XCR2_XDATDLY_0BIT
),
MCBSP_SRGR1_RMK(
MCBSP_SRGR1_FWID_OF(1),
MCBSP_SRGR1_CLKGDV_OF(63)
),
MCBSP_SRGR2_RMK(
MCBSP_SRGR2_GSYNC_FREE,
MCBSP_SRGR2_CLKSP_RISING,
MCBSP_SRGR2_CLKSM_INTERNAL,
MCBSP_SRGR2_FSGM_FSG,
MCBSP_SRGR2_FPER_OF(255)
),
1,
1,
MCBSP_PCR_RMK(
MCBSP_PCR_IDLEEN_RESET,
MCBSP_PCR_XIOEN_SP,
MCBSP_PCR_RIOEN_SP,
MCBSP_PCR_FSXM_INTERNAL,
MCBSP_PCR_FSRM_INTERNAL,
MCBSP_PCR_CLKXM_OUTPUT,
MCBSP_PCR_CLKRM_INPUT,
MCBSP_PCR_SCLKME_NO,
0,
MCBSP_PCR_FSXP_ACTIVEHIGH,
MCBSP_PCR_FSRP_ACTIVEHIGH,
MCBSP_PCR_CLKXP_RISING,//,
MCBSP_PCR_CLKRP_FALLING
),
1,
MCBSP_RCERB_DEFAULT,
MCBSP_RCERC_DEFAULT,
MCBSP_RCERD_DEFAULT,
MCBSP_RCERE_DEFAULT,
MCBSP_RCERF_DEFAULT,
MCBSP_RCERG_DEFAULT,
MCBSP_RCERH_DEFAULT,
1,
MCBSP_XCERB_DEFAULT,
MCBSP_XCERC_DEFAULT,
MCBSP_XCERD_DEFAULT,
MCBSP_XCERE_DEFAULT,
MCBSP_XCERF_DEFAULT,
MCBSP_XCERG_DEFAULT,
MCBSP_XCERH_DEFAULT
};
//WDTIM_Config wdtcfg={
//0x1000,
//0x0000,
//0x1000};
/* Define a MCBSP_Handle object to be used with MCBSP_open function */
MCBSP_Handle mhMcbsp1;
MCBSP_Handle mhMcbsp2;
#pragma DATA_SECTION(rcv0,"my_sect1")
DATA rcv0[256];
#pragma DATA_SECTION(xmt0,"my_sect2")
DATA xmt0[256];
#pragma DATA_SECTION(rcv1,"my_sect3")
DATA rcv1[256];
#pragma DATA_SECTION(xmt1,"my_sect4")
DATA xmt1[256];
#pragma DATA_SECTION(xmt2,"my_sect5")
DATA xmt2[512];
#pragma DATA_SECTION(rcv2,"my_sect6")
DATA rcv2[512];
volatile long dd;
volatile DATA a;
volatile short XfrCnt=0;
volatile short RfrCnt=0;
volatile short tf=0,rf=0;
volatile unsigned char ptf=0,prf=0,i;
Uint16 rcvEventId1, xmtEventId1,rcvEventId2, xmtEventId2;
//---------Function prototypes---------
/* Reference start of interrupt vector table */
/* This symbol is defined in file, vectors.s55 */
extern void VECSTART(void);
// Interrupt Service Routine Prototypes
interrupt void writeIsr1(void);
interrupt void readIsr1(void);
interrupt void writeIsr2(void);
interrupt void readIsr2(void);
interrupt void exint0(void);
interrupt void exint1(void);
void process(void);
//void wait(void);
void fuzhi(DATA *x,DATA *y);
void daopu(DATA *z);
void zhengxing(DATA *u,DATA *v);
//---------main routine---------
void main(void)
{
CSL_init();
PLL_setFreq(8,1);
IRQ_setVecs((Uint32)(&VECSTART));
IRQ_globalDisable();
IRQ_disable(IRQ_EVT_INT0);
IRQ_disable(IRQ_EVT_INT1);
IRQ_disable(IRQ_EVT_INT2);
IRQ_disable(IRQ_EVT_INT3);
IRQ_disable(IRQ_EVT_INT4);
IRQ_disable(IRQ_EVT_INT5);
IRQ_disable(IRQ_EVT_TINT0);
IRQ_disable(IRQ_EVT_DSPINT);
IRQ_disable(IRQ_EVT_DMAC0);
IRQ_disable(IRQ_EVT_DMAC1);
IRQ_disable(IRQ_EVT_DMAC2);
IRQ_disable(IRQ_EVT_DMAC3);
IRQ_disable(IRQ_EVT_DMAC4);
IRQ_disable(IRQ_EVT_DMAC5);
IRQ_disable(IRQ_EVT_RINT0);
IRQ_disable(IRQ_EVT_RINT1);
IRQ_disable(IRQ_EVT_RINT2);
IRQ_disable(IRQ_EVT_XINT0);
IRQ_disable(IRQ_EVT_XINT1);
IRQ_disable(IRQ_EVT_XINT2);
IRQ_disable(IRQ_EVT_TINT1);
// IRQ_disable(IRQ_EVT_HPINT);
// IRQ_disable(IRQ_EVT_IPINT);
// IRQ_disable(IRQ_EVT_RTC);
// IRQ_disable(IRQ_EVT_I2C);
// IRQ_disable(IRQ_EVT_WDTIM);
mhMcbsp1 = MCBSP_open(MCBSP_PORT1, MCBSP_OPEN_RESET);
rcvEventId1 = MCBSP_getRcvEventId(mhMcbsp1);
xmtEventId1 = MCBSP_getXmtEventId(mhMcbsp1);
IRQ_clear(rcvEventId1);
IRQ_clear(xmtEventId1);
IRQ_plug(rcvEventId1, &readIsr1);
IRQ_plug(xmtEventId1, &writeIsr1);
MCBSP_config(mhMcbsp1, &Config);
MCBSP_start(mhMcbsp1,
MCBSP_SRGR_START | MCBSP_SRGR_FRAMESYNC,
0x2004
);
MCBSP_start(mhMcbsp1,
MCBSP_RCV_START | MCBSP_XMIT_START,
0x2004
);
IRQ_enable(rcvEventId1);
IRQ_enable(xmtEventId1);
IRQ_clear(IRQ_EVT_INT0);
IRQ_clear(IRQ_EVT_INT1);
IRQ_plug(IRQ_EVT_INT0,&exint0);
IRQ_plug(IRQ_EVT_INT1,&exint1);
mhMcbsp2 = MCBSP_open(MCBSP_PORT2, MCBSP_OPEN_RESET);
rcvEventId2 = MCBSP_getRcvEventId(mhMcbsp2);
xmtEventId2 = MCBSP_getXmtEventId(mhMcbsp2);
IRQ_clear(rcvEventId2);
IRQ_clear(xmtEventId2);
IRQ_plug(rcvEventId2, &readIsr2);
IRQ_plug(xmtEventId2, &writeIsr2);
MCBSP_config(mhMcbsp2, &Config);
MCBSP_start(mhMcbsp2,
MCBSP_SRGR_START | MCBSP_SRGR_FRAMESYNC,
0x2004
);
MCBSP_start(mhMcbsp2,
MCBSP_RCV_START | MCBSP_XMIT_START,
0x2004
);
IRQ_enable(rcvEventId2);
IRQ_enable(xmtEventId2);
IRQ_disable(IRQ_EVT_INT0);
IRQ_disable(IRQ_EVT_INT1);
IRQ_globalEnable();
while(1==1)
{process();
}
}
void process(void)
{
if(ptf==1)
{
fuzhi(xmt0,xmt2);
cfft_SCALE(xmt2,256);
cbrev(xmt2,xmt2,256);
unpack(xmt2,512);
daopu(xmt2);
cifft_SCALE(xmt2,256);
cbrev(xmt2,xmt2,256);
zhengxing(xmt2,xmt0);
ptf=3;}
if(prf==1)
{
fuzhi(rcv0,rcv2);
cfft_SCALE(rcv2,256);
cbrev(rcv2,rcv2,256);
unpack(rcv2,512);
daopu(rcv2);
cifft_SCALE(rcv2,256);
cbrev(rcv2,rcv2,256);
zhengxing(rcv2,rcv0);
prf=3;}
if(ptf==2)
{
fuzhi(xmt1,xmt2);
cfft_SCALE(xmt2,256);
cbrev(xmt2,xmt2,256);
unpack(xmt2,512);
daopu(xmt2);
cifft_SCALE(xmt2,256);
cbrev(xmt2,xmt2,256);
zhengxing(xmt2,xmt1);
ptf=3;}
if(prf==2)
{
fuzhi(rcv1,rcv2);
cfft_SCALE(rcv2,256);
cbrev(rcv2,rcv2,256);
unpack(rcv2,512);
daopu(rcv2);
cifft_SCALE(rcv2,256);
cbrev(rcv2,rcv2,256);
zhengxing(rcv2,rcv1);
prf=3;}
}
/*void wait(void)
{unsigned int wt=30000;
while(wt>2)
{wt--;}
}*/
void fuzhi(DATA *x,DATA *y)
{
for(i=0;i<240;i++)
{y[i*2]=x[i];
y[i*2+1]=0;}
for(i=240;i<256;i++)
{y[i*2]=0;
y[i*2+1]=0;}
}
void daopu(DATA *z)
{
for(i=10;i<34;i++)
{a=z[i*2];
z[i*2]=z[136-i*2];
z[136-i*2]=a;
a=z[i*2+1];
z[i*2+1]=z[137-i*2];
z[137-i*2]=a;
a=z[i*2+98];
z[i*2+98]=z[234-i*2];
z[234-i*2]=a;
a=z[i*2+99];
z[i*2+99]=z[235-i*2];
z[235-i*2]=a;}
for(i=148;i<172;i++)
{a=z[i*2];
z[i*2]=z[688-i*2];
z[688-i*2]=a;
a=z[i*2+1];
z[i*2+1]=z[689-i*2];
z[689-i*2]=a;
a=z[i*2+98];
z[i*2+98]=z[786-i*2];
z[786-i*2]=a;
a=z[i*2+99];
z[i*2+99]=z[787-i*2];
z[787-i*2]=a;}
}
void zhengxing(DATA *u,DATA *v)
{
for(i=0;i<32;i++)
{
short dd=u[i*2]*u[i*2]+u[i*2+1]*u[i*2+1];
if(u[i*2]>0)
v[255-i]=sqrt(dd)*511;
else if(u[i*2]<0)
v[255-i]=-sqrt(dd)*511;
else v[255-i]=0;
}
for(i=32;i<96;i++)
{short dd=u[i*2]*u[i*2]+u[i*2+1]*u[i*2+1];
if(u[i*2+1]>0)
v[255-i]=-sqrt(dd)*511;
else if(u[i*2+1]<0)
v[255-i]=sqrt(dd)*511;
else v[255-i]=0;
}
for(i=96;i<160;i++)
{
short dd=u[i*2]*u[i*2]+u[i*2+1]*u[i*2+1];
if(u[i*2]>0)
v[255-i]=-sqrt(dd)*511;
else if(u[i*2]<0)
v[255-i]=sqrt(dd)*511;
else v[255-i]=0;
}
for(i=160;i<224;i++)
{
short dd=u[i*2]*u[i*2]+u[i*2+1]*u[i*2+1];
if(u[i*2+1]>0)
v[255-i]=sqrt(dd)*511;
else if(u[i*2+1]<0)
v[255-i]=-sqrt(dd)*511;
else v[255-i]=0;
}
for(i=224;i<256;i++)
{
short dd=(u[i*2]*u[i*2])+(u[i*2+1]*u[i*2+1]);
if(u[i*2]>0)
v[255-i]=sqrt(dd)*511;
else if(u[i*2]<0)
v[255-i]=-sqrt(dd)*511;
else v[255-i]=0;
}
}
interrupt void writeIsr1(void)
{
IRQ_disable(xmtEventId1);
switch(rf)
{case 0: if(RfrCnt==0)
MCBSP_write16(mhMcbsp1,rcv1[RfrCnt]);
else MCBSP_write16(mhMcbsp1,rcv0[RfrCnt]);
break;
case 1: if(RfrCnt==0)
MCBSP_write16(mhMcbsp1,rcv0[RfrCnt]);
else MCBSP_write16(mhMcbsp1,rcv1[RfrCnt]);
break;
default: break;
}
}
interrupt void readIsr1(void)
{
switch(tf)
{case 0: xmt0[XfrCnt] =MCBSP_read16(mhMcbsp1);
++XfrCnt;
if(XfrCnt==240)
{ tf=1;
XfrCnt=0;
ptf=1;}
break;
case 1: xmt1[XfrCnt] =MCBSP_read16(mhMcbsp1);
++XfrCnt;
if(XfrCnt==240)
{ tf=0;
XfrCnt=0;
ptf=2;}
break;
default: break;;
}
IRQ_enable(xmtEventId2);
}
interrupt void writeIsr2(void)
{
IRQ_disable(xmtEventId2);
switch(tf)
{case 0: if(XfrCnt==0)
MCBSP_write16(mhMcbsp2,xmt1[XfrCnt]);
else MCBSP_write16(mhMcbsp2,xmt0[XfrCnt]);
break;
case 1: if(XfrCnt==0)
MCBSP_write16(mhMcbsp2,xmt0[XfrCnt]);
else MCBSP_write16(mhMcbsp2,xmt1[XfrCnt]);
break;
default: break;
}
}
interrupt void readIsr2(void)
{
switch(rf)
{case 0: rcv0[RfrCnt] =MCBSP_read16(mhMcbsp2);
++RfrCnt;
if(RfrCnt==240)
{ rf=1;
RfrCnt=0;
prf=1;}
break;
case 1: rcv1[RfrCnt] =MCBSP_read16(mhMcbsp2);
++RfrCnt;
if(RfrCnt==240)
{ rf=0;
RfrCnt=0;
prf=2;}
break;
default: break;
}
IRQ_enable(xmtEventId1);
}
interrupt void exint0(void)
{IRQ_clear(IRQ_EVT_INT0);
XfrCnt=0;}
interrupt void exint1(void)
{IRQ_clear(IRQ_EVT_INT1);
RfrCnt=0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -