3750|5

64

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

【提问】有关DSP2812的A/D采样程序出错 [复制链接]

编写了A/D采样程序,在连接SEED仿真器在线仿真时正确
但在固化到FLASH时,程序能运行,但输出不正常。

在程序中单独输出几个字符的时候运行也正常,但就是采样程序不工作。
比如本来要send_data(index1),在线仿真时输出的是采样后的数值,固化到FLASH以后的输出是0xFF
在程序的send_data(index1)前面增加一个send_data(0x5566),在线仿真输出0x5566,固化到FLASH以后的输出也是0x5566。

我有点怀疑是F2812.cmd的配置有误,但我死活找不出来配置错误在哪里。已经耽搁了一周,都在来回配置这个cmd文件。

请教:1,怀疑cmd有误是否正确,或者程序本身就有错误?
      2,cmd如果有误,请高手指点错误在哪?

附上SRAM.CMD(在线仿真时用到的cmd文件)和FLASH.cmd(固化到FLASH时的cmd文件),以及主程序ad.c,恭请高手指点一二,感激不尽!


SRAM.CMD:

MEMORY
{
PAGE 0 :
   PRAMH0     : origin = 0x3f8000, length = 0x001800   
   BOOTROM    : origin = 0x3ff000, length = 0x000FC0     
         
PAGE 1 :
   /* SARAM                     */     
   RAMM0    : origin = 0x000000, length = 0x000400
   RAMM1    : origin = 0x000400, length = 0x000400

   /* Peripheral Frame 0:   */
   DEV_EMU    : origin = 0x000880, length = 0x000180
   FLASH_REGS : origin = 0x000A80, length = 0x000060
   CSM        : origin = 0x000AE0, length = 0x000010
   XINTF      : origin = 0x000B20, length = 0x000020
   CPU_TIMER0 : origin = 0x000C00, length = 0x000008
   CPU_TIMER1 : origin = 0x000C08, length = 0x000008                 
   CPU_TIMER2 : origin = 0x000C10, length = 0x000008                 
   PIE_CTRL   : origin = 0x000CE0, length = 0x000020
   PIE_VECT   : origin = 0x000D00, length = 0x000100

   /* Peripheral Frame 1:   */
   ECAN_A     : origin = 0x006000, length = 0x000100
   ECAN_AMBOX : origin = 0x006100, length = 0x000100

   /* Peripheral Frame 2:   */
   SYSTEM     : origin = 0x007010, length = 0x000020
   SPI_A      : origin = 0x007040, length = 0x000010
   SCI_A      : origin = 0x007050, length = 0x000010
   XINTRUPT   : origin = 0x007070, length = 0x000010
   GPIOMUX    : origin = 0x0070C0, length = 0x000020
   GPIODAT    : origin = 0x0070E0, length = 0x000020
   ADC        : origin = 0x007100, length = 0x000020
   EV_A       : origin = 0x007400, length = 0x000040
   EV_B       : origin = 0x007500, length = 0x000040
   SPI_B      : origin = 0x007740, length = 0x000010
   SCI_B      : origin = 0x007750, length = 0x000010
   MCBSP_A    : origin = 0x007800, length = 0x000040

   /* CSM Password Locations */
   CSM_PWL    : origin = 0x3F7FF8, length = 0x000008

   /* SARAM                    */     
   DRAMH0     : origin = 0x3f9800, length = 0x000800
   RAM        : origin = 0x100000, length = 0x080000      
}


SECTIONS
{
   /* Allocate program areas: */
   .reset           : > PRAMH0,      PAGE = 0
   .text            : > PRAMH0,      PAGE = 0
   .cinit           : > PRAMH0,      PAGE = 0
    FFTtf                : >        RAM,          PAGE = 1
    FFTmag          : >        RAM,         PAGE = 1
        FFTmag1         : > RAM,     PAGE = 1
   /* Allocate data areas: */
   .stack           : > RAMM1,       PAGE = 1
   .bss             : > DRAMH0,      PAGE = 1
   .ebss            : > DRAMH0,      PAGE = 1
   .const           : > DRAMH0,      PAGE = 1
   .econst          : > DRAMH0,      PAGE = 1      
   .sysmem          : > DRAMH0,      PAGE = 1
   FFTipcb0            ALIGN(1024)  : { } >    RAM, PAGE 1
   FFTipcb1         ALIGN(1024)  : { } >    RAM, PAGE 1
   FFTipcb2            ALIGN(1024)  : { } >    RAM, PAGE 1
   FFTipcb3         ALIGN(1024)  : { } >    RAM, PAGE 1
   FFTipcb4            ALIGN(1024)  : { } >    RAM, PAGE 1
   FFTipcb5         ALIGN(1024)  : { } >    RAM, PAGE 1
   FFTipcb6            ALIGN(1024)  : { } >    RAM, PAGE 1
   FFTipcb7         ALIGN(1024)  : { } >    RAM, PAGE 1
   FFTipcb_c    ALIGN(4096)  : { } >    RAM, PAGE 1
   /* Allocate Peripheral Frame 0 Register Structures:   */
   DevEmuRegsFile    : > DEV_EMU,    PAGE = 1
   FlashRegsFile     : > FLASH_REGS, PAGE = 1
   CsmRegsFile       : > CSM,        PAGE = 1
   XintfRegsFile     : > XINTF,      PAGE = 1
   CpuTimer0RegsFile : > CPU_TIMER0, PAGE = 1      
   CpuTimer1RegsFile : > CPU_TIMER1, PAGE = 1      
   CpuTimer2RegsFile : > CPU_TIMER2, PAGE = 1      
   PieCtrlRegsFile   : > PIE_CTRL,   PAGE = 1      
   PieVectTable      : > PIE_VECT,   PAGE = 1

   /* Allocate Peripheral Frame 2 Register Structures:   */
   ECanaRegsFile     : > ECAN_A,      PAGE = 1   
   ECanaMboxesFile   : > ECAN_AMBOX   PAGE = 1

   /* Allocate Peripheral Frame 1 Register Structures:   */
   SysCtrlRegsFile   : > SYSTEM,     PAGE = 1
   SpiaRegsFile      : > SPI_A,      PAGE = 1
   SciaRegsFile      : > SCI_A,      PAGE = 1
   XIntruptRegsFile  : > XINTRUPT,   PAGE = 1
   GpioMuxRegsFile   : > GPIOMUX,    PAGE = 1
   GpioDataRegsFile  : > GPIODAT     PAGE = 1
   AdcRegsFile       : > ADC,        PAGE = 1
   EvaRegsFile       : > EV_A,       PAGE = 1
   EvbRegsFile       : > EV_B,       PAGE = 1
   ScibRegsFile      : > SCI_B,      PAGE = 1
   McbspaRegsFile    : > MCBSP_A,    PAGE = 1

   /* CSM Password Locations */
   CsmPwlFile      : > CSM_PWL,     PAGE = 1
   /*load the IQMATH*/
   IQmathTables     : load = BOOTROM, type = NOLOAD,PAGE=0
   IQmathTablesRam  : load = DRAMH0,  PAGE = 1
   IQmath          : load = PRAMH0,  PAGE = 0

}

由于帖子内容过长,FLASH.cmd及AD.c在回帖

最新回复

问题解决了吗?   详情 回复 发表于 2009-9-18 10:39
点赞 关注

回复
举报

71

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
FLASH.cmd:(我晕,怎么还过长,这里放第一部分,memory分配,第二部分放section分配)


MEMORY
{
PAGE 0:    /* Program Memory */
           /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE1 for data allocation */

   ZONE0       : origin = 0x002000, length = 0x002000     /* XINTF zone 0 */
   ZONE1       : origin = 0x004000, length = 0x002000     /* XINTF zone 1 */
   RAML0       : origin = 0x008000, length = 0x001000     /* on-chip RAM block L0 */
   ZONE2       : origin = 0x080000, length = 0x080000     /* XINTF zone 2 */
   ZONE6       : origin = 0x100000, length = 0x080000     /* XINTF zone 6 */
   OTP         : origin = 0x3D7800, length = 0x000800     /* on-chip OTP */
   FLASHJ      : origin = 0x3D8000, length = 0x002000     /* on-chip FLASH */
   FLASHI      : origin = 0x3DA000, length = 0x002000     /* on-chip FLASH */
   FLASHH      : origin = 0x3DC000, length = 0x004000     /* on-chip FLASH */
   FLASHG      : origin = 0x3E0000, length = 0x004000     /* on-chip FLASH */
   FLASHF      : origin = 0x3E4000, length = 0x004000     /* on-chip FLASH */
   FLASHE      : origin = 0x3E8000, length = 0x004000     /* on-chip FLASH */
   FLASHD      : origin = 0x3EC000, length = 0x004000     /* on-chip FLASH */
   FLASHC      : origin = 0x3F0000, length = 0x004000     /* on-chip FLASH */
   BEGIN       : origin = 0x3F7FF6, length = 0x000002     /* Part of FLASHA.  Used for "boot to Flash" bootloader mode. */
   CSM_PWL    : origin = 0x3F7FF8, length = 0x000008
/* ZONE7       : origin = 0x3FC000, length = 0x003FC0     /* XINTF zone 7 available if MP/MCn=1 */
   ROM         : origin = 0x3FF000, length = 0x000FC0     /* Boot ROM available if MP/MCn=0 */
   RESET       : origin = 0x3FFFC0, length = 0x000002     /* part of boot ROM (MP/MCn=0) or XINTF zone 7 (MP/MCn=1) */
   VECTORS     : origin = 0x3FFFC2, length = 0x00003E     /* part of boot ROM (MP/MCn=0) or XINTF zone 7 (MP/MCn=1) */


PAGE 1 :   /* Data Memory */
           /* Memory (RAM/FLASH/OTP) blocks can be moved to PAGE0 for program allocation */
           /* Registers remain on PAGE1                                                  */

   RAMM0       : origin = 0x000000, length = 0x000400     /* on-chip RAM block M0 */
   RAMM1       : origin = 0x000400, length = 0x000400     /* on-chip RAM block M1 */
   RAML1           : origin = 0x009000, length = 0x001000
   FLASHB           : origin = 0x3F4000, length = 0x002000
   FLASHA      : origin = 0x3F6000, length = 0x001FF6
   RAMH0       : origin = 0x3F8000, length = 0x002000     /* on-chip RAM block H0 */

   /* Peripheral Frame 0:   */
   DEV_EMU    : origin = 0x000880, length = 0x000180
   FLASH_REGS : origin = 0x000A80, length = 0x000060
   CSM        : origin = 0x000AE0, length = 0x000010
   XINTF      : origin = 0x000B20, length = 0x000020
   CPU_TIMER0 : origin = 0x000C00, length = 0x000008
   CPU_TIMER1 : origin = 0x000C08, length = 0x000008                 
   CPU_TIMER2 : origin = 0x000C10, length = 0x000008                 
   PIE_CTRL   : origin = 0x000CE0, length = 0x000020
   PIE_VECT   : origin = 0x000D00, length = 0x000100

   /* Peripheral Frame 1:   */
   ECAN_A     : origin = 0x006000, length = 0x000100
   ECAN_AMBOX : origin = 0x006100, length = 0x000100

   /* Peripheral Frame 2:   */
   SYSTEM     : origin = 0x007010, length = 0x000020
   SPI_A      : origin = 0x007040, length = 0x000010
   SCI_A      : origin = 0x007050, length = 0x000010
   XINTRUPT   : origin = 0x007070, length = 0x000010
   GPIOMUX    : origin = 0x0070C0, length = 0x000020
   GPIODAT    : origin = 0x0070E0, length = 0x000020
   ADC        : origin = 0x007100, length = 0x000020
   EV_A       : origin = 0x007400, length = 0x000040
   EV_B       : origin = 0x007500, length = 0x000040
   SPI_B      : origin = 0x007740, length = 0x000010
   SCI_B      : origin = 0x007750, length = 0x000010
   MCBSP_A    : origin = 0x007800, length = 0x000040

   /* CSM Password Locations */
  
   
}

 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
FLASH.CMD,第二部分(section分配)


/* Allocate sections to memory blocks.
   Note:
         codestart user defined section in DSP28_CodeStartBranch.asm used to redirect code
                   execution when booting to flash
         ramfuncs  user defined section to store functions that will be copied from Flash into RAM
*/

SECTIONS
{

   /* Allocate program areas: */
   codestart           : > BEGIN       PAGE = 0
   .cinit              : > FLASHC      PAGE = 0
   .pinit              : > FLASHC      PAGE = 0
   .text               : > FLASHC      PAGE = 0
    FFTtf                   : > FLASHA,            PAGE = 1
    FFTmag             : > FLASHA,           PAGE = 1
        FFTmag1            : > FLASHA,     PAGE = 1
   FFTipcb0            ALIGN(1024)  : { } >    FLASHA, PAGE 1
   FFTipcb1         ALIGN(1024)  : { } >    FLASHA, PAGE 1
   FFTipcb2            ALIGN(1024)  : { } >    FLASHA, PAGE 1
   FFTipcb3         ALIGN(1024)  : { } >    FLASHA, PAGE 1
   FFTipcb4            ALIGN(1024)  : { } >    FLASHA, PAGE 1
   FFTipcb5         ALIGN(1024)  : { } >    FLASHA, PAGE 1
   FFTipcb6            ALIGN(1024)  : { } >    FLASHA, PAGE 1
   FFTipcb7         ALIGN(1024)  : { } >    FLASHA, PAGE 1
   FFTipcb_c    ALIGN(4096)  : { } >    FLASHA, PAGE 1
  /* ramfuncs*/             LOAD = FLASHA, RUN = RAML0,
                                                    LOAD_START(_RamfuncsLoadStart),
                                                    LOAD_END(_RamfuncsLoadEnd),
                                                 RUN_START(_RamfuncsRunStart),
                                                    PAGE = 0

   /* Allocate uninitalized data sections: */
   .stack              : > RAMM0       PAGE = 1
   .bss                : > RAML1       PAGE = 1
   .ebss               : > RAML1       PAGE = 1
   .sysmem             : > RAMM1       PAGE = 1
   .esysmem            : > RAMM1       PAGE = 1
   FFTmag1             : > FLASHA,     PAGE = 1
   FFTipcb0            ALIGN(1024)  : { } >    FLASHC, PAGE 0
   FFTipcb1         ALIGN(1024)  : { } >    FLASHC, PAGE 0
   FFTipcb2            ALIGN(1024)  : { } >    FLASHC, PAGE 0
   FFTipcb3         ALIGN(1024)  : { } >    FLASHC, PAGE 0
   FFTipcb4            ALIGN(1024)  : { } >    FLASHD, PAGE 0
   FFTipcb5         ALIGN(1024)  : { } >    FLASHD, PAGE 0
   FFTipcb6            ALIGN(1024)  : { } >    FLASHD, PAGE 0
   FFTipcb7         ALIGN(1024)  : { } >    FLASHD, PAGE 0
   FFTipcb_c    ALIGN(4096)  : { } >    FLASHD, PAGE 0

   /* Initalized sections go in Flash */
   .const              : > FLASHC      PAGE = 0
   .econst             : > FLASHC      PAGE = 0

   /* Allocate IQ math areas: */
   IQmath              : > FLASHC      PAGE = 0                  /* Math Code */
   IQmathTables        : > ROM         PAGE = 0, TYPE = NOLOAD   /* Math Tables In ROM */
   IQmathTablesRam     : > RAML1,      PAGE = 1
   /* .reset indicates the start of _c_int00 for C Code.  
   /* When using the boot ROM this section and the CPU vector
   /* table is not needed.  Thus the default type is set to
   /* DESECT */
   .reset              : > RESET,      PAGE = 0, TYPE = DSECT
   vectors             : > VECTORS     PAGE = 0, TYPE = DSECT

/* ------------------------------------------------------------- */
/* The following allocations are required for the DSP28 Header file
   examples.  Each allocation maps a structure defined in the DSP28
   header files to the memory location of those registers.  
*/
      
   /* Allocate Peripheral Frame 0 Register Structures:   */
   DevEmuRegsFile    : > DEV_EMU,    PAGE = 1
   FlashRegsFile     : > FLASH_REGS, PAGE = 1
   CsmRegsFile       : > CSM,        PAGE = 1
   XintfRegsFile     : > XINTF,      PAGE = 1
   CpuTimer0RegsFile : > CPU_TIMER0, PAGE = 1      
   CpuTimer1RegsFile : > CPU_TIMER1, PAGE = 1      
   CpuTimer2RegsFile : > CPU_TIMER2, PAGE = 1      
   PieCtrlRegsFile   : > PIE_CTRL,   PAGE = 1      
   PieVectTable      : > PIE_VECT,   PAGE = 1

   /* Allocate Peripheral Frame 2 Register Structures:   */
   ECanaRegsFile     : > ECAN_A,      PAGE = 1   
   ECanaMboxesFile   : > ECAN_AMBOX   PAGE = 1

   /* Allocate Peripheral Frame 1 Register Structures:   */
   SysCtrlRegsFile   : > SYSTEM,     PAGE = 1
   SpiaRegsFile      : > SPI_A,      PAGE = 1
   SciaRegsFile      : > SCI_A,      PAGE = 1
   XIntruptRegsFile  : > XINTRUPT,   PAGE = 1
   GpioMuxRegsFile   : > GPIOMUX,    PAGE = 1
   GpioDataRegsFile  : > GPIODAT     PAGE = 1
   AdcRegsFile       : > ADC,        PAGE = 1
   EvaRegsFile       : > EV_A,       PAGE = 1
   EvbRegsFile       : > EV_B,       PAGE = 1
   ScibRegsFile      : > SCI_B,      PAGE = 1
   McbspaRegsFile    : > MCBSP_A,    PAGE = 1

   /* CSM Password Locations */
   CsmPwlFile      : > CSM_PWL,     PAGE = 0

}
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

4
 
AD.c(又过长!晕,分为两个部分吧)

#include "DSP28_Device.h"
#include "math.h"
#include "fft.h"
#include "qmath.h"
#include "IQmathLib.h"


interrupt void ad(void);


#define N 1024
#define N_input 512
#define M 4      //the nuber of record

//define the parameters
#define c_TDOA 342.0
#define MM_TDOA 2
#define d_TDOA 0.5
#define thetal_TDOA (3.14/2)
//#define FS 16000


//alocate the space for rfft
RFFT32  fft=RFFT32_512P_DEFAULTS;

#pragma DATA_SECTION(mag, "FFTmag");
long mag[N_input/2+1];
#pragma DATA_SECTION(mag_temp, "FFTmag1");
long mag_temp[N_input/2+1];

RFFT32_ACQ acq=FFTRACQ_DEFAULTS;
//end

#pragma DATA_SECTION(ipcb_ad0, "FFTipcb0");
long ipcb_ad0[N_input+2];
#pragma DATA_SECTION(ipcb_ad1, "FFTipcb1");
long ipcb_ad1[N_input+2];
#pragma DATA_SECTION(ipcb_ad2, "FFTipcb2");
long ipcb_ad2[N_input+2];
#pragma DATA_SECTION(ipcb_ad3, "FFTipcb3");
long ipcb_ad3[N_input+2];
#pragma DATA_SECTION(ipcb_ad4, "FFTipcb4");
long ipcb_ad4[N_input+2];
#pragma DATA_SECTION(ipcb_ad5, "FFTipcb5");
long ipcb_ad5[N_input+2];
#pragma DATA_SECTION(ipcb_ad6, "FFTipcb6");
long ipcb_ad6[N_input+2];
#pragma DATA_SECTION(ipcb_ad7, "FFTipcb7");
long ipcb_ad7[N_input+2];

unsigned int num_sampal;

//alocate the space for cfft
#pragma DATA_SECTION(ipcb_c, "FFTipcb_c");
CFFT32  fft_c=CFFT32_1024P_DEFAULTS;
long ipcb_c[2*N];
CFFT32_ACQ  acq_c=CFFT32_ACQ_DEFAULTS;  
//end

//function used to translate the Q31 format number to the Q30 format number
void Q31toQ30(long *temp,unsigned int n)
{
     unsigned int i;
         for(i=0;i           temp=temp>>1;         
}

//function used to translate the Q31 format number to the Q30 format number
void Q30toQ31(long *temp,unsigned int n)
{
     unsigned int i;
         for(i=0;i           temp=(temp|0x80000000)|(temp<<1);         
}

//function:FFT for real
//note:the input nad output are all the Q31 format
void FFT_real_initial(long *buffer,long *magnitude_buf,int numpoint)
{
           //initial the acquire moudel
        acq.buffptr=buffer;
        acq.tempptr=buffer;
        acq.size=numpoint;
        acq.count=numpoint;
        acq.acqflag=1;
    //initial the FFT moudel
         fft.ipcbptr=buffer;
     fft.magptr=magnitude_buf;  
     fft.init(&fft);
}

void FFT_real_compution(long *buffer)
{
    //caculate
    acq.update(&acq);
        RFFT32_brev(buffer,buffer,N_input);
        fft.calc(&fft);
    fft.split(&fft);
        fft.mag(&fft);
}

//function:FFT for complex
//note:the input nad output are all the Q31 format
void CFFT_complex_initial(long *buffer,int numpoint)
{
           //initial the acquire moudel
        acq_c.buffptr=buffer;
        acq_c.tempptr=buffer;
        acq_c.size=numpoint;
        acq_c.count=numpoint;
        acq_c.acqflag=1;
    //initial the FFT moudel
        fft_c.ipcbptr=buffer;  
    fft_c.init(&fft_c);
}

void CFFT_complex_compution(long *buffer)
{
    //caculate
    acq_c.update(&acq_c);
        RFFT32_brev(buffer,buffer,N*2);
//        fft_c.izero(&fft_c);
        fft_c.calc(&fft_c);
    //fft.split(&fft);
        //fft.mag(&fft);
}

//data format of rfft to data format of icfft
void rfft_to_icfft(long *data_rfft,long *data_cfft,int MM)
{
    int i,temp;
    temp=2*N_input;
        for(i=0;i         {
        data_cfft=data_rfft;
    data_cfft[i+1]=-data_rfft[i+1];
//        data_cfft=(data_cfft>>10)-((long)1023<<21);
        }
    data_cfft=data_rfft/4;
    data_cfft[i+1]=data_rfft[i+1]/4;
        i=i+2;
        for(;i<(2*MM*N_input-N_input);i=i+1)
        {
          data_cfft=0;
        }
    data_cfft=data_rfft[N_input]/4;
    data_cfft[i+1]=data_rfft[N_input+1]/4;
        i=i+2;
    for(;i<2*MM*N_input;i=i+2)
        {
           data_cfft=data_rfft[temp-(i-2*N_input)];
       data_cfft[i+1]=data_rfft[temp+1-(i-2*N_input)];
          }
}
//function:% this function is to use interpolation method
//to estimate the TDOA of signals.
//paramter: ch1:point to the buffer   form ADC
//          ch2:point to the buffer  form ADC
//          exp1:the normalized parameter
//          MM:the number of M times interpolation,MM must be 2
// note:MM must be 2
int int_corr1(long *ch1,long *ch2,_iq24 exp1,int MM)
{
    int i,max;
        _iq30 temp_q30;
    FFT_real_initial(ch1,mag,N_input);
    FFT_real_compution(ch1);
        Q31toQ30(ch1,N_input+2);
        FFT_real_initial(ch2,mag_temp,N_input);
        FFT_real_compution(ch2);
        Q31toQ30(ch2,N_input+2);
        //ch1*conjugate(ch2)
        for(i=0;i         {
        temp_q30=ch1;
    ch1=_IQ30mpy(ch1,ch2)+_IQ30mpy(ch1[i+1],ch2[i+1]);
        ch1[i+1]=_IQ30mpy(ch2,ch1[i+1])-_IQ30mpy(ch2[i+1],temp_q30);
    i>>=1;
        if(mag&&mag_temp)
        {
        mag=_IQ30mpy(_IQ30sqrt(mag),_IQ30sqrt(mag_temp));
    mag=(long)qlogn((mag)>>14);//format 11
        if(mag<0)
        {
    mag=(mag<<13)|0x80000000;////format 24
        }
        else
        {
         mag=(mag<<13);
        }
    mag=_IQ24exp(_IQ24mpy(exp1,mag));//format 24
    mag=(mag<<6);//format 30
    mag=mag+_IQ30(0.0001);
        }
        else
        {
         mag=_IQ30(0.0001);  
        }
        i<<=1;
        ch1=_IQ30div(ch1,mag[i>>1]);
    ch1[i+1]=_IQ30div(ch1[i+1],mag[i>>1]);
        }
   // Q30toQ31(ch1,N+2);
    rfft_to_icfft(ch1,ipcb_c,MM);
    CFFT_complex_initial(ipcb_c,N_input*MM);
    CFFT_complex_compution(ipcb_c);
    //find the max
        temp_q30=ipcb_c[0];
        max=0;
        for(i=2;i<2*N_input*MM;i=i+2)
        {
           if(temp_q30)
           {
              temp_q30=ipcb_c;
          max=i;
           }
        }
        max=max/2;
        if(max<(N_input*MM/2))
        max=max+N_input*MM/2;
        else
    max=max-N_input*MM/2;
    return (max-N_input*MM/2);
}

//compute the noise of every channal
//the range of return value is between 0 and 4095
void  get_noise(void)
{
  
}

//send data of long by RS232
void send_data_long(int data)
{
  //unsigned char temp,i;
  //for(i=0;i<4;i++)
  //{
    //  temp=(unsigned char)(data&0x000000ff);
      //data=data>>8;
      while(ScibTx_Ready()==0);
      ScibRegs.SCITXBUF =(data&0xff00>>8);
  //}
}
void send_data(int data)
{
     int tmp;
         tmp=data;
     while(ScibTx_Ready()==0);
     ScibRegs.SCITXBUF =((tmp&0xff00)>>8);
         while(ScibTx_Ready()==0);
         ScibRegs.SCITXBUF =(data&0x00ff);
}

//compute the derection function


int compute_win(long *chn)//512points
{   
    int i;
        long tmp;
        for(i=0;i         {
        tmp=tmp+chn;
        }
        tmp=tmp/512.0;
        return(chn[0]);

}
void compute_direction(int index)
{
      float tp;
          long direction;
      tp=index*c_TDOA/AD_sampling_freq;
      tp=tp/(d_TDOA*MM_TDOA);
          if(fabs(tp)<1.0)
          tp=3.14/2-asin(tp);
          direction=(int)(tp*180/3.14);
          //the range of tp is between 0 and pi/2
          //translate tp to Q29 foramt to send tp using uart
     // direction=(long)(tp*0x20000000);
          //send direction using uart
          send_data(0xff);
      send_data(direction);
          //send_data_long(0xffffffff);
}

 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

5
 
新手,关注此贴~
 
 
 

回复

63

帖子

0

TA的资源

一粒金砂(初级)

6
 
问题解决了吗?
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表