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.

[参考译文] TMS320F28379D:发送一个100ns 脉冲用于一个外部中断

Guru**** 2589280 points


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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1124393/tms320f28379d-send-a-100ns-pulse-for-an-external-interrupt

器件型号:TMS320F28379D

只要我在引脚74上获得一个外部下降沿来中断、我就想在引脚57 (ePWM 5A)上触发一个100ns 脉冲。 我需要知道在 XINT1_ISR 中写入什么来触发引脚57上的100ns 脉冲。

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

    尊敬的 Anuj:

    您是否只需要100ns 脉冲一次? 如果是、我认为不需要 ePWM 功能。 我建议将引脚57与 GPIO 功能保持一致。 您可以将计时器设置为100ns、并在 XINT1_ISR 内启动计时器/将 GPIO 设置为高电平。 然后、在定时器的 ISR 内(100ns 之后)、将 GPIO 设定 为低电平并停止/重新加载定时器。  

    此致、

    Marlyn

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

    使用这种方法时、似乎最好的方法是1us 的脉冲、但我需要更短的脉冲。 有什么建议吗?

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

    我在 ISR 中拥有的一切就是:

    _interrupt void XINT1_ISR (void)

    //
    //确认中断组
    //
    INTERRUPT_clearACKGROUP (INTERRUPT_ACK_Group1);

    CPUTimer_startTimer (CPUTIMER0_BASE);
    GPIO_setPortPins (GPIO_PORT_A、GPIO_GPADIR_GPIO8);

    //
    // cpu_timer0_isr -具有中断计数器的 CPU Timer0 ISR
    //
    _interrupt void CPU_timer0_ISR (void)

    GPIO_clearPortPins (GPIO_PORT_A、GPIO_GPADIR_GPIO8);
    CPUTimer_stopTimer (CPUTIME0_BASE);
    //
    //确认此中断以从组1接收更多中断
    //
    PieCtrlRegs.PIEACX.ALL = PIEACK_Group1;

    尽管如此、在信号的下降沿和脉冲之间仍然存在1us 的延迟、而不是100ns 的脉冲大约为1us。

    GPIO_setDirectionMode (23、GPIO_DIR_MODE_IN);
    // XINT1同步到 SYSCLKOUT 只
    GPIO_setQualificationMode (23、GPIO_QUAL_SYNC);
    GPIO_setInterruptPin (23、GPIO_INT_XINT1);
    GPIO_setInterruptType (GPIO_INT_XINT1、GPIO_INT_TY_FALLING_EDGE);
    GPIO_enableInterrupt (GPIO_INT_XINT1);

    GPIO_setDirectionMode (8、GPIO_DIR_MODE_OUT);

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

    尊敬的 Anuj:

    您能否提供您如何配置计时器以及您的时钟设置是什么(源频率是多少)?  

    此致、

    Marlyn

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

    我将计时器配置为200MHz 源频率、但现在我只执行以下操作:

    //
    // XINT1_ISR - XINT 1 ISR
    //
    _interrupt void XINT1_ISR (void)

    //
    //确认中断组
    //

    GPIO_setPortPins (GPIO_PORT_A、GPIO_GPADIR_GPIO8);
    GPIO_clearPortPins (GPIO_PORT_A、GPIO_GPADIR_GPIO8);

    INTERRUPT_clearACKGROUP (INTERRUPT_ACK_Group1);

    即使在后续行中设置和清除 GPIO 引脚也能消除启动 CPU 计时器的开销、脉冲宽度也是~200ns、因此现在我想这是 f28379s 控制卡可以实现的最佳效果。

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

    Anuj、

    我建议查看此线程、您可以做的另一种选择是在"设置"和"清除"指令之间插入适当的延迟(请注意、您需要考虑清除和设置 GPIO 所需的时间、如以下线程所述: https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/594791/ccs-tms320f28377s-delay-function-for-tms320f28377s 

    此致、

    Marlyn

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

    我在 SET 和 CLEAR 指令之间使用相同的命令  asm (" RPT #20 || NOP")、对于200MHz 时钟、20个周期应该为我提供100ns、但它大约提供500ns、所以我将其删除。 我愿意接受能够快速完成任务的建议。 此外、如果您可以向我推荐一些可缩短输入下降沿与 GPIO 上升之间的时间滞后的器件。 我在 CPU2中移动了代码的这一部分、该部分只是处理 XINT1_ISR、延迟仍然为400ns。

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

    Anuj、您好!

    您的程序是在 RAM 上运行还是在闪存上运行? 闪存的运行速度往往较慢、 否则不会出现问题。

    Omer Amir

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

    我从闪存运行、我将把它更改为 RAM。

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

    尊敬的 Anuj:

    如果你仍然遇到速度问题、 我唯一可以建议的就是 在汇编代码中创建脉冲、因为 driverlib 函数本身会由于 代码的编译方式而有一些延迟(有比看起来更多的指令)。

    此致、

    Omer Amir

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

    我不太了解汇编语言编程、因此我将坚持使用我拥有的内容、尽管400ns 延迟并不理想、但我认为它可能足以满足我的应用需求。 感谢您的意见。