请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28377D工具/软件:
您好:
1.
我进入休眠模式、但电流消耗并没有按预期减少、因此添加了以下代码。
当我禁用了 TRM 中标记为断电的寄存器(代码部分 2 和 3)时、几乎没有区别。
但是、当我配置 GPIO 设置(第 1 节)时、睡眠期间的 3.3V VDDIO 消耗从 4mA 下降到 2.5mA。
您能解释一下在这种情况下 GPIO 配置产生的影响吗?
此外、根据手册、进入休眠模式通常会在室温下消耗大约 0.75mA。
是否有任何其他代码示例可以进一步降低电流消耗?
// 1. GPIO Set
EALLOW;
GpioCtrlRegs.GPAPUD.all = 0xFFFF; // 1 = Disable pull-up (all pull-ups off)
GpioCtrlRegs.GPBPUD.all = (uint16)(0xFFFFU & (uint16)~(1U << 9)); // Keep pull-up enabled (0) only for GPB9
GpioCtrlRegs.GPCPUD.all = 0xFFFF;
GpioCtrlRegs.GPDPUD.all = 0xFFFF;
GpioCtrlRegs.GPEPUD.all = 0xFFFF;
GpioCtrlRegs.GPFPUD.all = 0xFFFF;
// Release output drive: configure all pins as input (reconfigure only the required pins)
GpioCtrlRegs.GPADIR.all = 0x0000;
GpioCtrlRegs.GPBDIR.all = 0x0000;
GpioCtrlRegs.GPCDIR.all = 0x0000;
GpioCtrlRegs.GPDDIR.all = 0x0000;
GpioCtrlRegs.GPEDIR.all = 0x0000;
GpioCtrlRegs.GPFDIR.all = 0x0000;
// Set all pin functions to GPIO (disconnect peripheral functions)
GpioCtrlRegs.GPAGMUX1.all = 0; GpioCtrlRegs.GPAMUX1.all = 0;
GpioCtrlRegs.GPAGMUX2.all = 0; GpioCtrlRegs.GPAMUX2.all = 0;
GpioCtrlRegs.GPBGMUX1.all = 0; GpioCtrlRegs.GPBMUX1.all = 0;
GpioCtrlRegs.GPBGMUX2.all = 0; GpioCtrlRegs.GPBMUX2.all = 0;
GpioCtrlRegs.GPCGMUX1.all = 0; GpioCtrlRegs.GPCMUX1.all = 0;
GpioCtrlRegs.GPCGMUX2.all = 0; GpioCtrlRegs.GPCMUX2.all = 0;
GpioCtrlRegs.GPDGMUX1.all = 0; GpioCtrlRegs.GPDMUX1.all = 0;
GpioCtrlRegs.GPDGMUX2.all = 0; GpioCtrlRegs.GPDMUX2.all = 0;
GpioCtrlRegs.GPEGMUX1.all = 0; GpioCtrlRegs.GPEMUX1.all = 0;
GpioCtrlRegs.GPEGMUX2.all = 0; GpioCtrlRegs.GPEMUX2.all = 0;
GpioCtrlRegs.GPFGMUX1.all = 0; GpioCtrlRegs.GPFMUX1.all = 0;
GpioCtrlRegs.GPBQSEL1.bit.GPIO41 = 3; // 11b = Asynchronous
// LED OFF
// GPIO 50 - LED_1, GPIO 51 - LED_2, GPIO 52 - LED_3
GpioDataRegs.GPBCLEAR.bit.GPIO50 = 1U;
GpioCtrlRegs.GPBPUD.bit.GPIO50 = 0U;
GpioCtrlRegs.GPBDIR.bit.GPIO50 = 1U;
GpioDataRegs.GPBCLEAR.bit.GPIO51 = 1U;
GpioCtrlRegs.GPBPUD.bit.GPIO51 = 0U;
GpioCtrlRegs.GPBDIR.bit.GPIO51 = 1U;
GpioDataRegs.GPBCLEAR.bit.GPIO52 = 1U;
GpioCtrlRegs.GPBPUD.bit.GPIO52 = 0U;
GpioCtrlRegs.GPBDIR.bit.GPIO52 = 1U;
// CAN SET OFF
SetCANStatus(A_SLEEP);
GpioCtrlRegs.GPBPUD.bit.GPIO32 = 0U;
GpioCtrlRegs.GPBDIR.bit.GPIO32 = 1U;
SetCANStatus(B_SLEEP);
GpioCtrlRegs.GPBPUD.bit.GPIO40 = 0U;
GpioCtrlRegs.GPBDIR.bit.GPIO40 = 1U;
EDIS;
// 2. ADC, DAC, COMP comparator OFF
EALLOW;
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 0; // ADC disable
AdcbRegs.ADCCTL1.bit.ADCPWDNZ = 0;
AdccRegs.ADCCTL1.bit.ADCPWDNZ = 0;
AdcdRegs.ADCCTL1.bit.ADCPWDNZ = 0;
Cmpss1Regs.COMPCTL.bit.COMPDACE = 0; // Comparator/DAC disable
Cmpss2Regs.COMPCTL.bit.COMPDACE = 0;
Cmpss3Regs.COMPCTL.bit.COMPDACE = 0;
Cmpss4Regs.COMPCTL.bit.COMPDACE = 0;
Cmpss5Regs.COMPCTL.bit.COMPDACE = 0;
Cmpss6Regs.COMPCTL.bit.COMPDACE = 0;
Cmpss7Regs.COMPCTL.bit.COMPDACE = 0;
Cmpss8Regs.COMPCTL.bit.COMPDACE = 0;
DacaRegs.DACOUTEN.bit.DACOUTEN = 0; // DAC output disable
DacbRegs.DACOUTEN.bit.DACOUTEN = 0;
DaccRegs.DACOUTEN.bit.DACOUTEN = 0;
EDIS;
// 3. M0/M1 OFF
EALLOW;
CpuSysRegs.LPMCR.bit.M0M1MODE = 1U; // M0/M1 off in HIB
EDIS;
if (GPIO41_StableHigh_Poll(GUARD_POST) == 0U) {
WatchDogReset();
}
DINT;
IFR = 0x0000U;
PieCtrlRegs.PIEACK.all = 0xFFFFU;
HIB(); // TI example function
2.
对于从 LPM 唤醒、我配置了硬件、以便加电时会同时在引脚 41 上生成脉冲 (H→L→H)。
我在论坛上听说有一个专用芯片可以生成这个唤醒脉冲。
您能告诉我这种芯片的名称吗?
提前感谢。