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.

[参考译文] TMDXIDDK379D:PWM未运行

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/568933/tmdxiddk379d-pwms-not-running

部件号:TMDXIDDK379D
主题中讨论的其他部件:controlSUITE

我有一台在Mac上运行CCS v7的IDDK_PM_Servo_F2837x-v2。
我收到一条警告,指出该项目是在不同的编译器版本上构建的。
是否存在兼容性问题?

当前状态是程序正在运行,但PWM未运行。 PWM1regs.TRCTR从不离开0。
TBCTL为0x83。 IER是0x05,IFR是0,但可能是因为没有发生中断
PWM未运行。 我假设软件可以正常工作。 请帮我弄清楚我做了什么错。

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

    您好,Wayne:

    这里需要检查的一些常见问题是:a)确保启用了外设时钟寄存器(PCLKRC);b)确保TBCLKSYNC =1。 这两种方式都将向PWM模块和/或计数器发送时钟信号。

    如果您能够在PWM中写入寄存器(并且它们保留其值),则PWM具有时钟。 在这种情况下,我将查看TBCLKSYNC位。

    请告诉我们您的发现。

    谢谢!
    克里斯

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正如我在稍后的文章中指出的,PWM未运行,因为它们未初始化。 在main()发生之前没有任何初始化。 我不明白为什么不执行该代码。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    韦恩,

    我在这里看不到任何后续帖子。 您是否启动了新的线程? 如果是,您能否将我链接到该文件?

    您正在运行的软件项目的名称是什么? 它是否包含在controlSUITE的套件或部件中?

    谢谢!
    克里斯
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    下面是IDDK_PM_Servo_F2837x.C的一小段,它显示了该问题。 请注意,此代码与PWM无关

    //默认ADC初始化
    Int ChSel[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    内部 分类[16]={5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5};
    Int ACQPS[16]={8,8,8,8,8,8,8,8,8,8,8,8,8};

    以及运行代码后的结果:
    TrigSel
    0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
    0000
    ChSel
    0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
    0000
    ACQPS
    0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
    0000
    posArray

    我不明白为什么初始化不起作用。 这似乎是一个编译器错误,但我不理解通过任何测试尝试如何实现这一点。 结果太明显。ccsv7和6.2 出现相同的问题。

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

    您好,Wayne:

    您是否已找到此问题的解决方案?

    我们相信这与MAC开发环境有关,并将让您与我们工具团队的人员联系,进一步为您提供帮助。

    此致,

    克里斯

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

    否,问题仍然存在。  我已将其追溯到之前发布的故障发生处的说明。  我相信这是编译器的错误。  由于主板未正确初始化,我完全无法继续。  我购买了另一个主板,该主板似乎初始化正确。  至少我没有注意到任何问题,所以有必要对帖子标题中的版本进行测试。  但是,第二块板无法完成工作。  我需要TMDXIDDK379D才能工作。

    Wayne Hunter

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

    我不知道什么可能是错误的。  一种猜测是这些行的初始化记录...

    Wayne Hunter 说:
    //默认ADC初始化
    Int ChSel[16]={0,0,0,0,0,0,0,0,0,0,0,0,0,0};
    内部分类[16]={5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5};
    Int ACQPS[16]={8,8,8,8,8,8,8,8,8,8,8,8,8};[/报价]

    ...在Windows上构建时是正确的,但在Mac上构建时是错误的。  请 预处理 包含这些行的源文件,并将其附加到下一篇文章中。  同时显示编译器版本以及编译器看到的编译选项。  我将在Mac和Windows上构建文件,并查找差异。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    正如我以前指出的那样,我确切知道问题发生在哪里。 在执行main()之前初始化的所有变量都将在boot.asm中移动。 在cinit部分,移动开始正常,直到达到0x2e或0x2F处内存中的计数。 我不记得是哪一个,而是其中一个。 在这里,它找到零计数,并认为它已完成并中止,使许多变量未初始化。

    该代码是从您的网站下载的原始代码。 除了在main()开头注释掉EnableFlg测试外,我没有做任何其他操作,因为我厌倦了手动设置它。 同样的问题在评论之前就已经存在。 我再次下载了控制套件,以消除它已损坏的可能性。

    我询问了自检模块的位置,我在某处看到该模块存在。 但是,像往常一样,我被忽视了。 我想消除控制板出现故障的可能性。 我已在上述位置手动替换0xFFFF以检查卡位。 但情况似乎并非如此,因为它读回了正确的值。

    这一切都是在Windows 10上完成的。 我在一段时间前放弃了Mac以消除这一变量。

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

    Wayne Hunter 说:
    执行main()之前初始化的所有变量都将在boot.asm中移动。

    我假定您指的是初始化C环境的例程中.cinit部分的处理,称为_c_int00。  要更好地理解该代码,请参阅 C2000编译器手册 中标题为 Automatic Initialization of Variables (变量自动初始化)的部分。  执行此处理的源代码位于名为boot28.inc (较旧的编译器版本)或boot28.asm (较新的编译器版本)的文件中。  典型的文件位置是...

    C:\ti\ccsv7\tools\compiler\ti-CGT-C2000_C2000<xmt-block0>2000 16.9 .1.LTS\lib\src. 

    这种初始化全局变量的方法长期以来一直以同样的方式工作。  现在不太可能出现问题。  我认为最终可执行文件(.out)中的.cinit部分很可能与系统内存中加载的.cinit部分不同。  我建议您比较它们并找出不同之处。

    从命令行执行...

    >>ofd2000 -v --obj_display=none,sections final_executable.out 

    检查输出以查看类似以下内容的内容...

    <5>".cinit"
    加载地址: 0x0.0001万ede运行地址: 0x0.0001万ede
    大小: 0x81 对齐: 1.
    已加载到设备:是 地址单元大小:16位
    文件偏移量: 0x3e38. #关系: 0
    重新分配文件偏移:0x0万 #行: 0
    行文件偏移:0x0万 TI-COFF s_flags: 0x0.004万
    TI-COFF s_flag: STYP_DATA 

    这是有关存储在可执行文件中的.cinit段的信息。  感兴趣的字段是"文件偏移量"。  该值是从文件开头开始的偏移量,其中.cinit部分的原始数据开始。  使用您最喜欢的二进制文件编辑器(或者您可能更喜欢Unix命令od)来检查可执行文件。

    要将.cinit内存地址映射到文件偏移,请使用以下公式...

    文件偏移基数+(当前cinit地址-起始cinit地址) 

    对于基于上述.cinit部分的特定示例,假设当前cinit地址为0x1f0a。  然后文件中的偏移量为0x3e38 +(0x1f0a - 0x1ede)= 0x3e64。  

    Wayne Hunter 说:
    在cinit部分,移动开始正常,直到达到0x2e或0x2F的内存中的计数。

    我假定0x2e不是正在执行的指令的地址,而是正在处理的.cinit的某些部分的地址。  我不熟悉您的特定设备的内存映射。  位于此地址的.cinit是否有效?  现在,我想是这样。  将可执行文件中的内存地址0x2e与.cinit进行比较会很有趣。

    谢谢,此致,

    -George

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

    我要求提供自检模块的位置,我在某处看到该模块存在。 但像往常一样,我被忽略了。[/QUOT]

    2月2日,在另一个线程中,Adam Haun建议:"如果要测试硬件,可以尝试运行 controlSUITE中的其他一些示例。 我建议使用闪子,CPU_TIMERS或一个或CLA数学示例。"  您是否有权访问controlSUITE?  您是否能够成功运行这些测试案例?

    e2e.ti.com/.../209.6869万