diff options
Diffstat (limited to 'source/main.cpp')
-rw-r--r-- | source/main.cpp | 137 |
1 files changed, 18 insertions, 119 deletions
diff --git a/source/main.cpp b/source/main.cpp index eb77a5d..16ca7a8 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -1,92 +1,9 @@ #include "ch.h"
#include "hal.h"
-#include "usbcfg.h"
-class dDAC
-{
-public:
- constexpr dDAC(DACDriver& driver, const DACConfig& config) :
- m_driver(&driver), m_config(config) {}
-
- void init() {
- dacStart(m_driver, &m_config);
- }
-
- void writeX(unsigned int channel, uint16_t value) {
- if (channel < 2)
- dacPutChannelX(m_driver, channel, value);
- }
-
-private:
- DACDriver *m_driver;
- DACConfig m_config;
-};
-
-//static const DACConversionGroup dacGroupConfig = {
-// .num_channels = 1,
-// .end_cb = NULL,
-// .error_cb = NULL,
-// .trigger = DAC_TRG(0)
-//};
-
-class dGPT {
-public:
- constexpr dGPT(GPTDriver& driver, const GPTConfig& config) :
- m_driver(&driver), m_config(config) {}
-
- void init() {
- gptStart(m_driver, &m_config);
- }
-
- void startContinuous(unsigned int interval) {
- gptStartContinuous(m_driver, interval);
- }
-
- void stop() {
- gptStopTimer(m_driver);
- }
-
-private:
- GPTDriver *m_driver;
- GPTConfig m_config;
-};
-
-static dGPT gpt (GPTD4, {
- .frequency = 1000000,
- .callback = NULL,
- .cr2 = TIM_CR2_MMS_1, /* MMS = 010 = TRGO on Update Event. */
- .dier = 0
-});
-
-static const ADCConfig adcConfig = {
- .difsel = 0
-};
-
-volatile bool adcFinished = false;
-void adcEndCallback(ADCDriver *adcd)
-{
- (void)adcd;
- gpt.stop();
- adcFinished = true;
-}
-
-static const ADCConversionGroup adcGroupConfig = {
- .circular = false,
- .num_channels = 1,
- .end_cb = adcEndCallback,
- .error_cb = NULL,
- .cfgr = ADC_CFGR_EXTEN_RISING |
- ADC_CFGR_EXTSEL_SRC(12), /* TIM4_TRGO */
- .cfgr2 = 0,
- .tr1 = ADC_TR(0, 4095),
- .smpr = {
- ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_247P5), 0
- },
- .sqr = {
- ADC_SQR1_SQ1_N(ADC_CHANNEL_IN5),
- 0, 0, 0
- }
-};
+#include "adc.hpp"
+#include "dac.hpp"
+#include "usbserial.hpp"
#if CACHE_LINE_SIZE > 0
CC_ALIGN(CACHE_LINE_SIZE)
@@ -94,47 +11,29 @@ CC_ALIGN(CACHE_LINE_SIZE) adcsample_t samples[CACHE_SIZE_ALIGN(adcsample_t, 10)];
int main(void) {
- halInit();
- chSysInit();
-
- palSetPadMode(GPIOA, 5, PAL_MODE_OUTPUT_PUSHPULL); // LED
- palSetPadMode(GPIOA, 11, PAL_MODE_ALTERNATE(10)); // USB
- palSetPadMode(GPIOA, 12, PAL_MODE_ALTERNATE(10));
- palSetPadMode(GPIOA, 0, PAL_MODE_INPUT_ANALOG); // Channel A in (1in5)
+ halInit();
+ chSysInit();
- palSetPadMode(GPIOA, 4, PAL_MODE_INPUT_ANALOG); // DAC out1, out2
- palSetPadMode(GPIOA, 5, PAL_MODE_INPUT_ANALOG);
+ palSetPadMode(GPIOA, 5, PAL_MODE_OUTPUT_PUSHPULL); // LED
- gpt.init();
+ ADCd adc (ADCD1, GPTD4);
+ adc.start();
- //dDAC dac (DACD1, {
+ //DACd dac (DACD1, {
// .init = 0,
// .datamode = DAC_DHRM_12BIT_RIGHT,
// .cr = 0
//});
+ //dac.start();
+ //dac.write(0, 1024);
- //dac.init();
- //dac.writeX(0, 1024);
-
- adcStart(&ADCD1, &adcConfig);
- adcSTM32EnableVREF(&ADCD1);
-
- sduObjectInit(&SDU1);
- sduStart(&SDU1, &serusbcfg);
- usbDisconnectBus(serusbcfg.usbp);
- chThdSleepMilliseconds(1500);
- usbStart(serusbcfg.usbp, &usbcfg);
- usbConnectBus(serusbcfg.usbp);
+ USBSeriald usbd (SDU1);
+ usbd.start();
while (true) {
- if (SDU1.config->usbp->state == USB_ACTIVE) {
- BaseSequentialStream *bss = (BaseSequentialStream *)&SDU1;
- char c = 0;
- if (streamRead(bss, (uint8_t *)&c, 1) > 0 && c == 's') {
- adcFinished = false;
- adcStartConversion(&ADCD1, &adcGroupConfig, samples, 10);
- gpt.startContinuous(100);
- while (!adcFinished);
+ if (usbd.active()) {
+ if (char c; usbd.read(&c) > 0 && c == 's') {
+ adc.getSamples(samples, 10);
for (int i = 0; i < 10; i++) {
uint8_t str[5] = {
static_cast<uint8_t>(samples[i] / 1000 % 10 + '0'),
@@ -143,9 +42,9 @@ int main(void) { static_cast<uint8_t>(samples[i] % 10 + '0'),
' '
};
- streamWrite(bss, str, 5);
+ usbd.write(str, 5);
}
- streamWrite(bss, (uint8_t *)"\r\n", 2);
+ usbd.write("\r\n", 2);
}
}
chThdSleepMilliseconds(250);
|