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.

[参考译文] TMS320F28030:独立模式下的 SPI

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/748014/tms320f28030-spi-in-the-standalone-mode

器件型号:TMS320F28030

大家好、  在 独立 模式下运行代码时、SPI 总线接收到两个字、第一个字正确、第二个字不正确。 如果序列重复、 第一个字始终正确、第二个字始终不正确。   在调试模式下执行完全相同的代码 此问题不存在。

在这两种情况下 、使用2.5MHz 的 SPI 时钟每秒发送一个字。  SPI 是从器件、时钟和数据电压摆幅为3.3伏、表现正常。

SPI int 位于 RAM 中

#pragma CODE_SECTION (spiRxIsr、"ramfuncs");
#pragma CODE_SECTION (spiTxIsr、"ramfuncs");

INT Rx 代码

iSpiRxData = SpiaRegs.SPIRXBUF

我缺少什么?

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

    您每隔1秒发送一个 SPI 字? 您的字长是多少?
    您是否使用 FIFO 模式? 如果是、RX 中断级别配置为什么?
    请定义"不正确"。 它是否丢失位? 错了?

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

    您好、Mark 每秒发送一个字。
    字长为16位。
    使用 Rx FIFO、重复进行2字节传输。 第二个字可能由第一个字的部分组成、非常可重复。


    RX FIFO:

    SpiaRegs.SPIFFRX.bit.RXFFIL = 0x001;

    SpiaRegs.SPIFFRX.bit.RXFFIENA=1;//基于 RXFFIL 匹配(大于或等于)的 RX FIFO 中断将被启用。
    SpiaRegs.SPIFFRX.bit.RXFFINTCLR = 1;//写入1以清除位7中的 RXFFINT 标志。

    SpiaRegs.SPIFFRX.bit.RXFFST = 1;;//写入0可将 FIFO 指针复位为零、并保持复位状态。
    SpiaRegs.SPIFFRX.bit.RXFFOVFCLR = 1;//写入1以清除位15中的 RXFFOVF 标志

    SPI 设置:

    SpiaRegs.SPICCR.bit.SPICHAR = 0xF;

    主器件会 在每次发送后向从器件选择线路发送脉冲、之后选择线路会一直保持低电平直到下一次发送、这是一个问题

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在您的前几行中、我有点困惑:
    以1Hz 的速率接收16位 SPI 字。 此 SPI 字包含两个字节。
    接收到的第一个字是正确的、但第二个字不正确。

    我是对的吗? 您没有提到第一个字节是正确的、第二个字节是被扰频的。

    在该配置下、RX 中断将在每个字之后触发。 间隔1秒、即使您的系统负载很大、我也希望在下一个系统进入之前有足够的时间读取最后一个字。

    您能否共享单个字传输的示波器捕获、包括芯片选择? CS 不应成为问题。 在两次传输之间有这么长的时间时、您将非常容易受到时钟线上的噪声事件和混乱的内部位计数器的影响。

    -Mark
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    SPI 设置为接收16位(字)、数据模式为2个字、每个字每秒发送1次、然后重复该模式。

    中断读取模式、看起来不像独立模式下的数据被正确计时、但在调试模式下(代码没有变化)、这意味着它不是一个时钟问题。

    我将很快提供一个屏幕、为什么它使用仿真器而不是独立的。

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

    Mark、您好、这里的系统不允许发布图片、 如果无法连接、我可以 将其发送给您吗?

    e2e.ti.com/.../scope_5F00_5.zip

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是的、这些信号看起来非常稳定。 是芯片选择的蓝色信号或只是另一个信号。

    我如果您搜索 C2000 + E2E +单机版与调试器版、会发现有几个不同的线程存在类似的情况、其中调试器运行正常、但独立版不能正常运行。

    您的系统中是否有其他行为可能有所不同的情况?
    您是否可以将代码向下按到底、使其仅显示您的 SPI 函数?
    您是否有在引导时以不同方式加载的预初始化变量?

    我将尝试在这里获得一些帮助,因为这是我以前从未处理过的罕见情况。 我认为它不一定连接到 SPI

    -Mark
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    这里是沿着这条线程的一些线程。

    e2e.ti.com/.../580852
    e2e.ti.com/.../684789

    -Mark
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    蓝色信号是片选信号、因为仿真器运行时没有问题。 我重启电源、发送与其错误行为相同的序列。

    我尚未尝试获取模式

    在这两种情况下、源代码是相同的。

    谢谢
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    "提到使用仿真器运行时没有问题。 我重启电源、发送与其错误行为相同的序列"
    表示它不是 SPI、而是从闪存引导时的初始化代码:

    请参阅 Wiki 页面:
    processors.wiki.ti.com/.../FAQs

    -Mark
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Mark、代码使用 TI 闪存模板、其中只有几个代码命令。
    我不熟悉此过程,为了节省时间,可以建议前进的道路。

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

    您是否通读了主题帖和 wiki 页面? 你有具体问题吗?
    由于您对这个过程比较陌生、我强烈建议您参加 F28035的技术讲座。 这实际上向您展示了如何从头开始构建应用、包括教您链接器文件、以及如何使其从闪存中正确执行。 如果您参加了研讨会、您应该了解研讨会的联系方式、并确保您遵循自己应用中概述的所有步骤。 以下是链接:
    processors.wiki.ti.com/.../C2000_Archived_Workshops

    另一个路径是获取有效的闪存示例、然后修改要添加到 SPI 函数中的代码。 但是、这会跳过您在整个实验课程中获得的知识。


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

    您好、Mark 感谢您的链接、我将在假期回顾链接器过程、因为我有时间限制。 话虽如此、
    在独立模式下并单步执行应用程序、我的阵列会进行初始化并正常工作。


    下电上电后、初 始化看起来会跳过并应用。 错误行为。

    通过调试器进行下电上电和复位之间有何不同?  

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    请查看我之前的一个回复中共享的 Wiki 链接。 这明确涵盖了差异以及如何调试此问题。 调试器复位时、某些存储器位置可能不会复位、但在下电上电周期中、所有 RAM 都将复位、必须重新初始化。

    -Mark