move drivers into namespaces
This commit is contained in:
parent
7f59ca704b
commit
d060dce4ec
101
source/adc.cpp
101
source/adc.cpp
@ -18,7 +18,7 @@ constexpr static const ADCConfig adc_config = {
|
||||
.difsel = 0
|
||||
};
|
||||
|
||||
void adc_read_callback(ADCDriver *);
|
||||
static void adc_read_callback(ADCDriver *);
|
||||
|
||||
/*constexpr*/ static ADCConversionGroup adc_group_config = {
|
||||
.circular = false,
|
||||
@ -46,61 +46,64 @@ constexpr static const GPTConfig gpt_config = {
|
||||
|
||||
static bool adc_is_read_finished = false;
|
||||
|
||||
void adc_init()
|
||||
{
|
||||
palSetPadMode(GPIOA, 0, PAL_MODE_INPUT_ANALOG);
|
||||
|
||||
gptStart(gptd, &gpt_config);
|
||||
adcStart(adcd, &adc_config);
|
||||
adcSTM32EnableVREF(adcd);
|
||||
}
|
||||
|
||||
adcsample_t *adc_read(adcsample_t *buffer, size_t count)
|
||||
{
|
||||
adc_is_read_finished = false;
|
||||
adcStartConversion(adcd, &adc_group_config, buffer, count);
|
||||
gptStartContinuous(gptd, 100); // 10kHz
|
||||
while (!adc_is_read_finished);
|
||||
return buffer;
|
||||
}
|
||||
|
||||
void adc_read_callback([[maybe_unused]] ADCDriver *driver)
|
||||
{
|
||||
gptStopTimer(gptd);
|
||||
adc_is_read_finished = true;
|
||||
}
|
||||
|
||||
void adc_set_rate(ADCRate rate)
|
||||
namespace adc
|
||||
{
|
||||
uint32_t val = 0;
|
||||
|
||||
switch (rate) {
|
||||
case ADCRate::R2P5:
|
||||
val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_2P5);
|
||||
break;
|
||||
case ADCRate::R6P5:
|
||||
val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_6P5);
|
||||
break;
|
||||
case ADCRate::R12P5:
|
||||
val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_12P5);
|
||||
break;
|
||||
case ADCRate::R24P5:
|
||||
val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_24P5);
|
||||
break;
|
||||
case ADCRate::R47P5:
|
||||
val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_47P5);
|
||||
break;
|
||||
case ADCRate::R92P5:
|
||||
val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_92P5);
|
||||
break;
|
||||
case ADCRate::R247P5:
|
||||
val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_247P5);
|
||||
break;
|
||||
case ADCRate::R640P5:
|
||||
val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_640P5);
|
||||
break;
|
||||
void init()
|
||||
{
|
||||
palSetPadMode(GPIOA, 0, PAL_MODE_INPUT_ANALOG);
|
||||
|
||||
gptStart(gptd, &gpt_config);
|
||||
adcStart(adcd, &adc_config);
|
||||
adcSTM32EnableVREF(adcd);
|
||||
}
|
||||
|
||||
adcsample_t *read(adcsample_t *buffer, size_t count)
|
||||
{
|
||||
adc_is_read_finished = false;
|
||||
adcStartConversion(adcd, &adc_group_config, buffer, count);
|
||||
gptStartContinuous(gptd, 100); // 10kHz
|
||||
while (!adc_is_read_finished);
|
||||
return buffer;
|
||||
}
|
||||
|
||||
void set_rate(rate r)
|
||||
{
|
||||
uint32_t val = 0;
|
||||
|
||||
switch (r) {
|
||||
case rate::R2P5:
|
||||
val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_2P5);
|
||||
break;
|
||||
case rate::R6P5:
|
||||
val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_6P5);
|
||||
break;
|
||||
case rate::R12P5:
|
||||
val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_12P5);
|
||||
break;
|
||||
case rate::R24P5:
|
||||
val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_24P5);
|
||||
break;
|
||||
case rate::R47P5:
|
||||
val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_47P5);
|
||||
break;
|
||||
case rate::R92P5:
|
||||
val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_92P5);
|
||||
break;
|
||||
case rate::R247P5:
|
||||
val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_247P5);
|
||||
break;
|
||||
case rate::R640P5:
|
||||
val = ADC_SMPR1_SMP_AN5(ADC_SMPR_SMP_640P5);
|
||||
break;
|
||||
}
|
||||
|
||||
adc_group_config.smpr[0] = val;
|
||||
}
|
||||
|
||||
adc_group_config.smpr[0] = val;
|
||||
}
|
||||
|
||||
|
@ -14,20 +14,23 @@
|
||||
|
||||
#include "hal.h"
|
||||
|
||||
enum class ADCRate {
|
||||
R2P5,
|
||||
R6P5,
|
||||
R12P5,
|
||||
R24P5,
|
||||
R47P5,
|
||||
R92P5,
|
||||
R247P5,
|
||||
R640P5
|
||||
};
|
||||
|
||||
void adc_init();
|
||||
adcsample_t *adc_read(adcsample_t *buffer, size_t count);
|
||||
void adc_set_rate(ADCRate rate);
|
||||
namespace adc
|
||||
{
|
||||
enum class rate {
|
||||
R2P5,
|
||||
R6P5,
|
||||
R12P5,
|
||||
R24P5,
|
||||
R47P5,
|
||||
R92P5,
|
||||
R247P5,
|
||||
R640P5
|
||||
};
|
||||
|
||||
void init();
|
||||
adcsample_t *read(adcsample_t *buffer, size_t count);
|
||||
void set_rate(rate r);
|
||||
}
|
||||
|
||||
#endif // STMDSP_ADC_HPP_
|
||||
|
||||
|
@ -34,24 +34,27 @@ constexpr static const GPTConfig gpt_config = {
|
||||
.dier = 0
|
||||
};
|
||||
|
||||
void dac_init()
|
||||
namespace dac
|
||||
{
|
||||
palSetPadMode(GPIOA, 4, PAL_MODE_INPUT_ANALOG);
|
||||
//palSetPadMode(GPIOA, 5, PAL_MODE_INPUT_ANALOG);
|
||||
|
||||
dacStart(dacd, &dac_config);
|
||||
gptStart(gptd, &gpt_config);
|
||||
}
|
||||
|
||||
void dac_write_start(dacsample_t *buffer, size_t count)
|
||||
{
|
||||
dacStartConversion(dacd, &dac_group_config, buffer, count);
|
||||
gptStartContinuous(gptd, 1);
|
||||
}
|
||||
|
||||
void dac_write_stop()
|
||||
{
|
||||
gptStopTimer(gptd);
|
||||
dacStopConversion(dacd);
|
||||
void init()
|
||||
{
|
||||
palSetPadMode(GPIOA, 4, PAL_MODE_INPUT_ANALOG);
|
||||
//palSetPadMode(GPIOA, 5, PAL_MODE_INPUT_ANALOG);
|
||||
|
||||
dacStart(dacd, &dac_config);
|
||||
gptStart(gptd, &gpt_config);
|
||||
}
|
||||
|
||||
void write_start(dacsample_t *buffer, size_t count)
|
||||
{
|
||||
dacStartConversion(dacd, &dac_group_config, buffer, count);
|
||||
gptStartContinuous(gptd, 1);
|
||||
}
|
||||
|
||||
void write_stop()
|
||||
{
|
||||
gptStopTimer(gptd);
|
||||
dacStopConversion(dacd);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -14,9 +14,12 @@
|
||||
|
||||
#include "hal.h"
|
||||
|
||||
void dac_init();
|
||||
void dac_write_start(dacsample_t *buffer, size_t count);
|
||||
void dac_write_stop();
|
||||
namespace dac
|
||||
{
|
||||
void init();
|
||||
void write_start(dacsample_t *buffer, size_t count);
|
||||
void write_stop();
|
||||
}
|
||||
|
||||
#endif // STMDSP_DAC_HPP_
|
||||
|
||||
|
@ -33,39 +33,39 @@ int main()
|
||||
|
||||
palSetPadMode(GPIOA, 5, PAL_MODE_OUTPUT_PUSHPULL); // LED
|
||||
|
||||
adc_init();
|
||||
dac_init();
|
||||
usbserial_init();
|
||||
adc::init();
|
||||
dac::init();
|
||||
usbserial::init();
|
||||
|
||||
static unsigned int dac_sample_count = 2048;
|
||||
while (true) {
|
||||
if (usbserial_is_active()) {
|
||||
if (usbserial::is_active()) {
|
||||
// Expect to receive a byte command 'packet'.
|
||||
if (char cmd[3]; usbserial_read(&cmd, 1) > 0) {
|
||||
if (char cmd[3]; usbserial::read(&cmd, 1) > 0) {
|
||||
switch (cmd[0]) {
|
||||
case 'r': // Read in analog signal
|
||||
if (usbserial_read(&cmd[1], 2) < 2)
|
||||
if (usbserial::read(&cmd[1], 2) < 2)
|
||||
break;
|
||||
if (auto count = std::min(static_cast<unsigned int>(cmd[1] | (cmd[2] << 8)), adc_samples.size()); count > 0) {
|
||||
adc_read(&adc_samples[0], count);
|
||||
usbserial_write(adc_samples.data(), count * sizeof(adcsample_t));
|
||||
adc::read(&adc_samples[0], count);
|
||||
usbserial::write(adc_samples.data(), count * sizeof(adcsample_t));
|
||||
}
|
||||
break;
|
||||
case 'W':
|
||||
if (usbserial_read(&cmd[1], 2) < 2)
|
||||
if (usbserial::read(&cmd[1], 2) < 2)
|
||||
break;
|
||||
if (auto count = std::min(static_cast<unsigned int>(cmd[1] | (cmd[2] << 8)), dac_samples.size()); count > 0)
|
||||
dac_sample_count = count;
|
||||
else
|
||||
dac_write_stop();
|
||||
dac::write_stop();
|
||||
break;
|
||||
case 'w':
|
||||
if (usbserial_read(&dac_samples[0], 2 * dac_sample_count) != 2 * dac_sample_count)
|
||||
if (usbserial::read(&dac_samples[0], 2 * dac_sample_count) != 2 * dac_sample_count)
|
||||
break;
|
||||
dac_write_start(&dac_samples[0], dac_sample_count);
|
||||
dac::write_start(&dac_samples[0], dac_sample_count);
|
||||
break;
|
||||
case 'i': // Identify ourself as an stmdsp device
|
||||
usbserial_write("stmdsp", 6);
|
||||
usbserial::write("stmdsp", 6);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -15,35 +15,38 @@
|
||||
|
||||
constexpr static const auto sdud = &SDU1;
|
||||
|
||||
void usbserial_init()
|
||||
namespace usbserial
|
||||
{
|
||||
palSetPadMode(GPIOA, 11, PAL_MODE_ALTERNATE(10));
|
||||
palSetPadMode(GPIOA, 12, PAL_MODE_ALTERNATE(10));
|
||||
|
||||
sduObjectInit(sdud);
|
||||
sduStart(sdud, &serusbcfg);
|
||||
|
||||
// Reconnect bus so device can re-enumerate on reset
|
||||
usbDisconnectBus(serusbcfg.usbp);
|
||||
chThdSleepMilliseconds(1500);
|
||||
usbStart(serusbcfg.usbp, &usbcfg);
|
||||
usbConnectBus(serusbcfg.usbp);
|
||||
}
|
||||
|
||||
bool usbserial_is_active()
|
||||
{
|
||||
return sdud->config->usbp->state == USB_ACTIVE;
|
||||
}
|
||||
|
||||
size_t usbserial_read(void *buffer, size_t count)
|
||||
{
|
||||
auto bss = reinterpret_cast<BaseSequentialStream *>(sdud);
|
||||
return streamRead(bss, static_cast<uint8_t *>(buffer), count);
|
||||
}
|
||||
|
||||
size_t usbserial_write(const void *buffer, size_t count)
|
||||
{
|
||||
auto bss = reinterpret_cast<BaseSequentialStream *>(sdud);
|
||||
return streamWrite(bss, static_cast<const uint8_t *>(buffer), count);
|
||||
void init()
|
||||
{
|
||||
palSetPadMode(GPIOA, 11, PAL_MODE_ALTERNATE(10));
|
||||
palSetPadMode(GPIOA, 12, PAL_MODE_ALTERNATE(10));
|
||||
|
||||
sduObjectInit(sdud);
|
||||
sduStart(sdud, &serusbcfg);
|
||||
|
||||
// Reconnect bus so device can re-enumerate on reset
|
||||
usbDisconnectBus(serusbcfg.usbp);
|
||||
chThdSleepMilliseconds(1500);
|
||||
usbStart(serusbcfg.usbp, &usbcfg);
|
||||
usbConnectBus(serusbcfg.usbp);
|
||||
}
|
||||
|
||||
bool is_active()
|
||||
{
|
||||
return sdud->config->usbp->state == USB_ACTIVE;
|
||||
}
|
||||
|
||||
size_t read(void *buffer, size_t count)
|
||||
{
|
||||
auto bss = reinterpret_cast<BaseSequentialStream *>(sdud);
|
||||
return streamRead(bss, static_cast<uint8_t *>(buffer), count);
|
||||
}
|
||||
|
||||
size_t write(const void *buffer, size_t count)
|
||||
{
|
||||
auto bss = reinterpret_cast<BaseSequentialStream *>(sdud);
|
||||
return streamWrite(bss, static_cast<const uint8_t *>(buffer), count);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -14,10 +14,14 @@
|
||||
|
||||
#include "hal.h"
|
||||
|
||||
void usbserial_init();
|
||||
bool usbserial_is_active();
|
||||
size_t usbserial_read(void *buffer, size_t count);
|
||||
size_t usbserial_write(const void *buffer, size_t count);
|
||||
namespace usbserial
|
||||
{
|
||||
void init();
|
||||
bool is_active();
|
||||
|
||||
size_t read(void *buffer, size_t count);
|
||||
size_t write(const void *buffer, size_t count);
|
||||
}
|
||||
|
||||
#endif // STMDSP_USBSERIAL_HPP_
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user