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.

[参考译文] TMS570LS3137:我想使用 IRQ 方法、TMS570LS3137和 SafeRTOS 来实现 SPI 通信。

Guru**** 2534260 points
Other Parts Discussed in Thread: HALCOGEN, TMS570LS3137

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1340958/tms570ls3137-i-would-like-to-implement-spi-communication-using-irq-method-using-tms570ls3137-and-safertos

器件型号:TMS570LS3137
主题中讨论的其他器件:HALCOGEN

尊敬的所有人:

如标题所示、我要在 TMS570开发套件中实现 SPI 通信。 您能否确认我所做的操作是否正确?

驱动程序初始化
- Halcogen -> TMS570LS3137ZWT 选项卡->驱动程序启用->启用 SPI3驱动程序

2. SPI3设置(8位发送)
- SPI3全局选项卡->检查主模式和内部时钟
- SPI3数据格式选项卡->数据格式0字符长度8设置
- SPI3端口选项卡-> SOMI 输出、SIMO 输入、CLK 输出、ENA 输入、SCS[0]输出设置

3. IRQ 设置
- TMS570LS3137ZWT TAB -> VIM 通道32-63 TAB -> 38:MIBSPI3级别1启用

4.操作
- SPI 数据发送:spiInit ();-> spiEnableNotification (spiREG3、(UINT32)((UINT32) 1U << 8U));-> spiSendData (spiREG3、&dataconfig1、 sizeof (cpuMessagebuf)/2、cpuMessagebuf);
- SPI 数据接收:通过执行 mibspi3LowLevelInterrupt ()-> spiNotification ()-> spiGetData ()读取数据。

这是它的工作方式吗?
我会等待专家的建议。

此致、
IBLEE.

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

    啊!!!

    Halcogen -> SPI3选项卡-> SPI Global 选项卡->设置为 Low Level。
    低级 IRQ。

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

    您好、IBLEE:

    Unknown 说:
    2. SPI3设置(8位发送)
    - SPI3全局选项卡->检查主模式和内部时钟
    - SPI3数据格式选项卡->数据格式0字符长度8设置
    - SPI3端口选项卡-> SOMI 输出、SIMO 输入、CLK 输出、ENA 输入、SCS[0]输出设置

    如果您要在主模式下操作 TMS570LS3137、

    SOMI (从器件输出主器件输入)应该是输入、而 SIMO (从器件输入主器件输出)应该是输出。

    Unknown 说:
    4. 工序[/报价]

    此外、请确保在 SPI 初始化后调用"_enable_IRQ ();"、因为默认情况下 IRQ 中断将处于禁用状态。

    除了这些之外、我在您的流程中看不到任何其他问题。

    --
    谢谢。此致、
    Jagadish。

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

    尊敬的 Jagadish:

    感谢您的检查。
    它以前不起作用的原因可能是_enable_irq()是在 spiInit()之前完成的。
    我将再次检查。
    谢谢你。

    此致、
    IBLEE.

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

    尊敬的 Jagadish:

    当从主器件向从器件发送数据时
    spiEnableNotification (spiREG3、(UINT32)((UINT32) 1U <<8U));
    我像这样运行它并运行 spiSendData()以发送数据。

    为什么 spiEnableNotification (spiREG3、(UINT32)((UINT32) 1U <<8U));如果我放这个代码,dataAbort 会在 mibspi3LowLevelInterrupt ()中发生吗?

    您能告诉我我哪里出了问题吗?

    此致、  

    IBLEE

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

    出现上述 dataAbort 时、g_spiPacket_t[2U].rxdata_ptr 值为0x00000000。
    我认为这是个问题、
    有什么我漏掉的东西吗?

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

    当您在下载后的主函数中按"GO"时、会立即发生上述数据中止。
    但更奇怪的是、即使从器件未发送数据、也会发生 Rx 中断。
    我不明白我的常识。
    有人可以帮助我吗?

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

    尊敬的 INBUM LEE:

    我怀疑这一点:

    也许你启用了 RXINT、而你在不调用"spiGetData"的情况下调用"spiSendData"函数。

    SPI 通信是全双工通信、因此这意味着如果您同时并行发送一些数据、则会收到一些数据。

    如果您启用了 RXINT 函数、但 在调用"spiSendData"函数之前未调用 spiGetData 函数、则 rxdata_ptr 将是空指针、且地址为零。

    因此、每当我们收到并行数据时、将尝试移动到空地址并会创建异常。

    您可以执行以下任一操作:

    1.如果您不想从从器件接收数据、请勿启用 RX_INT。

    2.如果需要接收数据,请 在调用 spiSendData 之前调用 spiGetData 函数 ,这样,无论接收到的数据将 被移动到目标缓冲区,都将传递给 GET 数据函数。

    或者只需调用"spiSendAndGetData"函数、该函数将接收传输的源地址和接收的目标地址。

    --
    谢谢。此致、
    Jagadish。

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

    我被你的好意震惊了。

    啊哈!

    我是否需要在执行 spiSendData()之前先运行 spiGetData()?
    否则,您需要运行 spiSendAndGetData()来注册接收缓冲区。

    那么
    1.执行 spiGetData()以注册接收缓冲区
    2.执行 spiSendData()以将数据从主设备传输到从属设备
    3.当数据从从服务器发送到主服务器时,数据是否存储在接收缓冲区中,是否调用 spiNotification ()函数?

    此致、

    IBLEE

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    是否需要在执行 spiSendData()之前先运行 spiGetData()?
    否则,您需要运行 spiSendAndGetData()来注册接收缓冲区。

    您是对的。

    1. 执行 spiGetData()以注册接收缓冲区
    2.执行 spiSendData()以将数据从主设备传输到从属设备
    3.当数据从从服务器发送到主服务器时,数据是否存储在接收缓冲区中,是否调用 spiNotification ()函数?[/引号]

    完全正确。

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

    尊敬的 Jagadish:

    我需要做的是从主器件向从器件发送数据、然后在从器件接收数据之前执行其他操作、然后在我从从器件接收数据时通过 spiNotification 接收到的数据。 这就是我一直在谈论 spiNotification 的原因。 有可能吗?

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

    您好、INBUM:

    在 SPI 中、从器件无法启动数据传输。 只有主器件可以发起通信。 只有在所选(CS 激活)且主器件开始数据传输时、从器件才能将数据发回至主器件。

    我想要做的是从主设备向从设备发送数据,然后在从设备接收数据之前执行其他操作,然后在从设备接收数据时通过 spiNotification 接收数据。 这就是我一直在谈论 spiNotification 的原因。 是否可能?

    完成其他操作后、您应该需要发送一些虚拟数据(例如全部0x00)来启动通信并从从器件接收数据。 否则、从器件本身无法向主器件发送任何数据。

    --
    谢谢。此致、
    Jagadish。

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

    尊敬的 Jagadish:

    SPI 通信就是这样吗? 那么、我认为通信流程是错的? 我想我必须找到另一种方法。 谢谢你。

    如果我有任何问题、我会再次提问。

    谢谢。此致、
    IBLEE