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

复位按键代码设计

作者: 遇银 | 来源:发表于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