TI中文支持网
TI专业的中文技术问题搜集分享网站

28379D Ecap中断触发延时 捕获外部脉冲上升沿 延时太长

DSP28379D在调用DSP内部Ecap 脉冲捕获功能时,如下图所示CH4绿色通道是我DSP外部的GPIO口给到Ecap模块进行捕获的方波,CH3是DSP捕获到CH4脉冲上升沿触发Ecap中断程序后实现GPIO口的翻转来测试Ecap的延时时间,为什么会有260ns的延时时间啊?

目前系统时钟配置为200MHz, datasheet上关于GPIO的延时采5个系统时钟周期以内,260ns太长了不正常啊,我现在要用到1MHz以上的开关频率,这个延时太大了无法接受啊

 

Susan Yang:“CH3是DSP捕获到CH4脉冲上升沿触发Ecap中断程序后实现GPIO口的翻转来测试Ecap的延时时间”

中断的触发,中断程序的执行以及GPIO反转都是需要时间的。

请问能否给出详细代码?

DSP28379D在调用DSP内部Ecap 脉冲捕获功能时,如下图所示CH4绿色通道是我DSP外部的GPIO口给到Ecap模块进行捕获的方波,CH3是DSP捕获到CH4脉冲上升沿触发Ecap中断程序后实现GPIO口的翻转来测试Ecap的延时时间,为什么会有260ns的延时时间啊?

目前系统时钟配置为200MHz, datasheet上关于GPIO的延时采5个系统时钟周期以内,260ns太长了不正常啊,我现在要用到1MHz以上的开关频率,这个延时太大了无法接受啊

 

user4669408:

回复 Susan Yang:

void Ecap_Init(void){

EALLOW;InputXbarRegs.INPUT7SELECT = 21; // Set eCAP1 source to GPIO-pinEDIS;

GPIO_SetupPinOptions(21, GPIO_INPUT, GPIO_ASYNC);

ECap1Regs.ECEINT.all = 0x0000; // Disable all capture __interruptsECap1Regs.ECCLR.all = 0xFFFF; // Clear all CAP __interrupt flagsECap1Regs.ECCTL1.bit.CAPLDEN = 0; // Disable CAP1-CAP4 register loadsECap1Regs.ECCTL2.bit.TSCTRSTOP = 0; // Make sure the counter is stopped

// Configure peripheral registersECap1Regs.ECCTL2.bit.CONT_ONESHT = 1; // One-shotECap1Regs.ECCTL2.bit.STOP_WRAP = 0;//3; // Stop at 4 eventsECap1Regs.ECCTL1.bit.CAP1POL = 0; // Falling edgeECap1Regs.ECCTL1.bit.CAP2POL = 0; // Rising edgeECap1Regs.ECCTL1.bit.CAP3POL = 0; // Falling edgeECap1Regs.ECCTL1.bit.CAP4POL = 0; // Rising edgeECap1Regs.ECCTL1.bit.CTRRST1 = 1; // Difference operationECap1Regs.ECCTL1.bit.CTRRST2 = 1; // Difference operationECap1Regs.ECCTL1.bit.CTRRST3 = 1; // Difference operationECap1Regs.ECCTL1.bit.CTRRST4 = 1; // Difference operationECap1Regs.ECCTL2.bit.SYNCI_EN = 0; // Enable sync inECap1Regs.ECCTL2.bit.SYNCO_SEL = 0; // Pass throughECap1Regs.ECCTL1.bit.CAPLDEN = 1; // Enable capture units

ECap1Regs.ECCTL2.bit.TSCTRSTOP = 1; // Start CounterECap1Regs.ECCTL2.bit.REARM = 1; // arm one-shotECap1Regs.ECCTL1.bit.CAPLDEN = 1; // Enable CAP1-CAP4 register loadsECap1Regs.ECEINT.bit.CEVT1 = 1; // 1 events = __interrupt// ECap1Regs.ECEINT.bit.CEVT4 = 1; // 4 events = __interrupt

}/* Ecap_Init() */

interrupt void ecap1_isr(void){

EALLOW;GpioDataRegs.GPASET.bit.GPIO12 = 1;EDIS;ECap1Regs.ECCLR.bit.CEVT1 = 1;

ECap1Regs.ECCLR.bit.INT = 1;ECap1Regs.ECCTL2.bit.REARM = 1;

// Acknowledge this __interrupt to receive more __interrupts from group 4PieCtrlRegs.PIEACK.all = PIEACK_GROUP4;

GpioDataRegs.GPACLEAR.bit.GPIO12 = 1;

}

赞(0)
未经允许不得转载:TI中文支持网 » 28379D Ecap中断触发延时 捕获外部脉冲上升沿 延时太长
分享到: 更多 (0)