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.

[参考译文] TMS320F28377D:LPM 电流消耗并生成唤醒脉冲芯片

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1567024/tms320f28377d-lpm-current-consumption-and-making-wakeup-pulse-chip

器件型号: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)。
我在论坛上听说有一个专用芯片可以生成这个唤醒脉冲。
您能告诉我这种芯片的名称吗?


提前感谢。

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

    您好、

    GPIO 配置代码降低了 VDDIO 电流消耗、因为 I/O 焊盘在休眠模式期间保持通电状态。 通过将 GPIO 配置为高阻抗状态并禁用上拉、可以更大限度地减少通过引脚的电流泄漏。

    • 断开外设功能:  通过将 GPxMUX  GPxGMUX 寄存器设置为 0、您可以将引脚配置为通用 I/O、并断开它们与内部外设的连接。 这可以防止外设驱动引脚或汲取电流。
    • 将引脚方向设置为输入:  将引脚配置为输入 (GPxDIR.all = 0x0000) 会将它们置于高阻抗状态。 如果某个引脚配置为驱动外部负载的输出、它将在休眠期间继续从 VDDIO 拉出或灌入电流。
    • 禁用内部上拉电阻器:  通过写入 0xFFFF  GPxPUD 寄存器、您可以禁用大多数引脚上的内部上拉电阻器。 如果引脚由外部电路驱动为低电平、启用的上拉电阻将消耗电流。 禁用它们会消除该潜在的电流路径。

    进一步降低电流消耗 — 数据表指定了 750µA IDDIO 在休眠模式下的典型电流。 但是、该值是在 “所有 I/O 引脚都保持未连接状态“的特定测试条件下测得的。  电路板上 2.5mA 的电流较高、可能是由于连接到 GPIO 的外部元件导致的。

    谢谢