打印

通过UART唤醒PSoC

[复制链接]
1293|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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)
沙发
Larkinn| | 2015-8-24 22:39 | 只看该作者
//UART_RX_WAKEUP_IRQ_StartEx(UART_Wakeup_ISR);
为什么注释掉呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

118

帖子

9

粉丝