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.
工具与软件:
您好!
我遇到了一个关键编译器(?) BUG、试图从 CLA1中断代码中调用 GPIO_writePin ()会导致整个 CPU 挂起、否则执行似乎在空间中丢失。
该设计的链接
使用 从内部调用的 GPIO_writePin ()库函数尝试设置 GPIO 引脚(正确配置为在 CLA1控制下) __interrupt void Cla1Task1 ( void )。
CPU 似乎完全停止运行正确的代码、中断不再发生等
调查崩溃、我已将问题确定为 GPIO_writePin ()中的以下行:
引脚掩码=(uint32_t) 1U <<(引脚% 32U);
具体而言、它是导致崩溃的变量的"<"运算符。 更改为
引脚掩码=(uint32_t) 1U <<(9);
解决该问题。
更多信息
使用中的剪切粘贴 my_GPIO_writePin()函数(&P):。 CLA 文件中、我已经更改了使用查找表这一行
静态常量 uint32_t bitmap[32]={1<<0、
1<<1、
1<<2、...
1U<<31};
:
:
pinMask = BITMAP [pin%32];
一切都按预期运行。
从 CPU (不是 CLA1)代码调用 GPIO_writePin ()总是按预期工作。
我找到了解决方法后、我将此问题作为缺陷报告或其他形式提交、以供您分析、或者向我指出我漏掉了一些东西的地方。
谢谢!
-Alon
您好、Alon、
感谢您分享反馈。 您是否可以尝试按照本主题中详述的步骤操作: https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/406803/toggling-a-gpio-on-cla
从您尝试执行的操作中、应该可以使用现有的 driverlib 来切换 GPIO。 您能否确认是否在中包含函数调用
GPIO_setControllerCore(uint32_t pin, GPIO_CoreSelect core);
此函数用于配置哪个内核拥有指定引脚的数据寄存器 (数据、设置、清除和切换)。 内核参数是 指定内核的枚举数据类型、例如 GPIO_CORE_CPU1_CLA1、用于使 引脚的 CPU1 CLA1控制器。
以下是一篇论坛帖子、您可以参考其中包含几乎类似的问题: https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/406803/toggling-a-gpio-on-cla
请告诉我您的发现。
此致、
Ozino
尊敬的 Ozino:
感谢您的答复。
GPIO 访问不是我的问题。 这只是一个例子,我使用它,因为它发现了一个更严重的问题。
我的问题是、很可能是 C2000生成了错误的代码、或者暴露了芯片错误。
我重新表述问题:
以下来自 Cla1Task1中的函数调用 会导致 CLA1上的所有中断被禁用或严重故障、也可能会导致 CPU1上的所有中断、此外可能还会导致其他一些损坏。
静态内联 void cla_test (uint32_t x)
{
易失性 uint32_t y;
Y=1<<x;
}
:
__interrupt void Cla1Task1 ( void )
{
:
CLA_TEST (9);
:
使用调试器、我可以看到 CPU1中的代码的主循环正在运行、中断未正确运行-看起来它们被部分禁用或产生了错误的行为、CLA1中断代码根本不运行、PWM 信号垃圾等
谢谢!
-Alon。
您好、Alon、
感谢您的澄清。 我会尝试重新创建此测试用例、如果我能够复制您的设置、我们也会联系您。
此致、
Ozino
因此、我尝试了重新创建您的测试设置、但我无法观察到您的问题。 下面是我的测试场景:
从 C2000Ware 中导入 cla_ex4_pwm_control 示例。
修改.cla 文件以将代码片段添加到现有 ClaTask1例程中、同时使用一些附加代码在左移完成时更改 y 值。 已编译并刷写到目标中。
并将符号加载到 CLA 内核。
已运行 CPU 并等待.cla 文件中暂停。 然后、我运行并观察 y 变量的状态、并看到预期行为。
然而、当在没有代码行的情况下运行同一代码来停止 CPU 时(mdebugstop)、我注意到不正确的值、但其余的系统性能将正常执行。
您能否尝试使用 C2000Ware 中的示例中描述的代码来调试 CLA、并对其是否有效进行比较?
此致、
Ozino