libxr  1.0
Want to be the best embedded framework
Loading...
Searching...
No Matches
hpm_pwm.hpp
1#pragma once
2
3#include "hpm_clock_drv.h"
4#include "hpm_gptmr_drv.h"
5#include "hpm_soc.h"
6#include "pwm.hpp"
7
8#if defined(PWM_SOC_CMP_MAX_COUNT) && defined(PWM_SOC_OUTPUT_TO_PWM_MAX_COUNT)
9#define LIBXR_HPM_PWM_SUPPORTED 1
10#include "hpm_pwm_drv.h"
11using LibXRHpmPwmType = PWM_Type;
12#else
13#define LIBXR_HPM_PWM_SUPPORTED 0
14using LibXRHpmPwmType = void;
15#endif
16
17#if !LIBXR_HPM_PWM_SUPPORTED
18#define LIBXR_HPM_GPTMR_PWM_FALLBACK 1
19#else
20#define LIBXR_HPM_GPTMR_PWM_FALLBACK 0
21#endif
22
23namespace LibXR
24{
25
30class HPMPWM : public PWM
31{
32 public:
43 HPMPWM(LibXRHpmPwmType* pwm, clock_name_t clock, uint8_t pwm_index, uint8_t cmp_index,
44 bool invert = false, bool auto_board_init = true);
45
51 ErrorCode SetDutyCycle(float value) override;
52
58 ErrorCode SetConfig(Configuration config) override;
59
64 ErrorCode Enable() override;
65
70 ErrorCode Disable() override;
71
72 private:
73 static constexpr uint8_t INVALID_CMP_INDEX = 0xFFu;
74 static uint8_t ResolveGptmrReloadCmpIndex(uint8_t duty_cmp_index);
75
76 LibXRHpmPwmType* pwm_;
77 GPTMR_Type* gptmr_;
78 clock_name_t clock_;
79 uint8_t pwm_index_;
80 uint8_t cmp_index_;
81 bool invert_;
82 bool auto_board_init_;
83 uint32_t reload_;
84 bool configured_;
85};
86
87} // namespace LibXR
HPM 平台 PWM 驱动实现 / PWM driver implementation for HPM platform.
Definition hpm_pwm.hpp:31
HPMPWM(LibXRHpmPwmType *pwm, clock_name_t clock, uint8_t pwm_index, uint8_t cmp_index, bool invert=false, bool auto_board_init=true)
构造 HPM PWM 对象 / Construct an HPM PWM object.
Definition hpm_pwm.cpp:31
ErrorCode Disable() override
停止 PWM 输出 / Stop PWM output.
Definition hpm_pwm.cpp:207
ErrorCode SetDutyCycle(float value) override
设置占空比 / Set PWM duty cycle.
Definition hpm_pwm.cpp:45
ErrorCode Enable() override
启动 PWM 输出 / Start PWM output.
Definition hpm_pwm.cpp:189
ErrorCode SetConfig(Configuration config) override
配置 PWM 频率 / Configure PWM frequency.
Definition hpm_pwm.cpp:88
Abstract base class for PWM (Pulse Width Modulation) control. PWM(脉冲宽度调制)控制的抽象基类。
Definition pwm.hpp:14
LibXR 命名空间
Definition ch32_can.hpp:14
ErrorCode
定义错误码枚举
Configuration parameters for PWM. PWM 配置参数。
Definition pwm.hpp:23