Cypress PSoC 芯片均具有低功耗的特性,可以显著的降低工作功耗,从而延长电池的使用时间。
PSoC低功耗的关键是尽可能长的让芯片处于深睡眠状态。通常,我们可以通过管脚中断来将芯片从低功耗状态唤醒。本文介绍如何通过UART来唤醒芯片。
首先在工程中添加一个UART组件。
对UART 的配置如下图:
在Main.c中加入一些测试代码:
int main()
{
uint8 ch[10] = {0};
uint8 i = 0;
CyGlobalIntEnable;
UART_Start();
//UART_RX_WAKEUP_IRQ_StartEx(UART_Wakeup_ISR);
printf("Ready...\r\n");
CyDelay(100);
UART_Sleep(); // 保持配置,启动rx_wakeup 中断
while ((UART_SpiUartGetTxBufferSize() + UART_GET_TX_FIFO_SR_VALID) != 0u) ;
CySysPmDeepSleep();
UART_Wakeup(); // 恢复配置,禁用rx_wakeup中断
CyDelay(10);
size = UART_SpiUartGetRxBufferSize();
printf("size=%ld\r\n", size);
while (size-- != 0) {
ch[i++] = (uint8)UART_SpiUartReadRxData();
}
printf("%d, %d, %d", ch[0], ch[1], ch[2]);
printf("Quit deep sleep.\r\n");
while (1) {;}
}
关键地方是:
UART_Sleep();和UART_Wakeup();
前者将开启UART用于检测低功耗的管脚中断,这个中断在非低功耗模式下是被禁用的。只有执行了这个函数,才能够确保UART信号到来时,芯片能够从低功耗中唤醒。
而后者则禁用该中断。
这样处理以后,就可以通过UART信号将处于低功耗的芯片唤醒。
(附件:
UART_Deepsleep.cywrk.Archive03.zip
(972.46 KB)
)
|