M5Unit-DDS 0.1.0 git rev:bcf3c40
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
60 explicit UnitDDS(const uint8_t addr = DEFAULT_ADDRESS) : Component(addr)
61 {
62 auto ccfg = component_config();
63 ccfg.clock = 400 * 1000U;
64 component_config(ccfg);
65 }
66 virtual ~UnitDDS()
67 {
68 }
69
70 virtual bool begin() override;
71
74
76 {
77 return _cfg;
78 }
80 inline void config(const config_t& cfg)
81 {
82 _cfg = cfg;
83 }
85
89 uint16_t frequency0() const
90 {
91 return _freq[0];
92 }
94 uint16_t frequency1() const
95 {
96 return _freq[1];
97 }
99
102
107 bool readMode(dds::Mode& mode);
114 bool writeMode(const dds::Mode mode);
116
119
126 bool writeFrequency(const bool select, const uint32_t freq);
133 inline bool writeFrequency0(const uint32_t freq)
134 {
135 return writeFrequency(false, freq);
136 }
143 inline bool writeFrequency1(const uint32_t freq)
144 {
145 return writeFrequency(true, freq);
146 }
154 bool writePhase(const bool select, const uint16_t deg);
161 inline bool writePhase0(const uint16_t deg)
162 {
163 return writePhase(false, deg);
164 }
171 inline bool writePhase1(const uint16_t deg)
172 {
173 return writePhase(true, deg);
174 }
184 bool writeFrequencyAndPhase(const bool select_freq, const uint32_t freq, const bool select_phase,
185 const uint16_t deg);
193 bool writeCurrent(const bool select_freq, const bool select_phase);
200 bool writeCurrentFrequency(const bool select);
207 bool writeCurrentPhase(const bool select);
209
212
221 bool writeOutput(const dds::Mode mode, const bool select, const uint32_t freq, const uint16_t deg);
228 bool sleep(const bool mclk = true, const bool DAC = true);
234 bool wakeup();
240 bool reset();
242
249 bool readDescription(char str[7]);
250
251protected:
252 bool read_control(uint8_t& ctrl);
253 bool write_register8(const uint8_t reg, const uint8_t v);
254
255private:
256 config_t _cfg{};
257 dds::Mode _mode{};
258 uint16_t _freq[2]{};
259};
260
261namespace dds {
262namespace command {
264constexpr uint8_t READ_DESCRIPTION_REG{0x10};
265constexpr uint8_t MODE_REG{0x20};
266constexpr uint8_t CONTROL_REG{0x21};
267constexpr uint8_t FREQUENCY_REG{0x30};
268constexpr uint8_t PHASE_REG{0x34};
270} // namespace command
271} // namespace dds
272
273} // namespace unit
274} // namespace m5
275#endif
DDS unit with AD9833.
bool writeCurrentFrequency(const bool select)
Write which bank frequency setting to use.
Definition unit_DDS.cpp:184
bool writeFrequency1(const uint32_t freq)
Write the frequency to bank 1.
Definition unit_DDS.hpp:143
bool writeCurrentPhase(const bool select)
Write which bank phase setting to use.
Definition unit_DDS.cpp:195
bool writePhase(const bool select, const uint16_t deg)
Write the phase.
Definition unit_DDS.cpp:136
void config(const config_t &cfg)
Set the configration.
Definition unit_DDS.hpp:80
bool wakeup()
Wake up.
Definition unit_DDS.cpp:232
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:145
bool writePhase0(const uint16_t deg)
Write the phase to bank 0.
Definition unit_DDS.hpp:161
bool sleep(const bool mclk=true, const bool DAC=true)
Sleep.
Definition unit_DDS.cpp:215
config_t config()
Gets the configration.
Definition unit_DDS.hpp:75
bool readMode(dds::Mode &mode)
Read the mode.
Definition unit_DDS.cpp:87
uint16_t frequency1() const
Gets written frequency 1 (Hz)
Definition unit_DDS.hpp:94
uint16_t frequency0() const
Gets written frequency 0 (Hz)
Definition unit_DDS.hpp:89
bool writePhase1(const uint16_t deg)
Write the phase to bank 1.
Definition unit_DDS.hpp:171
bool readDescription(char str[7])
Read the description.
Definition unit_DDS.cpp:71
bool writeMode(const dds::Mode mode)
Write the mode.
Definition unit_DDS.cpp:98
bool writeFrequency(const bool select, const uint32_t freq)
Write the frequency.
Definition unit_DDS.cpp:115
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:206
bool writeCurrent(const bool select_freq, const bool select_phase)
Write which bank setting to use.
Definition unit_DDS.cpp:172
bool reset()
Reset.
Definition unit_DDS.cpp:247
bool writeFrequency0(const uint32_t freq)
Write the frequency to bank 0.
Definition unit_DDS.hpp:133
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)