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

TMS320F28335如何在外扩SRAM上仿真

我最近在用TMS320F28335做一个实验,由于代码量较大,片上的34kSRAM显得过小,我的开发板上有一个外扩SRAM,大小为256k,可是我通过#pragma CODE_SECTION(func,"section name")函数把一个DMA中断函数复制到外扩的SRAM时,程序总是进入ILLEGAL_ISR中。

DMA中断函数中有FFT运算,在单步调试时发现是程序运行到math.h中的log()函数时就进入ILLEGAL_ISR中,而把这些函数放在片内运行时就不会进入ILLEGAL_ISR,网上关于CODE_SECTION的资料少之又少,大部分都是关于DATA_SECTION的,所以希望你们能给我提供一些帮助,谢谢!

1.主函数文件中的一些代码:

#pragma DATA_SECTION(ChannelsData,"DMARAML4");
#pragma DATA_SECTION(XW,"DMARAML5");
#pragma CODE_SECTION(dma_isr,"ZONE7A");

interrupt void dma_isr()
{
PieCtrlRegs.PIEACK.bit.ACK7=1;
int i=0;
for(i=0;i<ChannelSize;i++)
{
XW[i].real=((float)ChannelsData[0][i]-2300)/30;
XW[i].imag=0;
}
//
mcmpfft(XW, ChannelSize,-1);//程序运行到此行后,进入ILLEGAL_ISR
for(i=0;i<ChannelSize;i++)
{
y[i]=mabs(XW[i]);
//y[i]=sqrt((double)10.23);
}
asm(" ESTOP0");

}

2.cmd文件中的相关代码:

MEMORY
{
PAGE 0 :

。。。

ZONE7A      : origin = 0x200000, length = 0x30000    /* XINTF zone 7 – program space */

。。。

}

Seven Han:

资料的话您可以看SPRA958文档有,相关的详细介绍把一些函数和常量搬到RAM中,这里可以下载http://www.ti.com/lit/an/spra958l/spra958l.pdf

另外controlsuite中flash_f28335例程也可参考。

我最近在用TMS320F28335做一个实验,由于代码量较大,片上的34kSRAM显得过小,我的开发板上有一个外扩SRAM,大小为256k,可是我通过#pragma CODE_SECTION(func,"section name")函数把一个DMA中断函数复制到外扩的SRAM时,程序总是进入ILLEGAL_ISR中。

DMA中断函数中有FFT运算,在单步调试时发现是程序运行到math.h中的log()函数时就进入ILLEGAL_ISR中,而把这些函数放在片内运行时就不会进入ILLEGAL_ISR,网上关于CODE_SECTION的资料少之又少,大部分都是关于DATA_SECTION的,所以希望你们能给我提供一些帮助,谢谢!

1.主函数文件中的一些代码:

#pragma DATA_SECTION(ChannelsData,"DMARAML4");
#pragma DATA_SECTION(XW,"DMARAML5");
#pragma CODE_SECTION(dma_isr,"ZONE7A");

interrupt void dma_isr()
{
PieCtrlRegs.PIEACK.bit.ACK7=1;
int i=0;
for(i=0;i<ChannelSize;i++)
{
XW[i].real=((float)ChannelsData[0][i]-2300)/30;
XW[i].imag=0;
}
//
mcmpfft(XW, ChannelSize,-1);//程序运行到此行后,进入ILLEGAL_ISR
for(i=0;i<ChannelSize;i++)
{
y[i]=mabs(XW[i]);
//y[i]=sqrt((double)10.23);
}
asm(" ESTOP0");

}

2.cmd文件中的相关代码:

MEMORY
{
PAGE 0 :

。。。

ZONE7A      : origin = 0x200000, length = 0x30000    /* XINTF zone 7 – program space */

。。。

}

Chunxu Ye:

回复 Seven Han:

能帮我分析一下我的程序为什么会进入ILLEGAL_ISR()吗进入ILLEGAL_ISR()程序自动暂停后,我通过CCS可以看到dma_isr已经被复制到了外扩SRAM中,但是无法在SRAM中设置断点,程序运行之后会直接进入ILLEGAL_ISR();

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28335如何在外扩SRAM上仿真
分享到: 更多 (0)