static void demo2(void)
{
NRF_LOG_INFO("Demo 2");
/*
* This demo plays back two concatenated sequences:
* - Sequence 0: Light intensity is increased in 25 steps during one second.
* - Sequence 1: LED blinks twice (100 ms off, 100 ms on), then stays off
* for 200 ms.
* The same output is generated on all 4 channels (LED 1 - LED 4).
* The playback is repeated in a loop.
*/
enum { // [local constants]
TOP = 10000,
STEP_COUNT = 25
};
nrf_drv_pwm_config_t const config0 =
{
.output_pins =
{
BSP_LED_0 | NRF_DRV_PWM_PIN_INVERTED, // channel 0
BSP_LED_1 | NRF_DRV_PWM_PIN_INVERTED, // channel 1
BSP_LED_2 | NRF_DRV_PWM_PIN_INVERTED, // channel 2
BSP_LED_3 | NRF_DRV_PWM_PIN_INVERTED // channel 3
},
.irq_priority = APP_IRQ_PRIORITY_LOWEST,
.base_clock = NRF_PWM_CLK_500kHz, //设置PWM外设的时钟
.count_mode = NRF_PWM_MODE_UP,
.top_value = TOP, //PWM波形周期,相当于STM32的ARR值
.load_mode = NRF_PWM_LOAD_COMMON, //通道比较值同时加载
.step_mode = NRF_PWM_STEP_AUTO
};
APP_ERROR_CHECK(nrf_drv_pwm_init(&m_pwm0, &config0, NULL));
m_used |= USED_PWM(0);
// This array cannot be allocated on stack (hence "static") and it must
// be in RAM.
static nrf_pwm_values_common_t seq0_values[STEP_COUNT];
uint16_t value = 0;
uint16_t step = TOP / STEP_COUNT;
uint8_t i;
for (i = 0; i < STEP_COUNT; ++i)
{
value += step;
seq0_values[i] = value;
}
nrf_pwm_sequence_t const seq0 =
{
.values.p_common = seq0_values,
.length = NRF_PWM_VALUES_LENGTH(seq0_values),
.repeats = 1, //此PWM值的数组(队列)重复加载的次数为(repeats+1)
.end_delay = 0
};
// This array cannot be allocated on stack (hence "static") and it must
// be in RAM (hence no "const", though its content is not changed).
static nrf_pwm_values_common_t /*const*/ seq1_values[] =
{
0,
0x8000,
0,
0x8000,
0,
0
};
nrf_pwm_sequence_t const seq1 =
{
.values.p_common = seq1_values,
.length = NRF_PWM_VALUES_LENGTH(seq1_values),
.repeats = 4,
.end_delay = 0
};
(void)nrf_drv_pwm_complex_playback(&m_pwm0, &seq0, &seq1, 1,
NRF_DRV_PWM_FLAG_LOOP);
//nrf_drv_pwm_comples_playback 函数的意思是:先按seq0的设置模式加载到m_pwm0,然后再加载seq1的设置模式,然后就是循环 (NRF_DRV_PWM_FLAG_LOOP)执行seq0,seq1.
}