aboutsummaryrefslogtreecommitdiff
path: root/cc3200
diff options
context:
space:
mode:
authorDaniel Campora2015-09-13 21:44:09 +0200
committerDaniel Campora2015-09-16 10:10:33 +0200
commitaba75e12330d8e80b2d909ace0a419de85774317 (patch)
tree45fcba206cac1fb522700eb916912bee316b9e72 /cc3200
parent624cdeacc4c2678273ae535f3ede84846afe3ef5 (diff)
cc3200: New SPI API.
Diffstat (limited to 'cc3200')
-rw-r--r--cc3200/mods/pybspi.c329
-rw-r--r--cc3200/mods/pybuart.c4
-rw-r--r--cc3200/qstrdefsport.h17
3 files changed, 149 insertions, 201 deletions
diff --git a/cc3200/mods/pybspi.c b/cc3200/mods/pybspi.c
index fcd121b38..20ba04cb4 100644
--- a/cc3200/mods/pybspi.c
+++ b/cc3200/mods/pybspi.c
@@ -43,28 +43,11 @@
#include "pybspi.h"
#include "mpexception.h"
#include "pybsleep.h"
+#include "pybpin.h"
+#include "pins.h"
/// \moduleref pyb
/// \class SPI - a master-driven serial protocol
-///
-/// SPI is a serial protocol that is driven by a master. At the physical level
-/// there are 3 lines: SCK, MOSI, MISO.
-///
-/// See usage model of I2C; SPI is very similar. Main difference is
-/// parameters to init the SPI bus:
-///
-/// from pyb import SPI
-/// spi = SPI(1, SPI.MASTER, baudrate=2000000, bits=8, polarity=0, phase=0, cs_polarity=SPI.ACTIVE_LOW)
-///
-/// Only required parameter is the baudrate, in Hz. polarity and phase may be 0 or 1.
-/// Bit accepts 8, 16, 32. Chip select values are ACTIVE_LOW and ACTIVE_HIGH
-///
-/// Additional method for SPI:
-///
-/// data = spi.send_recv(b'1234') # send 4 bytes and receive 4 bytes
-/// buf = bytearray(4)
-/// spi.send_recv(b'1234', buf) # send 4 bytes and receive 4 into buf
-/// spi.send_recv(buf, buf) # send/recv 4 bytes from/to buf
/******************************************************************************
DEFINE TYPES
@@ -73,10 +56,6 @@ typedef struct _pyb_spi_obj_t {
mp_obj_base_t base;
uint baudrate;
uint config;
- vstr_t tx_vstr;
- vstr_t rx_vstr;
- uint tx_index;
- uint rx_index;
byte polarity;
byte phase;
byte submode;
@@ -86,13 +65,15 @@ typedef struct _pyb_spi_obj_t {
/******************************************************************************
DEFINE CONSTANTS
******************************************************************************/
-#define PYBSPI_DEF_BAUDRATE 1000000 // 1MHz
+#define PYBSPI_FIRST_BIT_MSB 0
/******************************************************************************
DECLARE PRIVATE DATA
******************************************************************************/
STATIC pyb_spi_obj_t pyb_spi_obj = {.baudrate = 0};
+STATIC const mp_obj_t pyb_spi_def_pin[3] = {&pin_GP14, &pin_GP16, &pin_GP30};
+
/******************************************************************************
DEFINE PRIVATE FUNCTIONS
******************************************************************************/
@@ -112,21 +93,19 @@ STATIC void pybspi_init (const pyb_spi_obj_t *self) {
}
STATIC void pybspi_tx (pyb_spi_obj_t *self, const void *data) {
- uint32_t txdata = 0xFFFFFFFF;
- if (data) {
- switch (self->wlen) {
- case 1:
- txdata = (uint8_t)(*(char *)data);
- break;
- case 2:
- txdata = (uint16_t)(*(uint16_t *)data);
- break;
- case 4:
- txdata = (uint32_t)(*(uint32_t *)data);
- break;
- default:
- return;
- }
+ uint32_t txdata;
+ switch (self->wlen) {
+ case 1:
+ txdata = (uint8_t)(*(char *)data);
+ break;
+ case 2:
+ txdata = (uint16_t)(*(uint16_t *)data);
+ break;
+ case 4:
+ txdata = (uint32_t)(*(uint32_t *)data);
+ break;
+ default:
+ return;
}
MAP_SPIDataPut (GSPI_BASE, txdata);
}
@@ -151,11 +130,14 @@ STATIC void pybspi_rx (pyb_spi_obj_t *self, void *data) {
}
}
-STATIC void pybspi_transfer (pyb_spi_obj_t *self, const char *txdata, char *rxdata, uint32_t len) {
+STATIC void pybspi_transfer (pyb_spi_obj_t *self, const char *txdata, char *rxdata, uint32_t len, uint32_t *txchar) {
+ if (!self->baudrate) {
+ nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, mpexception_os_request_not_possible));
+ }
// send and receive the data
MAP_SPICSEnable(GSPI_BASE);
- for (int i = 0; i < len / self->wlen; i += self->wlen) {
- pybspi_tx(self, txdata ? (const void *)&txdata[i] : NULL);
+ for (int i = 0; i < len; i += self->wlen) {
+ pybspi_tx(self, txdata ? (const void *)&txdata[i] : txchar);
pybspi_rx(self, rxdata ? (void *)&rxdata[i] : NULL);
}
MAP_SPICSDisable(GSPI_BASE);
@@ -166,40 +148,15 @@ STATIC void pybspi_transfer (pyb_spi_obj_t *self, const char *txdata, char *rxda
/******************************************************************************/
STATIC void pyb_spi_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
pyb_spi_obj_t *self = self_in;
-
if (self->baudrate > 0) {
- mp_printf(print, "<SPI1, SPI.MASTER, baudrate=%u, bits=%u, polarity=%u, phase=%u, cs_polarity=%q>",
- self->baudrate, (self->wlen * 8), self->polarity, self->phase,
- (self->config & SPI_CS_ACTIVELOW) ? MP_QSTR_ACTIVE_LOW : MP_QSTR_ACTIVE_HIGH);
+ mp_printf(print, "SPI(0, SPI.MASTER, baudrate=%u, bits=%u, polarity=%u, phase=%u, firstbit=SPI.MSB)",
+ self->baudrate, (self->wlen * 8), self->polarity, self->phase);
} else {
- mp_print_str(print, "<SPI1>");
+ mp_print_str(print, "SPI(0)");
}
}
-/// \method init(mode, *, baudrate=1000000, bits=8, polarity=0, phase=0, cs_polarity=SPI.ACTIVE_LOW)
-///
-/// Initialise the SPI bus with the given parameters:
-///
-/// - `mode` must be MASTER.
-/// - `baudrate` is the SCK clock rate.
-/// - `bits` is the transfer width size (8, 16, 32).
-/// - `polarity` (0, 1).
-/// - `phase` (0, 1).
-/// - `cs_polarity` can be ACTIVE_LOW or ACTIVE_HIGH.
-static const mp_arg_t pybspi_init_args[] = {
- { MP_QSTR_mode, MP_ARG_REQUIRED | MP_ARG_INT, },
- { MP_QSTR_baudrate, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = PYBSPI_DEF_BAUDRATE} },
- { MP_QSTR_bits, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 8} },
- { MP_QSTR_polarity, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} },
- { MP_QSTR_phase, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} },
- { MP_QSTR_cs_polarity, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = SPI_CS_ACTIVELOW} },
-};
-
-STATIC mp_obj_t pyb_spi_init_helper(pyb_spi_obj_t *self, mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
- // parse args
- mp_arg_val_t args[MP_ARRAY_SIZE(pybspi_init_args)];
- mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(pybspi_init_args), pybspi_init_args, args);
-
+STATIC mp_obj_t pyb_spi_init_helper(pyb_spi_obj_t *self, mp_arg_val_t *args) {
// verify that mode is master
if (args[0].u_int != SPI_MODE_MASTER) {
goto invalid_args;
@@ -227,19 +184,36 @@ STATIC mp_obj_t pyb_spi_init_helper(pyb_spi_obj_t *self, mp_uint_t n_args, const
goto invalid_args;
}
- uint cs = args[5].u_int;
- if (cs != SPI_CS_ACTIVELOW && cs != SPI_CS_ACTIVEHIGH) {
+ uint firstbit = args[5].u_int;
+ if (firstbit != PYBSPI_FIRST_BIT_MSB) {
goto invalid_args;
}
// build the configuration
self->baudrate = args[1].u_int;
self->wlen = args[2].u_int >> 3;
- self->config = bits | cs | SPI_SW_CTRL_CS | SPI_4PIN_MODE | SPI_TURBO_OFF;
+ self->config = bits | SPI_CS_ACTIVELOW | SPI_SW_CTRL_CS | SPI_4PIN_MODE | SPI_TURBO_OFF;
self->polarity = polarity;
self->phase = phase;
self->submode = (polarity << 1) | phase;
+ // assign the pins
+ mp_obj_t pins_o = args[6].u_obj;
+ if (pins_o != mp_const_none) {
+ mp_obj_t *pins;
+ mp_uint_t n_pins = 3;
+ if (pins_o == MP_OBJ_NULL) {
+ // use the default pins
+ pins = (mp_obj_t *)pyb_spi_def_pin;
+ } else {
+ mp_obj_get_array(pins_o, &n_pins, &pins);
+ if (n_pins != 3) {
+ goto invalid_args;
+ }
+ }
+ pin_assign_pins_af (pins, n_pins, PIN_TYPE_STD_PU, PIN_FN_SPI, 0);
+ }
+
// init the bus
pybspi_init((const pyb_spi_obj_t *)self);
@@ -252,32 +226,43 @@ invalid_args:
nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, mpexception_value_invalid_arguments));
}
-/// \classmethod \constructor(bus, ...)
-///
-/// Construct an SPI object with the given baudrate. Bus can only be 1.
-/// With no extra parameters, the SPI object is created but not
-/// initialised (it has the settings from the last initialisation of
-/// the bus, if any). If extra arguments are given, the bus is initialised.
-/// See `init` for parameters of initialisation.
-STATIC mp_obj_t pyb_spi_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *args) {
- // check arguments
- mp_arg_check_num(n_args, n_kw, 1, MP_OBJ_FUN_ARGS_MAX, true);
+static const mp_arg_t pyb_spi_init_args[] = {
+ { MP_QSTR_id, MP_ARG_INT, {.u_int = 0} },
+ { MP_QSTR_mode, MP_ARG_INT, {.u_int = SPI_MODE_MASTER} },
+ { MP_QSTR_baudrate, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 1000000} }, // 1MHz
+ { MP_QSTR_bits, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 8} },
+ { MP_QSTR_polarity, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} },
+ { MP_QSTR_phase, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0} },
+ { MP_QSTR_firstbit, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = PYBSPI_FIRST_BIT_MSB} },
+ { MP_QSTR_pins, MP_ARG_KW_ONLY | MP_ARG_OBJ, {.u_obj = MP_OBJ_NULL} },
+};
+STATIC mp_obj_t pyb_spi_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t n_kw, const mp_obj_t *all_args) {
+ // parse args
+ mp_map_t kw_args;
+ mp_map_init_fixed_table(&kw_args, n_kw, all_args + n_args);
+ mp_arg_val_t args[MP_ARRAY_SIZE(pyb_spi_init_args)];
+ mp_arg_parse_all(n_args, all_args, &kw_args, MP_ARRAY_SIZE(args), pyb_spi_init_args, args);
+
+ // check the peripheral id
+ if (args[0].u_int != 0) {
+ nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, mpexception_os_resource_not_avaliable));
+ }
+ // setup the object
pyb_spi_obj_t *self = &pyb_spi_obj;
self->base.type = &pyb_spi_type;
- if (n_args > 1 || n_kw > 0) {
- // start the peripheral
- mp_map_t kw_args;
- mp_map_init_fixed_table(&kw_args, n_kw, args + n_args);
- pyb_spi_init_helper(self, n_args - 1, args + 1, &kw_args);
- }
+ // start the peripheral
+ pyb_spi_init_helper(self, &args[1]);
return self;
}
-STATIC mp_obj_t pyb_spi_init(mp_uint_t n_args, const mp_obj_t *args, mp_map_t *kw_args) {
- return pyb_spi_init_helper(args[0], n_args - 1, args + 1, kw_args);
+STATIC mp_obj_t pyb_spi_init(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
+ // parse args
+ mp_arg_val_t args[MP_ARRAY_SIZE(pyb_spi_init_args) - 1];
+ mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(args), &pyb_spi_init_args[1], args);
+ return pyb_spi_init_helper(pos_args[0], args);
}
STATIC MP_DEFINE_CONST_FUN_OBJ_KW(pyb_spi_init_obj, 1, pyb_spi_init);
@@ -295,152 +280,112 @@ STATIC mp_obj_t pyb_spi_deinit(mp_obj_t self_in) {
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(pyb_spi_deinit_obj, pyb_spi_deinit);
-/// \method send(send, *, timeout=5000)
-/// Send data on the bus:
-///
-/// - `send` is the data to send (a byte to send, or a buffer object).
-/// - `timeout` is the timeout in milliseconds to wait for the send.
-///
-STATIC mp_obj_t pyb_spi_send (mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
- static const mp_arg_t allowed_args[] = {
- { MP_QSTR_send, MP_ARG_REQUIRED | MP_ARG_OBJ, },
- { MP_QSTR_timeout, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 5000} },
- };
-
+STATIC mp_obj_t pyb_spi_write (mp_obj_t self_in, mp_obj_t buf) {
// parse args
- pyb_spi_obj_t *self = pos_args[0];
- mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
- mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
+ pyb_spi_obj_t *self = self_in;
// get the buffer to send from
mp_buffer_info_t bufinfo;
uint8_t data[1];
- pyb_buf_get_for_send(args[0].u_obj, &bufinfo, data);
+ pyb_buf_get_for_send(buf, &bufinfo, data);
// just send
- pybspi_transfer(self, (const char *)bufinfo.buf, NULL, bufinfo.len);
+ pybspi_transfer(self, (const char *)bufinfo.buf, NULL, bufinfo.len, NULL);
- return mp_const_none;
+ // return the number of bytes written
+ return mp_obj_new_int(bufinfo.len);
}
-STATIC MP_DEFINE_CONST_FUN_OBJ_KW(pyb_spi_send_obj, 1, pyb_spi_send);
-
-/// \method recv(recv, *, timeout=5000)
-///
-/// Receive data on the bus:
-///
-/// - `recv` can be an integer, which is the number of bytes to receive,
-/// or a mutable buffer, which will be filled with received bytes.
-/// - `timeout` is the timeout in milliseconds to wait for the receive.
-///
-/// Return: if `recv` is an integer then a new buffer of the bytes received,
-/// otherwise the same buffer that was passed in to `recv`.
-STATIC mp_obj_t pyb_spi_recv(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
+STATIC MP_DEFINE_CONST_FUN_OBJ_2(pyb_spi_write_obj, pyb_spi_write);
+
+STATIC mp_obj_t pyb_spi_read(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
static const mp_arg_t allowed_args[] = {
- { MP_QSTR_recv, MP_ARG_REQUIRED | MP_ARG_OBJ, },
- { MP_QSTR_timeout, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 5000} },
+ { MP_QSTR_nbytes, MP_ARG_REQUIRED | MP_ARG_OBJ, },
+ { MP_QSTR_write, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0x00} },
};
// parse args
pyb_spi_obj_t *self = pos_args[0];
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
- mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
+ mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(args), allowed_args, args);
// get the buffer to receive into
vstr_t vstr;
- mp_obj_t o_ret = pyb_buf_get_for_recv(args[0].u_obj, &vstr);
+ pyb_buf_get_for_recv(args[0].u_obj, &vstr);
// just receive
- pybspi_transfer(self, NULL, vstr.buf, vstr.len);
+ uint32_t write = args[1].u_int;
+ pybspi_transfer(self, NULL, vstr.buf, vstr.len, &write);
// return the received data
- if (o_ret != MP_OBJ_NULL) {
- return o_ret;
- } else {
- return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
- }
+ return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
}
-STATIC MP_DEFINE_CONST_FUN_OBJ_KW(pyb_spi_recv_obj, 1, pyb_spi_recv);
-
-/// \method send_recv(send, recv=None, *, timeout=5000)
-///
-/// Send and receive data on the bus at the same time:
-///
-/// - `send` is the data to send (an integer to send, or a buffer object).
-/// - `recv` is a mutable buffer which will be filled with received bytes.
-/// It can be the same as `send`, or omitted. If omitted, a new buffer will
-/// be created.
-/// - `timeout` is the timeout in milliseconds to wait for the transaction to complete.
-///
-/// Return: the buffer with the received bytes.
-STATIC mp_obj_t pyb_spi_send_recv (mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
+STATIC MP_DEFINE_CONST_FUN_OBJ_KW(pyb_spi_read_obj, 1, pyb_spi_read);
+
+STATIC mp_obj_t pyb_spi_readinto(mp_uint_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
static const mp_arg_t allowed_args[] = {
- { MP_QSTR_send, MP_ARG_REQUIRED | MP_ARG_OBJ, },
- { MP_QSTR_recv, MP_ARG_OBJ, {.u_obj = mp_const_none} },
- { MP_QSTR_timeout, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 5000} },
+ { MP_QSTR_buf, MP_ARG_REQUIRED | MP_ARG_OBJ, },
+ { MP_QSTR_write, MP_ARG_KW_ONLY | MP_ARG_INT, {.u_int = 0x00} },
};
// parse args
pyb_spi_obj_t *self = pos_args[0];
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
- mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
+ mp_arg_parse_all(n_args - 1, pos_args + 1, kw_args, MP_ARRAY_SIZE(args), allowed_args, args);
+
+ // get the buffer to receive into
+ vstr_t vstr;
+ pyb_buf_get_for_recv(args[0].u_obj, &vstr);
+
+ // just receive
+ uint32_t write = args[1].u_int;
+ pybspi_transfer(self, NULL, vstr.buf, vstr.len, &write);
+
+ // return the number of bytes received
+ return mp_obj_new_int(vstr.len);
+}
+STATIC MP_DEFINE_CONST_FUN_OBJ_KW(pyb_spi_readinto_obj, 1, pyb_spi_readinto);
- // get buffers to send from/receive to
- mp_buffer_info_t bufinfo_send;
+STATIC mp_obj_t pyb_spi_write_readinto (mp_obj_t self, mp_obj_t writebuf, mp_obj_t readbuf) {
+ // get buffers to write from/read to
+ mp_buffer_info_t bufinfo_write;
uint8_t data_send[1];
- mp_buffer_info_t bufinfo_recv;
- vstr_t vstr_recv;
- mp_obj_t o_ret;
-
- if (args[0].u_obj == args[1].u_obj) {
- // same object for sending and receiving, it must be a r/w buffer
- mp_get_buffer_raise(args[0].u_obj, &bufinfo_send, MP_BUFFER_RW);
- bufinfo_recv = bufinfo_send;
- o_ret = args[0].u_obj;
+ mp_buffer_info_t bufinfo_read;
+
+ if (writebuf == readbuf) {
+ // same object for writing and reading, it must be a r/w buffer
+ mp_get_buffer_raise(writebuf, &bufinfo_write, MP_BUFFER_RW);
+ bufinfo_read = bufinfo_write;
} else {
- // get the buffer to send from
- pyb_buf_get_for_send(args[0].u_obj, &bufinfo_send, data_send);
-
- // get the buffer to receive into
- if (args[1].u_obj == mp_const_none) {
- // only the send was argument given, so create a fresh buffer of the send length
- vstr_init_len(&vstr_recv, bufinfo_send.len);
- bufinfo_recv.len = vstr_recv.len;
- bufinfo_recv.buf = vstr_recv.buf;
- o_ret = MP_OBJ_NULL;
- } else {
- // recv argument given
- mp_get_buffer_raise(args[1].u_obj, &bufinfo_recv, MP_BUFFER_WRITE);
- if (bufinfo_recv.len != bufinfo_send.len) {
- nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, mpexception_value_invalid_arguments));
- }
- o_ret = args[1].u_obj;
+ // get the buffer to write from
+ pyb_buf_get_for_send(writebuf, &bufinfo_write, data_send);
+
+ // get the read buffer
+ mp_get_buffer_raise(readbuf, &bufinfo_read, MP_BUFFER_WRITE);
+ if (bufinfo_read.len != bufinfo_write.len) {
+ nlr_raise(mp_obj_new_exception_msg(&mp_type_ValueError, mpexception_value_invalid_arguments));
}
}
// send and receive
- pybspi_transfer(self, (const char *)bufinfo_send.buf, bufinfo_recv.buf, bufinfo_send.len);
+ pybspi_transfer(self, (const char *)bufinfo_write.buf, bufinfo_read.buf, bufinfo_write.len, NULL);
- // return the received data
- if (o_ret != MP_OBJ_NULL) {
- return o_ret;
- } else {
- return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr_recv);
- }
+ // return the number of transferred bytes
+ return mp_obj_new_int(bufinfo_write.len);
}
-STATIC MP_DEFINE_CONST_FUN_OBJ_KW(pyb_spi_send_recv_obj, 1, pyb_spi_send_recv);
+STATIC MP_DEFINE_CONST_FUN_OBJ_3(pyb_spi_write_readinto_obj, pyb_spi_write_readinto);
STATIC const mp_map_elem_t pyb_spi_locals_dict_table[] = {
// instance methods
{ MP_OBJ_NEW_QSTR(MP_QSTR_init), (mp_obj_t)&pyb_spi_init_obj },
{ MP_OBJ_NEW_QSTR(MP_QSTR_deinit), (mp_obj_t)&pyb_spi_deinit_obj },
- { MP_OBJ_NEW_QSTR(MP_QSTR_send), (mp_obj_t)&pyb_spi_send_obj },
- { MP_OBJ_NEW_QSTR(MP_QSTR_recv), (mp_obj_t)&pyb_spi_recv_obj },
- { MP_OBJ_NEW_QSTR(MP_QSTR_send_recv), (mp_obj_t)&pyb_spi_send_recv_obj },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_write), (mp_obj_t)&pyb_spi_write_obj },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_read), (mp_obj_t)&pyb_spi_read_obj },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_readinto), (mp_obj_t)&pyb_spi_readinto_obj },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_write_readinto), (mp_obj_t)&pyb_spi_write_readinto_obj },
// class constants
{ MP_OBJ_NEW_QSTR(MP_QSTR_MASTER), MP_OBJ_NEW_SMALL_INT(SPI_MODE_MASTER) },
- { MP_OBJ_NEW_QSTR(MP_QSTR_ACTIVE_LOW), MP_OBJ_NEW_SMALL_INT(SPI_CS_ACTIVELOW) },
- { MP_OBJ_NEW_QSTR(MP_QSTR_ACTIVE_HIGH), MP_OBJ_NEW_SMALL_INT(SPI_CS_ACTIVEHIGH) },
+ { MP_OBJ_NEW_QSTR(MP_QSTR_MSB), MP_OBJ_NEW_SMALL_INT(PYBSPI_FIRST_BIT_MSB) },
};
STATIC MP_DEFINE_CONST_DICT(pyb_spi_locals_dict, pyb_spi_locals_dict_table);
diff --git a/cc3200/mods/pybuart.c b/cc3200/mods/pybuart.c
index 5c4aa1923..b1d74785b 100644
--- a/cc3200/mods/pybuart.c
+++ b/cc3200/mods/pybuart.c
@@ -454,7 +454,7 @@ STATIC mp_obj_t pyb_uart_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t
mp_arg_parse_all(n_args, all_args, &kw_args, MP_ARRAY_SIZE(args), pyb_uart_init_args, args);
// work out the uart id
- uint8_t uart_id;
+ uint uart_id;
if (args[0].u_obj == mp_const_none) {
if (args[5].u_obj != MP_OBJ_NULL) {
mp_obj_t *pins;
@@ -474,7 +474,7 @@ STATIC mp_obj_t pyb_uart_make_new(mp_obj_t type_in, mp_uint_t n_args, mp_uint_t
uart_id = mp_obj_get_int(args[0].u_obj);
}
- if (uart_id < PYB_UART_0 || uart_id > PYB_UART_1) {
+ if (uart_id > PYB_UART_1) {
nlr_raise(mp_obj_new_exception_msg(&mp_type_OSError, mpexception_os_resource_not_avaliable));
}
diff --git a/cc3200/qstrdefsport.h b/cc3200/qstrdefsport.h
index 485ff4ec5..9d7e1ac64 100644
--- a/cc3200/qstrdefsport.h
+++ b/cc3200/qstrdefsport.h
@@ -339,21 +339,24 @@ Q(RTC_WAKE)
// for SPI class
Q(SPI)
+Q(id)
Q(mode)
Q(baudrate)
Q(bits)
Q(polarity)
Q(phase)
-Q(cs_polarity)
+Q(firstbit)
Q(init)
Q(deinit)
-Q(send)
-Q(recv)
-Q(send_recv)
-Q(timeout)
+Q(write)
+Q(read)
+Q(readinto)
+Q(write_readinto)
+Q(nbytes)
+Q(write)
+Q(buf)
Q(MASTER)
-Q(ACTIVE_LOW)
-Q(ACTIVE_HIGH)
+Q(MSB)
// for Timer class
Q(Timer)