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.
各位同事:
请支持以下问题:API 调用发生 CPU 复位后、CPU 将暂停。
使用了以下任一 API (sysctl.h 头文件):
- SYSCTL_simulateReset (WDGH_hard_reset);
- SYSCTL_simulateReset (WDGH_SOFT_RESET);
- sysctl_resetDevice()。
这种情况发生在调试会话期间和正常固件执行期间。 在一个调试会话期间、它看起来像:
评估板:LAUNCHXL-F280039C。
Code Composer Studio:版本:12.2.0.00009。
C2000WARE:4.02.00.00。
提前感谢、我将很高兴您的支持。
Br、
鲁登科斯蒂安特
Kostiyantin,
根据"正常 FW 执行"、我假设您指的是独立执行、而不连接到 CCS、对吗?
可以。 在这种情况下、CCS 仅用于刷写。
Kostiyantyn,
我需要自己在器件上尝试这一点。 请给我一两天的时间。
请说明"CPU 暂停"是什么意思。 例如、假设您的固件将 GPIO 引脚切换5次、然后模拟复位。 之后会发生什么情况? 您不会再次看到切换? 您可以试试下面的方法吗?
器件初始化后、将 GPIO 引脚切换5次、然后模拟复位。 在启用和禁用看门狗的情况下尝试执行此操作。
是的、当然、谢谢。
在本例中、CPU 暂停-当 MCU 上的固件 在调用复位 API 后停止通过 SCI 通信发送调试信息、但它应该这样做。 我使用 Putty 作为终端、但即使重新连接终端也没有帮助、似乎是 MCU 方面的这个问题。
但我还要使用 GPIO 闪烁进行检查。
好的、这可能是 CPU 在做"其他事情"。 当设备收到时钟时、它必须执行"某些操作"。 它不能简单地冻结(除非器件处于空闲/待机/停机模式)。 器件可能会因 EMI 而冻结、但此处的情况并非如此。 假设引导模式选择开关 S3设置为跳转到闪存。
Kostiyantyn,
我在器件上试过这个。 我使用了 C:\ti\c2000\C2000Ware_4_03_00_00\driverlib\f28003x\examples\GPIO 目录中的 GPIO_ex2_toggle 示例、但稍作修改了文件。 我注意到的是、要使这种方法正常工作、必须断开调试器(从物理角度或逻辑角度)。 即、一旦您对代码进行编程、就可以在 CCS 中断开目标。 然后、您就会看到我的代码正常工作。 您将看到5秒的延迟、然后是 GPIO22的5次切换、并看到该序列反复不断地重复。 这是可以理解的,因为如果连接了调试器,则代码无法像在独立情况下那样自由运行。 请注意,我仅尝试了 sysctl_resetDevice();
由于未定义 WDGH_HARD_RESET 和 WDGH_SOFT_RESET、编译器会针对以下情况返回错误。 这些定义是您创建的吗?
- SYSCTL_simulateReset (WDGH_hard_reset);
- SYSCTL_simulateReset (WDGH_SOFT_RESET);
我尝试了下面,它不起作用。 我正在调查此事。
SYSCTL_simulateReset (SYSCTL_Cause_SIMRESET_CPU1RSN);
SYSCTL_simulateReset (SYSCTL_LAY_SIMRESET_XRSN);
您好、 Hareesh:
是的、 WDGH_HARD_RESET 和 WDGH_SOFT_RESET 是我自己分别使用值2和1进行定义的。 很抱歉、我忘了通知。
在本例中、只有在 刷写之后立即断开调试器的情况下、代码是否在重新启动后一直成功运行?
谢谢。
代码是否在重新启动后成功运行,是否仅当调试器 在闪烁后断开连接时才反复运行?
在两种情况下都工作正常。 您可以尝试随附的示例。 我更改了 SYSCTRL.h 中的以下行。 现在、我能够使其适用于3种类型的复位。
e2e.ti.com/.../1200.gpio_5F00_ex2_5F00_toggle.ce2e.ti.com/.../gpio_5F00_ex2_5F00_toggle.syscfg
Kostiyantyn,
我从我们的软件团队获得了一些反馈。 事实证明、SYSCTL_simulateReset 函数的参数可在 hw_sysctl.h 文件的 C:\ti\cc2000\C2000Ware_4_03_00_00\driverlib\f28003x\driverlib\inc 目录中找到:
因此、这些函数的正确用法将是
SYSCTL_simulateReset (SYSCTL_SIMRESET_CPU1RSN);
SYSCTL_simulateReset (SYSCTL_SIMRESET_XRSN);
SYSCTL_CASE 参数 作为参数传递给 RESCCLR 寄存器以清除复位原因:
#define SYSCTL_LAY_SIMRESET_CPU1RSN 0x00000400U //!< SIMRESET_CPU1RSn
#define SYSCTL_LAY_SIMRESET_XRSN 0x00000800U //!< SIMRESET_XRSn
随附了更新的测试案例:
尊敬的 Hareesh:
感谢您的建议、也感谢您的长时间回复。 我已经尝试了你上面提到的所有方法、但不幸的是、没有一种方法可以按预期工作。 复位后、CPU 仍会暂停、GPIO 不再闪烁。
至于 S3开关-是的、它被设置为跳转到闪存。
谢谢。
e2e.ti.com/.../gpio_5F00_ex2_5F00_toggle_5F00_4.2.zip
这是我的测试项目、我将尝试使 GPIO 引脚26闪烁。
CCS 版本 12.2.0.
C200Ware 4.02.00
Kostiantyn,
我先测试了代码、然后再将其发送给您。 我使用 C2000ware v4_03和 CCS 12.4。 我看了看你们的试验箱,它几乎是相同的,我给你的。 安装 C2000ware v4.03后,请尝试我的代码"as ise"。
尊敬的 Hareesh:
我安装了 CCS 12.04和 C2000Ware 4.03、在这个环境中测试了您的解决方案-但是它不起作用。 唯一的问题是我将引脚编号从22更改为26、因为出于某种原因、示波器连接到该引脚、这是我跟踪该行为的唯一方法(见下文)。
e2e.ti.com/.../gpio_5F00_ex2_5F00_toggle_5F00_12.04.zip
CCS 12.04 + C2000Ware 4.03或 CCS 12.02 + C2000Ware 4.02提供相同的结果。
谢谢。
Kostiantyn,
我不知道如何进一步帮助您。 我在 Launchpad 上测试了代码、看起来您也在使用 LP。 要测试此代码、您甚至不需要示波器、因为我正在切换 LP 上的 L.E.D。 我在每次器件复位时插入了3秒的暂停。 此暂停告诉您该器件正在经历复位周期。
好的、我将进一步调查该问题。 但是、感谢您的支持!