只要我在引脚74上获得一个外部下降沿来中断、我就想在引脚57 (ePWM 5A)上触发一个100ns 脉冲。 我需要知道在 XINT1_ISR 中写入什么来触发引脚57上的100ns 脉冲。
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.
只要我在引脚74上获得一个外部下降沿来中断、我就想在引脚57 (ePWM 5A)上触发一个100ns 脉冲。 我需要知道在 XINT1_ISR 中写入什么来触发引脚57上的100ns 脉冲。
我在 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);
我将计时器配置为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。