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/TMS320F2.8069万M:调试器在I2C中断时停止

Guru**** 2606725 points
Other Parts Discussed in Thread: CONTROLSUITE

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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/630393/ccs-tms320f28069m-debugger-halts-at-i2c-interrupt

部件号:TMS320F2.8069万M
主题:controlSUITE中讨论的其他部件

工具/软件:Code Composer Studio

您好,

我尝试在Piccolo MCU上运行I2C模块。 我在controlSUITE的I2C示例的帮助下准备了一个与其他驱动程序类似的HAL驱动程序,但我的版本遇到了一个我无法理解的问题。

有一个ISR发送由ARDY位触发的停止条件,与示例中类似。 发送第一个字节后,CCS进入ISR,并在我清除 I2CSTR寄存器中的nack中断位的位置停止。 查看屏幕截图,了解它的外观(请注意,我没有在那里创建任何断点!)。 如果我删除'fault'行,在第一个'if'条件下也会发生相同的情况。 数据字节似乎已正确发送(请参阅逻辑分析器的下一个屏幕截图),但当我恢复程序时,不会再发送任何数据字节。

两个基本问题:

1)什么可能导致调试器在没有断点的情况下停止? 我是否可以从此处跟踪问题的来源?

2)对于I2C模块出现这种行为的原因有什么想法?

有趣的是:当程序停止时,查看模式寄存器后, MST位似乎 被清除了-什么意味着我的MCU状态从 控更改为 从-怎么可能!?

--------

在高行处停止的CCS窗口:

CCS Screenshot

逻辑分析器窗口:

Logic analyzer

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

    您好Jakub:

    我不能对其他特定于器件和I2C模块的问题发表太多评论。 C2000专家可以处理这些问题。 我已提请他们注意这条线。

    但是,关于以下问题:

    1)什么原因可能导致调试器在没有断点的情况下停止? 我可以从此处跟踪问题的来源吗?[/QUOT]

    除非到达某种断点,或者从调试器中发出halt命令(这也可以由监视点触发),否则调试器通常不会停止。 发生这种情况时,您能否发布调试视图的屏幕截图? 它应该提到那里停止的原因。

    谢谢

    KI

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

    你好,Jakub,

    当您逐步浏览程序并在表达式窗口中查看I2CSTR.bit.nack位时,它在IF语句中是否会更改? 还是保持1或0? 或许想尝试观察整个I2CSTR寄存器,以了解发生了什么。 我不知道为什么它在这条线上停止,需要进一步调查才能找出原因。

    我认为正在清除的MST位是正常的,因为您在更改之前就生成了停止条件,请阅读以下内容:

    最佳,

    Kevin

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

    感谢大家的回答,

    @Ki-Soo:这是CCS窗口的完整屏幕截图。 如何跟踪半乳糖的原因,在哪里查找? 它是否可以在 'dbug'窗口中看到?

    --------

    : 请看一下下面的屏幕截图,它显示了STR和MDR寄存器在不同阶段(在调试器中逐步执行代码时)。 nack标记似乎总是清晰的(我没有连接任何设备,只是外部上拉,现在没有任何变化)。

     Registers

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

    Jakub -您的屏幕截图似乎表明某些SW断点触发了暂停:

    是否可以打开 脚本控制台 并输入以下命令:

    js:> eval("debug_DumpBreakpoints()")

    这应该会在调试控制台中输出一些信息。 请在此处提供输出。

    谢谢

    KI

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

    尊敬的Ki:

    请看一下我复制脚本控制台输出的附加文件。 我在停机期间运行您的命令。

    /cfs/file/__key/communityserver-discussions-组件文件/81/I2C-breakpoints-_2D00_-scripting-console-output.txt

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    输出表明只有一个处于活动状态且位于应用程序的退出点(这是预期的)的断点。

    在停止时,PC所在位置的拆卸窗口的内容是什么
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    下面是反汇编窗口的屏幕截图,但我也将内容复制到文本文件中,以防您需要更大的图片:

    /cfs/file/__key/communityserver-discussions-组件文件/81/I2C-_2D00_-disassembly-window-content-at-halt.txt

    diassembly

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

    Estop是 一个软件断点指令。  

    这将回答为什么目标在此地址停止的问题。

    现在问题变成:为什么在地址有紧急停止指令? 调试器不知道该地址处有任何SW断点,因此调试器可能不设置该断点。

    KI

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

    Jacob -在调试视图的屏幕截图中,我看到程序在main.c的第233行停止-地址0xCFA4

    但在反汇编视图中,程序以0xD0DC的形式停止。 为什么会出现差异?

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

    我不确定,也许我在这两个帖子之间添加了一些内容。 我现在检查了它,“Debug (调试)”窗口显示它在第233行(0x00D0DC)处停止,与ESTOP0命令的“Disassembly (反汇编)”行对应。

    我认为我在C代码中找到了此命令。 如果您查看第一篇文章中我的代码的屏幕截图,您将看到一个"else (其他)"命令-但屏幕截图不显示其内部内容。 完整的图片将显示其余内容:

    否则
    {
    //由于中断源无效而产生一些错误
    __ASM(" ESTOP0");
    }
    }//i2cISR结束 

    在注释掉 此ESTOP0命令后,程序不会停止。 因此,它可能遇到了这个断点,而反汇编代码奇迹般地将它分配到 main.c.的错误行

    我明天会深入探讨这个问题,但评论这条线对I2C本身没有帮助。 即使程序没有停止,它仍然不能在第一次传输之后继续工作。

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

    Jakub Klein 说:
    如果您看一下我的代码在第一篇文章中的屏幕截图,您会看到一个"else (其他)"命令-但屏幕截图不显示其中的内容

    实际上,你前面的第二个屏幕截图*不会*显示,但我没有注意,完全没有注意到(啊)。  

    [引用user="Jakub Klein]我将在明天深入探讨,但评论这条线对I2C本身没有帮助。 即使程序没有停止,它仍然不能在第一次传输之后继续工作。[/QUOT]

    我对此问题无能为力,因为这超出了我的专业领域(我主要关注工具(CCS))。 Kevin应该能够提供更多见解。

    谢谢

    KI