完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
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)//检测是否为该按键唤醒 { } } } |
|
|
|
只有小组成员才能发言,加入小组>>
3316 浏览 9 评论
2995 浏览 16 评论
3494 浏览 1 评论
9060 浏览 16 评论
4088 浏览 18 评论
1180浏览 3评论
605浏览 2评论
const uint16_t Tab[10]={0}; const uint16_t *p; p = Tab;//报错是怎么回事?
599浏览 2评论
用NUC131单片机UART3作为打印口,但printf没有输出东西是什么原因?
2335浏览 2评论
NUC980DK61YC启动随机性出现Err-DDR是为什么?
1896浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-24 05:58 , Processed in 1.029476 second(s), Total 78, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号