Tidying code for PR/ Minor Issues
This commit is contained in:
parent
e23b621d69
commit
6fd08483e2
@ -46,34 +46,24 @@
|
||||
|
||||
void common_hal_adcbuffer_bufferedinput_construct(adcbuffer_bufferedinput_obj_t *self, const mcu_pin_obj_t *pin, uint8_t *buffer, uint32_t len, uint8_t bytes_per_sample, bool samples_signed, uint32_t sample_rate) {
|
||||
|
||||
// Set pin and channel
|
||||
|
||||
self->pin = pin;
|
||||
claim_pin(pin);
|
||||
|
||||
// validate pin number
|
||||
// Make sure pin number is in range for ADC
|
||||
if (pin->number < ADC_FIRST_PIN_NUMBER && pin->number >= (ADC_FIRST_PIN_NUMBER + ADC_PIN_COUNT)) {
|
||||
raise_ValueError_invalid_pins();
|
||||
}
|
||||
|
||||
// TODO: find a wat to accept ADC4 for temperature
|
||||
self->chan = pin->number - ADC_FIRST_PIN_NUMBER;
|
||||
// Set pin and channel
|
||||
self->pin = pin;
|
||||
claim_pin(pin);
|
||||
|
||||
// TODO: Checks on chan value here
|
||||
// TODO: find a way to accept ADC4 for temperature
|
||||
self->chan = pin->number - ADC_FIRST_PIN_NUMBER;
|
||||
|
||||
// Set buffer and length
|
||||
self->buffer = buffer;
|
||||
self->len = len;
|
||||
|
||||
// TODO: checks on length here
|
||||
|
||||
// Set sample rate
|
||||
// NOTE: bits_per_sample = bytes_per_sample * 8;
|
||||
// Set sample rate - used in readmultiple
|
||||
self->bytes_per_sample = bytes_per_sample;
|
||||
|
||||
// TODO: Possibly check Rate values here, already u_int
|
||||
// NOTE: Anything over 500000 for RP2040 will not
|
||||
// exceed DMA conversion sampling rate.
|
||||
self->sample_rate = sample_rate;
|
||||
|
||||
// Standard IO Init
|
||||
@ -111,9 +101,9 @@ void common_hal_adcbuffer_bufferedinput_construct(adcbuffer_bufferedinput_obj_t
|
||||
// intervals). This is all timed by the 48 MHz ADC clock.
|
||||
// sample rate determines divisor, not zero.
|
||||
|
||||
// sample_rate is forced to be >= 1 in shared-bindings
|
||||
adc_set_clkdiv((float)48000000.0 / (float)self->sample_rate);
|
||||
|
||||
// sleep_ms(1000);
|
||||
// Set up the DMA to start transferring data as soon as it appears in FIFO
|
||||
uint dma_chan = dma_claim_unused_channel(true);
|
||||
self->dma_chan = dma_chan;
|
||||
|
@ -27,8 +27,8 @@ CIRCUITPY_PULSEIO ?= 1
|
||||
CIRCUITPY_WATCHDOG ?= 1
|
||||
|
||||
# Use of adcbuffer
|
||||
#CIRCUITPYTHON_ADCBUFFER = 1
|
||||
CIRCUITPY_ADCBUFFER = 1
|
||||
|
||||
# Audio via PWM
|
||||
CIRCUITPY_AUDIOIO = 0
|
||||
CIRCUITPY_AUDIOBUSIO ?= 1
|
||||
|
@ -484,14 +484,6 @@ SRC_C += \
|
||||
|
||||
endif
|
||||
|
||||
#ifeq ($(CIRCUITPYTHON_ADCBUFFER),1)
|
||||
# Needed for ADCBUFFER
|
||||
#SRC_COMMON_HAL_ALL += \
|
||||
# adcbuffer/BufferedInput.c \
|
||||
#
|
||||
#endif
|
||||
|
||||
|
||||
SRC_COMMON_HAL = $(filter $(SRC_PATTERNS), $(SRC_COMMON_HAL_ALL))
|
||||
|
||||
# These don't have corresponding files in each port but are still located in
|
||||
|
@ -37,37 +37,37 @@
|
||||
#include "shared-bindings/adcbuffer/BufferedInput.h"
|
||||
#include "shared-bindings/util.h"
|
||||
|
||||
/// class BufferedInput:
|
||||
/// """Input analog voltage level to supplied buffer using DMA Capture"""
|
||||
///
|
||||
/// def __init__(self, pin: microcontroller.Pin, buffer: WriteableBuffer, *, sample_rate: int = 500000) -> None:
|
||||
/// """Use the BufferedInput on the given pin. Fill the given buffer from ADC read values at the supplied
|
||||
/// sample_rate.
|
||||
///
|
||||
/// :param ~microcontroller.Pin pin: the pin to read from"""
|
||||
/// :param ~circuitpython_typing.WriteableBuffer buffer: buffer: A buffer for samples
|
||||
/// :param ~int sample_rate: rate: The desired playback sample rate
|
||||
///
|
||||
/// Usage::
|
||||
///
|
||||
/// import board
|
||||
/// import adcbuffer
|
||||
/// import array
|
||||
///
|
||||
/// length = 1000
|
||||
/// mybuffer = array.array("H", [0] * length)
|
||||
/// rate = 500000
|
||||
/// adcbuf = adcbuffer.BufferedInput(board.GP26, mybuffer, rate)
|
||||
/// adcbuf.readmultiple()
|
||||
/// adcbuf.deinit()
|
||||
/// for i in range(length):
|
||||
/// print(i, mybuffer[i])
|
||||
///
|
||||
/// (TODO) The reference voltage varies by platform so use ``reference_voltage`` to read the configured setting.
|
||||
/// (TODO) Provide mechanism to read CPU Temperature
|
||||
/// """
|
||||
/// ...
|
||||
///
|
||||
//| class BufferedInput:
|
||||
//| """Input analog voltage level to supplied buffer using DMA Capture"""
|
||||
//|
|
||||
//| def __init__(self, pin: microcontroller.Pin, buffer: WriteableBuffer, *, sample_rate: int = 500000) -> None:
|
||||
//| """Use the BufferedInput on the given pin. Fill the given buffer from ADC read values at the supplied
|
||||
//| sample_rate.
|
||||
//|
|
||||
//| :param ~microcontroller.Pin pin: the pin to read from"""
|
||||
//| :param ~circuitpython_typing.WriteableBuffer buffer: buffer: A buffer for samples
|
||||
//| :param ~int sample_rate: rate: The desired playback sample rate
|
||||
//|
|
||||
//| Usage::
|
||||
//|
|
||||
//| import board
|
||||
//| import adcbuffer
|
||||
//| import array
|
||||
//|
|
||||
//| length = 1000
|
||||
//| mybuffer = array.array("H", [0] * length)
|
||||
//| rate = 500000
|
||||
//| adcbuf = adcbuffer.BufferedInput(board.GP26, mybuffer, rate)
|
||||
//| adcbuf.readmultiple()
|
||||
//| adcbuf.deinit()
|
||||
//| for i in range(length):
|
||||
//| print(i, mybuffer[i])
|
||||
//|
|
||||
//| (TODO) The reference voltage varies by platform so use ``reference_voltage`` to read the configured setting.
|
||||
//| (TODO) Provide mechanism to read CPU Temperature
|
||||
//| """
|
||||
//| ...
|
||||
//|
|
||||
STATIC mp_obj_t adcbuffer_bufferedinput_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) {
|
||||
enum { ARG_pin, ARG_buffer, ARG_sample_rate };
|
||||
static const mp_arg_t allowed_args[] = {
|
||||
@ -116,10 +116,10 @@ STATIC mp_obj_t adcbuffer_bufferedinput_make_new(const mp_obj_type_t *type, size
|
||||
return MP_OBJ_FROM_PTR(self);
|
||||
}
|
||||
|
||||
/// def deinit(self) -> None:
|
||||
/// """Turn off the BufferedInput and release the pin for other use."""
|
||||
/// ...
|
||||
///
|
||||
//| def deinit(self) -> None:
|
||||
//| """Turn off the BufferedInput and release the pin for other use."""
|
||||
//| ...
|
||||
//|
|
||||
STATIC mp_obj_t adcbuffer_bufferedinput_deinit(mp_obj_t self_in) {
|
||||
adcbuffer_bufferedinput_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
common_hal_adcbuffer_bufferedinput_deinit(self);
|
||||
@ -132,17 +132,14 @@ STATIC void check_for_deinit(adcbuffer_bufferedinput_obj_t *self) {
|
||||
raise_deinited_error();
|
||||
}
|
||||
}
|
||||
/// def __enter__(self) -> BufferedInput:
|
||||
/// """No-op used by Context Managers."""
|
||||
/// ...
|
||||
///
|
||||
/// Provided by context manager helper.
|
||||
///
|
||||
/// def __exit__(self) -> None:
|
||||
/// """Automatically deinitializes the hardware when exiting a context. See
|
||||
/// :ref:`lifetime-and-contextmanagers` for more info."""
|
||||
/// ...
|
||||
///
|
||||
|
||||
//| Provided by context manager helper.
|
||||
//|
|
||||
//| def __exit__(self) -> None:
|
||||
//| """Automatically deinitializes the hardware when exiting a context. See
|
||||
//| :ref:`lifetime-and-contextmanagers` for more info."""
|
||||
//| ...
|
||||
//|
|
||||
STATIC mp_obj_t adcbuffer_bufferedinput___exit__(size_t n_args, const mp_obj_t *args) {
|
||||
(void)n_args;
|
||||
common_hal_adcbuffer_bufferedinput_deinit(args[0]);
|
||||
@ -150,12 +147,14 @@ STATIC mp_obj_t adcbuffer_bufferedinput___exit__(size_t n_args, const mp_obj_t *
|
||||
}
|
||||
STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(adcbuffer_bufferedinput___exit___obj, 4, 4, adcbuffer_bufferedinput___exit__);
|
||||
|
||||
/// value: int
|
||||
/// """The value on the analog pin between 0 and 65535 inclusive (16-bit). (read-only)
|
||||
///
|
||||
/// Even if the underlying analog to digital converter (ADC) is lower
|
||||
/// resolution, the value is 16-bit."""
|
||||
///
|
||||
//| value: --> None
|
||||
//| """Fills the supplied buffer with ADC values using DMA transfer.
|
||||
//| If the buffer is 8-bit, then values are 8-bit shifted and error bit is off.
|
||||
//| If buffer is 16-bit, then values are not shifted and error bit is present.
|
||||
//| Number of transfers is always the number of samples which is the array
|
||||
//| byte length divided by the byte_per_sample. """
|
||||
//| ...
|
||||
//|
|
||||
STATIC mp_obj_t adcbuffer_bufferedinput_obj_readmultiple(mp_obj_t self_in) {
|
||||
adcbuffer_bufferedinput_obj_t *self = MP_OBJ_TO_PTR(self_in);
|
||||
check_for_deinit(self);
|
||||
@ -163,15 +162,6 @@ STATIC mp_obj_t adcbuffer_bufferedinput_obj_readmultiple(mp_obj_t self_in) {
|
||||
}
|
||||
MP_DEFINE_CONST_FUN_OBJ_1(adcbuffer_bufferedinput_readmultiple_obj, adcbuffer_bufferedinput_obj_readmultiple);
|
||||
|
||||
/// MP_PROPERTY_GETTER(adcbuffer_bufferedinput_value_obj,
|
||||
/// (mp_obj_t)&adcbuffer_bufferedinput_get_value_obj);
|
||||
///
|
||||
/// reference_voltage: float
|
||||
/// """The maximum voltage measurable (also known as the reference voltage) as a
|
||||
/// `float` in Volts. Note the ADC value may not scale to the actual voltage linearly
|
||||
/// at ends of the analog range."""
|
||||
///
|
||||
|
||||
STATIC const mp_rom_map_elem_t adcbuffer_bufferedinput_locals_dict_table[] = {
|
||||
{ MP_ROM_QSTR(MP_QSTR_deinit), MP_ROM_PTR(&adcbuffer_bufferedinput_deinit_obj) },
|
||||
{ MP_ROM_QSTR(MP_QSTR___enter__), MP_ROM_PTR(&default___enter___obj) },
|
||||
|
@ -30,8 +30,6 @@
|
||||
#include "common-hal/microcontroller/Pin.h"
|
||||
#include "common-hal/adcbuffer/BufferedInput.h"
|
||||
|
||||
// #ifdef CIRCUITPY_BUFFEREDINPUT #endif
|
||||
|
||||
extern const mp_obj_type_t adcbuffer_bufferedinput_type;
|
||||
|
||||
void common_hal_adcbuffer_bufferedinput_construct(adcbuffer_bufferedinput_obj_t *self, const mcu_pin_obj_t *pin, uint8_t *buffer, uint32_t len, uint8_t bytes_per_sample, bool samples_signed, uint32_t sample_rate);
|
||||
|
@ -30,43 +30,41 @@
|
||||
#include "shared-bindings/adcbuffer/__init__.h"
|
||||
#include "shared-bindings/adcbuffer/BufferedInput.h"
|
||||
|
||||
/// #ifdef CIRCUITPY_BUFFEREDINPUT#endif
|
||||
|
||||
/// """Analog buffered hardware support
|
||||
///
|
||||
/// The `adcbuffer` module contains classes to provide access to analog-to-digital
|
||||
/// conversion and digital-to-analog (DAC) for multiple value transfer.
|
||||
///
|
||||
/// All classes change hardware state and should be deinitialized when they
|
||||
/// are no longer needed if the program continues after use. To do so, either
|
||||
/// call :py:meth:`!deinit` or use a context manager. See
|
||||
/// :ref:`lifetime-and-contextmanagers` for more info.
|
||||
///
|
||||
/// For example::
|
||||
///
|
||||
/// import adcbuffer
|
||||
/// import array
|
||||
/// from board import *
|
||||
///
|
||||
/// length = 5000000
|
||||
/// mybuffer = array.array("H", [0] * length)
|
||||
/// adcbuf_obj = adcbuffer.BufferedInPut(GP26, mybuffer, length)
|
||||
/// adcbuffer.readmultiple()
|
||||
/// print(*mybuffer)
|
||||
/// adcbuf_obj.deinit()
|
||||
///
|
||||
/// This example will initialize the the device, read and fill
|
||||
/// :py:data:`~adcbuffer.BufferedInPut` to mybuffer and then
|
||||
/// :py:meth:`~adcbuffer.BufferedInPut.deinit` the hardware. The last step is optional
|
||||
/// because CircuitPython will do it automatically after the program finishes.
|
||||
///
|
||||
/// TODO: For the essentials of `adcbuffer`, see the `CircuitPython Essentials
|
||||
/// Learn guide <https://learn.adafruit.com/circuitpython-essentials/circuitpython-adcbuffer>`_
|
||||
///
|
||||
/// TODO: For more information on using `adcbuffer`, see `this additional Learn guide
|
||||
/// <https://learn.adafruit.com/circuitpython-advanced-analog-inputs-and-outputs>`_
|
||||
/// """
|
||||
///
|
||||
//| """Analog buffered hardware support
|
||||
//|
|
||||
//| The `adcbuffer` module contains classes to provide access to analog-to-digital
|
||||
//| conversion and digital-to-analog (DAC) for multiple value transfer.
|
||||
//|
|
||||
//| All classes change hardware state and should be deinitialized when they
|
||||
//| are no longer needed if the program continues after use. To do so, either
|
||||
//| call :py:meth:`!deinit` or use a context manager. See
|
||||
//| :ref:`lifetime-and-contextmanagers` for more info.
|
||||
//|
|
||||
//| For example::
|
||||
//|
|
||||
//| import adcbuffer
|
||||
//| import array
|
||||
//| from board import *
|
||||
//|
|
||||
//| length = 5000000
|
||||
//| mybuffer = array.array("H", [0] * length)
|
||||
//| adcbuf_obj = adcbuffer.BufferedInput(GP26, mybuffer, length)
|
||||
//| adcbuffer.readmultiple()
|
||||
//| print(*mybuffer)
|
||||
//| adcbuf_obj.deinit()
|
||||
//|
|
||||
//| This example will initialize the the device, read and fill
|
||||
//| :py:data:`~adcbuffer.BufferedInPut` to mybuffer and then
|
||||
//| :py:meth:`~adcbuffer.BufferedInPut.deinit` the hardware. The last step is optional
|
||||
//| because CircuitPython will do it automatically after the program finishes.
|
||||
//|
|
||||
//| TODO: For the essentials of `adcbuffer`, see the `CircuitPython Essentials
|
||||
//| Learn guide <https://learn.adafruit.com/circuitpython-essentials/circuitpython-adcbuffer>`_
|
||||
//|
|
||||
//| TODO: For more information on using `adcbuffer`, see `this additional Learn guide
|
||||
//| <https://learn.adafruit.com/circuitpython-advanced-analog-inputs-and-outputs>`_
|
||||
//| """
|
||||
//|
|
||||
|
||||
STATIC const mp_rom_map_elem_t adcbuffer_module_globals_table[] = {
|
||||
{ MP_ROM_QSTR(MP_QSTR___name__), MP_ROM_QSTR(MP_QSTR_adcbuffer) },
|
||||
|
Loading…
x
Reference in New Issue
Block a user