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.

[参考译文] LAUNCHXL-F28379D:同步 SPI 和 ADC

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1523553/launchxl-f28379d-simultaneous-spi-and-adc

器件型号:LAUNCHXL-F28379D
Thread 中讨论的其他器件: SysConfigC2000WARE

工具/软件:

您好:

我正在尝试使用 LAUNCHXL-F28379D 从 ADC 读取数据并通过 SPI 传输该数据。 我已经让这两个功能单独工作、但我在同时做这两个功能时遇到了一些麻烦。 我使用的是 CCS 20.1.1。

我将 LaunchPad 作为外设运行、每次通过 MOSI (INT_mySPI0_RX_ISR)接收到消息时都会运行 ISR。 该 ISR 读取 MOSI 数据、然后通过 MISO 传输一组新的数据。 尝试发送 ADC 数据的是 MISO 上的数据。

为此、我在  INT_mySPI0_RX_ISR 中添加了 ADC_readResult ()函数、并配置了.sysconfig 文件以允许软件中断。 但是、经过多次使用略微不同的设置尝试后、我无法正确读取 ADC 数据。 每次我读取0 (零)、即使我确定要使用外部电源向正确引脚施加非零电压。

理想情况下、我希望读取 INT_mySPI0_RX_ISR 中的 ADC 值、以尽可能减少发生的中断数。 这是否可行、或者我是否需要为 ADC 使用单独的 ISR? 如果我需要单独的 ISR、如何配置时序以匹配我的 SPI 传输、从而不会浪费计算资源?

我随附了.c 文件和.sysconfig 文件(作为文本文件)。 谢谢你。

e2e.ti.com/.../SPI_5F00_v3.c

e2e.ti.com/.../SPI_5F00_v3_5F00_sysconfig.txt

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

    您的 ADC 转换的 SOC 触发条件是什么?

    此致、
    Jason Osborn

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

    目前、我将其设置为"仅软件"、如下图 所示。 如果我犯了一个愚蠢的错误、我不熟悉 CCS。

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

    不需要抱歉!

    这里有几个相关的概念。 我不确定您对 ADC 的熟悉程度、因此我将为您或任何对该主题完全陌生的读者深入解释:

    1. ADC 组成  S 开始  O f C 版本。 这就是触发实际 ADC 采样过程的原因  独立于  实际读取 ADC 结果。

    2. "SOC0 Trigger"-通常情况下、ADC SOC 由另一个进程(例如周期性 PWM)定期触发。  通过将 SOC 触发器设置为仅 SW、这意味着启动采样过程的唯一方法是使用 SW-FORCE SOC 功能。
      1. 查看 C2000Ware 中的"adc_ex1_soc_software"示例。 您可以看到、实际 触发 软件强制 SOC 的 driverlib 函数是"ADC_forceMultipleSOC ()"或"ADC_forceSOC ()"
      2. 如果您 从不触发 SOC、ADC 结果寄存器将始终读为0。
    3. 请记住、在触发 SOC 后、结果寄存器获取有用信息之前需要等待一段时间。 在我之前提到的示例中、代码监控在所选 ADC 采样过程结束时触发的中断状态。
      1. 一种方法是触发软件强制 SOC、然后让一个空的 while ()循环等待 ADC 结果寄存器准备就绪。

    或者、我个人认为、具有 ADC 中断可能更可靠地确保时序。 通过获得 ADC 中断保存到的结果变量、您可以安全地访问相关信息、并且不会尝试访问垃圾数据的风险。

    如果您有任何问题、请告诉我!

    此致、
    Jason Osborn

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

    感谢您发送编修。 这极大地澄清了事情。

    话虽如此,我仍然有一些不确定因素:

    1)如果我选择在 INT_mySPI0_RX_ISR 内执行具有空 while ()循环的 SW 强制 SOC、我的想法是将此代码放置在 ISR 末尾、以确保当前 SPI 数据的传输没有延迟(从技术上讲、这是上次 INT_mySPI0_RX_ISR 运行的 ADC 值、但我发送数据的速度足够快、因此无关紧要)。 您预见到这种方法有什么问题吗?

    2)根据您推荐的 ADC 中断方法、如何确保 ADC 中断不会在 SPI 中断过程中发生并扰乱 SPI 数据传输? SPI ISR 在运行时是否可以发生 ADC 中断?