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/EK-TM4C1294XL:看门狗导致调试问题

Guru**** 2328790 points
Other Parts Discussed in Thread: EK-TM4C1294XL, EK-TM4C123GXL, TM4C1294NCPDT, SEGGER
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/589956/ccs-ek-tm4c1294xl-watchdog-causing-debug-problems

器件型号:EK-TM4C1294XL
主题中讨论的其他器件: EK-TM4C123GXLTM4C1294NCPDTSEGGER

工具/软件:Code Composer Studio

您好、再说一次、

现在我正在使用另一个 EK-TM4C1294XL :D,希望这个可以持续更长时间。

总之、我面临一个问题、具体来说、这个问题是:

Cortex_M4_0:GEL 输出:
内存映射初始化完成
Cortex_M4_0:读取长度为0x4的第0页上0x400fe000处的存储器块时发生故障:发生调试端口错误。
Cortex_M4_0:初始化闪存编程时出错:目标读取0x400FE000失败
Cortex_M4_0:加载程序:程序的一个或多个部分落入不可写的存储器区域。 这些区域实际上不会写入目标。 检查链接器配置和/或存储器映射。
Cortex_M4_0:写入寄存器 PC 时出现问题:目标未停止或在步进后停止失败。
Cortex_M4_0:无法运行目标 CPU:目标未停止或在步进后停止失败。
Cortex_M4_0:目标 CPU 停止时出现故障

 

当我使用这些函数时会发生这种情况:

 

内联空 InitWatchdog (void)
{
ROM_SysCtlPeripheralDisable (SYSCTL_Periph_WDOG0);
ROM_SysCtlPeripheralDisable (SYSCTL_Periph_WDOG1);
ROM_SysCtlPeripheralReset (SYSCTL_Periph_WDOG0);
ROM_SysCtlPeripheralReset (SYSCTL_Periph_WDOG1);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_WDOG0);
ROM_SysCtlPeripheralEnable (SYSCTL_Periph_WDOG1);
while (!ROM_SysCtlPeripheralReady (SYSCTL_Periph_WDOG0)||!ROM_SysCtlPeripheralReady (SYSCTL_Periph_WDOG1));

ROM_WatchdogReloadSet (WATCHDOG0_BASE、g_SysClock*0.1);
ROM_WatchdogReloSet (WATCHDOG1_BASE、FREQ_PIOSC*0.5);

ROM_WatchdogResetEnable (WATCHDOG0_BASE);
ROM_WatchdogResetEnable (WATCHDOG1_BASE);

ROM_SysCtlResetBehaviorSet (SYSCTL_ONRST_WDOG0_SYS);
ROM_SysCtlResetBehaviorSet (SYSCTL_ONRST_WDOG1_SYS);

ROM_IntDisable (INT_Watchdog);
ROM_IntPendClear (INT_Watchdog);
ROM_WatchdogIntClear (WATCHDOG0_BASE);
ROM_WatchdogIntClear (WATCHDOG1_BASE);

ROM_IntPrioritySet (INT_Watchdog、0x00);
ROM_WatchdogIntEnable (WATCHDOG0_BASE);
ROM_WatchdogIntEnable (WATCHDOG1_BASE);
ROM_IntEnable (INT_Watchdog);

ROM_WatchdogEnable (WATCHDOG0_BASE);
ROM_WatchdogEnable (WATCHDOG1_BASE);

while (!ROM_WatchdogRunning (WATCHDOG0_BASE)||!ROM_WatchdogRunning (WATCHDOG1_BASE));

ROM_WatchdogLock (WATCHDOG0_BASE);
ROM_WatchdogLock (WATCHDOG1_BASE);

while (!ROM_WatchdogLockState (WATCHDOG0_BASE)||!ROM_WatchdogLockState (WATCHDOG1_BASE));
}

void WatchdogIntHandler (void)
{
ROM_WatchdogIntClear (WATCHDOG0_BASE);
ROM_WatchdogIntClear (WATCHDOG1_BASE);
} 

 

在我的另一个 Tiva (EK-TM4C123GXL)上、该代码工作正常。 为什么会发生这种情况?

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

    赫尔德的美好一天

    您是否了解了电路板特定器件的存储器结构? 该地址是否存在?

    Tiva 函数上可能会出现毛刺脉冲-不常见但也不可能-您能否进入 Tiva 函数并查看存储器地址是如何解析的?

    您的新 Launchpad 肯定会持续使用、不要辜负您的期望!

    此致

    布鲁诺

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

    a)省略
    ROM_SysCtlPeripheralDisable (SYSCTL_Periph_WDOG0);
    ROM_SysCtlPeripheralDisable (SYSCTL_Periph_WDOG1);
    b)使用
    ROM_WatchdogReloadSet (WATCHDOG0_BASE、G_SysClock/10);
    ROM_WatchdogReloSet (WATCHDOG1_BASE、FREQ_PIOSC/2);
    而不是
    ROM_WatchdogReloadSet (WATCHDOG0_BASE、g_SysClock*0.1);
    ROM_WatchdogReloSet (WATCHDOG1_BASE、FREQ_PIOSC*0.5);

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

    [引用 USER="Helder Sales]Cortex_M4_0:GEL 输出:
    内存映射初始化完成
    Cortex_M4_0:读取长度为0x4的第0页上0x400fe000处的存储器块时发生故障:发生调试端口错误。
    Cortex_M4_0:初始化闪存编程时出错:目标读取0x400FE000失败
    Cortex_M4_0:加载程序:程序的一个或多个部分落入不可写的存储器区域。 这些区域实际上不会写入目标。 检查链接器配置和/或存储器映射。
    Cortex_M4_0:写入寄存器 PC 时出现问题:目标未停止或在步进后停止失败。
    Cortex_M4_0:无法运行目标 CPU:目标未停止或在步进后停止失败。
    Cortex_M4_0:停止目标 CPU 时出现问题[/引用] 当 EK-TM4C1294XL 已经包含启用了看门狗的程序时、启动调试会话时是否会发生这些错误?

    如果是、启用的看门狗可能会在 CCS 在调试会话开始时下载新程序时进行闪存编程期间复位器件。

    在 CCS 工程属性下、有一些选项可以设置为在下载期间执行复位、这应该会禁用活动的看门狗、在这两个选项下:

    -调试->程序/存储器加载选项->连接选项->在连接时重置目标

    -调试->闪存设置->闪存设置->在程序加载到闪存存储器期间重置目标

    尝试设置这些选项以重置目标。

    请注意、CCS 7.0和 CCS 7.1中存在一个错误、尝试设置"Reset the target on a connect"和"Reset target during program load to Flash memory"选项不起作用(e2e.ti.com/.../589281)。 解决方法是将以下内容添加到器件的 GEL 脚本中:

    OnPreFileLoaded()
    {
    GEL_AdvancedReset ("系统重置");
    } 

    [引用 user="Helder Sales]on my other Tiva (EK-TM4C123GXL)(我的另一个 Tiva (EK-TM4C123GXL))此代码工作正常。 为什么会发生这种情况? EK-TM4C123GXL 的闪存比 EK-TM4C1294XL 小、因此在闪存编程期间可能不太可能发生看门狗复位。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Helder、
    在看到错误消息之前、您是否已将代码加载到闪存中? 另外、请在设置目标配置时进行检查、确保选择的器件与 EK LaunchPad 上的器件相匹配。 如果代码已经在运行、那么我认为看门狗复位可能阻止了调试器的连接。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    大家好、

    我已确认看门狗复位是问题的原因。 但我不确定如何继续使用 GEL 文件(从未使用过)。

    我打开了 tm4c1294ncpdt.gel 并放置了 Chester 提到的行、但问题仍然存在。

    文件中的代码如下所示:

    /* tm4c1294ncppdt.gel
    *
    修订版:
    * 2014年6月10日第三版
    *
    这是从 TivaWare 库的修订版15071衍生而来的。
    *
    //
    
    OnPreFileLoaded()
    {
    GEL_AdvancedReset ("系统重置");
    }
    
    菜单项"startup"
    
    热菜单 startup ()
    {
    /*加载 CortexM3_util.gel 文件*/
    GEL_LoadGel ("$(GEL_file_dir)/CortexM3_util.gel");
    
    GEL_MapOff ();
    GEL_MapReset();
    GEL_MapOn();
    memorymap_init();
    }
    
    OnTargetConnect()
    {
    }
    
    memorymap_init()
    {
    /*
    * GEL_MapAddStr 的语法。
    * GEL_MapAddStr (address、page、length、"attribute"、waitstate);
    
    基本属性类型 派生属性类型
    字符串 说明 字符串 说明
    R 主机 IRQ 无 无内存/受保护
    W 写入 RAM 读取和写入
    P 端口 ROM 只读
    示例 外部 WOM 只写
    Em 仿真器 INPORT 端口只读
    PR 可编程 OUTPORT 端口只写
    呃 可擦除 ioport 端口读取和写入
    da 双存取 Saram 单存取 RAM
    ASN 存取大小 DARAM 双存取 RAM
    SHnC 共享 闪存 闪存 ROM
    高速缓存 高速缓存 EXRAM 外部 RAM
    TX 文本 EXROM 外部 ROM
    Mn 检测器 EPROM 可擦写 EPROM
    SA 单次访问 检测器 监视器 ROM
    左前 闪存 PRAM 程序 RAM
    先生 存储器映射 PROM 编程 ROM
    null null null null
    
    *
    
    GEL_MapAddStr (0x00000000、0、0x00100000、"R"、0); /*闪存*/
    GEL_MapAddStr (0x01000000、0、0x00008c00、"R"、0); /* ROM */
    GEL_MapAddStr (0x20000000、0、0x00040000、"R|W"、0); /* SRAM */
    GEL_MapAddStr (0x40000000、0、0x00001000、"R|W"、0); /* WATCHDOG0 */
    GEL_MapAddStr (0x40001000、0、0x00001000、"R|W"、0); /* WATCHDOG1 */
    GEL_MapAddStr (0x40008000、0、0x00001000、"R|W"、0); /* SSI0 */
    GEL_MapAddStr (0x40009000、0、0x00001000、"R|W"、0); /* SSI1 */
    GEL_MapAddStr (0x4000A000、0、0x00001000、"R|W"、0); /* SSI2 */
    GEL_MapAddStr (0x4000B000、0、0x00001000、"R|W"、0); /* SSI3 */
    GEL_MapAddStr (0x4000C000、0、0x00001000、"R|W"、0); /* UART0 */
    GEL_MapAddStr (0x4000D000、0、0x00001000、"R|W"、0); /* UART1 */
    GEL_MapAddStr (0x4000E000、0、0x00001000、"R|W"、0); /* UART2 */
    GEL_MapAddStr (0x4000F000、0、0x00001000、"R|W"、0); /* UART3 */
    GEL_MapAddStr (0x40010000、0、0x00001000、"R|W"、0); /* UART4 */
    GEL_MapAddStr (0x40011000、0、0x00001000、"R|W"、0); /* UART5 */
    GEL_MapAddStr (0x40012000、0、0x00001000、"R|W"、0); /* UART6 */
    GEL_MapAddStr (0x40013000、0、0x00001000、"R|W"、0); /* UART7 */
    GEL_MapAddStr (0x40020000、0、0x00001000、"R|W"、0); /* I2C0 */
    GEL_MapAddStr (0x40021000、0、0x00001000、"R|W"、0); /* I2C1 */
    GEL_MapAddStr (0x40022000、0、0x00001000、"R|W"、0); /* I2C2 */
    GEL_MapAddStr (0x40023000、0、0x00001000、"R|W"、0); /* I2C3 */
    GEL_MapAddStr (0x40028000、0、0x00001000、"R|W"、0); /* PWM0 */
    GEL_MapAddStr (0x4002C000、0、0x00001000、"R|W"、0); /* QEI0 */
    GEL_MapAddStr (0x40030000、0、0x00001000、"R|W"、0); /* TIMER0 */
    GEL_MapAddStr (0x40031000、0、0x00001000、"R|W"、0); /* Timer1 */
    GEL_MapAddStr (0x40032000、0、0x00001000、"R|W"、0); /* TIMER2 */
    GEL_MapAddStr (0x40033000、0、0x00001000、"R|W"、0); /* TIMER3 */
    GEL_MapAddStr (0x40034000、0、0x00001000、"R|W"、0); /* TIMER4 */
    GEL_MapAddStr (0x40035000、0、0x00001000、"R|W"、0); /* TIMER5 */
    GEL_MapAddStr (0x40038000、0、0x00001000、"R|W"、0); /* ADC0 */
    GEL_MapAddStr (0x40039000、0、0x00001000、"R|W"、0); /* ADC1 */
    GEL_MapAddStr (0x4003C000、0、0x00001000、"R|W"、0); /* COMP */
    GEL_MapAddStr (0x40040000、0、0x00001000、"R|W"、0); /* CAN0 */
    GEL_MapAddStr (0x40041000、0、0x00001000、"R|W"、0); /* CAN1 */
    GEL_MapAddStr (0x40050000、0、0x00001000、"R|W"、0); /* USB0 */
    GEL_MapAddStr (0x40058000、0、0x00001000、"R|W"、0); /* GPIO Porta AHB */
    GEL_MapAddStr (0x40059000、0、0x00001000、"R|W"、0); /* GPIO PORTB AHB */
    GEL_MapAddStr (0x4005A000、0、0x00001000、"R|W"、0); /* GPIO PORTC AHB */
    GEL_MapAddStr (0x4005B000、0、0x00001000、"R|W"、0); /* GPIO PORTD AHB */
    GEL_MapAddStr (0x4005C000、0、0x00001000、"R|W"、0); /* GPIO Porte AHB */
    GEL_MapAddStr (0x4005D000、0、0x00001000、"R|W"、0); /* GPIO PORTF AHB */
    GEL_MapAddStr (0x4005E000、0、0x00001000、"R|W"、0); /* GPIO PORTG AHB */
    GEL_MapAddStr (0x4005F000、0、0x00001000、"R|W"、0); /* GPIO Porth AHB */
    GEL_MapAddStr (0x40060000、0、0x00001000、"R|W"、0); /* GPIO PORTJ AHB */
    GEL_MapAddStr (0x40061000、0、0x00001000、"R|W"、0); /* GPIO PORTK */
    GEL_MapAddStr (0x40062000、0、0x00001000、"R|W"、0); /* GPIO PORTL *
    GEL_MapAddStr (0x40063000、0、0x00001000、"R|W"、0); /* GPIO PORTM */
    GEL_MapAddStr (0x40064000、0、0x00001000、"R|W"、0); /* GPIO PORTN *
    GEL_MapAddStr (0x40065000、0、0x00001000、"R|W"、0); /* GPIO PORTP *
    GEL_MapAddStr (0x40066000、0、0x00001000、"R|W"、0); /* GPIO PORTQ */
    GEL_MapAddStr (0x400AF000、0、0x00001000、"R|W"、0); /* EEPROM */
    GEL_MapAddStr (0x400B8000、0、0x00001000、"R|W"、0); /* I2C8 */
    GEL_MapAddStr (0x400B9000、0、0x00001000、"R|W"、0); /* I2C9 */
    GEL_MapAddStr (0x400C0000、0、0x00001000、"R|W"、0); /* I2C4 */
    GEL_MapAddStr (0x400C1000、0、0x00001000、"R|W"、0); /* I2C5 */
    GEL_MapAddStr (0x400C2000、0、0x00001000、"R|W"、0); /* I2C6 */
    GEL_MapAddStr (0x400C3000、0、0x00001000、"R|W"、0); /* I2C7 */
    GEL_MapAddStr (0x400D0000、0、0x00001000、"R|W"、0); /* EPI0 */
    GEL_MapAddStr (0x400E0000、0、0x00001000、"R|W"、0); /* TIMER6 */
    GEL_MapAddStr (0x400E1000、0、0x00001000、"R|W"、0); /* TIMER7 */
    GEL_MapAddStr (0x400EC000、0、0x00001000、"R|W"、0); /* EMAC0 */
    GEL_MapAddStr (0x400F9000、0、0x00001000、"R|W"、0); /* SYSEXC */
    GEL_MapAddStr (0x400FC000、0、0x00001000、"R|W"、0); /* HIB */
    GEL_MapAddStr (0x400FD000、0、0x00001000、"R|W"、0); /*闪存 CTRL */
    GEL_MapAddStr (0x400FE000、0、0x00001000、"R|W"、0); /* sysctl */
    GEL_MapAddStr (0x400FF000、0、0x00001000、"R|W"、0); /* uDMA */
    GEL_MapAddStr (0x44030000、0、0x00001000、"R|W"、0); /* CCM0 */
    GEL_MapAddStr (0xE000E000、0、0x00001000、"R|W"、0); /* NVIC */
    
    GEL_TextOut ("\n 内存映射初始化完成\n");
    
    }
    
    

    我还尝试在不成功的情况下修改 CortexM3_util.gel。

    / /*
    此 GEL 文件加载在 Code Composer 的命令行中*/
    /* */
    /*历史记录: */
    /*版本作者 日期 注释 */
    * 1.0 Kamal Nehal 未知 初始版本 AEC/Aries */
    /* 1.1 Krishna Allam 2009年11月30日删除了 GEL_WatchADD */
    /*的使用 CCSv4*/
    /*********不支持此功能 /
    
    OnPreFileLoaded()
    {
    GEL_AdvancedReset ("系统重置");
    }
    
    #define MPU_on 0x00000001
    #define MPU_OFF ~MPU_ON
    
    
    菜单项"MPU"
    
    热菜单 Enable_MPU ()
    {
    int status;
    
    STATUS = MPU_CONTROL;
    status |= MPU_ON;
    MPU_CONTROL = STATUS;
    
    STATUS = MPU_CONTROL;
    
    if ((status & MPU_on)== MPU_on)
    {
    GEL_TextOut ("MPU 已开启。 \n\n");
    }
    否则
    {
    GEL_TextOut ("MPU 关闭。 \n\n";
    }
    
    
    热菜单 Disable_MPU()
    {
    INT 状态;
    
    STATUS = MPU_CONTROL;
    Status &= MPU_OFF;
    MPU_CONTRAIN= STATUS;
    
    STATUS = MPU_CONTROL;
    
    if ((status & MPU_on)== MPU_on)
    {
    GEL_TextOut ("MPU 已开启。 \n\n");
    }
    其他
    {
    GEL_TextOut ("MPU 关闭。 \n\n");
    }
    }
    

    嗯、Tiva 是 ARM Cortex-M4F 器件、为什么 GEL 文件是 Cortex_M3?

     

     

     

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我对凝胶或任何其他发型产品一无所知、这是值得的。 但是、如果您在初始化过程中尽可能晚地在主循环之前启用看门狗、它会起作用吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    I 已经打开 tm4c1294ncppdt.gel并放置了 Chester 提到的行、但问题仍然存在。

    我省略了它、但 CCS 为  每个 Tiva 器件提供了单独的通用扩展语言 GEL 文件、 GEL 文件在工程的目标配置文件(.ccxml)文件中指定。 在为 Tiva 器件创建新的目标配置时、CCS 将默认在 CCS 安装中为该器件选择 GEL 文件。 但是、用户可以更改使用的 GEL 文件。

    如果您在 CCS 调试器的 GEL Files 视图中查看并将光标悬停在文件名上、CCS 将报告正在使用的 GEL 文件的绝对路径、以便您可以确认是否更改了正确的文件:

    I 还尝试在不成功的情况下修改 CortexM3_util.gel。

    您只需将 OnPreFileLoaded()函数添加到 tm4c1294ncpdt.gel 器件 GEL 文件或 CortexM3_util.gel 实用程序 GEL 文件中, 如果您更改了这两个文件,则会出现一个错误 ,说明 OnPreFileLoaded()函数已定义两次。 由于 CortexM3_util.gel 被许多 Cortex M3/M4/M4F 器 件引用、因此建议将 CortexM3_util.gel 保持不变。

    嗯、Tiva 是 ARM Cortex-M4F 器 件、为什么 GEL 文件是 Cortex_M3?

    Cortex M4F 是 Cortex-M3器件的超集、这就是我认为 CortexM3_util.gel 实用程序也会被一些 Cortex-M4F 器件 GEL 文件使用的原因。

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

    [引用 user="Bruno Saraiva">我对凝胶或任何其他发型产品一无所知,但这是值得的。 但是、如果您在初始化过程中尽可能晚地在主循环之前启用看门狗、它会起作用吗?

    [/报价]

    是的、我猜是这样。 这是一个很好的选择、直到他们修复调试器中的错误。 但我愿意听取有关 GEL 文件(而不是发型设计产品)的建议。  

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

    Helder Sales 说:
    调试器中的错误

    那时人类的所有希望都消失了...

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

    [引用用户="Chester Gillon"]

    如果您在 CCS 调试器的 GEL Files 视图中查看并将光标悬停在文件名上、CCS 将报告正在使用的 GEL 文件的绝对路径、以便您可以确认是否更改了正确的文件:

    [/报价]

    我尝试在 两个文件中插入 OnPreFileLoaded()函数,一次插入一个,就像您建议的那样,但看门狗仍会干扰调试过程。

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

    I 尝试在 两个文件中插入 OnPreFileLoaded()函数,一次插入一个,就像您建议的那样,但看门狗仍会干扰调试过程。

    如果您移动  GEL_AdvancedReset (“系统重置”);从 OnPreFileLoaded ()调用 TargetConnect (),该函数会出现问题吗?

    这是一个猜测、在调试启动中更快地将系统复位移至可能会有所帮助。

    如果这不能阻止看门狗干扰调试过程、将尝试进行调查。

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

    不幸的是、不起作用。 另一个错误开始出现:

    Cortex_M4_0:GEL 输出:

    内存映射初始化完成

    Cortex_M4_0:错误

    Cortex_M4_0:错误:等待目标加电/轮询硬件资源时超时。

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

    [报价用户="Helder Sales)]不幸的是,不起作用。 另一个错误开始出现:确定、从 GEL 文件中删除建议的 GEL_AdvancedReset。

    我刚刚记得、另一位用户以前曾提出过不同的解决方案、即修改 GEL 文件以写入看门狗寄存器以禁用看门狗-请参阅 https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/p/286801/1092105#1092105

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

    [引用用户="Chester Gillon"]

    我刚刚记得、另一位用户以前曾提出过不同的解决方案、即修改 GEL 文件以写入看门狗寄存器以禁用看门狗-请参阅 https://e2e.ti.com/support/microcontrollers/tiva_arm/f/908/p/286801/1092105#1092105

    [/报价]

    似乎是一个不错的解决方案、但如何准确地继续? 如果我将代码粘贴到 GEL 文件上、则不起作用。

    /* tm4c1294ncppdt.gel
    *
    修订版:
    * 2014年6月10日第三版
    *
    这是从 TivaWare 库的修订版15071衍生而来的。
    *
    //
    
    在加载文件之前禁用 WATCHDOG0和 WATCHDOG1模块,以便
    //看门狗不会损坏下载到闪
    存#define WDOG0_BASE 0x40000000
    #define WDOG1_BASE 0x40001000
    #define WDOG_O_LOCK 0x0C00
    #define WDOG_O_CTL 0x40000000 #define WDOG1_BASE 0x400000+
    
    (define WDOG1_BASE 0x4000
    
    )#define WDOG_O_CLOCK #define RC000+ 32)#define WDRVDRM_ADDR_Dr #define (#define WDRVDCMT0)# (unsigned int)(data)
    #define RD_MEM_32 (addr)*(unsigned int*)(addr)
    
    OnPreFileLoaded (
    
    ){if (RD_MEM_32 (sysctl_RCGCWD)& 0x00000001)
    {
    // Watchdog0正在使用(启用时钟)
    
    //解锁看门狗寄存
    器 WR_MEM_32 (SYSCTL_DOWDR_FO_STRUCT32)+ 0xWDR_D_BASE
    
    (0xDOW0_DOW0_DOW0_DO_DOWDR_DR_DOG
    + W0_DOW32_DOWDR_DOU_DOW0+ W0_DOWDR_DOW0_FO_FO_FO_FO_FO_FO_FO_FO_FO_RESET_FO_DOW32_DOUTRD +
    
    //重新锁定看门狗寄存
    器 WR_MEM_32 (WDOG0_BASE + WDOG_O_LOCK、0x00000001);
    }
    
    if (RD_MEM_32 (SYSCTL_RCGCWD)& 0x00000002)
    {
    //使用看门
    
    狗狗狗1 (时钟启用)//解锁看门狗寄存
    器 WR_MEM_32 (SYSCTL_DOD + WDOG
    
    + WDOG + WDOUFF32)+ WDOUTO_OFF (
    WDOG + WDOG + WDOG + WDOL + WDOG + WDOL + WDOG + WDOL + WDOG + WDOG + WDOL + WDOG + WDOG + WDOL + WDOG + WDOG + WDOL + WDOG + WDOG + WDOG + WDOG +
    
    //重新锁定看门狗寄存器
    WR_MEM_32 (WDOG1_BASE + WDOG_O_LOCK、0x00000001);
    }
    
    
    }菜单项“启动”
    
    热菜单启动()
    {
    /*加载 CortexM3_util.gel 文件*/
    GEL_LoadGel ("$(GEL_file_dir)/CortexM3_util.gel");
    
    GEL_MapOff ();
    GEL_MapReset();
    GEL_MapOn();
    memorymap_init();
    }
    
    OnTargetConnect()
    {
    }
    
    memorymap_init()
    {
    /*
    * GEL_MapAddStr 的语法。
    * GEL_MapAddStr (address、page、length、"attribute"、waitstate);
    
    基本属性类型 派生属性类型
    字符串 说明 字符串 说明
    R 主机 IRQ 无 无内存/受保护
    W 写入 RAM 读取和写入
    P 端口 ROM 只读
    示例 外部 WOM 只写
    Em 仿真器 INPORT 端口只读
    PR 可编程 OUTPORT 端口只写
    呃 可擦除 ioport 端口读取和写入
    da 双存取 Saram 单存取 RAM
    ASN 存取大小 DARAM 双存取 RAM
    SHnC 共享 闪存 闪存 ROM
    高速缓存 高速缓存 EXRAM 外部 RAM
    TX 文本 EXROM 外部 ROM
    Mn 检测器 EPROM 可擦写 EPROM
    SA 单次访问 检测器 监视器 ROM
    左前 闪存 PRAM 程序 RAM
    先生 存储器映射 PROM 编程 ROM
    null null null null
    
    *
    
    GEL_MapAddStr (0x00000000、0、0x00100000、"R"、0); /*闪存*/
    GEL_MapAddStr (0x01000000、0、0x00008c00、"R"、0); /* ROM */
    GEL_MapAddStr (0x20000000、0、0x00040000、"R|W"、0); /* SRAM */
    GEL_MapAddStr (0x40000000、0、0x00001000、"R|W"、0); /* WATCHDOG0 */
    GEL_MapAddStr (0x40001000、0、0x00001000、"R|W"、0); /* WATCHDOG1 */
    GEL_MapAddStr (0x40008000、0、0x00001000、"R|W"、0); /* SSI0 */
    GEL_MapAddStr (0x40009000、0、0x00001000、"R|W"、0); /* SSI1 */
    GEL_MapAddStr (0x4000A000、0、0x00001000、"R|W"、0); /* SSI2 */
    GEL_MapAddStr (0x4000B000、0、0x00001000、"R|W"、0); /* SSI3 */
    GEL_MapAddStr (0x4000C000、0、0x00001000、"R|W"、0); /* UART0 */
    GEL_MapAddStr (0x4000D000、0、0x00001000、"R|W"、0); /* UART1 */
    GEL_MapAddStr (0x4000E000、0、0x00001000、"R|W"、0); /* UART2 */
    GEL_MapAddStr (0x4000F000、0、0x00001000、"R|W"、0); /* UART3 */
    GEL_MapAddStr (0x40010000、0、0x00001000、"R|W"、0); /* UART4 */
    GEL_MapAddStr (0x40011000、0、0x00001000、"R|W"、0); /* UART5 */
    GEL_MapAddStr (0x40012000、0、0x00001000、"R|W"、0); /* UART6 */
    GEL_MapAddStr (0x40013000、0、0x00001000、"R|W"、0); /* UART7 */
    GEL_MapAddStr (0x40020000、0、0x00001000、"R|W"、0); /* I2C0 */
    GEL_MapAddStr (0x40021000、0、0x00001000、"R|W"、0); /* I2C1 */
    GEL_MapAddStr (0x40022000、0、0x00001000、"R|W"、0); /* I2C2 */
    GEL_MapAddStr (0x40023000、0、0x00001000、"R|W"、0); /* I2C3 */
    GEL_MapAddStr (0x40028000、0、0x00001000、"R|W"、0); /* PWM0 */
    GEL_MapAddStr (0x4002C000、0、0x00001000、"R|W"、0); /* QEI0 */
    GEL_MapAddStr (0x40030000、0、0x00001000、"R|W"、0); /* TIMER0 */
    GEL_MapAddStr (0x40031000、0、0x00001000、"R|W"、0); /* Timer1 */
    GEL_MapAddStr (0x40032000、0、0x00001000、"R|W"、0); /* TIMER2 */
    GEL_MapAddStr (0x40033000、0、0x00001000、"R|W"、0); /* TIMER3 */
    GEL_MapAddStr (0x40034000、0、0x00001000、"R|W"、0); /* TIMER4 */
    GEL_MapAddStr (0x40035000、0、0x00001000、"R|W"、0); /* TIMER5 */
    GEL_MapAddStr (0x40038000、0、0x00001000、"R|W"、0); /* ADC0 */
    GEL_MapAddStr (0x40039000、0、0x00001000、"R|W"、0); /* ADC1 */
    GEL_MapAddStr (0x4003C000、0、0x00001000、"R|W"、0); /* COMP */
    GEL_MapAddStr (0x40040000、0、0x00001000、"R|W"、0); /* CAN0 */
    GEL_MapAddStr (0x40041000、0、0x00001000、"R|W"、0); /* CAN1 */
    GEL_MapAddStr (0x40050000、0、0x00001000、"R|W"、0); /* USB0 */
    GEL_MapAddStr (0x40058000、0、0x00001000、"R|W"、0); /* GPIO Porta AHB */
    GEL_MapAddStr (0x40059000、0、0x00001000、"R|W"、0); /* GPIO PORTB AHB */
    GEL_MapAddStr (0x4005A000、0、0x00001000、"R|W"、0); /* GPIO PORTC AHB */
    GEL_MapAddStr (0x4005B000、0、0x00001000、"R|W"、0); /* GPIO PORTD AHB */
    GEL_MapAddStr (0x4005C000、0、0x00001000、"R|W"、0); /* GPIO Porte AHB */
    GEL_MapAddStr (0x4005D000、0、0x00001000、"R|W"、0); /* GPIO PORTF AHB */
    GEL_MapAddStr (0x4005E000、0、0x00001000、"R|W"、0); /* GPIO PORTG AHB */
    GEL_MapAddStr (0x4005F000、0、0x00001000、"R|W"、0); /* GPIO Porth AHB */
    GEL_MapAddStr (0x40060000、0、0x00001000、"R|W"、0); /* GPIO PORTJ AHB */
    GEL_MapAddStr (0x40061000、0、0x00001000、"R|W"、0); /* GPIO PORTK */
    GEL_MapAddStr (0x40062000、0、0x00001000、"R|W"、0); /* GPIO PORTL *
    GEL_MapAddStr (0x40063000、0、0x00001000、"R|W"、0); /* GPIO PORTM */
    GEL_MapAddStr (0x40064000、0、0x00001000、"R|W"、0); /* GPIO PORTN *
    GEL_MapAddStr (0x40065000、0、0x00001000、"R|W"、0); /* GPIO PORTP *
    GEL_MapAddStr (0x40066000、0、0x00001000、"R|W"、0); /* GPIO PORTQ */
    GEL_MapAddStr (0x400AF000、0、0x00001000、"R|W"、0); /* EEPROM */
    GEL_MapAddStr (0x400B8000、0、0x00001000、"R|W"、0); /* I2C8 */
    GEL_MapAddStr (0x400B9000、0、0x00001000、"R|W"、0); /* I2C9 */
    GEL_MapAddStr (0x400C0000、0、0x00001000、"R|W"、0); /* I2C4 */
    GEL_MapAddStr (0x400C1000、0、0x00001000、"R|W"、0); /* I2C5 */
    GEL_MapAddStr (0x400C2000、0、0x00001000、"R|W"、0); /* I2C6 */
    GEL_MapAddStr (0x400C3000、0、0x00001000、"R|W"、0); /* I2C7 */
    GEL_MapAddStr (0x400D0000、0、0x00001000、"R|W"、0); /* EPI0 */
    GEL_MapAddStr (0x400E0000、0、0x00001000、"R|W"、0); /* TIMER6 */
    GEL_MapAddStr (0x400E1000、0、0x00001000、"R|W"、0); /* TIMER7 */
    GEL_MapAddStr (0x400EC000、0、0x00001000、"R|W"、0); /* EMAC0 */
    GEL_MapAddStr (0x400F9000、0、0x00001000、"R|W"、0); /* SYSEXC */
    GEL_MapAddStr (0x400FC000、0、0x00001000、"R|W"、0); /* HIB */
    GEL_MapAddStr (0x400FD000、0、0x00001000、"R|W"、0); /*闪存 CTRL */
    GEL_MapAddStr (0x400FE000、0、0x00001000、"R|W"、0); /* sysctl */
    GEL_MapAddStr (0x400FF000、0、0x00001000、"R|W"、0); /* uDMA */
    GEL_MapAddStr (0x44030000、0、0x00001000、"R|W"、0); /* CCM0 */
    GEL_MapAddStr (0xE000E000、0、0x00001000、"R|W"、0); /* NVIC */
    
    GEL_TextOut ("\n 内存映射初始化完成\n");
    
    }
    
    

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您要尝试的是在启用看门狗代码之前停止 CPU。 请尝试按住重置按钮、并在释放重置按钮后立即连接到目标。 如果速度足够快、则可以在启用 WD 之前停止 CPU。 您可能需要尝试几次才能查看是否可以使其正常工作。 连接后、您可以擦除闪存。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    [报价用户="Helder Sales)]似乎是一个不错的解决方案,但如何准确地继续? 如果我将代码粘贴到 GEL 文件上、则不起作用。我已将看门狗初始化代码复制到 EK-TM4C1294XL 的程序中、因此我可以研究 GEL 文件的更改。

    但是、一旦我将程序加载到 EK-TM4C1294XL 中、从而启用了看门狗、则会进一步尝试使用 CCS 7.1和板载 Stellaris ICDI 进行下载、导致 CCS 变得无响应、因此必须使用 Windows 任务管理器关闭 CCS。

    然后使用 Segger J-Link 切换到。  将原始 CCS 7.1 tm4c1294ncpdt.gel GEL 文件与 Segger J-Link 一起使用时、发现 启用看门狗的 EK-TM4C1294XL 在尝试启动调试会话时还会导致 Segger J-Link 闪存编程失败:

    [引用]Cortex_M4_0:GEL 输出:  

    内存映射初始化完成
    Cortex_M4_0:写入寄存器 PC 时出现问题:在检查目标 RAM 时超时、RAMCode 没有及时响应无法准备编程。 无法执行 RAM 检查的 RAMCode! CPU 运行时、无法读取寄存器20 (CFBP) CPU 未暂停[/QUERP]

    然后、我尝试更改 tm4c1294ncpdt.gel GEL 文件、以在连接到目标时禁用看门狗。 最后、GEL 脚本重置、然后禁用看门狗(如果已启用)。 文本会报告给调试器控制台、以指示何时禁用看门狗。 例如:

    [引用]Cortex_M4_0:GEL 输出:  

    内存映射初始化完成
    Cortex_M4_0:GEL 输出:OnTargetConnect
    Cortex_M4_0:GEL 输出:禁用看门狗0
    Cortex_M4_0:GEL 输出:禁用看门狗1
    Cortex_M4_0:GEL 输出:OnPreFileLoaded[/quot]使用更改的 tm4c1294ncpdt.gel GEL 文件 CCS 7.1和 Segger J-Link 可以在 EK-TM4C1294XL 中的程序启用看门狗时可靠地启动调试会话。

    但是、当使用  CCS 7.1和 Stellaris ICDI 尝试更改后的 tm4c1294ncpdt.gel GEL 文件时、CCS 7.1在启动调试会话时返回到锁定状态。

    使用 Segger J-Link 加载未启用看门狗的程序后、再次能够使用 CCS 7.1和 Stellaris ICDI 加载程序。

    我已经附加了修改 后的 tm4c1294ncpdt.gel GEL 文件、该文件在 Segger J-Link 中成功、以防它与 Stellaris ICDI 一起使用。

    e2e.ti.com/.../tm4c1294ncpdt.zip

    LM Flash Programmer 能够使用 Stellaris ICDI 执行解锁、 以便在程序启用看门狗时恢复 EK-TM4C1294XL、因此这可能是您的选择。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    它只工作了一次。 我想我现在将使用 LM 闪存编程器。 但是、感谢您花了所有时间尝试解决问题、我真的很感激、还有其他人的建议。