Browse Source

feature: 1.使用io口的中断唤醒功能,调试未通过:无法控制其他io口关闭唤醒,使得音量键也能唤醒

v4-temp-lowper-io
Zhangwen 2 months ago
parent
commit
25dd366f9c
  1. 15
      source/app/main.c
  2. 114
      source/app/task_appstatus.c
  3. 8
      source/app/task_appstatus.h
  4. 3
      source/bsp/bsp_key.h

15
source/app/main.c

@ -15,9 +15,9 @@ void L0_MCU_init(void)
L1_tick_init();
//开启全局中断
EA = 1;
// 外部中断初始化
INT0_Init();
// INT0_Init();
// 定时器初始化
L0_timer0_Init();
//G初始化
@ -78,8 +78,15 @@ void main(void)
//任务初始化
L0_TASK_init();
// // // 禁用不需要的唤醒源
// WAKE_CLKO = 0x00; // 关闭所有特殊唤醒源
// 2.端口中断掉电唤醒使能控制位
P0WKUE = 0x04; // 使能P0.2唤醒功能
P1WKUE = 0x00;
P2WKUE = 0x00;
P3WKUE = 0x00;
P4WKUE = 0x00;
P5WKUE = 0x00;
P6WKUE = 0x00;
P7WKUE = 0x00;
// // 获取mcu id
// L0_id_get_rom(G.mcu_id);

114
source/app/task_appstatus.c

@ -11,30 +11,85 @@
#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
}
// // 外部中断初始化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)
{
// 禁用所有唤醒源
P0IE = 0x00;
P1IE = 0x00;
P2IE = 0x00;
P3IE = 0x00;
P4IE = 0x00;
P5IE = 0x00;
// 只使能P3.2唤醒
// P3IE = 0x04;
PCON |= 0x02; // 执行PD指令
// 1. 配置P0.2为高阻输入模式(唤醒引脚)
P0M1 |= (1 << 2); // 设置P0.2为高阻输入
P0M0 &= ~(1 << 2);
// 2.端口中断掉电唤醒使能控制位
P0WKUE = 0xFF; // 使能P0.2唤醒功能
P1WKUE = 0x00;
P2WKUE = 0x00;
P3WKUE = 0x00;
P4WKUE = 0x00;
P5WKUE = 0x00;
P6WKUE = 0x00;
P7WKUE = 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_();
}
@ -194,9 +249,18 @@ void PowerOff_judge()
}
}
// 外部中断0服务函数
void INT0_Isr() interrupt 0
{
// 无需任何操作,中断仅用于唤醒MCU
// 唤醒后程序从Enter_PowerDown()后的指令继续执行
}
// // 外部中断0服务函数
// void INT0_Isr() interrupt 0
// {
// // 无需任何操作,中断仅用于唤醒MCU
// // 唤醒后程序从Enter_PowerDown()后的指令继续执行
// }
// // 中断服务函数
// void INT0_ISR() interrupt 0
// {
// IE0 = 0; // 清除INT0中断标志
// // 唤醒后绿灯亮起
// L2_GREEN_LED_ON();
// }

8
source/app/task_appstatus.h

@ -6,6 +6,14 @@
#include "app_config.h"
sfr AUXR1 = 0xA2;
sfr WKCON = 0xAA;
sfr INTEN0 = 0xA2;
sfr INTEN1 = 0x8F;
sfr WAKE_CLKO = 0x8F;
sfr WKTCLK = 0x8F;
#define Noperate_Time_MSeconds 180000
#define Noperate_Time_Seconds Noperate_Time_MSeconds/JIFFIES // 180000/JIFFIES = 180s

3
source/bsp/bsp_key.h

@ -9,7 +9,8 @@
#define Key1 P21 //音量增大
#define Key2 P20 //音量减小
#define Key3 P32 //开关机
#define Key3 P02 //开关机
// #define Key3 P32 //开关机
// #define Key (key1 && key2 && key3)

Loading…
Cancel
Save