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

28027用timer0触发ADC,无法进入timer0中断

单独用timer0能够进入中断,在中断中我设置了一个IO口,每1s钟闪烁一次用于测试是否进入中断。

但是在主函数中加入InitADC函数之后,就无法进入timer0的TINT0中断。注释掉之后,就可以正常进入TINT0中断。

InitADC函数来自官方代码,在f2802x_adc.c中。

无法进入TINT0中断,就无法触发ADC的SOC。所有片内外设时钟都开了。

下面粘上主函数的程序:

Liang Hu2:

调试了一下,发现是InitAdc()函数里面的DELAY_US(ADC_usDELAY)这个微秒延时的问题。

追踪一下得到这个带参数的宏

#define DELAY_US(A)  DSP28x_usDelay(((((long double) A * 1000.0L) / (long double)CPU_RATE) – 9.0L) / 5.0L)

而DSP28x_usDelay定义在f2802x_usdelay.asm里:

.def _DSP28x_usDelay .sect "ramfuncs"

.global __DSP28x_usDelay_DSP28x_usDelay: SUB ACC,#1 BF _DSP28x_usDelay,GEQ ;; Loop if ACC >= 0 LRETR

我上网查了一下,这个函数需要在RAM里运行?这怎么搞?

我在主函数里加了:

#ifdef _FLASH memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize);#endif

也不管用啊!而且我追踪不到memcpy这个函数的原型,官方库里也没有这个memcpy函数

单独用timer0能够进入中断,在中断中我设置了一个IO口,每1s钟闪烁一次用于测试是否进入中断。

但是在主函数中加入InitADC函数之后,就无法进入timer0的TINT0中断。注释掉之后,就可以正常进入TINT0中断。

InitADC函数来自官方代码,在f2802x_adc.c中。

无法进入TINT0中断,就无法触发ADC的SOC。所有片内外设时钟都开了。

下面粘上主函数的程序:

Jason Wu4:

回复 Liang Hu2:

memcpy这个函数调用后需要调用InitFlash()进行相关Flash函数初始化配置

单独用timer0能够进入中断,在中断中我设置了一个IO口,每1s钟闪烁一次用于测试是否进入中断。

但是在主函数中加入InitADC函数之后,就无法进入timer0的TINT0中断。注释掉之后,就可以正常进入TINT0中断。

InitADC函数来自官方代码,在f2802x_adc.c中。

无法进入TINT0中断,就无法触发ADC的SOC。所有片内外设时钟都开了。

下面粘上主函数的程序:

Eric Ma:

回复 Liang Hu2:

参考这个例程C:\ti\controlSUITE\device_support\f2802x\v230\f2802x_examples_structs\flash_f2802x

cmd中要定义ramfuncs段,然后在初始的时候,调用memcpy函数。这个是编译器自带函数,你上百度搜一下即可。

ERIC

单独用timer0能够进入中断,在中断中我设置了一个IO口,每1s钟闪烁一次用于测试是否进入中断。

但是在主函数中加入InitADC函数之后,就无法进入timer0的TINT0中断。注释掉之后,就可以正常进入TINT0中断。

InitADC函数来自官方代码,在f2802x_adc.c中。

无法进入TINT0中断,就无法触发ADC的SOC。所有片内外设时钟都开了。

下面粘上主函数的程序:

Liang Hu2:

回复 Eric Ma:

嗯 谢谢 这个微秒延时的问题是解决了

是这样用:

memcpy(&RamfuncsRunStart, &RamfuncsLoadStart, (size_t)&RamfuncsLoadSize); InitAdc();AdcOffsetSelfCal();

但是又有新问题出现了

这个ADCOffsetSelfCal()函数里面有一句

AdcConvMean = AdcConversion();

然后这个AdcConversion()里面有一句:

//Wait for ADCINT2 to trigger, then add ADCRESULT8-15 registers to sum while (AdcRegs.ADCINTFLG.bit.ADCINT2 == 0){}

然后程序就卡死在这个while语句里了,导致不能完成失调校准,请问是怎么回事呢?

赞(0)
未经允许不得转载:TI中文支持网 » 28027用timer0触发ADC,无法进入timer0中断
分享到: 更多 (0)