libxr
Embedded C++ framework for bare-metal, RTOS and Linux
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:
34 enum class Polarity : uint8_t
35 {
36 NORMAL,
38 };
39
53 HPMPWM(LibXRHpmPwmType* pwm, clock_name_t clock, uint8_t pwm_index, uint8_t cmp_index,
54 Polarity polarity);
55
61 ErrorCode SetDutyCycle(float value) override;
62
68 ErrorCode SetConfig(Configuration config) override;
69
74 ErrorCode Enable() override;
75
80 ErrorCode Disable() override;
81
82 private:
83 static constexpr uint8_t INVALID_CMP_INDEX = 0xFFu;
84 static uint8_t ResolveGptmrReloadCmpIndex(uint8_t duty_cmp_index);
85
86 LibXRHpmPwmType* pwm_;
87 GPTMR_Type* gptmr_;
88 clock_name_t clock_;
89 uint8_t pwm_index_;
90 uint8_t cmp_index_;
91 bool invert_;
92 uint32_t reload_;
93 bool configured_;
94};
95
96} // namespace LibXR
HPM 平台 PWM 驱动实现 / PWM driver implementation for HPM platform.
Definition hpm_pwm.hpp:31
Polarity
输出极性 / Output polarity.
Definition hpm_pwm.hpp:35
@ NORMAL
不反相 / Not inverted.
@ INVERTED
反相输出 / Inverted output.
HPMPWM(LibXRHpmPwmType *pwm, clock_name_t clock, uint8_t pwm_index, uint8_t cmp_index, Polarity polarity)
构造 HPM PWM 对象 / Construct an HPM PWM object.
Definition hpm_pwm.cpp:24
ErrorCode Disable() override
停止 PWM 输出 / Stop PWM output.
Definition hpm_pwm.cpp:184
ErrorCode SetDutyCycle(float value) override
设置占空比 / Set PWM duty cycle.
Definition hpm_pwm.cpp:37
ErrorCode Enable() override
启动 PWM 输出 / Start PWM output.
Definition hpm_pwm.cpp:166
ErrorCode SetConfig(Configuration config) override
配置 PWM 频率 / Configure PWM frequency.
Definition hpm_pwm.cpp:80
PWM(脉冲宽度调制)控制的抽象基类。 Abstract base class for PWM (Pulse Width Modulation) control.
Definition pwm.hpp:14
LibXR 命名空间 / LibXR namespace.
Definition ch32_can.hpp:14
ErrorCode
定义错误码枚举 / Defines an enumeration for error codes