psoc6347的MCU,在配置串口唤醒mcu的时候。
Cy_GPIO_SetDrivemode( UART_DEB_rx_0_PORT, UART_DEB_rx_0_NUM, CY_GPIO_DM_HIGHZ );
Cy_GPIO_Clr( UART_DEB_rx_0_PORT, UART_DEB_rx_0_NUM );
Cy_GPIO_SetInterruptEdge( UART_DEB_rx_0_PORT, UART_DEB_rx_0_NUM, CY_GPIO_INTR_RISING);
Cy_GPIO_SetInterruptMask( UART_DEB_rx_0_PORT, UART_DEB_rx_0_NUM, 1);
Cy_GPIO_SetVtrip( UART_DEB_rx_0_PORT, UART_DEB_rx_0_NUM, CY_GPIO_VTRIP_CMOS);
/* Configure CM4+ CPU GPIO interrupt vector for Port 5 */
Cy_SysInt_Init(&SysInt_1_cfg, Isr_Wakeup);
NVIC_ClearPendingIRQ( SysInt_1_cfg.intrSrc );
NVIC_EnableIRQ((IRQn_Type)SysInt_1_cfg.intrSrc);
Cy_SysPm_DeepSleep(CY_SYSPM_WAIT_FOR_INTERRUPT);
Cy_GPIO_SetInterruptMask( UART_DEB_rx_0_PORT, UART_DEB_rx_0_NUM, 0);
Cy_GPIO_SetInterruptEdge( UART_DEB_rx_0_PORT, UART_DEB_rx_0_NUM, CY_GPIO_INTR_DISABLE );
我在测试的时候发现如果配置成
Cy_GPIO_SetDrivemode( UART_DEB_rx_0_PORT, UART_DEB_rx_0_NUM, CY_GPIO_DM_ANALOG );
就无法唤醒MCU。 但是在对比两种配置的电流的时候。 我的板子如果配置成CY_GPIO_DM_ANALOG, 睡眠电流会比配置成CY_GPIO_DM_HIGHZ的时候要小20uA。
在串口悬空的状态下测试。 如果我配置成下降沿触发,我就把rx口配置成高电平,会比不配置电流小20uA左右。
我在配置其它外部中断唤醒mcu的时候,我发现配置成 CY_GPIO_DM_ANALOG也是可以唤醒的。 我现在的产品对于睡眠电流的要求非常高。 能否给出一些设计上的建议。我现在的系统仅仅把睡眠电流搞到70uA左右。 与规格书上的9uA还有不小的差距。 能否提供一些帮助。 尤其是这个串口唤醒部分,感谢!
已解决! 转到解答。
1: 数字高阻的管脚不能有不确定的电平,不然内部的逻辑电路一直在工作,导致功耗增大。所以如果你配置成数字高阻态的话,需要外部给芯片一个上拉电阻至高。
2:配置成模拟高阻态的管脚,不能响应外部中断是正常的,input buffer都关闭了。
3:你的芯片,把SWD 改成GPIO,另外 Power Mode改成 0.9V SMIO buck 进行测试。
4: 先disable你工程中的其它功能,直接让芯片进入low power, 看功耗是多少? 应该是12uA左右。如果这个时候还是70uA,说明你板子哪个部分可能存在漏电的情况。
1: 数字高阻的管脚不能有不确定的电平,不然内部的逻辑电路一直在工作,导致功耗增大。所以如果你配置成数字高阻态的话,需要外部给芯片一个上拉电阻至高。
2:配置成模拟高阻态的管脚,不能响应外部中断是正常的,input buffer都关闭了。
3:你的芯片,把SWD 改成GPIO,另外 Power Mode改成 0.9V SMIO buck 进行测试。
4: 先disable你工程中的其它功能,直接让芯片进入low power, 看功耗是多少? 应该是12uA左右。如果这个时候还是70uA,说明你板子哪个部分可能存在漏电的情况。