|
拿到的是一份老代码 没有用官方的案例 drive或者lib 都不是 是直接操作的
我自己用LED的管脚P0.25测试了一下 可以控制LED的亮度
代码如下 问题的若干参数的不理解
void test_pwm(void)
{
uint16_t pwm_seq[2];
nrf_gpio_cfg_output(G_PWM_REST_PIN_NUM);
nrf_gpio_pin_set(G_PWM_REST_PIN_NUM);
/// Setting Pulse Duration Time
pwm_seq[0] = 0;
pwm_seq[1] = 900;
/// Setting Pin Number
NRF_PWM0->PSEL.OUT[0] = (G_PWM_REST_PIN_NUM << PWM_PSEL_OUT_PIN_Pos) |
(PWM_PSEL_OUT_CONNECT_Connected << PWM_PSEL_OUT_CONNECT_Pos);
NRF_PWM0->ENABLE = (PWM_ENABLE_ENABLE_Enabled << PWM_ENABLE_ENABLE_Pos);
NRF_PWM0->MODE = (PWM_MODE_UPDOWN_Up << PWM_MODE_UPDOWN_Pos);
/// Setting PWM0 Frequency
NRF_PWM0->PRESCALER = (PWM_PRESCALER_PRESCALER_DIV_16 << PWM_PRESCALER_PRESCALER_Pos);
/// Setting Loop Counter (256 Hz or 32 Hz depend on PWM0 Frequency)
NRF_PWM0->COUNTERTOP = (1000 << PWM_COUNTERTOP_COUNTERTOP_Pos);
NRF_PWM0->LOOP = (PWM_LOOP_CNT_Msk << PWM_LOOP_CNT_Pos);//(PWM_LOOP_CNT_Msk << PWM_LOOP_CNT_Pos); 没有区别
NRF_PWM0->DECODER = (PWM_DECODER_LOAD_Common << PWM_DECODER_LOAD_Pos) |
(PWM_DECODER_MODE_RefreshCount << PWM_DECODER_MODE_Pos);
NRF_PWM0->SEQ[0].PTR = ((uint32_t)(pwm_seq) << PWM_SEQ_PTR_PTR_Pos);
NRF_PWM0->SEQ[0].CNT = ((sizeof(pwm_seq) / sizeof(uint16_t)) << PWM_SEQ_CNT_CNT_Pos);//2
NRF_PWM0->SEQ[0].REFRESH = 0;
NRF_PWM0->SEQ[0].ENDDELAY = 0;
NRF_PWM0->TASKS_SEQSTART[0] = 1;
}
可以看到LED比较亮的
示波器看到占空比10% 【因为我设置的是 NRF_PWM0->COUNTERTOP = 1000 pwm_seq[1] = 900; 】-----------问题是 pwm_seq[0] 是起什么作用的?
|
|