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.

[参考译文] TMS320F280049C:在.CLA 文件中使用时、GPIO 输出不能被切换

Guru**** 2791835 points

Other Parts Discussed in Thread: TIDM-02008, C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/955206/tms320f280049c-gpio-output-could-not-be-toggled-when-used-in-cla-file

器件型号:TMS320F280049C
Thread 中讨论的其他器件:TIDM-02008C2000WARE

您好、专家、

我的客户遇到一个问题:在.CLA 文件中使用时、无法切换 CPIO22输出、只需在"HWREG (GPIODATA_BASE + GPIO_GPIO_GPIACLEAR)= GPIO_PROFILING1_CLEAR;"行停止即可。

您能否就如何调试或解决此问题发表一些意见? 谢谢!

他们使用 TIDM-02008代码配置了 GPIO22、如下所示、

在.c 文件中、设置 GPIO

GPIO_setDirectionMode (GPIO_PROFILING1、GPIO_DIR_MODE_OUT);
GPIO_setQualificationMode (GPIO_PROFILING1、GPIO_QUAL_SYNC);
GPIO_setPinConfig (GPIO_PROFILING1_PIN_CONFIG);
GPIO_setMasterCore (GPIO_PROFILING1、GPIO_CORE_CPU1_CLA1);

在.CLA 文件中、Cla1Task4循环中的代码

setProfilingGPIO();


resetProfilingGPIO();

------------------------------------------------------------------

内联 void resetProfilingGPIO (void)

#pragma diag_suppress=770
#pragma diag_suppress=173
HWREG (GPIODATA_BASE + GPIO_GPACLEAR)= GPIO_PROFILING1_CLEAR;//单击"run"按钮后始终在此处停止。
#pragma diag_warning=770
#pragma diag_warning=173

此致

Rayna

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

    Rayna、

    检查电路板上是否有任何将引脚保持在特定状态或不同连接的东西。   例如、在 launchpad 上、有一些引脚通过电阻器连接到 FSI。 LaunchPad 用户指南对此进行了介绍。  

    C28x 能否切换引脚?  (当然、如果你没有将主内核分配给 CLA)。   

    -洛里

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

    您好、Lori、

    客户使用控制卡对此进行测试、这不应由主板引起。

    C28x 可以切换 GPIO22引脚。

    此致

    Rayna

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

    Rayna、

    我通过 F28004x TRM 搜索 GPIO22。  这一点是否得到了考虑?  我假设是、因为 C28x 可以切换引脚?

    • GPIO22的模拟模式选择:GPIO22和 GPIO23在复位时处于特殊的模拟模式、并且必须通过禁用直流/直流并清除 GPAAMSEL 中的位来配置为 GPIO 使用。

    [引用用户="Rayna Wang "]并且 C28x 可以切换 GPIO22引脚。

    • C28x 上使用的代码是否相同(HWREG 与 driverlib 函数)?  
    • 我假设 GPIO_PROFILING1_CLEAR 的值正确、但无法从提供的代码中得知。  

    [引用用户="Rayna Wang "] HWREG (GPIODATA_BASE + GPIO_GPIO_GPIACLEAR)= GPIO_PROFILING1_CLEAR; //单击"run"按钮后始终在此处停止。

    我在这里看不到 CLA 为什么会停止。  

    • 您能否分享与此行相对应的 CLA 反汇编屏幕截图?
    • 反汇编代码是否显示 MPC 位于此行或 MSTOP?

    -洛里

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

    您好、Lori、

    非常感谢您的帮助! 请观看下面的视频、了解该问题的演示:

     

    摘要:我能够使用代码 setProfilingGPIO()和 resetProfilingGPIO()来切换 GPIO22、但无法使用 CLA 任务中的相同代码来切换 GPIO22。

    小泉

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

    摘要:我能够使用 .c 文件中的代码 setProfilingGPIO()和 resetProfilingGPIO()来切换 GPIO22、但无法使用 CLA 任务中的相同代码来切换 GPIO22。

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

    小泉

    感谢您的观看视频。  我尝试在 F28004x launchpad 上重现此问题、但未成功、因此正在进行其他操作。  

    在您的视频中、当您尝试单步执行 CLA 时、CCS 询问文件的源位置。  我相信它是 driverlib 的一部分。  只需点击"locate file"、然后浏览到该目录、CCS 将能够显示源代码。  

    以下是尝试重现问题的步骤:

    1)从 CLAMath sin 示例工程(C:\ti\c2000\C2000Ware_3_03_00_00\libraries\math\CLAmath\c28\examples\sin)开始、为 F28004x RAM 选择了构建配置。

    2) 2)将此代码添加到工程的初始化中:

    GPIO_setAnalogMode (22、GPIO_ANALOG_DISABLED);
    GPIO_setDirectionMode (22、GPIO_DIR_MODE_OUT);
    GPIO_setQualificationMode (22、GPIO_QUAL_SYNC);
    GPIO_setPinConfig (GPIO_22_GPIO22);
    GPIO_setMasterCore (22、GPIO_CORE_CPU1_CLA1); 

    3) 3)向.cla 文件添加了#include "driverlib"

    4) 4)在对 Sin 函数的调用周围添加了清零/置位

    //
    //任务1:计算 sin (X)
    //
    __attribute__((interrupt) void Cla1Task1 (void)
    {
    //_mdebugstop();
    HWREG (GPIODATA_BASE + GPIO_GPASET)= 0x00400000UL;
    fResult1 = CLAsin (fVal);
    HWREG (GPIODATA_BASE + GPIO_GPACLEAR)= 0x00400000UL;
    }
    __attribute__((interrupt) void Cla1Task2 (void)
    {
    
    HWREG (GPIODATA_BASE + GPIO_GPASET)= 0x00400000UL;
    //测试内联函数
    //项目必须使用--opt_level= 0或更高版本才能内联发生
    //
    //_mdebugstop();
    fResult2 = CLAsin_inline (fVal);
    HWREG (GPIODATA_BASE + GPIO_GPACLEAR)= 0x00400000UL;
    
    } 

    5) 观察到:

    C28x 会检查来自 CLA 的答案并全部通过。  

    CLA 代码在 MSTOP 停止。  注意:优化可能会使源代码与 CLA 停止的位置稍有不同。  我可以看到、即使启用了优化、它也位于反汇编窗口中的 MSTOP。  查看-->拆卸

    我在示波器上监控 GPIO 并进行切换。  

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

    谢谢、Lori。 是否有任何其他权变措施来切换 CLA 内的 GPIO 任务?  

    我尝试使用"GPIO_writePin (22、1);"和 "GPIO_writePin (22、0);"。 它们从.c 文件成功切换了 GPIO22、但在被放置在 CLA 任务中时仍然无法切换。  

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

    小泉

    我仍然认为还有其他事情在发生。  在 CLA 任务中、切换硬件上的引脚没有问题。  您可以尝试重现我的实验以排除硬件问题。

    对于导致问题的代码:

    您能否尝试通过单步调试 CLA 代码?   

    此外、您能否截屏显示发生 HWREG 写入的反汇编位置?   

    向 CLA 任务中添加两行代码是否会产生诸如增加任务大小之类的影响?  任务是否仍然适合同一个 RAM 块?  

    -洛里

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

    您好、Lori、

    此问题通过使用"GPIO_writePin (22、1);& GPIO_writePin (22、0);"来解决、不做任何更改。 真的很奇怪。

    无论如何、感谢您的支持!

    此致

    Rayna