mirror of
https://github.com/micropython/micropython.git
synced 2025-07-21 04:51:12 +02:00
mimxrt: Enable default devices for I2C, SPI and UART.
Since all boards are configured to have a I2C(0), SPI(0) and UART(1), these can be set as default devices, allowing the instantiation of I2C(), SPI(), UART() without an id argument. Signed-off-by: robert-hh <robert@hammelrath.com>
This commit is contained in:
@@ -122,10 +122,13 @@ See :ref:`machine.UART <machine.UART>`. ::
|
||||
uart1 = UART(1, baudrate=115200)
|
||||
uart1.write('hello') # write 5 bytes
|
||||
uart1.read(5) # read up to 5 bytes
|
||||
uart1 = UART(baudrate=19200) # open UART 1 at 19200 baud
|
||||
|
||||
The i.MXRT has up to eight hardware UARTs, but not every board exposes all
|
||||
TX and RX pins for users. For the assignment of Pins to UART signals,
|
||||
refer to the :ref:`UART pinout <mimxrt_uart_pinout>`.
|
||||
refer to the :ref:`UART pinout <mimxrt_uart_pinout>`. If the UART ID is
|
||||
omitted, UART(1) is selected. Then, the keyword
|
||||
option for baudrate must be used to change it from the default value.
|
||||
|
||||
PWM (pulse width modulation)
|
||||
----------------------------
|
||||
@@ -305,12 +308,15 @@ rates (up to 30Mhz). Hardware SPI is accessed via the
|
||||
cs_pin(0)
|
||||
spi.write('Hello World')
|
||||
cs_pin(1)
|
||||
spi = SPI(baudrate=4_000_000) # Use SPI(0) at a baudrate of 4 MHz
|
||||
|
||||
For the assignment of Pins to SPI signals, refer to
|
||||
:ref:`Hardware SPI pinout <mimxrt_spi_pinout>`.
|
||||
The keyword option cs=n can be used to enable the cs pin 0 or 1 for an automatic cs signal. The
|
||||
default is cs=-1. Using cs=-1 the automatic cs signal is not created.
|
||||
In that case, cs has to be set by the script. Clearing that assignment requires a power cycle.
|
||||
If the SPI ID is omitted, SPI(0) is selected. Then, the keyword
|
||||
option for baudrate must be used to change it from the default value.
|
||||
|
||||
Notes:
|
||||
|
||||
@@ -355,6 +361,10 @@ has the same methods as software SPI above::
|
||||
|
||||
i2c = I2C(0, 400_000)
|
||||
i2c.writeto(0x76, b"Hello World")
|
||||
i2c = I2C(freq=100_000) # use I2C(0) at 100kHz
|
||||
|
||||
If the I2C ID is omitted, I2C(0) is selected. Then, the keyword
|
||||
option for freq must be used to change the freq from the default value.
|
||||
|
||||
I2S bus
|
||||
-------
|
||||
|
@@ -34,6 +34,7 @@
|
||||
#include "fsl_iomuxc.h"
|
||||
#include "fsl_lpi2c.h"
|
||||
|
||||
#define DEFAULT_I2C_ID (0)
|
||||
#define DEFAULT_I2C_FREQ (400000)
|
||||
#define DEFAULT_I2C_DRIVE (6)
|
||||
#define DEFAULT_I2C_TIMEOUT (50000)
|
||||
@@ -91,7 +92,7 @@ static void machine_i2c_print(const mp_print_t *print, mp_obj_t self_in, mp_prin
|
||||
mp_obj_t machine_i2c_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) {
|
||||
enum { ARG_id, ARG_freq, ARG_drive, ARG_timeout};
|
||||
static const mp_arg_t allowed_args[] = {
|
||||
{ MP_QSTR_id, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
||||
{ MP_QSTR_id, MP_ARG_INT, {.u_int = DEFAULT_I2C_ID} },
|
||||
{ MP_QSTR_freq, MP_ARG_INT, {.u_int = DEFAULT_I2C_FREQ} },
|
||||
{ MP_QSTR_drive, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = DEFAULT_I2C_DRIVE} },
|
||||
{ MP_QSTR_timeout, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = DEFAULT_I2C_TIMEOUT} },
|
||||
@@ -102,7 +103,7 @@ mp_obj_t machine_i2c_make_new(const mp_obj_type_t *type, size_t n_args, size_t n
|
||||
mp_arg_parse_all_kw_array(n_args, n_kw, all_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
||||
|
||||
// Get I2C bus.
|
||||
int i2c_id = mp_obj_get_int(args[ARG_id].u_obj);
|
||||
int i2c_id = args[ARG_id].u_int;
|
||||
if (i2c_id < 0 || i2c_id >= MICROPY_HW_I2C_NUM || i2c_index_table[i2c_id] == 0) {
|
||||
mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("I2C(%d) doesn't exist"), i2c_id);
|
||||
}
|
||||
|
@@ -37,6 +37,7 @@
|
||||
#include "fsl_lpspi.h"
|
||||
#include "fsl_lpspi_edma.h"
|
||||
|
||||
#define DEFAULT_SPI_ID (0)
|
||||
#define DEFAULT_SPI_BAUDRATE (1000000)
|
||||
#define DEFAULT_SPI_POLARITY (0)
|
||||
#define DEFAULT_SPI_PHASE (0)
|
||||
@@ -130,7 +131,7 @@ static void machine_spi_print(const mp_print_t *print, mp_obj_t self_in, mp_prin
|
||||
mp_obj_t machine_spi_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) {
|
||||
enum { ARG_id, ARG_baudrate, ARG_polarity, ARG_phase, ARG_bits, ARG_firstbit, ARG_gap_ns, ARG_drive, ARG_cs };
|
||||
static const mp_arg_t allowed_args[] = {
|
||||
{ MP_QSTR_id, MP_ARG_REQUIRED | MP_ARG_OBJ },
|
||||
{ MP_QSTR_id, MP_ARG_INT, {.u_int = DEFAULT_SPI_ID} },
|
||||
{ MP_QSTR_baudrate, MP_ARG_INT, {.u_int = DEFAULT_SPI_BAUDRATE} },
|
||||
{ MP_QSTR_polarity, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = DEFAULT_SPI_POLARITY} },
|
||||
{ MP_QSTR_phase, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = DEFAULT_SPI_PHASE} },
|
||||
@@ -146,7 +147,7 @@ mp_obj_t machine_spi_make_new(const mp_obj_type_t *type, size_t n_args, size_t n
|
||||
mp_arg_parse_all_kw_array(n_args, n_kw, all_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
|
||||
|
||||
// Get the SPI bus id.
|
||||
int spi_id = mp_obj_get_int(args[ARG_id].u_obj);
|
||||
int spi_id = args[ARG_id].u_int;
|
||||
if (spi_id < 0 || spi_id >= MP_ARRAY_SIZE(spi_index_table) || spi_index_table[spi_id] == 0) {
|
||||
mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("SPI(%d) doesn't exist"), spi_id);
|
||||
}
|
||||
|
@@ -37,6 +37,7 @@
|
||||
#include "modmachine.h"
|
||||
#include "pin.h"
|
||||
|
||||
#define DEFAULT_UART_ID (1)
|
||||
#define DEFAULT_UART_BAUDRATE (115200)
|
||||
#define DEFAULT_BUFFER_SIZE (256)
|
||||
#define MIN_BUFFER_SIZE (32)
|
||||
@@ -377,10 +378,17 @@ static void mp_machine_uart_init_helper(machine_uart_obj_t *self, size_t n_args,
|
||||
}
|
||||
|
||||
static mp_obj_t mp_machine_uart_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) {
|
||||
mp_arg_check_num(n_args, n_kw, 1, MP_OBJ_FUN_ARGS_MAX, true);
|
||||
mp_arg_check_num(n_args, n_kw, 0, MP_OBJ_FUN_ARGS_MAX, true);
|
||||
|
||||
// Get UART bus.
|
||||
int uart_id = mp_obj_get_int(args[0]);
|
||||
int uart_id;
|
||||
if (n_args > 0) {
|
||||
uart_id = mp_obj_get_int(args[0]);
|
||||
n_args--;
|
||||
args++;
|
||||
} else {
|
||||
uart_id = DEFAULT_UART_ID;
|
||||
}
|
||||
if (uart_id < 0 || uart_id > MICROPY_HW_UART_NUM || uart_index_table[uart_id] == 0) {
|
||||
mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("UART(%d) doesn't exist"), uart_id);
|
||||
}
|
||||
@@ -409,7 +417,7 @@ static mp_obj_t mp_machine_uart_make_new(const mp_obj_type_t *type, size_t n_arg
|
||||
if (uart_present) {
|
||||
mp_map_t kw_args;
|
||||
mp_map_init_fixed_table(&kw_args, n_kw, args + n_args);
|
||||
mp_machine_uart_init_helper(self, n_args - 1, args + 1, &kw_args);
|
||||
mp_machine_uart_init_helper(self, n_args, args, &kw_args);
|
||||
return MP_OBJ_FROM_PTR(self);
|
||||
} else {
|
||||
return mp_const_none;
|
||||
|
Reference in New Issue
Block a user