• 首页
  • 中国
  • [nrf51][nrf52][low power] 使用RTX时 如何进入低功耗

[nrf51][nrf52][low power] 使用RTX时 如何进入低功耗

2023-11-01 8浏览
百检网是一家专业的第三方检测平台,汇聚众多拥有权威资质的第三方检测机构为你提供一站式的检测服务,做检测就上百检网。百检网让检测从此检测,一份报告全国通用,专业值得信赖。

1、由于RTX使用了RTC1中断,导致频繁唤醒,无法进入睡眠状态。

2、思路:进入低功耗前,关闭RTC1电源,按键唤醒后重新配置RTC1。

伪代码:

进入低功耗前

1.关闭外设GPIO

nrf_gpio_cfg_default(N);

2.关闭串口

NRF_UART0->ENABLE = 0;

NRF_UART0->POWER = 0;

app_uart_close();

3.关闭RTC1中断

__disable_irq();

NVIC_DisableIRQ(RTC1_IRQn);

NRF_RTC1->POWER = 0; //停止RTC

__enable_irq();

4.设置按键中断

KEY_IRQn_INIT();

/*

内容举例

NRF_GPIO->PIN_CNF[Config_Key1_PORT_PIN] |= (GPIO_PIN_CNF_SENSE_Low << GPIO_PIN_CNF_SENSE_Pos);

NRF_GPIOTE->INTENSET = GPIOTE_INTENSET_PORT_Msk; //使能中断

NVIC_SetPriority(GPIOTE_IRQn, 1); //中断优先级设定为1

NVIC_EnableIRQ(GPIOTE_IRQn); //使能总中断

*/

5.进入睡眠

sd_app_evt_wait();

按键中断函数:

void GPIOTE_IRQHandler(void) //GPIOTE中断服务函数

{

unsigned int expected_time;

if (NRF_GPIOTE->EVENTS_PORT != 0)

{

NRF_GPIOTE->EVENTS_PORT = 0; //中断清零

if (NRF_RTC1->POWER == 0)

{

NVIC_EnableIRQ(RTC1_IRQn);

NRF_RTC1->POWER = 1; //启动RTC

NRF_RTC1->EVENTS_TICK = 1; //启动计数

NRF_RTC1->TASKS_START = 1; //开启计数

NRF_RTC1->PRESCALER = 0x20; //设置时钟基准32768 0x20==32

}

if (nrf_gpio_pin_read(Config_Key5_PORT_PIN) == 0)//检测是否为该按键唤醒

{

}

}

}


百检网秉承“客户至上,服务为先,精诚合作,以人为本”的经营理念,始终站在用户的角度解决问题,为客户提供“一站购物式”的新奇检测体验,打开网站,像挑选商品一样简单,方便。打破行业信息壁垒,建构消费和检测机构之间高效的沟通平台