This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

程序中增加数组,导致AD采样时间异常问题

Other Parts Discussed in Thread: TMS320F28335

TMS320F28335;CCS 5.5

离线模式:用F28335.cmd

用#pragma CODE_SECTION(函数名,"ramfuncs"); 将所有函数都copy到RAM里运行。

程序采样PWM触发ADC采样,每50us一个PWM中断,同时AD采样一次。用GPIO高电平看进PWM中断到AD采样完成的时间,程序如下:

/*************************************************************/

GpioDataRegs.GPBSET.bit.GPIO58 = 1;   //GPIO置高

while (AdcRegs.ADCST.bit.INT_SEQ1== 0) {} 
AdcRegs.ADCTRL2.bit.RST_SEQ1 = 1; 
AdcRegs.ADCST.bit.INT_SEQ1_CLR = 1;

GpioDataRegs.GPBCLEAR.bit.GPIO58 = 1;  //GPIO置低

/*************************************************************/

PWM是增减模式,在计时器为0时进中断,计数器到达峰值时启动ADC,正常情况下,上面程序的高电平时间非常短,观察到的时间约为380ns

为了查看一些控制量,程序里添加了3个数组:

float see1[400], see2[800], see3[800];

添加上面3个数组之后,.ebss段的大小为0x2263,,而默认长度只有0x1000,因此需要改CMD文件

RAML4 : origin = 0x00C000, length = 0x001000 /* on-chip RAM block L1 */
RAML5 : origin = 0x00D000, length = 0x001000 /* on-chip RAM block L1 */
RAML6 : origin = 0x00E000, length = 0x001000 /* on-chip RAM block L1 */
RAML7 : origin = 0x00F000, length = 0x001000 /* on-chip RAM block L1 */

.ebss               : > RAML4       PAGE = 1

DMARAML4 : > RAML4, PAGE = 1
DMARAML5 : > RAML5, PAGE = 1
DMARAML6 : > RAML6, PAGE = 1
DMARAML7 : > RAML7, PAGE = 1

更改为

RAML4 : origin = 0x00C000, length = 0x003000 /* on-chip RAM block L1 */
RAML7 : origin = 0x00F000, length = 0x001000 /* on-chip RAM block L1 */

.ebss               : > RAML4       PAGE = 1

DMARAML4 : > RAML4, PAGE = 1
DMARAML7 : > RAML7, PAGE = 1

编译正确,烧写之后运行,查看GPIO高电平时间,发现时间很长,大概42us。

在修改cmd文件之后,把上面三个数组完全注释掉,重新烧写运行,查看GPIO高电平时间大概380ns。

这么来看,好像就是这3个数组的加入,使得AD采样时间发生异常。下面两张图就是观察到的GPIO高电平时间,上面的图是正常情况,下面的是异常情况。

另外,如果是在线模式,使用28335_RAM_lnk.cmd,则添加3个数组后程序运行也正常。

在这儿恳请各位专家和大神帮帮忙,看看是哪边出现的问题?感激不尽!谢谢了!这个问题困扰太久了。

再次表示感谢!