diff --git a/README.md b/README.md index 685d3f1..80a3cd0 100644 --- a/README.md +++ b/README.md @@ -8,9 +8,12 @@ 手机端可以看到设备的软件版本信息。OK 心率采集改成由IO中断驱动。OK 修正回执包错误码. OK +指示灯修改成PWM驱动 OK + + +开机,蜂鸣器响一声 OK +开机,检查电量 OK -开机,蜂鸣器响一声 -开机,检查电量 修改电量检测,电量过低时,指示灯闪烁三下后进入低功耗。 diff --git a/app/config/sdk_config.h b/app/config/sdk_config.h index d5dc9ac..12bab3d 100644 --- a/app/config/sdk_config.h +++ b/app/config/sdk_config.h @@ -2797,14 +2797,14 @@ #ifndef NRFX_PWM1_ENABLED -#define NRFX_PWM1_ENABLED 0 +#define NRFX_PWM1_ENABLED 1 #endif // NRFX_PWM2_ENABLED - Enable PWM2 instance #ifndef NRFX_PWM2_ENABLED -#define NRFX_PWM2_ENABLED 0 +#define NRFX_PWM2_ENABLED 1 #endif // NRFX_PWM3_ENABLED - Enable PWM3 instance @@ -5130,14 +5130,14 @@ #ifndef PWM1_ENABLED -#define PWM1_ENABLED 0 +#define PWM1_ENABLED 1 #endif // PWM2_ENABLED - Enable PWM2 instance #ifndef PWM2_ENABLED -#define PWM2_ENABLED 0 +#define PWM2_ENABLED 1 #endif // PWM3_ENABLED - Enable PWM3 instance diff --git a/app/src/board/board.h b/app/src/board/board.h index 005cf65..c6d7427 100644 --- a/app/src/board/board.h +++ b/app/src/board/board.h @@ -29,6 +29,7 @@ *******************************************************************************/ #define ADS1293_SPI_INSTANCE 2 #define BEEP_PWM_INSTANCE 0 +#define LIGHT_PWM_INSTANCE 1 #define BATTERY_ADC_CHANNEL 1 // 不重复即可 /******************************************************************************* diff --git a/app/src/board/board_beep_ctrl.c b/app/src/board/board_beep_ctrl.c index 4d8e02c..8729396 100644 --- a/app/src/board/board_beep_ctrl.c +++ b/app/src/board/board_beep_ctrl.c @@ -14,7 +14,7 @@ static nrf_pwm_sequence_t const m_beep_pwm0_seq = { static nrf_drv_pwm_config_t const m_beep_pwm0_config0 = { .output_pins = { - BEEP_PIN | NRF_DRV_PWM_PIN_INVERTED, // + BEEP_PIN , // NRF_DRV_PWM_PIN_NOT_USED, NRF_DRV_PWM_PIN_NOT_USED, NRF_DRV_PWM_PIN_NOT_USED, diff --git a/app/src/board/board_light_ctrl.c b/app/src/board/board_light_ctrl.c index 9668c5f..326f839 100644 --- a/app/src/board/board_light_ctrl.c +++ b/app/src/board/board_light_ctrl.c @@ -6,12 +6,76 @@ #define BLINK_CNT 1 #define BLINK_PERIOD_MS (100) +#define LIGHT_PWM_DRIVER 1 + +// LED_GREEN_PIN + +#if LIGHT_PWM_DRIVER + +typedef struct { + nrf_drv_pwm_t driver; + nrf_pwm_values_individual_t seq_values; + nrf_pwm_sequence_t seq; + nrf_drv_pwm_config_t config; +} pwm_light_ctrl_t; + +#endif + +static pwm_light_ctrl_t light_ctrl = { + .driver = NRF_DRV_PWM_INSTANCE(LIGHT_PWM_INSTANCE), + .seq_values = {0}, + .seq = + { + .values.p_individual = &light_ctrl.seq_values, + .length = NRF_PWM_VALUES_LENGTH(light_ctrl.seq_values), + .repeats = 0, + .end_delay = 0, + }, + .config = + { + + .output_pins = + { + LED_GREEN_PIN, // + NRF_DRV_PWM_PIN_NOT_USED, + NRF_DRV_PWM_PIN_NOT_USED, + NRF_DRV_PWM_PIN_NOT_USED, + }, + .irq_priority = APP_IRQ_PRIORITY_LOWEST, + .base_clock = NRF_PWM_CLK_250kHz, + .count_mode = NRF_PWM_MODE_UP, + .top_value = 100, // 125kHz / 46 = 2.717k + .load_mode = NRF_PWM_LOAD_INDIVIDUAL, + .step_mode = NRF_PWM_STEP_AUTO, + + }, +}; + static LightEffect m_light_effect; static bool m_led_green_light_state; static int m_blink_cnt; APP_TIMER_DEF(m_green_light_effect_tmr); -static void BoardLight_effect_tmr_handler(void *p_context) { // +void BoardLight_setGreenLightState(bool state) { +#if LIGHT_PWM_DRIVER + if (state) { + light_ctrl.seq_values.channel_0 = 95; // 设置占空比,数值最大不超过 top_value + nrfx_pwm_simple_playback(&light_ctrl.driver, &light_ctrl.seq, 1, NRF_DRV_PWM_FLAG_LOOP); + } else { + nrfx_pwm_stop(&light_ctrl.driver, true); + } +#else + if (state) { + nrf_gpio_pin_set(LED_GREEN_PIN); + m_led_green_light_state = true; + } else { + nrf_gpio_pin_clear(LED_GREEN_PIN); + m_led_green_light_state = false; + } +#endif +} + +static void BoardLight_effect_tmr_handler(void* p_context) { // if (m_light_effect == kLightEffect_close) { if (m_led_green_light_state) { BoardLight_setGreenLightState(false); @@ -38,22 +102,15 @@ static void BoardLight_effect_tmr_handler(void *p_context) { // } void BoardLight_Init() { - znrf_gpio_cfg_output(LED_GREEN_PIN, NRF_GPIO_PIN_NOPULL); - ZERROR_CHECK(app_timer_create(&m_green_light_effect_tmr, APP_TIMER_MODE_REPEATED, BoardLight_effect_tmr_handler)); +#if LIGHT_PWM_DRIVER + APP_ERROR_CHECK(nrfx_pwm_init(&light_ctrl.driver, &light_ctrl.config, NULL)); +#else + znrf_gpio_cfg_output(LED_GREEN_PIN, NRF_GPIO_PIN_NOPULL); +#endif } void BoardLight_load() {} -void BoardLight_unload() {} - -void BoardLight_setGreenLightState(bool state) { - if (state) { - nrf_gpio_pin_set(LED_GREEN_PIN); - m_led_green_light_state = true; - } else { - nrf_gpio_pin_clear(LED_GREEN_PIN); - m_led_green_light_state = false; - } -} +void BoardLight_unload() { BoardLight_setGreenLightEffect(kLightEffect_close); } void BoardLight_toggleGreenLightState() { nrf_gpio_pin_toggle(LED_GREEN_PIN); } diff --git a/app/src/device_ctrl_service.c b/app/src/device_ctrl_service.c index eafa979..fd5d189 100644 --- a/app/src/device_ctrl_service.c +++ b/app/src/device_ctrl_service.c @@ -167,15 +167,10 @@ static void app_event_listener(void* p_event_data, uint16_t event_size) { // // else if (m_device_state == kdevice_state_ready) { - /******************************************************************************* - * 永不休眠 * - *******************************************************************************/ -#if 0 if (!zble_module_is_connected() && DeviceCtrl_cur_state_haspassed_ms() > APP_AUTO_SLEEP_TIMEOUT_MS) { ZLOGI("auto sleep"); prvf_change_to_standby_state(); } -#endif if (event->eventType == kevent_start_sample_cmd_event) { ZLOGI("start sample"); @@ -296,57 +291,3 @@ void DeviceCtrl_change_to_state(device_state_t state) { uint32_t DeviceCtrl_cur_state_haspassed_ms() { return znordic_haspassed_ms(m_change_to_cur_state_tp); } device_state_t DeviceCtrl_now_state() { return m_device_state; } -#if 0 -static void DeviceCtrl_test() { - /** - * @brief - * 1. 测试蜂鸣器 - * 2. 测试按键 - * 3. 测试LED - * 4. 测试指示灯 - * . SD卡 - * 5. 测试电池电量采集 - */ -#if 0 - //蜂鸣器测试 - BoardBeepCtrl_init(); - BoardBeepCtrl_load(); - BoardBeepCtrl_setEffect(kBoardBeepEffect_continuousShortBeep); -#endif - -#if 1 - // BoardButton_Init(board_button_cb); - -#endif - -#if 0 - BoardLight_Init(); - BoardLight_load(); - BoardLight_setGreenLightEffect(kLightEffect_slowFlash); -#endif -#if 0 - Board_sdcardInit(); - Board_sdcardConnectToInternal(); - Board_sdcardConnectToExt(); - - Board_sdcardConnectToInternal(); - Board_sdcardConnectToExt(); - -#endif -#if 0 - sample_data_mgr_init(); - sample_data_mgr_loadDriver(); - sample_data_mgr_change_to_local_mode(); - - sample_data_filename_t filename; - int fd = sample_data_mgr_open(&filename, kwrflag_write_only); - sample_data_mgr_write(fd, "123456", 6); - sample_data_mgr_close(fd); - sample_data_mgr_change_to_ext_mode(); -#endif -#if 1 - // 蜂鸣器测试 - -#endif -} -#endif