Robert Hammelrath 2024-04-04 07:10:16 +08:00 zatwierdzone przez GitHub
commit 47577ae99f
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: B5690EEEBB952194
3 zmienionych plików z 15 dodań i 7 usunięć

Wyświetl plik

@ -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
----------------

Wyświetl plik

@ -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 {

Wyświetl plik

@ -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);