#include "../app/task_appstatus.h" #include "../bsp/bsp_led.h" #include "../bsp/bsp_key.h" #include "../bsp/bsp_WT2605B.h" #include "../app/app_config.h" #include "../bsp/bsp_config.h" #include "../msp/uart0.h" #include "../bsp/bsp_led.h" #include "../app/task_game.h" #include "../app/task_Adc.h" #include "../app/task_w600.h" #include "../bsp/bsp_wifi.h" // // 外部中断初始化P3.2 // void INT0_Init(void) // { // D_stdIO_P3(BITN2); // IT0 = 1; // 下降沿触发 // EX0 = 1; // 使能INT0 // } // // 进入掉电模式函数 // void Enter_PowerDown(void) // { // // 配置INT0到P0.2引脚 // AUXR1 |= 0x03; // INT0_S[1:0]=11 (选择P0.2) // // 设置下降沿触发 // IT0 = 1; // TCON.0=1 (下降沿触发) // EX0 = 1; // 使能INT0中断 // // 禁用其他唤醒源 // INTEN0 = 0x01; // 仅使能EX0,禁用其他外部中断 // INTEN1 = 0x00; // 禁用扩展外部中断 // WAKE_CLKO = 0x04; // 仅使能INT0唤醒 // // 清除中断标志 // IE0 = 0; // // 进入掉电模式 // PCON |= 0x02; // 执行PD指令 // _nop_(); // 必要的延时 // _nop_(); // _nop_(); // _nop_(); // } // // 掉电模式函数 void Enter_PowerDown(void) { // 1. 配置P0.2为高阻输入模式(唤醒引脚) P0M1 |= (1 << 2); // 设置P0.2为高阻输入 P0M0 &= ~(1 << 2); // 2.端口中断掉电唤醒使能控制位 // P0WKUE = 0x00; // 使能P0.2唤醒功能 // P1WKUE = 0x00; // P2WKUE = 0x00; // P3WKUE = 0x00; // P4WKUE = 0x00; // P5WKUE = 0x00; // P6WKUE = 0x00; // P7WKUE = 0x00; // P0IE = 0x00; // P1IE = 0x00; // P2IE = 0x00; // P3IE = 0x00; // P4IE = 0x00; // P5IE = 0x00; // P6IE = 0x00; // P7IE = 0x00; P0INTE = 0x00; P1INTE = 0x00; P2INTE = 0x00; P3INTE = 0x00; P4INTE = 0x00; P5INTE = 0x00; P6INTE = 0x00; P7INTE = 0x00; // 3. 设置唤醒触发条件(下降沿触发) P0IM0 = 0; P0IM1 = 0; // 4. 清除所有唤醒标志 P0INTF = 0x00; P1INTF = 0x00; P2INTF = 0x00; P3INTF = 0x00; P4INTF = 0x00; P5INTF = 0x00; P6INTF = 0x00; P7INTF = 0x00; // // 5. 禁用其他唤醒源 // WAKE_CLKO = 0x00; // 禁用所有中断唤醒 // WKTCLK = 0x00; // 禁用内部定时器唤醒 // WKCON = 0x00; // 清除唤醒配置 // 5. 进入掉电模式 PCON |= 0x02; // 执行PD指令 _nop_(); _nop_(); // _nop_(); // _nop_(); } S_TASK_APPSTATUS _s_task_appstatus; void L3_task_AppStatus_init(void) { L1_task_init(&_s_task_appstatus.task); _s_task_appstatus.status = R.app_status; L3_task_s_go(_s_task_appstatus,D_task_init); } #define D_task_DETECTCHANGE 0x50 #define D_task_HANDLECHANGE 0x51 #define D_task_WIFICONFIG_STATUS01 0x52 #define D_task_WIFICONFIG_STATUS02 0x53 #define D_task_WIFICONN_STATUS01 0x54 #define D_task_WIFICONN_STATUS02 0x55 void L3_task_appstatus_handler(S_TASK_APPSTATUS *s) { TTSS_Task_init() L2_task_go(D_task_DETECTCHANGE); TTSS_Task_step(D_task_DETECTCHANGE) if (R.app_status != POW_OFF) { //低功耗模式判断 PowerOff_judge(); } if(s->status != R.app_status) { s->status = R.app_status; L2_task_go_Tdelay(D_task_HANDLECHANGE,D_Tdelay_300ms); } else if (s->status == WIFI_CONFIG) { L2_task_go_Tdelay(D_task_WIFICONFIG_STATUS01,0); } else if (s->status == WIFI_CONNECTED) { L2_task_go_Tdelay(D_task_WIFICONN_STATUS01,0); } else if (s->status == WIFI_CONFIG_Phone) { L2_task_go_Tdelay(D_task_WIFICONFIG_STATUS01,0); } TTSS_Task_step(D_task_HANDLECHANGE) if(s->status == POW_OFF) { // LED灯灭 L2_LED_OFF(); // 播放关机语音 L2_WT2605B_Broadcast(&audio_powerdown); // OID、WIFI关闭 L2_OID_WIFI_Close(); Lc_delay_ms(5000); // 语音模块关闭 L2_WT2605B_OFF(); // MCU进入掉电模式 Enter_PowerDown(); // 唤醒后绿灯亮起 L2_GREEN_LED_ON(); } else if (s->status == POW_ON_WAIT) { // LED红灯常亮,LED绿灯灭 L2_RED_LED_ON(); // OID、WIFI开启 L2_OID_WIFI_Open(); // 语音模块开启 L2_WT2605B_ON(); Lc_delay_ms(4000); // 通电后播放开机语音 L2_WT2605B_Broadcast(&audio_poweron); //wifi任务初始化 L3_task_W600_flow_init(W600_ST); // Adc任务初始化 L3_task_Adc_init(); // game任务初始化 L3_task_game_init(); s->status = POW_ON; R.app_status = POW_ON; } else if (s->status == WIFI_CONFIG) { // 灯灭 L2_LED_OFF(); // 音频播放 L2_WT2605B_Broadcast(&audio_config_mode); // 配网任务初始化,进入配网 // L3_gm35_send_str("+++"); L3_task_W600_flow_init(W600_SC); } else if (s->status == WIFI_CONFIG_Phone) { L2_WT2605B_Broadcast(&audio_config_phone); } else if (s->status == WIFI_CONFIG_COMPLETE) { L2_WT2605B_Broadcast(&audio_config_complete); // 配网成功,进入STAION模式 L3_task_W600_flow_init(W600_ST); } else if (s->status == WIFI_CONNECTED) { // 灯灭 L2_LED_OFF(); // 音频播放 L2_WT2605B_Broadcast(&audio_wifi_connected); } else if (s->status == TCP_CONNECTED) { // LED红灯灭,LED绿灯常亮 L2_GREEN_LED_ON(); // 音频播放 L2_WT2605B_Broadcast(&audio_TCP_connected); } L2_task_go_Tdelay(D_task_DETECTCHANGE,D_Tdelay_300ms); TTSS_Task_step(D_task_WIFICONFIG_STATUS01) L2_RED_LED_ON(); L2_task_go_Tdelay(D_task_WIFICONFIG_STATUS02,D_Tdelay_500ms); TTSS_Task_step(D_task_WIFICONFIG_STATUS02) L2_LED_OFF(); L2_task_go_Tdelay(D_task_DETECTCHANGE,D_Tdelay_500ms); TTSS_Task_step(D_task_WIFICONN_STATUS01) L2_GREEN_LED_ON(); L2_task_go_Tdelay(D_task_WIFICONN_STATUS02,D_Tdelay_500ms); TTSS_Task_step(D_task_WIFICONN_STATUS02) L2_LED_OFF(); L2_task_go_Tdelay(D_task_DETECTCHANGE,D_Tdelay_500ms); TTSS_Task_end(); } // 无操作进入低功耗模式 void PowerOff_judge() { U32 Nowtime = D_sys_now; if( Nowtime - R.Operate_time > Noperate_Time_Seconds) // 180000/JIFFIES = 180s { // R.ScrTouch_flag = 0; R.app_status = POW_OFF; L0_uart0_sendstr("R.app_status = POW_OFF!!!"); L0_uart0_0d0a(); } } // // 外部中断0服务函数 // void INT0_Isr() interrupt 0 // { // // 无需任何操作,中断仅用于唤醒MCU // // 唤醒后程序从Enter_PowerDown()后的指令继续执行 // } // // 中断服务函数 // void INT0_ISR() interrupt 0 // { // IE0 = 0; // 清除INT0中断标志 // // 唤醒后绿灯亮起 // L2_GREEN_LED_ON(); // }