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.

[参考译文] CCS/TMS320F2.8379万D:配置GPIOXX通用输出

Guru**** 2554950 points
Other Parts Discussed in Thread: C2000WARE

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/632678/ccs-tms320f28379d-configure-gpioxx-general-purpose-output

部件号:TMS320F2.8379万D
主题中讨论的其他部件:C2000WARE

工具/软件:Code Composer Studio

你好

我想通过使用一些I/O引脚来测量ISR环路的精确时间

因此,我配置GPIO52就好像它是否正确。

EALLOW;
GpioCtrlRegs.GPAPUD.bit.GPIO1 = 1;//在GPIO2上禁用上拉(EPWM1A)
GpioCtrlRegs.GPAPUD.bit.GPIO2 = 1;//在GPIO2上禁用上拉(EPWM2A)
GpioCtrlRegs.GPAMUX1.bit.GPIO1 = 1;//将GPIO2配置为EPWM1A
GpioCtrlRegs.GPAMUX1.bit.GPIO2 = 1;//将GPIO2配置为EPWM2A
gpioCtrlRegs.gpdata.bit.GPIO52 = 1;
EDIS;

......

...

__interrupt void epwm1_isr (void)

//*在这里,我的代码将一个新的sin值分配给比较reg,但sin波PWM //逻辑的负端反相。*/

a1=sin (pi*pi*i1 0.02);
GpioDataRegs.GPBDAT.bit.GPIO52 = 0;
如果(A1>=0)

EPwm1Regs.AQCTLA.bit.CAU = AQ_CLEAR;//在事件A上设置PWM1A,UP
EPwm1Regs.AQCTLA.bit.CAD =AQ_set;//清除事件B上的PWM1A,关闭
EPwm1Regs.CMPA.bit.CMPA =B1[i1];
}
否则

EPwm1Regs.AQCTLA.bit.CAU =AQ_set;//在事件A上设置PWM1A,向上
EPwm1Regs.AQCTLA.bit.CAD = AQ_Clear;//清除事件B上的PWM1A,关闭
EPwm1Regs.CMPA.bit.CMPA =B1[i1];
}
I1++;
如果(i1==401)

I1=0;
}
EPwm1Regs.ETCLR.bit.INT = 1;

PieCtrlRegs.PIEACG.ALL = PIEACK_Group3;
}

__interrupt void epwm2_isr (void)

//*在这里,我的代码将一个新的sin值分配给比较reg,但sin波PWM //逻辑的负端反相。*/

a2=sin (pi*pi*i2 0.02);
如果(A2>=0)

EPwm2Regs.AQCTLA.bit.CAU = AQ_Clear;//在事件A上设置PWM2A
EPwm2Regs.AQCTLA.bit.CAD =AQ_set;//清除事件B上的PWM2A,关闭
EPwm2Regs.CMPA.bit.CMPA =B2[i2];
}
否则

EPwm2Regs.AQCTLA.bit.CAU =AQ_set;//在事件A上设置PWM2A,向上
EPwm2Regs.AQCTLA.bit.CAD = AQ_Clear;//清除事件B上的PWM2A,关闭
EPwm2Regs.CMPA.bit.CMPA =B2[i2];
}
I2 ++;
如果(i2=401)

I2=0;
}
EPwm2Regs.ETCLR.bit.INT = 1;

PieCtrlRegs.PIEACG.ALL = PIEACK_Group3;
GpioDataRegs.GPBDAT.bit.GPIO52 = 1;
}

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

    您好,

    两 个观察结果-

    gpioCtrlRegs.gpdata.bit.gPIO52 = 1;

    我想你想改变这个引脚的方向作为输出,为此你需要写入到.DIR寄存器中。

    gpioCtrlRegs.GPBDIR.bit.GPIO52 = 1;

    在ISR内,要更改pin的状态,我们建议使用SET (使pin上的值为'1')和CLEAR (使pin上的值为'0')寄存器,而不是DAT寄存器。 DAT寄存器应用于读取pin的状态。

    此致,

    Vivek Singh

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Nageshwar,
    除了代码的第一个突出显示部分之外,所有内容都是完美的:

    gpioCtrlRegs.gpdata.bit.GPIO52 = 1;

    而不是将GPIO方向设置为输出。 因此,您的代码将更改为:

    gpioCtrlRegs.GPBDIR.bit.GPIO52 = 1;

    在您设置引脚的输出方向之前,对数据寄存器所做的更改仅锁定在LATCH中。 它们不会反映在销钉上。
    有关设置和使用GPIO引脚的详细信息,请参阅C2000Ware_1_00_xx_00\device_support\f2837xd\examples\CPU1 \gPIO_setup\cpu01\GpioSetup.c2837 \gPIO_setup\cpu01\GpioSetup.c

    您可以在以下网址下载最新版本的C2000Ware: www.ti.com/.../c2000ware
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢你  

    我明白了...