TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F28335 在线调试

//Clean up magnitude buffer
for (i=0; i < RFFT_SIZE/2; i++)
{
RFFTmagBuff[i] = 0;
}

在线调试时,执行到这个FOR 循环时,出现问题,报错为:No source available for "0x3ff626" ,请问这是什么原因导致的呢?

囧:

因为这个函数是库里面的,没办法单步调试进去

//Clean up magnitude buffer
for (i=0; i < RFFT_SIZE/2; i++)
{
RFFTmagBuff[i] = 0;
}

在线调试时,执行到这个FOR 循环时,出现问题,报错为:No source available for "0x3ff626" ,请问这是什么原因导致的呢?

nan liu1:

回复 囧:

这个是给数组赋值为0,数组定义的是全局变量,应该不是库的原因吧?

//Clean up output buffer for (i=0; i < RFFT_SIZE; i++) { RFFToutBuff[i] = 0; }

这个FOR循环就能执行啊,它们功能应该是一样的啊?下面是我的代码

//###########################################################################//// Original source by: M.P.//// $TI Release: DSP2833x Header Files V1.01 $// $Release Date: September 26, 2007 $//###########################################################################

#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File#include "DSP2833x_Examples.h" // DSP2833x Examples Include File#include "math.h"#include "float.h"#include "FPU.h"

// ADC start parameters#if (CPU_FRQ_150MHZ) // Default – 150 MHz SYSCLKOUT #define ADC_MODCLK 0x3 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) = 25.0 MHz#endif#if (CPU_FRQ_100MHZ) #define ADC_MODCLK 0x2 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) = 25.0 MHz#endif

//#define AVG 1000 // Average sample limit//#define ZOFFSET 0x00 // Average Zero offset

//#pragma DATA_SECTION(AdcBuf,"DMARAML4");

#define RFFT_STAGES 9#define RFFT_SIZE (1 << RFFT_STAGES)

#define ADC_BUF_LEN RFFT_SIZE // ADC buffer length#define ADC_SAMPLE_PERIOD 3124 // 3124 = (3125-1) = 48 KHz sampling w/ 150 MHz SYSCLKOUT

#define F_PER_SAMPLE 48000.0L/(float)RFFT_SIZE //Internal sampling rate is 48kHzRFFT_ADC_F32_STRUCT rfft_adc;RFFT_F32_STRUCT rfft;

float32 RFFToutBuff[RFFT_SIZE]; //Calculated FFT resultfloat32 RFFTF32Coef[RFFT_SIZE]; //Coefficient table bufferfloat32 RFFTmagBuff[RFFT_SIZE/2+1]; //Magnitude of frequency spectrum

Uint16 AdcBuf[ADC_BUF_LEN]; // ADC buffer allocation

Uint16 temp;//void scib_xmit(int a);//void scib_msg(char *msg);/* * main.c */int main(void){ Uint16 i,j; float32 freq;// float32 F_PER_SAMPLE= 48000.0L/512; // Step 1. Initialize System Control: InitSysCtrl();

// Specific clock setting for this example: EALLOW; SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/2*ADC_MODCLK EDIS;

// Step 2. Initialize GPIO: InitGpio(); // Skipped for this example// InitScibGpio();

// Step 3. Clear all interrupts and initialize PIE vector table: // Disable CPU interrupts DINT;

// Initialize the PIE control registers to their default state. // The default state is all PIE interrupts disabled and flags are cleared. InitPieCtrl();

// Disable CPU interrupts and clear all CPU interrupt flags: IER = 0x0000; IFR = 0x0000;

// Initialize the PIE vector table with pointers to the shell Interrupt // Service Routines (ISR). // This will populate the entire table, even if the interrupt // is not used in this example. This is useful for debug purposes. // The shell ISR routines are found in DSP2833x_DefaultIsr.c. // This function is found in DSP2833x_PieVect.c.// InitPieVectTable();

// MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);// InitFlash();

// InitSci(); // Initialize the SCI FIFO

EPwmSetup();

// for(; ;)// {// temp = EPwm1Regs.TBCTR;// } // Step 4. Initialize the ADC: InitAdc();

rfft_adc.Tail = &rfft.OutBuf; //Link the RFFT_ADC_F32_STRUCT to //RFFT_F32_STRUCT. Tail pointer of //RFFT_ADC_F32_STRUCT is passed to //the OutBuf pointer of RFFT_F32_STRUCT rfft.FFTSize = RFFT_SIZE; //Real FFT size rfft.FFTStages = RFFT_STAGES; //Real FFT stages rfft_adc.InBuf = &AdcBuf[0]; //Input buffer rfft.OutBuf = &RFFToutBuff[0]; //Output buffer rfft.CosSinBuf = &RFFTF32Coef[0]; //Twiddle factor rfft.MagBuf = &RFFTmagBuff[0]; //Magnitude output buffer

RFFT_f32_sincostable(&rfft); //Calculate twiddle factor

//Clean up output buffer for (i=0; i < RFFT_SIZE; i++) { RFFToutBuff[i] = 0; }

//Clean up magnitude buffer for (i=0; i < RFFT_SIZE/2; i++) { RFFTmagBuff[i] = 0; }while(1){ AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0x1; //开始转换

while(AdcRegs.ADCASEQSR.bit.SEQ_CNTR!=0); //等待转换完成

for(i=0 ;i<32;i++) {

AdcBuf[0+16*i] = AdcMirror.ADCRESULT0; AdcBuf[1+16*i] = AdcMirror.ADCRESULT1; AdcBuf[2+16*i] = AdcMirror.ADCRESULT2; AdcBuf[3+16*i] = AdcMirror.ADCRESULT3; AdcBuf[4+16*i] = AdcMirror.ADCRESULT4; AdcBuf[5+16*i] = AdcMirror.ADCRESULT5; AdcBuf[6+16*i] = AdcMirror.ADCRESULT6; AdcBuf[7+16*i] = AdcMirror.ADCRESULT7; AdcBuf[8+16*i] = AdcMirror.ADCRESULT8; AdcBuf[9+16*i] = AdcMirror.ADCRESULT9; AdcBuf[10+16*i] = AdcMirror.ADCRESULT10; AdcBuf[11+16*i] = AdcMirror.ADCRESULT11; AdcBuf[12+16*i] = AdcMirror.ADCRESULT12; AdcBuf[13+16*i] = AdcMirror.ADCRESULT13; AdcBuf[14+16*i] = AdcMirror.ADCRESULT14; AdcBuf[15+16*i] = AdcMirror.ADCRESULT15;

AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0x1; //开始转换

while(AdcRegs.ADCASEQSR.bit.SEQ_CNTR!=0); //等待转换完成 }

RFFT_adc_f32u(&rfft_adc); // This version of FFT doesn't need buffer alignment RFFT_f32_mag(&rfft); // Calculate spectrum amplitude

j = 1; freq = RFFTmagBuff[1]; for(i=2;i<RFFT_SIZE/2+1;i++) { //Looking for the maximum valude of spectrum magnitude if(RFFTmagBuff[i] > freq) { j = i; freq = RFFTmagBuff[i]; } }

freq = F_PER_SAMPLE * (float)j; //Convert normalized digital frequency to analog frequency

// for(i=0;i<2;i++)// {// temp = ADC[i]>>8;// scib_xmit(temp);// DELAY_US(50L);/// temp = ADC[i]&0xff;// scib_xmit(temp);// DELAY_US(50L);// }}// return 0;}

 

//Clean up magnitude buffer
for (i=0; i < RFFT_SIZE/2; i++)
{
RFFTmagBuff[i] = 0;
}

在线调试时,执行到这个FOR 循环时,出现问题,报错为:No source available for "0x3ff626" ,请问这是什么原因导致的呢?

囧:

回复 nan liu1:

RFFTmagBuff是不是在库里定义的?还是你能在.h文件中找到?

是以下语句就发生问题吗?

//Clean up output bufferfor (i=0; i < RFFT_SIZE; i++){RFFToutBuff[i] = 0;}

这个FOR循环就能执行啊,它们功能应该是一样的啊?下面是我的代码

//###########################################################################//// Original source by: M.P.//// $TI Release: DSP2833x Header Files V1.01 $// $Release Date: September 26, 2007 $//###########################################################################

#include "DSP2833x_Device.h" // DSP2833x Headerfile Include File#include "DSP2833x_Examples.h" // DSP2833x Examples Include File#include "math.h"#include "float.h"#include "FPU.h"

// ADC start parameters#if (CPU_FRQ_150MHZ) // Default – 150 MHz SYSCLKOUT#define ADC_MODCLK 0x3 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 150/(2*3) = 25.0 MHz#endif#if (CPU_FRQ_100MHZ)#define ADC_MODCLK 0x2 // HSPCLK = SYSCLKOUT/2*ADC_MODCLK2 = 100/(2*2) = 25.0 MHz#endif

//#define AVG 1000 // Average sample limit//#define ZOFFSET 0x00 // Average Zero offset

//#pragma DATA_SECTION(AdcBuf,"DMARAML4");

#define RFFT_STAGES 9#define RFFT_SIZE (1 << RFFT_STAGES)

#define ADC_BUF_LEN RFFT_SIZE // ADC buffer length#define ADC_SAMPLE_PERIOD 3124 // 3124 = (3125-1) = 48 KHz sampling w/ 150 MHz SYSCLKOUT

#define F_PER_SAMPLE 48000.0L/(float)RFFT_SIZE //Internal sampling rate is 48kHzRFFT_ADC_F32_STRUCT rfft_adc;RFFT_F32_STRUCT rfft;

float32 RFFToutBuff[RFFT_SIZE]; //Calculated FFT resultfloat32 RFFTF32Coef[RFFT_SIZE]; //Coefficient table bufferfloat32 RFFTmagBuff[RFFT_SIZE/2+1]; //Magnitude of frequency spectrum

Uint16 AdcBuf[ADC_BUF_LEN]; // ADC buffer allocation

Uint16 temp;//void scib_xmit(int a);//void scib_msg(char *msg);/** main.c*/int main(void){Uint16 i,j;float32 freq;// float32 F_PER_SAMPLE= 48000.0L/512;// Step 1. Initialize System Control:InitSysCtrl();

// Specific clock setting for this example:EALLOW;SysCtrlRegs.HISPCP.all = ADC_MODCLK; // HSPCLK = SYSCLKOUT/2*ADC_MODCLKEDIS;

// Step 2. Initialize GPIO:InitGpio(); // Skipped for this example// InitScibGpio();

// Step 3. Clear all interrupts and initialize PIE vector table:// Disable CPU interruptsDINT;

// Initialize the PIE control registers to their default state.// The default state is all PIE interrupts disabled and flags are cleared.InitPieCtrl();

// Disable CPU interrupts and clear all CPU interrupt flags:IER = 0x0000;IFR = 0x0000;

// Initialize the PIE vector table with pointers to the shell Interrupt// Service Routines (ISR).// This will populate the entire table, even if the interrupt// is not used in this example. This is useful for debug purposes.// The shell ISR routines are found in DSP2833x_DefaultIsr.c.// This function is found in DSP2833x_PieVect.c.// InitPieVectTable();

// MemCopy(&RamfuncsLoadStart, &RamfuncsLoadEnd, &RamfuncsRunStart);// InitFlash();

// InitSci(); // Initialize the SCI FIFO

EPwmSetup();

// for(; ;)// {// temp = EPwm1Regs.TBCTR;// }// Step 4. Initialize the ADC:InitAdc();

rfft_adc.Tail = &rfft.OutBuf; //Link the RFFT_ADC_F32_STRUCT to//RFFT_F32_STRUCT. Tail pointer of//RFFT_ADC_F32_STRUCT is passed to//the OutBuf pointer of RFFT_F32_STRUCTrfft.FFTSize = RFFT_SIZE; //Real FFT sizerfft.FFTStages = RFFT_STAGES; //Real FFT stagesrfft_adc.InBuf = &AdcBuf[0]; //Input bufferrfft.OutBuf = &RFFToutBuff[0]; //Output bufferrfft.CosSinBuf = &RFFTF32Coef[0]; //Twiddle factorrfft.MagBuf = &RFFTmagBuff[0]; //Magnitude output buffer

RFFT_f32_sincostable(&rfft); //Calculate twiddle factor

//Clean up output bufferfor (i=0; i < RFFT_SIZE; i++){RFFToutBuff[i] = 0;}

//Clean up magnitude bufferfor (i=0; i < RFFT_SIZE/2; i++){RFFTmagBuff[i] = 0;}while(1){AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0x1; //开始转换

while(AdcRegs.ADCASEQSR.bit.SEQ_CNTR!=0); //等待转换完成

for(i=0 ;i<32;i++){

AdcBuf[0+16*i] = AdcMirror.ADCRESULT0;AdcBuf[1+16*i] = AdcMirror.ADCRESULT1;AdcBuf[2+16*i] = AdcMirror.ADCRESULT2;AdcBuf[3+16*i] = AdcMirror.ADCRESULT3;AdcBuf[4+16*i] = AdcMirror.ADCRESULT4;AdcBuf[5+16*i] = AdcMirror.ADCRESULT5;AdcBuf[6+16*i] = AdcMirror.ADCRESULT6;AdcBuf[7+16*i] = AdcMirror.ADCRESULT7;AdcBuf[8+16*i] = AdcMirror.ADCRESULT8;AdcBuf[9+16*i] = AdcMirror.ADCRESULT9;AdcBuf[10+16*i] = AdcMirror.ADCRESULT10;AdcBuf[11+16*i] = AdcMirror.ADCRESULT11;AdcBuf[12+16*i] = AdcMirror.ADCRESULT12;AdcBuf[13+16*i] = AdcMirror.ADCRESULT13;AdcBuf[14+16*i] = AdcMirror.ADCRESULT14;AdcBuf[15+16*i] = AdcMirror.ADCRESULT15;

AdcRegs.ADCTRL2.bit.SOC_SEQ1 = 0x1; //开始转换

while(AdcRegs.ADCASEQSR.bit.SEQ_CNTR!=0); //等待转换完成}

RFFT_adc_f32u(&rfft_adc); // This version of FFT doesn't need buffer alignmentRFFT_f32_mag(&rfft); // Calculate spectrum amplitude

j = 1;freq = RFFTmagBuff[1];for(i=2;i<RFFT_SIZE/2+1;i++){//Looking for the maximum valude of spectrum magnitudeif(RFFTmagBuff[i] > freq){j = i;freq = RFFTmagBuff[i];}}

freq = F_PER_SAMPLE * (float)j; //Convert normalized digital frequency to analog frequency

// for(i=0;i<2;i++)// {// temp = ADC[i]>>8;// scib_xmit(temp);// DELAY_US(50L);/// temp = ADC[i]&0xff;// scib_xmit(temp);// DELAY_US(50L);// }}// return 0;}

 

//Clean up magnitude buffer
for (i=0; i < RFFT_SIZE/2; i++)
{
RFFTmagBuff[i] = 0;
}

在线调试时,执行到这个FOR 循环时,出现问题,报错为:No source available for "0x3ff626" ,请问这是什么原因导致的呢?

nan liu1:

回复 囧:

float32 RFFTmagBuff[RFFT_SIZE/2+1]; //Magnitude of frequency spectrum  

1、这个宏定义就在主程序MAIN.C  中定义的,我能看到,我用TI官方库调试就可以通过,我自己新建的工程就无法执行。

2、另外一个问题,就是TI的库函数是不是好多汇编定义的,我只能看到程序的声明,但无法打开程序定义部分啊,比如我最近在做FFT开发,库中有一个函数是RFFT_adc_f32u(&rfft_adc); 我只能看到声明,看不到函数本身的定义;

3、还有一个宏定义  #define ADC_SAMPLE_PERIOD   3124            // 3124 = (3125-1) = 48 KHz sampling w/ 150 MHz SYSCLKOUT

这个宏定义也是FFT里面定义的,我屏蔽后,编译也不报错啊,但这个宏定义确实应该有作用啊?不知道是什么情况? 

第2和第3个问题我是下载TI的CONTROLSUIT 后,导入工程遇到的,C:\ti\controlSUITE\libs\dsp\FPU\v1_40_00_00\examples_ccsv5\2833x_rfft_adc_rt,这就是我导入的工程文件路径,希望对您解决我的疑惑有帮助。

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28335 在线调试
分享到: 更多 (0)