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.

[参考译文] TMS320F28386D:有关如何将 GPIO 输入用作触发器的问题。

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1339277/tms320f28386d-questions-about-how-to-use-gpio-inputs-as-triggers

器件型号:TMS320F28386D
主题中讨论的其他器件:C2000WARESysConfig

大家好。 我有一个问题是如何使用进入 GPIO 输入引脚的信号的上升沿作为触发器。

外部时钟信号正在进入 GPIO。 我必须针对进入 GPIO 输入引脚的每个信号上升沿读取一些数据并将其存储在阵列中。

数组大小为1024、因此必须发生1024次。 每个过程应该在下一个上升沿之前结束。

进入输入引脚的信号的周期为160ns。

当触发发生时、行为很简单、如下所示:

dataArray[dataIndex]=(GpioDataRegs.GPCDAT.all >> 16)& 0xFFF;// 7个周期
dataIndex++;// 2个周期

我尝试了中断触发方法、但这需要40个周期(200ns)。 因此、此方法不可用。

我问题的核心是检测 GPIO 输入引脚的上升沿和处理数据的过程不应超过160ns。

没问题、您能告诉我如何检测 GPIO 信号的上升沿吗?

谢谢你。

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

    您好!

    外部时钟信号正在进入 GPIO。 我必须针对进入 GPIO 输入引脚的每个信号上升沿读取一些数据并将其存储在阵列中。

    数组大小为1024、因此必须发生1024次。 每个过程应该在下一个上升沿之前结束。

    进入输入引脚的信号的周期为160ns。

    [/报价]

    出于好奇心、这是什么类型的沟通? 它是一个特定的协议、如 I2C 或 SCI、还是针对您的应用进行了定制? 如果是定制的、那么您可以参考我的以下响应、否则我建议使用器件本身提供的一种外设。

    我问题的核心是检测 GPIO 输入引脚的上升沿和处理数据的过程不应超过160ns。

    没问题、您能告诉我如何检测 GPIO 信号的上升沿吗?

    [/报价]

    根据您的应用、您可以使用 CLB 作为一种执行该操作的方法。 CLB 具有输入滤波 功能、允许特定上升沿或下降沿充当触发器、可用于使用 CLB 计数器对这些位进行串行读取。 以下示例展示了如何使用串行器(clb_ex22_serializer)以及如何与 C2000Ware SDK 中的 CLB (clb_ex31_tdm_serial_port)创建串行端口:C2000Ware_5_01_00_00\driverlib\f2838x\examples\C28x\CLB 。

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

    感谢您的答复。

    出于好奇,这是什么类型的沟通?

    回顾过去、我认为这个问题很难解决。 很抱歉我没有英语。

    一个周期为160ns 的外部信号被输入到 GPIO1引脚、另一个周期相同的信号被连接到 GPIO C 端口的12个引脚。

    我想在 GPIO1引脚的信号输入的上升沿将 GPIOC 端口的引脚状态存储在阵列中。  (因此、dataArray[dataIndex]=(GpioDataRegs.GPCDAT.all>16)& 0xFFF;)

    由于系统时钟为200 MHz (5ns)、整个过程不得超过最大30个周期、才能在160ns 内进行处理。 我讨论的过程是否可能?

    谢谢你。

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

    您好!

    我想在 GPIO1引脚的信号输入的上升沿将 GPIOC 端口的引脚状态存储在阵列中。  (因此、dataArray[dataIndex]=(GpioDataRegs.GPCDAT.all>16)& 0xFFF;)

    由于系统时钟为200 MHz (5ns)、整个过程不得超过最大30个周期、才能在160ns 内进行处理。 我讨论的过程是否可能?

    [/报价]

    如果您尝试读取整个 GPIO C 端口、而不仅仅是单个引脚、那么我认为您得到的是正确的。

    如果您想缩短检测上升沿所需的时间、仍然可以使用 CLB 将该 引脚作为输入路由、对上升沿检测进行滤波、并在检测到上升沿时使用 HLC 发出中断。 然后、在 CLB 中断内、您可以按照您需要的任何方式读取 GPIO 引脚。 这是针对实时系统的最佳解决方案、可防止 仅轮询引脚而导致的延迟。

    我已经附加了一个 SysConfig 文件、其中列出了执行此类操作的基本配置:

    e2e.ti.com/.../GPIO_5F00_CLB_5F00_Trigger.syscfg

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

    感谢您的答复、我会尽力为您提供建议。