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.

[参考译文] TMS320VC5509A:SDRAM 写入大缓冲器问题。

Guru**** 2605005 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/647003/tms320vc5509a-sdram-write-large-buffer-problem

器件型号:TMS320VC5509A

你(们)好 我的主板 HX-5509a 有问题。 当我在0x10000范围内写入 SDRAM 时、SDRAM 中的数据是正确的。 但是 、当我增大缓冲区的大小 时、数据不正确并停留在循环中。

有什么建议吗? 以下是代码(程序在 第一段时间卡在中):

#include 
#include 
#include 
#include 

uint16 x;
uint32 y;
CSLbool b;
long int datacount = 0;
int databuffer[1000]={0};
int * sourceaddr、* deminaddr;

pll_Config MyConfig ={
0、//IAI:PLL 使用进入
空闲模式之前正在进行的相同过程进行锁定
、1/IOB: 如果 PLL 指示锁相中断、
//它切换到其旁路模式并重新启动 PLL 锁相
//序列
24、// PLL 乘法值;乘以24乘
以1//除以2 PLL 除法值; 它可以是 PLL 分频值
//(当 PLL 被启用时),也可以是旁路模式分频值
//(如果 PLL 乘法值被设置为1)
};


EMIF_Config emiffig ={
0x221、//EGCR: MEMFREQ = 00、存储器的时钟频率等于 CPU 频率
// WPE = 0、对于写入布置、当我们调试 EMIF
// MEMCEN = 1时、存储器时钟反映在 CLKMEM 引脚
上// NOHOLD = 1、HOLD 请求不被识别 EMIF
0xFFFF、//EMI_RST:对该寄存器的任何写入都将复位 EMIF 状态机
0x3FFF、//ce0_1:ce0空间控制寄存器1
// MTYPE = 011、同步 DRAM (SDRAM)、16位数据总线宽度
0xFFFF、//ce0_2:ce0空间控制寄存器2
0x00FF、/ce3 =
0xFFF/ ce3;ce0:/ce3:0xFFF0
CE0空间控制寄存器1
0xFFFF、//CE1_2:CE0空间控制寄存器2
0x00FF、//CE1_3:CE0空间控制寄存器3

0x3FFF、//CE2_1:CE0空间控制寄存器1
0xFFFF、//CE2_2:CE0空间控制寄存器2
0x00FF、//CE2_3

:CE0空间控制寄存器1 0xFFFF、CE3:CE0
CE0空间控制寄存器2
0x00FF、//CE3_3:CE0空间控制寄存器3

0x2911、//SDc1:SDRAM 控制寄存器1
// TRC = 8
// SDSIZE = 0;SDWID = 0
// RFEN = 1
// tRCD = 2

// TRP = 2 0x0410,//SDPER: SDRAM 周期寄存
器// 7ns * 4096
0x07FF、//SDINIT:SDRAM 初始化寄存器
//对该寄存器进行任何写操作以初始化所有 CE 空间,
//在硬件复位或 C55x 器
件上电后执行此操作0x0131 // SDC2:SDRAM 控制寄存器2
// SDACC = 0;
// TMRD = 01;
// tras = 0101;
// TAC5V2ACTV = 0001;
};


main ()
{
CSL_init ();

chip_RSET (XBSR、0x0a01);
PLL_CONFIG (&MyConfig);
EMIF_CONFIG (&emiffount);
int i = 0;

sourceaddr =(int *) 0x0250000;
deminaddr =(int *) 0x0260000;
long int s = 100000;
for (i=0;i<1000;i++)
databuffer[i]=0;
while (datacig 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Armin:

    我们的团队需要一些时间来收集实验室中的数据。 请给我们几天时间、我们将会与您联系。

    BR
    Tsvetolin Shulev
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Armin、
    请访问 e2e.ti.com/.../304037
    希望这对您有所帮助。

    Lali
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好 很抱歉耽误你的时间、感谢您的链接。 我了解 了发生的情况。 当我在 反汇编模式下调试代码时、我发现:

    我们可以看到编译器生成我的代码以进行汇编、但它会移至16位寄存器 AR3、并且不会检查溢出或半高指针上的任何操作。 这些代码中会发生这种情况:

    sourceaddr++、sourceaddr+=1、sourceaddr+=(long) 1

    但是、当我使用 long 变量显式添加 sourceaddr 时、一切都正常。结果如下:

     我应该提到编译器优化已禁用。