YAHAL
Yet Another Hardware Abstraction Library
Loading...
Searching...
No Matches
pcm_pwm_rp2350_drv.h
1// ---------------------------------------------
2// This file is part of
3// _ _ __ _ _ __ __
4// ( \/ ) /__\ ( )_( ) /__\ ( )
5// \ / /(__)\ ) _ ( /(__)\ )(__
6// (__)(__)(__)(_) (_)(__)(__)(____)
7//
8// Yet Another HW Abstraction Library
9// Copyright (C) Andreas Terstegge
10// BSD Licensed (see file LICENSE)
11//
12// ---------------------------------------------
13//
14#ifndef _PCM_PWM_RP2350_DRV_H_
15#define _PCM_PWM_RP2350_DRV_H_
16
17#include <cstdint>
18#include "pcm_audio_interface.h"
19#include "gpio_rp2350.h"
20#include "timer_rp2350.h"
21#include "RP2350.h"
22
23using namespace _PWM_;
24
26public:
27 pcm_pwm_rp2350_drv(gpio_pin_t left, gpio_pin_t right);
28 pcm_pwm_rp2350_drv(gpio_pin_t mono);
29 virtual ~pcm_pwm_rp2350_drv();
30
31 void enable_output(bool v);
32 void setPcmRate(uint32_t Hz) override;
33 inline void timer_reset() { _pcm_timer.reset(); }
34
35private:
36 bool _stereo;
37 gpio_rp2350 _gpio_left;
38 gpio_rp2350 _gpio_right;
39 timer_rp2350 _pcm_timer;
40 bool _left_is_pwm_b;
41 bool _right_is_pwm_b;
42 CH_CSR_t * _left_pwm_csr;
43 CH_CC_t * _left_pwm_cc;
44 CH_CSR_t * _right_pwm_csr;
45 CH_CC_t * _right_pwm_cc;
46};
47
48#endif // _PCM_PWM_RP2350_DRV_H_