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.

[参考译文] TMS320F28027:输入 GPIO 的最大速率是多少?

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/594932/tms320f28027-what-s-the-maximum-rate-of-input-gpio

器件型号:TMS320F28027

您好!

我使用的是 LAUNCHXL-28027板。 SYSCLOCK 为60MHz。
我有三个用于外部中断的输入 GPIO。
-GPIO3-->XINT1:脉宽250ns,持续时间600us
- GPIO5 --> XINT2 (用于 ADCINT1):4MHz,占空比50%
-GPIO4->XINT3:脉宽250ns,持续时间500us

当我运行这个时、XINT3不工作。
但是、如果 GPIO5输入频率低于2MHz、那么 XINT3就会工作。
输入 GPIO 速率低于2MHz?

提前感谢您。

-Jae Yang Park-

===

我的配置为:


//GPIO3、XINT1
void GPIO3_config (void)

//设置 GPIO3
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO3 = 0;// GPIO3 -通用 I/O
GpioCtrlRegs.GPADIR.bit.GPIO3 = 0;// 0:输入、1:输出
GpioCtrlRegs.GPAQSEL1.bit.GPIO3 = 0;//限制条件00:同步到 SYSCLK、01:3个采样、10:6个采样、11:异步
GpioCtrlRegs.GPACTRL.bit.QUALPRD0 = 0;//采样周期(n=0xFF)= 510 x Tsysclkout = 510 x 16.67ns = 8.5us、n=1、33.34ns
EDIS;

// GPIO3是 XINT1
EALLOW;
GpioIntRegs.GPIOXINT1SEL.ALL = 3;// XINT1为 GPIO3
EDIS;

//配置 XINT1
XIntertRegs.XINT1CR.bit.Polarity = 0;// 0:下降、1:上升、2:下降、3:两者
XIntertRegs.XINT1CR.bit.ENABLE = 1;//启用 XINT1

//GPIO4、XINT3
void GPIO4_config (void)

//设置 GPIO4
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO4 = 0;// GPIO4 -通用 I/O
GpioCtrlRegs.GPADIR.bit.GPIO4 = 0;// 0:输入、1:输出
GpioCtrlRegs.GPAQSEL1.bit.GPIO4 = 0;//限制条件00:同步到 SYSCLK、01:3个采样、10:6个采样、11:异步
GpioCtrlRegs.GPACTRL.bit.QUALPRD0 = 0;//采样周期(n=0xFF)= 510 x Tsysclkout = 510 x 16.67ns = 8.5us
EDIS;

// GPIO4是 XINT3
EALLOW;
GpioIntRegs.GPIOXINT3SEL.ALL = 4;// XINT3为 GPIO4
EDIS;

//配置 XINT3
XIntertRegs.XINT3CR.bit.Polarity = 0;// 0:下降、1:上升、2:下降、3:两者
XIntertRegs.XINT3CR.bit.ENABLE = 1;//启用 XINT3

// GPIO5、XINT2
void GPIO5_config (void)

//设置 GPIO5
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO5=0;// GPIO5 -通用 I/O
GpioCtrlRegs.GPADIR.bit.GPIO5 = 0;// 0:输入、1:输出
GpioCtrlRegs.GPAQSEL1.bit.GPIO5 = 0;//限制条件00:同步到 SYSCLK、01:3个采样、10:6个采样、11:异步
GpioCtrlRegs.GPACTRL.bit.QUALPRD0 = 0;//采样周期(n=0xFF)= 510 x Tsysclkout = 510 x 16.67ns = 8.5us
EDIS;

// GPIO5是 XINT2
EALLOW;
GpioIntRegs.GPIOXINT2SEL.ALL = 5;// XINT2为 GPIO5
EDIS;

//配置 XINT2
XIntertRegs.XINT2CR.bit.Polarity = 0;// 0:下降、1:上升、2:下降、3:两者
XIntertRegs.XINT2CR.bit.ENABLE = 1;//启用 XINT2

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

    Jae、

               如果 GPIO 引脚上的转换被独立识别、那么初始化代码很可能是正确的(在为 XINT 功能配置 GPIO 引脚和相关中断方面)。 可以识别的最快切换速度取决于许多因素。 例如、如果您的代码不监视 GPIO 输入进行转换、您将能够分辨更高的频率。 同样、如果 CPU 正在处理其他(更高)优先级的中断、它可能无法及时响应中断(在下一个中断到达之前)、这可能会被误认为是"丢失"中断。 在图形表上绘制所有三个中断(脉冲持续时间、中断延迟、为 ISR 提供服务所需的时间等)的时间线可能会有所帮助。 不要忘记考虑 I/p 鉴定时间。 可能还有其他更高优先级的中断对 CPU 进行了重新编号、以防止 XINT3中断被服务。 您在同一行中使用"脉冲宽度"和"持续时间"、这令人困惑。

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

    感谢您的回答。

    我的意思是脉冲宽度是高电平的宽度、持续时间是第一个脉冲和第二个脉冲之间的时间。

    GPIO 的三个输入信号来自连接 XINT2的外部板同步4MHz 时钟信号。
    因此、这些信号大致如下所示:

    XINT2 ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    XINT1 _________________ _________________________________ _________________________________ |______
    XINT3 _________________ _________________ _________________________________ _________________ _________________________________ |_|__

    在我的代码中,我放置的计数器在 ISR 中发生中断时增加。
    (I 遵循外部中断示例和 Adc 示例代码。)

    目前、当 XINT2低于2MHz 时、XINT1和 XINT3正在工作、否则、我尝试使其为4MHz、XINT3不工作。
    奇怪的是、当 XINT2为6MHz、XINT1和 XINT3正常工作、但跳过 XINT2、计数看起来像随机的。

    我仍在尝试更改 GPIO 限定条件设置、但还不幸运。

    谢谢你。

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

    当您进入/退出 ISR 时、请切换另一个 GPIO 引脚。 通过观察这些 GPIO 引脚、您可以确定导致您所看到的情况。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    当然、在 ISR 中、会切换不同的 GPIO。
    三个外部输入连接三个外部中断。
    并且、在每个 ISR 中、有计数变量来检查是否发生了中断。
    使用相同的代码、当降低连接到 XINT2的信号的频率时、一切都很好。

    Jae Yang Park
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我的意思是:当您进入 ISR 时设置 GPIO 引脚、当您退出 ISR 时清除它。 对所有3个中断执行此操作、并查看示波器上的3个 GPIO 引脚。 这将为您提供有关为何 ISR 不执行的线索。 可能是 CPU 正忙于处理其他中断。