M5Unit-DDS 0.1.1 git rev:fcb7ed8
Loading...
Searching...
No Matches
unit_DDS.hpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2025 M5Stack Technology CO LTD
3 *
4 * SPDX-License-Identifier: MIT
5 */
10#ifndef M5_UNIT_DDS_UNIT_DDS_HPP
11#define M5_UNIT_DDS_UNIT_DDS_HPP
12
13#include <M5UnitComponent.hpp>
14
15namespace m5 {
16namespace unit {
17
22namespace dds {
23
28enum class Mode : uint8_t {
29 Reserved,
30 Sin,
31 Triangle,
32 Square,
33 Sawtooth,
35 DC,
36};
37
38} // namespace dds
39
44class UnitDDS : public Component {
45 M5_UNIT_COMPONENT_HPP_BUILDER(UnitDDS, 0x31);
46
47public:
52 struct config_t {
53 bool start_output{true};
54 dds::Mode mode{dds::Mode::Sin};
55 bool select{};
56 uint32_t freq{10000};
57 uint16_t deg{0};
58 };
59
62 explicit UnitDDS(const uint8_t addr = DEFAULT_ADDRESS) : Component(addr)
63 {
64 auto ccfg = component_config();
65 ccfg.clock = 400 * 1000U;
66 component_config(ccfg);
67 }
68 virtual ~UnitDDS()
69 {
70 }
71
74 virtual bool begin() override;
75
78
80 {
81 return _cfg;
82 }
84 inline void config(const config_t& cfg)
85 {
86 _cfg = cfg;
87 }
89
93 uint32_t frequency0() const
94 {
95 return _freq[0];
96 }
98 uint32_t frequency1() const
99 {
100 return _freq[1];
101 }
103
106
111 bool readMode(dds::Mode& mode);
118 bool writeMode(const dds::Mode mode);
120
123
130 bool writeFrequency(const bool select, const uint32_t freq);
137 inline bool writeFrequency0(const uint32_t freq)
138 {
139 return writeFrequency(false, freq);
140 }
147 inline bool writeFrequency1(const uint32_t freq)
148 {
149 return writeFrequency(true, freq);
150 }
158 bool writePhase(const bool select, const uint16_t deg);
165 inline bool writePhase0(const uint16_t deg)
166 {
167 return writePhase(false, deg);
168 }
175 inline bool writePhase1(const uint16_t deg)
176 {
177 return writePhase(true, deg);
178 }
188 bool writeFrequencyAndPhase(const bool select_freq, const uint32_t freq, const bool select_phase,
189 const uint16_t deg);
197 bool writeCurrent(const bool select_freq, const bool select_phase);
204 bool writeCurrentFrequency(const bool select);
211 bool writeCurrentPhase(const bool select);
213
216
225 bool writeOutput(const dds::Mode mode, const bool select, const uint32_t freq, const uint16_t deg);
232 bool sleep(const bool mclk = true, const bool DAC = true);
238 bool wakeup();
244 bool reset();
246
253 bool readDescription(char str[7]);
254
255protected:
256 bool read_control(uint8_t& ctrl);
257 bool write_register8(const uint8_t reg, const uint8_t v);
258
259private:
260 config_t _cfg{};
261 dds::Mode _mode{};
262 uint32_t _freq[2]{};
263};
264
265namespace dds {
266namespace command {
268constexpr uint8_t READ_DESCRIPTION_REG{0x10};
269constexpr uint8_t MODE_REG{0x20};
270constexpr uint8_t CONTROL_REG{0x21};
271constexpr uint8_t FREQUENCY_REG{0x30};
272constexpr uint8_t PHASE_REG{0x34};
274} // namespace command
275} // namespace dds
276
277} // namespace unit
278} // namespace m5
279#endif
DDS unit with AD9833.
bool writeCurrentFrequency(const bool select)
Write which bank frequency setting to use.
Definition unit_DDS.cpp:183
bool writeFrequency1(const uint32_t freq)
Write the frequency to bank 1.
Definition unit_DDS.hpp:147
bool writeCurrentPhase(const bool select)
Write which bank phase setting to use.
Definition unit_DDS.cpp:194
bool writePhase(const bool select, const uint16_t deg)
Write the phase.
Definition unit_DDS.cpp:137
void config(const config_t &cfg)
Set the configuration.
Definition unit_DDS.hpp:84
bool wakeup()
Wake up.
Definition unit_DDS.cpp:231
bool writeFrequencyAndPhase(const bool select_freq, const uint32_t freq, const bool select_phase, const uint16_t deg)
Write the frequency and phase.
Definition unit_DDS.cpp:146
bool writePhase0(const uint16_t deg)
Write the phase to bank 0.
Definition unit_DDS.hpp:165
bool sleep(const bool mclk=true, const bool DAC=true)
Sleep.
Definition unit_DDS.cpp:214
config_t config()
Gets the configuration.
Definition unit_DDS.hpp:79
bool readMode(dds::Mode &mode)
Read the mode.
Definition unit_DDS.cpp:88
uint32_t frequency0() const
Gets written frequency 0 (Hz)
Definition unit_DDS.hpp:93
uint32_t frequency1() const
Gets written frequency 1 (Hz)
Definition unit_DDS.hpp:98
bool writePhase1(const uint16_t deg)
Write the phase to bank 1.
Definition unit_DDS.hpp:175
UnitDDS(const uint8_t addr=DEFAULT_ADDRESS)
Constructor.
Definition unit_DDS.hpp:62
bool readDescription(char str[7])
Read the description.
Definition unit_DDS.cpp:72
bool writeMode(const dds::Mode mode)
Write the mode.
Definition unit_DDS.cpp:99
bool writeFrequency(const bool select, const uint32_t freq)
Write the frequency.
Definition unit_DDS.cpp:116
bool writeOutput(const dds::Mode mode, const bool select, const uint32_t freq, const uint16_t deg)
Write mode and settings.
Definition unit_DDS.cpp:205
bool writeCurrent(const bool select_freq, const bool select_phase)
Write which bank setting to use.
Definition unit_DDS.cpp:171
bool reset()
Reset.
Definition unit_DDS.cpp:246
bool writeFrequency0(const uint32_t freq)
Write the frequency to bank 0.
Definition unit_DDS.hpp:137
virtual bool begin() override
Begin unit.
Definition unit_DDS.cpp:58
For UnitDDS.
Top level namespace of M5stack.
Unit-related namespace.
Settings for begin.
Definition unit_DDS.hpp:52
bool select
Using bank if start output on begin.
Definition unit_DDS.hpp:55
uint16_t deg
Phase if start output on begin.
Definition unit_DDS.hpp:57
bool start_output
Start output on begin if true.
Definition unit_DDS.hpp:53
uint32_t freq
Frequency if start output on begin.
Definition unit_DDS.hpp:56
dds::Mode mode
Output mode if start output on begin.
Definition unit_DDS.hpp:54
Mode
Output mode.
Definition unit_DDS.hpp:28
@ Triangle
Triangle wave.
@ Square
Square wave.
@ DC
DC (M5 extension)