各位专家:
我在我的应用中使用 LPM4.5,并且能够获得正确的 LPM4.5唤醒。
根据 TI 手册、在从 LPM4.5唤醒后、I/O 的状态被锁定并保持不变、直到应用程序清除 PM5CTL0寄存器中的 LOCKLPM5位。 但问题是、当我通过 PM5CTL0和=~LOCKLPM5清除该位时; 我在示波器上看到我的 GPIO 引脚之一出现毛刺脉冲。 下图对这种行为进行了批评。
您能解释一下这种方法背后的原因以及避免这种情况的解决方案吗?
提前感谢。
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.
各位专家:
我在我的应用中使用 LPM4.5,并且能够获得正确的 LPM4.5唤醒。
根据 TI 手册、在从 LPM4.5唤醒后、I/O 的状态被锁定并保持不变、直到应用程序清除 PM5CTL0寄存器中的 LOCKLPM5位。 但问题是、当我通过 PM5CTL0和=~LOCKLPM5清除该位时; 我在示波器上看到我的 GPIO 引脚之一出现毛刺脉冲。 下图对这种行为进行了批评。
您能解释一下这种方法背后的原因以及避免这种情况的解决方案吗?
提前感谢。
您好!
1)显示此行为的 GPIO 引脚是 P9.7、配置为输出引脚、如下所示
#define ASIC_keepalive_port &P9IN
#define ASIC_keepalive_bit BIT7
#define PXOUT_OFFSET 0x02
#define PXDIR_OFFSET 0x04
*((unsigned char *) ASIC_keepalive_port + PXDIR_OFFSET) |= ASIC_keepalive_bit;
*((unsigned char *) ASIC_keepalive_port + PXOUT_offset) |= ASIC_keepalive_bit;
2) 2) 以下例程 用于进入 LPM4.5模式:
/*将 P1.6配置为中断*/
P1IES |= BIT6; //P1.6高/低边沿
P1IFG = RESET_TO_ZERO; //清除所有 P1中断标志
P1IE |= BIT6; // P1.6中断被启用
STOP_WDT //在进入 LPM//之前禁用看门狗
PM5CTL0 &=~LOCKLPM5; //禁用 GPIO 上电默认高阻抗模式以激活 先前配置的端口设置
PMMCTL0_H = PMMPW_H; //打开 PMM 寄存器进行写入
PMMCTL0_L |= PMMREGOFF;
PMMCTL0_L &=~(SVSHE); //禁用高侧 SVS
PMMCTL0_H = RESET_TO_ZERO;//锁定 PMM 寄存器
/*输入 LPM4请注意、此操作不会返回。 LPM 将通过复位事件退出,从而导致重新启动*/
_bis_SR_register (LPM4_BITS);
而(1)// MCU 将在这里等待、直到在 P1.6上接收到中断
{
}
LPM4.5唤醒后:
PM5CTL0 &=~LOCKLPM5; //解锁 GPIO
只要使用上述线路解锁 GPIO、我就能看到这种干扰。
3)请参阅引脚 P9.7的下图。
[报价用户="Himanshu Khanna "]清除 LOCKLPM5位后、我将 P9.7配置为高电平。[/quot]
这可能是导致此问题的原因。 当您退出 LPM4.5并完成复位时、数字 IO 寄存器内容被复位为默认值(在大多数情况下为高阻态输入)。 这是因为寄存器电源域关闭时、寄存器内容在 LPM4.5期间丢失。 一旦在从 LPM4.5唤醒后清除复位、您需要在 清零 LOCKLPM5位之前将 GPIO 寄存器重新配置为预期的行为。 否则、当您解锁寄存器时、该引脚将获取其输入模式(Hi-Z)的复位值、直到您稍后将其配置为高电平。 您是否能够进行此更改并再测试一次引脚的行为?
此致、
Walter