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.

[参考译文] CCS/TMS320VC5510A:DSK 5510仿真器内存映射

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/734123/ccs-tms320vc5510a-dsk-5510-simulator-memory-map

器件型号:TMS320VC5510A

工具/软件:Code Composer Studio

我将使用 dsk 5510仿真器和 tms320vc5510目标板。 我想使用 GPIO 作为 DIO 向电路板发送数据。 我正在使用以下程序:

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include "stdio.h"

#include "dsk5510.h"

#include "printacfg.h"  

#define N 10.

void main()

int i、j;                                   

unsigned int xmt[N];

无符号 IODRV、IODV;

无符号 IODR1V、IOD1V;  

ioport unsigned *pIODR =(ioport unsigned *) 0x3400;

ioport unsigned *pIOD =(ioport unsigned *) 0x3401;  

对于(j = 0;j <=(N - 1);j++){

      XMT[j]=(j << 7)+(j+ 10);

  }

IODRV =*pIODR;

IODV =*pIOD;    

printf (" IODR 的返回值:%x \n"、IODRV);

printf (“IODV 的返回值:%x \n",IODV);  

/*在方向寄存器中将 I/O 配置为输出*/

pIODR = 0xFFFF;

IODR1V =*pIODR;

printf ("IODR1的返回值:%x \n"、IODR1V);  

对于(i=0;i<=(N-1);i++)

{printf ("数组中的10个示例值为:%x \n"、xmt[i]);

}  

对于(i=0;i<=10;i++)

*pIOD =xmt[i];

IOD1V =*pIOD;

printf (" IOD1V (%d)的返回值:%x \n"、i、IOD1V);

}   

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

零误差的构建。 但调试 时有时会显示数据验证错误。  有时、重建后会在复位后显示以下消息:

写入目标 CPU 存储器时出现问题:处理器通信超时。   建议复位仿真器。 这将断开每个目标、  执行仿真复位、然后重新连接每个目标。 对目标板进行下电上电后再继续。

无法设置断点:处理器通信超时。   建议复位仿真器。 这将断开每个目标、  执行仿真复位、然后重新连接每个目标。 对目标板进行下电上电后再继续。

断点管理器:尝试设置使用的断点时遇到错误

用于程序结束检测。

也尝试使用 OPTIONS -> MEMORY MAP 更改存储器映射  

但会在消息之后发出

plz 建议了一些要查看的方向。 如何为所需操作更改存储器映射?

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

    您好!

    调试器内存映射通常由 GEL 启动文件配置。 您使用的是一个吗? 如果是、CCS IDE 左侧面板中的"GEL files"文件夹下应列出一个文件。

    请注意、这些不是 DSK 5510仿真器。 有一个 C5510设备仿真器可模拟设备本身。 但它不会模拟整个 DSK。

    在屏幕截图中、您好像正在使用 C5510 DSK 硬件目标

    谢谢

    Ki

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

    您好、ki

    感谢您的解释。

    是的、我正在使用 C5510 DSK HW 目标板 、该文件列在"GEL files"文件夹下、该文件夹对于所有项目都是通用的。 我的意思是说我不必每次都添加它、默认情况下会添加它。

    我很困惑、因为仿真器中已经存在的 GEL 启动文件是为特定器件 C5510配置的、因此即使使用相同的目标器件、我也必须对其进行更改。

    接下来、考虑到为了解决数据验证问题、我必须更改存储器映射配置、 我查看 C5510器件仿真器的帮助文档我找到了用于定义存储器范围的函数、但没有关于加载数据验证错误时如何以及如何将存储器部件分配给不同部分的信息弹出到如下地址:

    位于0x20000处的284的.sysinit 0

    在0x2011c 处为1732的.RTDX_TEXT 0

    在0x207e0处为10183的.BIOS 0

    目标器件 C5510的存储器映射在其数据表中给出。

    以下是用于参考的默认 GEL 文件:

    /*在加载 GEL 文件时执行 Startup()函数。 */
    
    startup()
    {
    C5510_DSK_Init();
    C5510_DSK_EMIF_Init();
    GEL_TextOut ("C5510_DSK GEL 启动完成。\n");
    }
    
    // OnPreFileLoaded()在加载文件之前执行。 禁用
    当前程序中的中断*和 DMA、以便暂挂事件和传输
    不会*干扰新程序。 */
    
    OnPreFileLoaded()
    {
    /*将 CPU 重置为清理状态*/
    C5510_CPU_Reset();
    }//OnRestart()
    
    在加载文件之前执行。 禁用
    当前程序中的中断*和 DMA、以便暂挂事件和传输
    不会*干扰新程序。 */
    
    OnRestart()
    {
    /*禁用中断*/
    *(int *) 0x0003 =*(int *) 0x0003 | 0x0800;//设置 INTM *
    *(int *) 0x0000 = 0;/*清除 IER0 */
    *(int *) 0x0045 = 0;//清除 IER1 */
    /*禁用每个 DMA 通道*/
    GEL_MemoryFill (0xc01、1、0x0000);/* DMA0 */
    GEL_MemoryFill (0xc21、2、1、0x0000);/* DMA1 *
    GEL_MemoryFill (0xc41、2、1、0x0000);/* DMA2 *
    GEL_MemoryFill (0xc61、2、1、0x0000);/* DMA3 *
    GEL_MemoryFill (0xc81、2、1、0x0000);/* DMA4 *
    GEL_MemoryFill (0xca1、2、1、0x0000);//
    }
    
    菜单项"C5510_DSK_Configuration";
    热菜单 C5510_DSK_Init()
    {
    GEL_Reset ();
    GEL_TextOut ("C5510_CPU_Reset Complete");
    
    GEL_MapOn();
    GEL_MapReset();
    
    //初始化程序空间的调试器内存映射*/
    GEL_MapAdd (0x0000C0、0、0x0FF40、1);// DARAM *
    GEL_MapAdd (0x0100000、0x040000、1、1);/* SARAM *
    GEL_MapAdd (0x050000、0、0x3B00001、1);//外部 ce0 *
    GEL_MapAdd (0x4000000、0x4000001、1);/*外部 CE1 *
    GEL_MapAdd (0x8000000、0x4000001、1);//外部 CE2 *
    GEL_MapAdd (0xC000000、0x4000001、1);//外部 CE3 *
    
    //初始化数据空间的调试器内存映射*/
    GEL_MapAdd (0x000000、1、0x0000601、1);/* MRs */
    GEL_MapAdd (0x000060、1、0x007FA0、1);/* DARAM *
    GEL_MapAdd (0x0080001、0x020000、1、1);/* SARAM *
    GEL_MapAdd (0x0280001、0x1D80001、1);//外部 ce0 */
    GEL_MapAdd (0x200000.1、0x2000001、1);//外部 CE1 *
    GEL_MapAdd (0x400000.1、0x2000001、1);//外部 CE2 *
    GEL_MapAdd (0x600000.1、0x2000001、1);//外部 CE3 *
    
    //初始化 I/O 映射寄存器的调试器内存映射*/
    GEL_MapAdd (0x0000u、2、0x000Fu、1、1);/*外设总线*
    GEL_MapAdd (0x07fdu、2、0x0001u、1);/* SYSR *
    GEL_MapAdd (0x0800u、2、0x0014u、1、1);/* EMIF *
    GEL_MapAdd (0x0C00u、2、0x00ABu、1、1);/* DMA *
    GEL_MapAdd (0x0E00u、2、0x0001u、1);/* DMA Global*/
    GEL_MapAdd (0x1000u、2、0x0004u、1、1);//计时器#0 */
    GEL_MapAdd (0x1400u、2、0x0009u、1、1);// ICACHE *
    GEL_MapAdd (0x1C00u、2、0x0001u、1);// CLKGEN *
    GEL_MapAdd (0x2000u、2、0x0055u、1、1);//跟踪 FIFO *
    GEL_MapAdd (0x2400u、2、0x0004u、1);//计时器#1 */
    GEL_MapAdd (0x2800u、2、0x001Fu、1);//串行端口#0 */
    GEL_MapAdd (0x2C00u、2、0x001Fu、1);/*串行端口#1 *
    GEL_MapAdd (0x3000u、2、0x001Fu、1);//串行端口#2 *
    GEL_MapAdd (0x3400u、2、0x0002u、1、1);/* GPIO *
    GEL_MapAdd (0x3800u、2、0x0005u、1);//
    *初
    
    始化 EMIF 控制寄存器以访问
    ce0中的*/* SDRAM 和 CE1中的闪存+ CPLD*/
    
    热菜单 C5510_DSK_EMIF_Init()
    {
    GEL_MemoryFill (0x8002、1、0x0221);
    GEL_MemoryFill (0x801、2、1、0xFFFF);
    GEL_MemoryFill (0x803、2、1、0x3FFF);
    GEL_MemoryFill (0x804、2、1、0x5FFF);
    GEL_MemoryFill (0x805、2、1、0x5FFF);
    GEL_MemoryFill (0x806.2、1、0x1038);
    GEL_MemoryFill (0x807,2、1,0x0038);
    GEL_MemoryFill (0x808、2、1、0x0038);
    GEL_MemoryFill (0x809、2、1、0x1050);
    GEL_MemoryFill (0x80A、2、1、0x0050);
    GEL_MemoryFill (0x80B、2、1、0x0050);
    GEL_MemoryFill (0x80C、2、1、0x1050);
    GEL_MemoryFill (0x80D、2、1、0x0050);
    GEL_MemoryFill (0x80E、2、1、0x0050);
    GEL_MemoryFill (0x80F、2、1、0x2B11);
    GEL_MemoryFill (0x810、2、1、0x0578);//刷新周期、0x00A8 (24MHz)、0x578 (200MHz)*/
    GEL_MemoryFill (0x811、2、1、0x0fff);
    GEL_MemoryFill (0x813、2、1、0x0535);
    
    GEL_MemoryFill (0x812、2、1、0x0000);// SDRAM Init *
    }
    

    谢谢、

    Sandhya

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

    您好!

    让任何人都知道如何在 C5510器件的存储器映射中分配段。

    谢谢

    此致、

    Sandhya   

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

    [引用 user="Sandhya Prajapati"]我对以下事实感到困惑:由于仿真器中已经存在的 GEL 启动文件已针对特定器件 C5510进行了配置、因此即使我使用同一目标器件、我也必须对其进行更改。

    请注意、仿真器的 GEL 文件与硬件目标的 GEL 文件不同。 每个存储器的存储器映射可能有差异。  

    实际目标、调试器内存映射和链接器命令文件之间存在依赖关系。 它们需要对齐并正确。 请仔细阅读以下文章:

    http://dev.ti.com/tirex/#/?link=Development%20Tools%2FIntegrated%20Development%20Environments%2FCode%20Composer%20Studio%2FDebug%2FTroubleshooting%2FData%20Verification%20Errors

    谢谢

    Ki