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.

[参考译文] TMS320F28388D:TMS320F28388D 在连接了调试器时 CPU1 软件复位

Guru**** 2872500 points

Other Parts Discussed in Thread: C2000WARE, TMS320F28388D

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1584101/tms320f28388d-tms320f28388d-cpu1-software-reset-with-connected-debugger

器件型号: TMS320F28388D
主题中讨论的其他器件: C2000WARE

您好:

我想为 CPU1 开发引导加载程序。  

我可以在不连接调试器的情况下使用软件复位。 这是有效的。

在调试器中、我要使用仿真寄存器。 但这似乎不起作用。

我使用 CCS v20、C2000Ware v6、TMS320F28388D 控制卡、板载调试器。

S2 切换到闪存引导。 S1 不使用调试器->软件复位正常工作
我想使用启用 S1 的调试器调试我的程序。

我想从第 0 段开始模拟闪存引导。

#define CPU1BOOTPINCONFIG (*(volatile uint32_t *) 0x00000D00U)
#define CPU1EMUBOOTDEF_LOW (*(Volatile uint32_t *) 0x00000D04U)
#define CPU1EMUBOOTDEF_HIGH (*(Volatile uint32_t *) 0x00000D06U)

  // 1。 使用零引导引脚
  CPU1BOOTPINCONFIG = 0x5AFFFFFF;

  // 2. Bootdef:表 0、模式 3 =闪存引导
  CPU1EMUBOOTDEF_LOW =(0x5AUL << 24)| 0x03UL;

  // 3. 引导选项:第 0 段
  CPU1EMUBOOTDEF_HIGH =(0x5AUL << 24)| 0x00UL;
 
  SysCtl_resetDevice();/*看门狗复位*/
 

目前、ROM 引导加载程序似乎在等待引导模式下运行。

其他问题、但目前与此无关:

是否使用具有调整后的值的同一寄存器通过 CPU2 上的 RAM 开始创建复位?

谢谢你

此致

斯蒂芬·罗斯

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

    尊敬的 Steffen:

    无需将 0x5A 放入 CPU1EMUBOOTDEF_LOW 和 CPU1EMUBOOTDEF_LOW 中。 在 CPU1EMUBOOTDEF_LOW 中写入 0x03(闪存引导)就足够了。  

    您可以使用 C2000Ware 中 device.c 文件中定义的 Device_bootCPU2 () 函数通过软件引导 CPU2。 请参阅 C2000Ware 中的多核 LED 闪烁示例 ( C2000 Ware_Install_Location \driverlib\f2838x\examples\c28x_dual\led\ccs) 作为示例。  

    此致、

    Skyler

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

    要补充 Skyler 提到的内容、请验证 0xD00 处的仿真引导配置是否正确写入 CCS 内存浏览器。

    此致、

    马特

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

    非常感谢您的回答。  


    我将源更改为:

    #define CPU1BOOTPINCONFIG  (*(volatile uint32_t *) 0x00000D00U)
    #define CPU1EMUBOOTDEF_LOW (*(Volatile uint32_t *) 0x00000D04U)
    #define CPU1EMUBOOTDEF_HIGH (*(Volatile uint32_t *) 0x00000D06U)

    //零引导引脚
    CPU1BOOTPINCONFIG = 0x5AFFFFFF;

    // BootDef:表 0、模式 3 =闪存引导
    CPU1EMUBOOTDEF_LOW = 0x03UL;

    //引导选项:闪存段 0
    CPU1EMUBOOTDEF_HIGH = 0x00UL;

    SysCtl_resetDevice();/*看门狗复位*/

    但这样也会将调试器复位更改为 0x3FB114。

    我明白,这意味着,什么是错的。 因此、我只能说、如果更改 S1 以禁用调试器、则 Reset(复位)功能生效。

    如果我启用 S1 开关以启用 JTAG、但不连接 CCS v20 调试器、也可以启用。

    只有当我想调试自己的引导加载程序时、重置才起作用。

    我是对的、EMU 设置仅用于已连接的调试器吗? 那么它应该可以调试我的功能吗?
    使用 Debugger Restart 按钮进行重置也会工作。

     Matt *** 

    据我所知、0xD00 上的存储器只能写入、不是吗?

    在其他情况下、我在 0xD00 的存储器窗口中看到随机数。

    但汇编器源代码似乎很有用:

      0x083395  28A9FFFF  MOV      @Al、#0xFFFF
      0x083397  28A85AFF  MOV      I ² C @、#0x5aff
      0x083399  BDA90D00  VMOV32    *(0:0x0d00)、@ACC
      0x08339B  0203     MOVB      ACC、#3
      0x08339C  BDA90D04  VMOV32    *(0:0x0d04)、@Ω ACC
      0x08339E  0200     MOVB      ACC、#0
      0x08339F  BDA90D06  VMOV32    *(0:0x0d06)、Δ@ACC
      0x0833A1  76483456  LCR      SysCtl_resetDevice

    此致

    Steffen

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

    尊敬的 Steffen:

    在其他情况下 — 我在 0xD00 的内存窗口中看到随机数。

    您应该会在存储器窗口中看到写入 0xD00 地址的值。 不是这样吗?

    使用调试器重新启动按钮进行重置也会起作用。

    这在您将 EMU 引导位置写入存储器后工作、对吗?

    此致、

    Skyler

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

    您好、Skyler、

    在我困惑的那一刻。 我读取、EMU 寄存器是只写的、因为这些值会转发到调试模块。

    我只看到错误的值。

    0xd00:1B552945 59211B3E 0A74ABC2 0008308A 0008308A (数据和程序显示相同)

    您能否确认我使用了正确的地址?


    它似乎是 PIE 矢量表的位置。 (重置... int3)

    在用户手册中、我在表中找到了以下地址: CPU1 引导 ROM 寄存器

    这是正确的,它是相同的地址,但在不同的总线上? 还是不同的状态/重映射视图?

    “Debugger reset “按钮 在任何情况下都可以正常工作、与我的写入无关。 我的目的是、正确配置系统本身(跳线等)。

     谢谢你

    BR  

    Steffen

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

    尊敬的 Steffen:

    您应该能够看到向这些寄存器写入了正确的值。 是否在“Memory Browser“视图中选择了 Continuous refresh 选项?

    此致、

    Skyler

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

    您好、Skyler、

    我测试了手册和循环刷新。 我也检查了这个窗口工作正常的 RAM。

    我想我使用了错误的地址。

    但我找不到正确的结果。 我查看了用户手册和 C2000Ware v6 的 driverlib。

    此致

    Steffen