483 lines
14 KiB
C
483 lines
14 KiB
C
|
/********************************************************************
|
|||
|
Copyright (c) 2021 Xiangyu Medical Co.<EFBFBD><EFBFBD>Ltd. All rights reserved.
|
|||
|
FileName : timer.c
|
|||
|
Author : zhangdawei
|
|||
|
Version : V1.0
|
|||
|
Date :
|
|||
|
Note :
|
|||
|
History :
|
|||
|
********************************************************************/
|
|||
|
/* Includes ------------------------------------------------------*/
|
|||
|
#include "nrf_drv_pwm.h"
|
|||
|
#include "drv_uart.h"
|
|||
|
#include "IoControl.h"
|
|||
|
#include "timer.h"
|
|||
|
#include "nrf_delay.h"
|
|||
|
#include "nrf_drv_ppi.h"
|
|||
|
#include "nrf_drv_gpiote.h"
|
|||
|
/* Private define ------------------------------------------------*/
|
|||
|
/* <20><><EFBFBD><EFBFBD>APP<50><50>ʱ<EFBFBD><CAB1> */
|
|||
|
APP_TIMER_DEF(detect_button_100ms);
|
|||
|
#define DETECT_BUTTON APP_TIMER_TICKS(100)
|
|||
|
|
|||
|
|
|||
|
/* Private typedef -----------------------------------------------*/
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊm_pwm_add<64><64><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD><CAB5>
|
|||
|
static nrfx_pwm_t m_pwm_dac = NRFX_PWM_INSTANCE(1);
|
|||
|
static nrfx_pwm_t m_pwm0 = NRFX_PWM_INSTANCE(0);
|
|||
|
static nrfx_pwm_t m_pwm2 = NRFX_PWM_INSTANCE(2);
|
|||
|
/* Private constants ---------------------------------------------*/
|
|||
|
|
|||
|
/* Private variables ---------------------------------------------*/
|
|||
|
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>ձ<EFBFBD> */
|
|||
|
uint16_t m_step = 150;
|
|||
|
/* <20><><EFBFBD><EFBFBD>RunLEDռ<44>ձȵ<D5B1><C8B5><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
static nrf_pwm_values_common_t seq3_values[M_STEP*2];
|
|||
|
//<2F><><EFBFBD><EFBFBD>PWM<57><4D><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>б<EFBFBD><D0B1><EFBFBD>λ<EFBFBD><CEBB>RAM<41>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>Ϊstatic<69><63><EFBFBD><EFBFBD>
|
|||
|
static nrf_pwm_values_common_t dac_values[] = {CYCLE_CALUE}; //14
|
|||
|
|
|||
|
static nrf_pwm_values_wave_form_t seq0_current_values[] =
|
|||
|
{
|
|||
|
10000 - 600,
|
|||
|
10000 - 400,
|
|||
|
10000 - 200,
|
|||
|
10000 //100Hz
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
static nrf_pwm_values_wave_form_t seq2_current_values[] =
|
|||
|
{
|
|||
|
800 - 125,
|
|||
|
800,
|
|||
|
800,
|
|||
|
800 //20khz
|
|||
|
};
|
|||
|
|
|||
|
E_WORK_STATE eRmsState = E_RMS_STOP;
|
|||
|
|
|||
|
/* Private function prototypes -----------------------------------*/
|
|||
|
|
|||
|
/* Public constants ----------------------------------------------*/
|
|||
|
/* Public variables ----------------------------------------------*/
|
|||
|
|
|||
|
|
|||
|
/********************************************************************
|
|||
|
* name : void acquisition_start(void)
|
|||
|
* description : <EFBFBD><EFBFBD>ʼ<EFBFBD>ɼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return :
|
|||
|
********************************************************************/
|
|||
|
void acquisition_start(void)
|
|||
|
{
|
|||
|
eRmsState = E_RMS_START;
|
|||
|
// rms_saadc_init();
|
|||
|
nrf_gpio_pin_set(SAMPLE_POWER_PIN);
|
|||
|
open_acquisition_relay();
|
|||
|
|
|||
|
timer3_rms_start();
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/********************************************************************
|
|||
|
* name : void acquisition_stop(void)
|
|||
|
* description : ֹͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD>
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return :
|
|||
|
********************************************************************/
|
|||
|
void acquisition_stop(void)
|
|||
|
{
|
|||
|
timer3_rms_stop();
|
|||
|
eRmsState = E_RMS_STOP;
|
|||
|
nrf_gpio_pin_clear(SAMPLE_POWER_PIN);
|
|||
|
close_acquisition_relay();
|
|||
|
}
|
|||
|
|
|||
|
/********************************************************************
|
|||
|
* name : void stimulate_start(void)
|
|||
|
* description : <EFBFBD><EFBFBD>ʼ<EFBFBD>̼<EFBFBD>
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return :
|
|||
|
********************************************************************/
|
|||
|
void stimulate_start(void)
|
|||
|
{
|
|||
|
acquisition_stop(); //<2F><>ֹͣ<CDA3><D6B9><EFBFBD><EFBFBD><EFBFBD>ɼ<EFBFBD>
|
|||
|
// stimulate_stop(); //ֹͣ<CDA3>̼<EFBFBD><CCBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¿<EFBFBD>ʼ<EFBFBD>̼<EFBFBD>
|
|||
|
|
|||
|
eRmsState = E_STIM_START;
|
|||
|
open_stimulate_relay();
|
|||
|
pwm0_play();
|
|||
|
pwm2_play();
|
|||
|
}
|
|||
|
|
|||
|
/********************************************************************
|
|||
|
* name : void stimulate_stop(void)
|
|||
|
* description : ֹͣ<EFBFBD>̼<EFBFBD>
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return :
|
|||
|
********************************************************************/
|
|||
|
void stimulate_stop(void)
|
|||
|
{
|
|||
|
eRmsState = E_STIM_STOP;
|
|||
|
close_stimulate_relay();
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/********************************************************************
|
|||
|
* name : static void detect_button(void)
|
|||
|
* description : <EFBFBD><EFBFBD><EFBFBD>ػ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return :
|
|||
|
********************************************************************/
|
|||
|
static void detect_button(void)
|
|||
|
{
|
|||
|
static uint8_t CountValue=0;
|
|||
|
if((Bit_RESET == nrf_gpio_pin_read(KEY_PWR_SWITICH))&&((ChargeState == Uncharged))) //<2F><><EFBFBD>ⰴ<EFBFBD><E2B0B4><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
CountValue++;
|
|||
|
|
|||
|
if(CountValue == 10)
|
|||
|
{
|
|||
|
if(POWER_CLOSE == DeviceState) //<2F><><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
DeviceState = POWER_OPEN;
|
|||
|
nrf_gpio_pin_set(KEY_POWER); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>MCU<43><55><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
NRF_LOG_INFO("Open!");
|
|||
|
StartAdv();
|
|||
|
}
|
|||
|
else if(POWER_OPEN == DeviceState) //<2F>ػ<EFBFBD>
|
|||
|
{
|
|||
|
DeviceState = POWER_CLOSE;
|
|||
|
acquisition_stop();
|
|||
|
NRF_LOG_INFO("Close!");
|
|||
|
nrf_gpio_pin_clear(KEY_POWER); //<2F>ϵ<EFBFBD>
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
CountValue = 0;
|
|||
|
}
|
|||
|
static uint16_t runBlinkCount = 0;
|
|||
|
|
|||
|
if(runBlinkCount == 0 && DeviceState == POWER_OPEN)
|
|||
|
nrf_gpio_pin_set(LED_YELLOW);
|
|||
|
else if(runBlinkCount == 1)
|
|||
|
nrf_gpio_pin_clear(LED_YELLOW);
|
|||
|
|
|||
|
if(runBlinkCount++ > 8) //1S<31><53>˸һ<CBB8><D2BB>
|
|||
|
{
|
|||
|
runBlinkCount = 0;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/********************************************************************
|
|||
|
* name : static void detect_charging_status(void)
|
|||
|
* description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return :
|
|||
|
********************************************************************/
|
|||
|
static void detect_charging_status(void)
|
|||
|
{
|
|||
|
static uint8_t CountValue=0;
|
|||
|
if((Bit_RESET == nrf_gpio_pin_read(CHG_MANAGER_CHG))) //<2F><><EFBFBD>ⰴ<EFBFBD><E2B0B4><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
{
|
|||
|
ChargeState = Charging;
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
ChargeState = Uncharged;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/********************************************************************
|
|||
|
* name : static void Hundredms_handler(void * p_context)
|
|||
|
* description : <EFBFBD><EFBFBD><EFBFBD>ⰴ<EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>100ms<EFBFBD>ж<EFBFBD>һ<EFBFBD>Σ<EFBFBD><EFBFBD>ۼƼ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Input : void *p_context
|
|||
|
* Output : void
|
|||
|
* Return :
|
|||
|
********************************************************************/
|
|||
|
static void Hundredms_handler(void * p_context)
|
|||
|
{
|
|||
|
//<2F><>ֹ<EFBFBD><D6B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>棬ͬʱ<CDAC><CAB1><EFBFBD><EFBFBD><EFBFBD>صı<D8B5><C4B1><EFBFBD>p_contextδʹ<CEB4>ã<EFBFBD><C3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD>ó<EFBFBD><C3B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˡ<EFBFBD><CBA1><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫʹ<D2AA><CAB9>p_context<78><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>д<EFBFBD><D0B4><EFBFBD>
|
|||
|
UNUSED_PARAMETER(p_context);
|
|||
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E2B4A6> */
|
|||
|
detect_button();
|
|||
|
/* <20><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|||
|
CalculateBatteryPower();
|
|||
|
/* <20><><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD> */
|
|||
|
detect_charging_status();
|
|||
|
static uint16_t delay_open = 0;
|
|||
|
if(POWER_OPEN == DeviceState && delay_open != 70 && delay_open++ >60 )
|
|||
|
{
|
|||
|
//acquisition_start();
|
|||
|
stimulate_start();
|
|||
|
delay_open = 70;
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/********************************************************************
|
|||
|
* name : void AppTimersInit(void)
|
|||
|
* description : <EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>APP<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>ģ<EFBFBD>顢<EFBFBD><EFBFBD><EFBFBD><EFBFBD>APP<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return :
|
|||
|
********************************************************************/
|
|||
|
void AppTimersInit(void)
|
|||
|
{
|
|||
|
|
|||
|
ret_code_t err_code = app_timer_init();//<2F><>ʼ<EFBFBD><CABC>APP<50><50>ʱ<EFBFBD><CAB1>ģ<EFBFBD><C4A3>
|
|||
|
APP_ERROR_CHECK(err_code);
|
|||
|
|
|||
|
err_code = app_timer_create(&detect_button_100ms,
|
|||
|
APP_TIMER_MODE_REPEATED,
|
|||
|
Hundredms_handler);
|
|||
|
APP_ERROR_CHECK(err_code);
|
|||
|
}
|
|||
|
/********************************************************************
|
|||
|
* name : void ApplicationTimersStart(void)
|
|||
|
* description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ѿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ĵ<EFBFBD>APP<EFBFBD><EFBFBD>ʱ<EFBFBD><EFBFBD>
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return :
|
|||
|
********************************************************************/
|
|||
|
void ApplicationTimersStart(void)
|
|||
|
{
|
|||
|
ret_code_t err_code;
|
|||
|
|
|||
|
err_code = app_timer_start(detect_button_100ms, DETECT_BUTTON, NULL);
|
|||
|
APP_ERROR_CHECK(err_code);
|
|||
|
}
|
|||
|
/********************************************************************
|
|||
|
* name : void PwmDACInit(void)
|
|||
|
* description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD>DAC<EFBFBD><EFBFBD>pwm<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return :
|
|||
|
********************************************************************/
|
|||
|
void PwmDACInit(void)
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD>PWM<57><4D>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ýṹ<C3BD>岢<EFBFBD><E5B2A2>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
nrfx_pwm_config_t const config0 =
|
|||
|
{
|
|||
|
.output_pins =
|
|||
|
{
|
|||
|
PWM_DAC_GPIO, //ͨ<><CDA8>0ӳ<30>䵽P WM_DAC_GPIO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ƽ
|
|||
|
NRFX_PWM_PIN_NOT_USED , //ͨ<><CDA8>1<EFBFBD><31>ʹ<EFBFBD><CAB9>
|
|||
|
NRFX_PWM_PIN_NOT_USED , //ͨ<><CDA8>2<EFBFBD><32>ʹ<EFBFBD><CAB9>
|
|||
|
NRFX_PWM_PIN_NOT_USED //ͨ<><CDA8>3<EFBFBD><33>ʹ<EFBFBD><CAB9>
|
|||
|
},
|
|||
|
.irq_priority = APP_IRQ_PRIORITY_LOWEST,//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>
|
|||
|
.base_clock = NRF_PWM_CLK_1MHz, //PWMʱ<4D><CAB1>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ1MHz
|
|||
|
.count_mode = NRF_PWM_MODE_UP, //<2F><><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>ģʽ
|
|||
|
.top_value = CYCLE_CALUE, //<2F><>ֵΪ<D6B5><CEAA><EFBFBD><EFBFBD>ֵ
|
|||
|
.load_mode = NRF_PWM_LOAD_COMMON, //ͨ<><CDA8>ģʽ
|
|||
|
.step_mode = NRF_PWM_STEP_AUTO //<2F><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ƽ<EFBFBD>
|
|||
|
};
|
|||
|
APP_ERROR_CHECK(nrfx_pwm_init(&m_pwm_dac, &config0, NULL));//<2F><>ʼ<EFBFBD><CABC>PWM
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/********************************************************************
|
|||
|
* name : void PwmDACPlay(void)
|
|||
|
* description : <EFBFBD><EFBFBD><EFBFBD>ų<EFBFBD><EFBFBD><EFBFBD>PWM
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return :
|
|||
|
********************************************************************/
|
|||
|
void PwmDACPlay(void)
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD>PWM<57><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><D0B0><EFBFBD><EFBFBD><EFBFBD>PWM<57><4D><EFBFBD>е<EFBFBD><D0B5><EFBFBD>ʼ<EFBFBD><CABC>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2>ſ<EFBFBD><C5BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
nrf_pwm_sequence_t const seq =
|
|||
|
{
|
|||
|
.values.p_common = dac_values,//ָ<><D6B8>PWM<57><4D><EFBFBD><EFBFBD>
|
|||
|
.length = NRF_PWM_VALUES_LENGTH(dac_values),//PWM<57><4D><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><D0B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD>
|
|||
|
.repeats = 0, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ0
|
|||
|
.end_delay = 0 //<2F><><EFBFBD>к<D0BA><F3B2BBB2><EFBFBD><EFBFBD><EFBFBD>ʱ
|
|||
|
};
|
|||
|
//<2F><><EFBFBD><EFBFBD>PWM<57><4D><EFBFBD>в<EFBFBD><D0B2>ţ<EFBFBD>flags<67><73><EFBFBD><EFBFBD>ΪNRFX_PWM_FLAG_LOOP<4F><50><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD>
|
|||
|
(void)nrfx_pwm_simple_playback(&m_pwm_dac, &seq, 1, NRFX_PWM_FLAG_LOOP);
|
|||
|
}
|
|||
|
void SetPWMValues(uint16_t tempvalue)
|
|||
|
{
|
|||
|
*dac_values = CYCLE_CALUE - tempvalue;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/********************************************************************
|
|||
|
* name : void PwmDACStop(void)
|
|||
|
* description : ֹͣ<EFBFBD><EFBFBD><EFBFBD>ų<EFBFBD><EFBFBD><EFBFBD>PWM
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return :
|
|||
|
********************************************************************/
|
|||
|
void PwmDACStop(void)
|
|||
|
{
|
|||
|
nrfx_pwm_stop(&m_pwm_dac,1);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
/********************************************************************
|
|||
|
* name : void pwm0_common_init(void)
|
|||
|
* description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PWM<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return :
|
|||
|
********************************************************************/
|
|||
|
void pwm0_common_init(void)
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD>PWM<57><4D>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ýṹ<C3BD>岢<EFBFBD><E5B2A2>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
nrfx_pwm_config_t const config0 =
|
|||
|
{
|
|||
|
.output_pins =
|
|||
|
{
|
|||
|
BASE_WAVE_06_PIN,
|
|||
|
BASE_WAVE_07_PIN,
|
|||
|
BASE_WAVE_08_PIN,
|
|||
|
NRFX_PWM_PIN_NOT_USED
|
|||
|
},
|
|||
|
.irq_priority = APP_IRQ_PRIORITY_LOWEST,//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>
|
|||
|
.base_clock = NRF_PWM_CLK_1MHz, //PWMʱ<4D><CAB1>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ16MHz
|
|||
|
.count_mode = NRF_PWM_MODE_UP, //<2F><><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>ģʽ
|
|||
|
.top_value = 0, //ʹ<>ò<EFBFBD><C3B2><EFBFBD>װ<EFBFBD><D7B0>ģʽʱ<CABD><CAB1><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
.load_mode = NRF_PWM_LOAD_WAVE_FORM, //<2F><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>ģʽ
|
|||
|
.step_mode = NRF_PWM_STEP_AUTO //<2F><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ƽ<EFBFBD>
|
|||
|
};
|
|||
|
//<2F><>ʼ<EFBFBD><CABC>PWM
|
|||
|
APP_ERROR_CHECK(nrfx_pwm_init(&m_pwm0, &config0, NULL));
|
|||
|
|
|||
|
/////////////
|
|||
|
//pwm0_play();
|
|||
|
}
|
|||
|
|
|||
|
/********************************************************************
|
|||
|
* name : void pwm0_play(void)
|
|||
|
* description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PWM<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return :
|
|||
|
********************************************************************/
|
|||
|
void pwm0_play(void)
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD>PWM<57><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><D0B0><EFBFBD><EFBFBD><EFBFBD>PWM<57><4D><EFBFBD>е<EFBFBD><D0B5><EFBFBD>ʼ<EFBFBD><CABC>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2>ſ<EFBFBD><C5BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
nrf_pwm_sequence_t const seq0 =
|
|||
|
{
|
|||
|
.values.p_wave_form = seq0_current_values,//ָ<><D6B8>PWM<57><4D><EFBFBD><EFBFBD>
|
|||
|
.length = NRF_PWM_VALUES_LENGTH(seq0_current_values),//PWM<57><4D><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><D0B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD>
|
|||
|
.repeats = 0, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ0
|
|||
|
.end_delay = 0 //<2F><><EFBFBD>к<D0BA><F3B2BBB2><EFBFBD><EFBFBD><EFBFBD>ʱ
|
|||
|
};
|
|||
|
//<2F><><EFBFBD><EFBFBD>PWM<57><4D><EFBFBD>в<EFBFBD><D0B2>ţ<EFBFBD>flags<67><73><EFBFBD><EFBFBD>ΪNRFX_PWM_FLAG_LOOP<4F><50><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD>
|
|||
|
//<2F><><EFBFBD><EFBFBD>ΪNRFX_PWM_FLAG_STOP<4F><50><EFBFBD>Ž<F2B2A5B7><C5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PWMֹͣ
|
|||
|
(void)nrfx_pwm_simple_playback(&m_pwm0, &seq0, 1,
|
|||
|
NRFX_PWM_FLAG_LOOP);
|
|||
|
}
|
|||
|
|
|||
|
void pwm0_stop(void)
|
|||
|
{
|
|||
|
nrfx_pwm_stop(&m_pwm0, 1);
|
|||
|
}
|
|||
|
|
|||
|
/********************************************************************
|
|||
|
* name : void pwm2_common_init(void)
|
|||
|
* description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PWM<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return :
|
|||
|
********************************************************************/
|
|||
|
void pwm2common_init(void)
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD>PWM<57><4D>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ýṹ<C3BD>岢<EFBFBD><E5B2A2>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
nrfx_pwm_config_t const config0 =
|
|||
|
{
|
|||
|
.output_pins =
|
|||
|
{
|
|||
|
BOOST_VOLTAGE_CONTROL_PIN,
|
|||
|
NRFX_PWM_PIN_NOT_USED,
|
|||
|
NRFX_PWM_PIN_NOT_USED,
|
|||
|
NRFX_PWM_PIN_NOT_USED
|
|||
|
},
|
|||
|
.irq_priority = APP_IRQ_PRIORITY_LOWEST,//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ȼ<EFBFBD>
|
|||
|
.base_clock = NRF_PWM_CLK_16MHz, //PWMʱ<4D><CAB1>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ16MHz
|
|||
|
.count_mode = NRF_PWM_MODE_UP, //<2F><><EFBFBD>ϼ<EFBFBD><CFBC><EFBFBD>ģʽ
|
|||
|
.top_value = 0, //ʹ<>ò<EFBFBD><C3B2><EFBFBD>װ<EFBFBD><D7B0>ģʽʱ<CABD><CAB1><EFBFBD><EFBFBD>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
.load_mode = NRF_PWM_LOAD_WAVE_FORM, //<2F><><EFBFBD><EFBFBD>װ<EFBFBD><D7B0>ģʽ
|
|||
|
.step_mode = NRF_PWM_STEP_AUTO //<2F><><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6>ƽ<EFBFBD>
|
|||
|
};
|
|||
|
//<2F><>ʼ<EFBFBD><CABC>PWM
|
|||
|
APP_ERROR_CHECK(nrfx_pwm_init(&m_pwm2, &config0, NULL));
|
|||
|
|
|||
|
/////////////
|
|||
|
//pwm2_play();
|
|||
|
}
|
|||
|
|
|||
|
/********************************************************************
|
|||
|
* name : void pwm2_play(void)
|
|||
|
* description : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PWM<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return :
|
|||
|
********************************************************************/
|
|||
|
void pwm2_play(void)
|
|||
|
{
|
|||
|
//<2F><><EFBFBD><EFBFBD>PWM<57><4D><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><D0A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><D0B0><EFBFBD><EFBFBD><EFBFBD>PWM<57><4D><EFBFBD>е<EFBFBD><D0B5><EFBFBD>ʼ<EFBFBD><CABC>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2>ſ<EFBFBD><C5BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
nrf_pwm_sequence_t const seq2 =
|
|||
|
{
|
|||
|
.values.p_wave_form = seq2_current_values,//ָ<><D6B8>PWM<57><4D><EFBFBD><EFBFBD>
|
|||
|
.length = NRF_PWM_VALUES_LENGTH(seq2_current_values),//PWM<57><4D><EFBFBD><EFBFBD><EFBFBD>а<EFBFBD><D0B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڸ<EFBFBD><DAB8><EFBFBD>
|
|||
|
.repeats = 0, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ظ<EFBFBD><D8B8><EFBFBD><EFBFBD><EFBFBD>Ϊ0
|
|||
|
.end_delay = 0 //<2F><><EFBFBD>к<D0BA><F3B2BBB2><EFBFBD><EFBFBD><EFBFBD>ʱ
|
|||
|
};
|
|||
|
//<2F><><EFBFBD><EFBFBD>PWM<57><4D><EFBFBD>в<EFBFBD><D0B2>ţ<EFBFBD>flags<67><73><EFBFBD><EFBFBD>ΪNRFX_PWM_FLAG_LOOP<4F><50><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>²<EFBFBD><C2B2><EFBFBD>
|
|||
|
//<2F><><EFBFBD><EFBFBD>ΪNRFX_PWM_FLAG_STOP<4F><50><EFBFBD>Ž<F2B2A5B7><C5BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>PWMֹͣ
|
|||
|
(void)nrfx_pwm_simple_playback(&m_pwm2, &seq2, 1,
|
|||
|
NRFX_PWM_FLAG_LOOP);
|
|||
|
}
|
|||
|
|
|||
|
void pwm2_stop(void)
|
|||
|
{
|
|||
|
nrfx_pwm_stop(&m_pwm2, 1);
|
|||
|
}
|
|||
|
|
|||
|
/********************************************************************
|
|||
|
* name : void GpioteInit(void)
|
|||
|
* description : <EFBFBD>̼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>GPIOTE<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return :
|
|||
|
********************************************************************/
|
|||
|
void GpioteInit(void)
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/********************************************************************
|
|||
|
* name : void PPIPwmInit(void)
|
|||
|
* description : <EFBFBD>̼<EFBFBD>PWM<EFBFBD><EFBFBD>PPI<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
|
|||
|
* Input : void
|
|||
|
* Output : void
|
|||
|
* Return :
|
|||
|
********************************************************************/
|
|||
|
void PPIPwmInit(void)
|
|||
|
{
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
/*************************** END OF FILE ***************************/
|
|||
|
|
|||
|
|
|||
|
|