kopia lustrzana https://github.com/micropython/micropython
Merge 40ffe6ecef
into 5114f2c1ea
commit
47577ae99f
|
@ -187,6 +187,13 @@ Use the :ref:`machine.ADC <machine.ADC>` class::
|
|||
adc = ADC(Pin(26)) # create ADC object on ADC pin
|
||||
adc.read_u16() # read value, 0-65535 across voltage range 0.0v - 3.3v
|
||||
|
||||
The argument of the constructor ADC specifies either a Pin by number, name of as
|
||||
Pin object, or a channel number in the range 0 - 3. If a pin is specified,
|
||||
the pin is initialized in high-Z mode. If a channel number is used, the pin
|
||||
is not initialized and configuring is left to the user code. After hard reset,
|
||||
RP2040 pins operate in current sink mode at about 60µA. If the pin is not
|
||||
otherwise configured, that may lead to wrong ADC readings.
|
||||
|
||||
Software SPI bus
|
||||
----------------
|
||||
|
||||
|
|
|
@ -73,12 +73,9 @@ static mp_obj_t mp_machine_adc_make_new(const mp_obj_type_t *type, size_t n_args
|
|||
bool is_ext = false;
|
||||
const machine_pin_obj_t *pin = NULL;
|
||||
|
||||
if (mp_obj_is_int(source)) {
|
||||
// Get and validate channel number.
|
||||
channel = mp_obj_get_int(source);
|
||||
if (ADC_IS_VALID_GPIO(channel)) {
|
||||
channel = ADC_CHANNEL_FROM_GPIO(channel);
|
||||
} else if (!(channel >= 0 && channel <= ADC_CHANNEL_TEMPSENSOR)) {
|
||||
if (mp_obj_is_int(source) && (channel = mp_obj_get_int(source)) <= ADC_CHANNEL_TEMPSENSOR) {
|
||||
// Validate channel number.
|
||||
if (channel < 0) {
|
||||
mp_raise_ValueError(MP_ERROR_TEXT("invalid channel"));
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -367,7 +367,11 @@ static void mp_machine_uart_init_helper(machine_uart_obj_t *self, size_t n_args,
|
|||
self->timeout_char = min_timeout_char;
|
||||
}
|
||||
|
||||
uart_init(self->uart, self->baudrate);
|
||||
uint32_t new_baudrate = uart_init(self->uart, self->baudrate);
|
||||
uint32_t baudrate_diff = new_baudrate > self->baudrate ? new_baudrate - self->baudrate : self->baudrate - new_baudrate;
|
||||
if (baudrate_diff > (self->baudrate / 50)) {
|
||||
mp_raise_ValueError(MP_ERROR_TEXT("Invalid baud rate"));
|
||||
}
|
||||
uart_set_format(self->uart, self->bits, self->stop, self->parity);
|
||||
__DSB(); // make sure UARTLCR_H register is written to
|
||||
uart_set_fifo_enabled(self->uart, true);
|
||||
|
|
Ładowanie…
Reference in New Issue