请问一下,我现在的软件逻辑是长按按钮开机,调用system_sleep_disable退出低功耗模式,长按按钮关机,调用system_sleep_enable进入低功耗模式。这样频繁的进入和退出低功耗模式,会影响蓝牙广播和连接吗?
uplooking
@uplooking
uplooking 发布的帖子
-
关于低功耗问题咨询
-
RE: 寻求低功耗例程
代码如下:
__attribute__((section("ram_code"))) void pmu_gpio_isr_ram(void) { uint32_t gpio_value = ool_read32(PMU_REG_GPIOA_V); // PB5 if (gpio_value & GPIO_PB5) { co_printf("%s gpio_value: %x\r\n", __func__, gpio_value); } else { button_toggle_detected(gpio_value); } // co_printf(" %s gpio_value: %x\r\n", __func__, gpio_value); ool_write32(PMU_REG_PORTA_LAST, gpio_value); } void user_key_init(void) { // 设置上拉 PD7 按键 pmu_set_pin_pull(KEY_GPIO_PORT, (1 << KEY_GPIO_BIT), true); // PB5 外部中断引脚 pmu_set_pin_pull(GPIO_PORT_B, (1 << GPIO_BIT_5), true); // PD7 PB5 pmu_port_wakeup_func_set(KEY_GPIO | GPIO_PB5); button_init(KEY_GPIO); }
问题如下:现在有PB5和PD7都设置中断唤醒,在中断处理函数pmu_gpio_isr_ram中如何区分是PD7引脚的中断,还是PB5的中断呢?
-
RE: 寻求低功耗例程
中断处理函数 PD7和PB5
__attribute__((section("ram_code"))) void pmu_gpio_isr_ram(void) { uint32_t gpio_value = ool_read32(PMU_REG_GPIOA_V); button_toggle_detected(gpio_value); co_printf(" %s gpio_value: %x\r\n", __func__, gpio_value); ool_write32(PMU_REG_PORTA_LAST, gpio_value); }
按下Key(PD7),运行结果如下:
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 5080a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 4000a03c
pmu_gpio_isr_ram gpio_value: c000a03c
pmu_gpio_isr_ram gpio_value: 4000a03c
pmu_gpio_isr_ram gpio_value: c000a03c
pmu_gpio_isr_ram gpio_value: 5000a03c
pmu_gpio_isr_ram gpio_value: c000a03c
pmu_gpio_isr_ram gpio_value: 4000a03c
pmu_gpio_isr_ram gpio_value: c000a03c
pmu_gpio_isr_ram gpio_value: 4000a03c
pmu_gpio_isr_ram gpio_value: d080a03c
pmu_gpio_isr_ram gpio_value: 4000a03c
pmu_gpio_isr_ram gpio_value: c000a03c请问一下,为啥同一个按键按下和抬起输出的值不一样?
-
flash_protect_enable问题
/********************************************************************* * @fn flash_protect_enable * * @brief protect flash chip from erase and write. * * @param wr_mode - 0: write.enable with command 0x50 * 1: write enable with command 0x06 * * @return None. */ __attribute__((section("ram_code"))) void flash_protect_enable(uint8_t wr_mode); /********************************************************************* * @fn flash_protect_enable1 * * @brief protect flash chip from erase and write. * * @param wr_mode - 0: write.enable with command 0x50 * 1: write enable with command 0x06 * mask protect bits mask, refer to flash spec * * @return None. */ __attribute__((section("ram_code"))) void flash_protect_enable1(uint8_t wr_mode,uint8_t mask); /********************************************************************* * @fn flash_protect_disable * * @brief remove protection flash chip from erase and write. * * @param wr_mode - 0: write.enable with command 0x50 * 1: write enable with command 0x06 * * @return None. */ __attribute__((section("ram_code"))) void flash_protect_disable(uint8_t wr_mode);
flash_protect_enable和flash_protect_enable1有什么区别吗?
-
RE: 寻求低功耗例程
__attribute__((section("ram_code"))) void pmu_gpio_isr_ram(void) { uint32_t gpio_value = ool_read32(PMU_REG_GPIOA_V); co_printf("gpio_value: %X\r\n", gpio_value); ool_write32(PMU_REG_PORTA_LAST, gpio_value); }
这个PMU中GPIO中断处理函数,可以区分哪一个GPIO吗? 比如我设置PA0,PA1都可以唤醒深度睡眠,如何区分是哪一个IO口触发的中断?
-
RE: 寻求低功耗例程
设置按键唤醒,可以设置为下降沿产生中断吗?
pmu_set_pin_pull(GPIO_PORT_C, (1 << GPIO_BIT_5), true); pmu_port_wakeup_func_set(GPIO_PC5);
上述代码是按键按下和抬起都会产生中断。