pwm输出



  • 能否输出一个高精度的32768hz的波形呢?



  • 这个可以的。801xH的芯片有两种pwm,一个是数字模块的pwm,精度是cpu的运行频率,12M,24M,48M。 如果是48M的cpu时钟的话,pwm的输出精度是48M HZ。 具体的参考代码如下:
    system_set_port_mux(GPIO_PORT_D,GPIO_BIT_4,PORTD4_FUNC_PWM4);
    system_set_port_mux(GPIO_PORT_D,GPIO_BIT_5,PORTD5_FUNC_PWM5);
    pwm_init(PWM_CHANNEL_4,32768,50);
    pwm_init(PWM_CHANNEL_5,32768,50);
    pwm_start(PWM_CHANNEL_4);
    pwm_start(PWM_CHANNEL_5);
    数字模块的pwm,在启动sleep后,会停止运行。

    另一种是pmu的pwm模块,这个模块在启动sleep后,依然能运行,它的时钟精度是sleep低速时钟的精度,即最大32KHz。参考代码如下:
    pmu_pwm_init();
    pmu_set_pin_to_PMU(GPIO_PORT_D, BIT(4)|BIT(5));
    pmu_set_pin_dir(GPIO_PORT_D, BIT(4)|BIT(5),GPIO_DIR_OUT);
    pmu_set_port_mux(GPIO_PORT_D,GPIO_BIT_4,PMU_PORT_MUX_PWM);
    pmu_set_port_mux(GPIO_PORT_D,GPIO_BIT_5,PMU_PORT_MUX_PWM);
    pmu_pwm_set_param(GPIO_PORT_D,GPIO_BIT_4,1,1);
    pmu_pwm_set_param(GPIO_PORT_D,GPIO_BIT_5,1,1);
    pmu_pwm_start(GPIO_PORT_D,GPIO_BIT_4,true,0);
    pmu_pwm_start(GPIO_PORT_D,GPIO_BIT_5,true,0);
    两种pwm的示例代码都能在 driver_demos这个工程里的demo_pwm() 和demo_pmu_pwm() 找到。



  • 内部32k的精度是多少?