美文网首页
复位按键代码设计

复位按键代码设计

作者: 遇银 | 来源:发表于2020-02-19 13:19 被阅读0次

我们项目采用的是cpu和mcu的组合(mcu是裸板开发,cpu是linux系统),复位按键在mcu上,用mcu来控制整个系统的复位功能。

  1. 短按 :如果休眠状态,直接唤醒;如果非休眠,进行复位
  2. 长按6s:提供一个标志,供cpu读取(I2C),cpu自行恢复出厂设置。
/*创建100ms的轮询任务*/
if(tmr_create(SVCDEV_KEYRST_TIME, TMR_LOOP, svc_key_rst, 0) ==TMR_INVALID_HTMR)
    {
        MCU_EXC_ERROR;
        return ERROR;
    }


/*复位按键处理函数*/
LOCAL STATUS svc_key_rst(HTMR htmr, OTP_UINT32 uarg)
{
    NO_USE(htmr);
    NO_USE(uarg);
    if (SVC_KEY_RESET_IS_ON)  //判断复位按键是否按下
    {
        key_rst_count++;   //计数,一个数代表100ms
    }
    else
    {

        if (key_rst_count >=60)   //长按6s
        {
            key_rst_flag = KEY_RST_FLAG_FACTORY;
        }
        else if (key_rst_count >=1)   //短按
        {
            key_rst_flag = KEY_RST_FLAG_REBOOT;
        }   
        else
        {
            key_rst_flag = 0;
        }
        
        key_rst_count=0;
    }
       /根据硬件设计来修改/
    if(key_rst_flag == KEY_RST_FLAG_REBOOT)  //长按6s操作
    {
        if(SVC_WAKEUP_OUT_IS_ON)  //如果非休眠状态,复位
        {
            #if 1   //后续由cpu命令进行复位
            SVC_CPU_RST_SET;       //复位cpu
            tmr_delay_ms(130);    //2020.1.14
            //SVC_CPU_RST_CLR;

            SVC_SOFT_RESET_CLR;    //复位706
            tmr_delay_ms(20);
            SVC_SOFT_RESET_SET;
            #endif
            I2CWrBuffer[11] = 1 ;
        }
        else //如果休眠,直接唤醒
        {
            SVC_WAKEUP_IN_SET;     //wake up  cpu
        }
        key_rst_flag = KEY_RST_FLAG_ACTIVE;
    }
    if(key_rst_flag == KEY_RST_FLAG_FACTORY)     //恢复出厂设置
    {
        I2CWrBuffer[11] = 2 ;  //修改标志符,供cpu读取
    }
    return OK;
}

相关文章

网友评论

      本文标题:复位按键代码设计

      本文链接:https://www.haomeiwen.com/subject/xqhafhtx.html