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

📄 main.c

📁 语音信号加密
💻 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 + -