]> code.bitgloo.com Git - clyne/stmdsp.git/commitdiff
fix L4 DAC trigger; round buffers to even size
authorClyne Sullivan <clyne@bitgloo.com>
Mon, 22 Mar 2021 20:06:48 +0000 (16:06 -0400)
committerClyne Sullivan <clyne@bitgloo.com>
Mon, 22 Mar 2021 20:06:48 +0000 (16:06 -0400)
gui/wxmain.cpp
gui/wxmain_mrun.h
source/dac.cpp

index 64f36e462963771c87320ea5e1707a5eda2911f6..13d75869a14c1880c5b472acda0929a6f2bc9a61 100644 (file)
@@ -258,8 +258,6 @@ void MainFrame::onPaint(wxPaintEvent&)
     dc->SetBrush(*wxBLACK_BRUSH);
     dc->SetPen(*wxBLACK_PEN);
     dc->DrawRectangle(rect);
-    dc->SetBrush(*wxRED_BRUSH);
-    dc->SetPen(*wxRED_PEN);
     auto stoy = [&](stmdsp::adcsample_t s) {
         return static_cast<float>(py) + rect.GetHeight() -
             (static_cast<float>(rect.GetHeight()) * s / 4095.f);
@@ -268,15 +266,17 @@ void MainFrame::onPaint(wxPaintEvent&)
     float dx = static_cast<float>(rect.GetWidth()) / scount;
     float x = 0;
     float lasty = stoy(2048);
+    dc->SetBrush(wxBrush(wxColour(0xFF, 0, 0, 0x80)));
+    dc->SetPen(wxPen(wxColour(0xFF, 0, 0, 0x80)));
     for (decltype(scount) i = 0; i < scount; i++) {
         auto y = stoy(m_device_samples[i]);
         dc->DrawLine(x, lasty, x + dx, y);
         x += dx, lasty = y;
     }
-    dc->SetBrush(*wxBLUE_BRUSH);
-    dc->SetPen(*wxBLUE_PEN);
     x = 0;
     lasty = stoy(2048);
+    dc->SetBrush(wxBrush(wxColour(0, 0, 0xFF, 0x80)));
+    dc->SetPen(wxPen(wxColour(0, 0, 0xFF, 0x80)));
     for (decltype(scount) i = 0; i < scount; i++) {
         auto y = stoy(m_device_samples_input[i]);
         dc->DrawLine(x, lasty, x + dx, y);
index b00898a9d037ff067bbb5a74f7e4a588fc5a51a0..919b17df66273aec61109a27ca67eddab24bb52f 100644 (file)
@@ -103,6 +103,8 @@ void MainFrame::onRunEditBSize(wxCommandEvent&)
         if (wxString value = dialog.GetValue(); !value.IsEmpty()) {
             if (unsigned long n; value.ToULong(&n)) {
                 if (n >= 100 && n <= stmdsp::SAMPLES_MAX) {
+                    if (n & 1 == 1)
+                        ++n;
                     m_device->continuous_set_buffer_size(n);
                 } else {
                     m_status_bar->SetStatusText("Error: Invalid buffer size.");
@@ -156,6 +158,9 @@ void MainFrame::onRunGenUpload(wxCommandEvent&)
             }
 
             if (samples.size() <= stmdsp::SAMPLES_MAX * 2) {
+                // DAC buffer must be of even size
+                if (samples.size() & 1 == 1)
+                    samples.push_back(0);
                 m_device->siggen_upload(&samples[0], samples.size());
                 m_status_bar->SetStatusText("Generator ready.");
             } else {
index 2116dcb277fbafbd73eea18a5b98e0d24d91ffb8..ce9c465dc165f9a6c7d88f4aca197c3a32bfa5fd 100644 (file)
@@ -26,13 +26,17 @@ const DACConversionGroup DAC::m_group_config = {
     .num_channels = 1,
     .end_cb = nullptr,
     .error_cb = nullptr,
+#if defined(TARGET_PLATFORM_H7)
     .trigger = 5 // TIM6_TRGO
+#elif defined(TARGET_PLATFORM_L4)
+    .trigger = 0 // TIM6_TRGO
+#endif
 };
 
 void DAC::begin()
 {
-    palSetPadMode(GPIOA, 4, PAL_MODE_INPUT_ANALOG);
-    palSetPadMode(GPIOA, 5, PAL_MODE_INPUT_ANALOG);
+    palSetPadMode(GPIOA, 4, PAL_STM32_MODE_ANALOG);
+    palSetPadMode(GPIOA, 5, PAL_STM32_MODE_ANALOG);
 
     dacStart(m_driver[0], &m_config);
     dacStart(m_driver[1], &m_config);