Просмотр исходного кода

【添加】:micropython machine SPI 相关功能

SummerGift 8 лет назад
Родитель
Сommit
8274dec6ee
5 измененных файлов с 29 добавлено и 5 удалено
  1. 7 4
      extmod/machine_spi.c
  2. 12 0
      port/genhdr/qstrdefs.generated.h
  3. 4 0
      port/machine_pin.c
  4. 2 1
      port/modmachine.c
  5. 4 0
      port/mphalport.h

+ 7 - 4
extmod/machine_spi.c

@@ -172,10 +172,13 @@ STATIC uint32_t baudrate_to_delay_half(uint32_t baudrate) {
 
 
 STATIC void mp_machine_soft_spi_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
 STATIC void mp_machine_soft_spi_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
     mp_machine_soft_spi_obj_t *self = MP_OBJ_TO_PTR(self_in);
     mp_machine_soft_spi_obj_t *self = MP_OBJ_TO_PTR(self_in);
-    mp_printf(print, "SoftSPI(baudrate=%u, polarity=%u, phase=%u,"
-        " sck=" MP_HAL_PIN_FMT ", mosi=" MP_HAL_PIN_FMT ", miso=" MP_HAL_PIN_FMT ")",
-        baudrate_from_delay_half(self->spi.delay_half), self->spi.polarity, self->spi.phase,
-        mp_hal_pin_name(self->spi.sck), mp_hal_pin_name(self->spi.mosi), mp_hal_pin_name(self->spi.miso));
+    mp_printf(print, "SoftSPI(baudrate=%u, polarity=%u, phase=%u, sck= %s, mosi= %s, miso= %s)",
+    baudrate_from_delay_half(self->spi.delay_half),
+    self->spi.polarity,
+    self->spi.phase,
+    mp_hal_pin_name(self->spi.sck),
+    mp_hal_pin_name(self->spi.mosi),
+    mp_hal_pin_name(self->spi.miso));
 }
 }
 
 
 STATIC mp_obj_t mp_machine_soft_spi_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) {
 STATIC mp_obj_t mp_machine_soft_spi_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) {

+ 12 - 0
port/genhdr/qstrdefs.generated.h

@@ -617,5 +617,17 @@ QDEF(MP_QSTR_arg, (const byte*)"\x91\x03" "arg")
 QDEF(MP_QSTR_timeout, (const byte*)"\x3e\x07" "timeout")
 QDEF(MP_QSTR_timeout, (const byte*)"\x3e\x07" "timeout")
 QDEF(MP_QSTR_writeto_mem, (const byte*)"\x79\x0b" "writeto_mem")
 QDEF(MP_QSTR_writeto_mem, (const byte*)"\x79\x0b" "writeto_mem")
 QDEF(MP_QSTR_writeto, (const byte*)"\x03\x07" "writeto")
 QDEF(MP_QSTR_writeto, (const byte*)"\x03\x07" "writeto")
+QDEF(MP_QSTR_deinit, (const byte*)"\x9e\x06" "deinit")
+QDEF(MP_QSTR_firstbit, (const byte*)"\x20\x08" "firstbit")
+QDEF(MP_QSTR_mosi, (const byte*)"\x1d\x04" "mosi")
+QDEF(MP_QSTR_polarity, (const byte*)"\x41\x08" "polarity")
+QDEF(MP_QSTR_SPI, (const byte*)"\xef\x03" "SPI")
+QDEF(MP_QSTR_baudrate, (const byte*)"\xf5\x08" "baudrate")
+QDEF(MP_QSTR_bits, (const byte*)"\x49\x04" "bits")
+QDEF(MP_QSTR_miso, (const byte*)"\x9d\x04" "miso")
+QDEF(MP_QSTR_MSB, (const byte*)"\x59\x03" "MSB")
+QDEF(MP_QSTR_SoftSPI, (const byte*)"\x21\x07" "SoftSPI")
+QDEF(MP_QSTR_write_readinto, (const byte*)"\x89\x0e" "write_readinto")
+QDEF(MP_QSTR_LSB, (const byte*)"\xd8\x03" "LSB")
 
 
 // This file was automatically generated by makeqstrdata.py
 // This file was automatically generated by makeqstrdata.py

+ 4 - 0
port/machine_pin.c

@@ -66,6 +66,10 @@ void mp_hal_pin_open_set(void *machine_pin, int mode) {
     rt_pin_mode(((machine_pin_obj_t *)machine_pin)->pin, mode);
     rt_pin_mode(((machine_pin_obj_t *)machine_pin)->pin, mode);
 }
 }
 
 
+char* mp_hal_pin_get_name(void *machine_pin) {
+    return ((machine_pin_obj_t *)machine_pin)->name;
+}
+
 STATIC mp_obj_t machine_pin_obj_init_helper(machine_pin_obj_t *self, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
 STATIC mp_obj_t machine_pin_obj_init_helper(machine_pin_obj_t *self, size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);
 
 
 STATIC void machine_pin_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {
 STATIC void machine_pin_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind) {

+ 2 - 1
port/modmachine.c

@@ -35,6 +35,7 @@
 #include "extmod/machine_signal.h"
 #include "extmod/machine_signal.h"
 #include "extmod/machine_pulse.h"
 #include "extmod/machine_pulse.h"
 #include "extmod/machine_i2c.h"
 #include "extmod/machine_i2c.h"
+#include "extmod/machine_spi.h"
 #include "modmachine.h"
 #include "modmachine.h"
 
 
 #include <rthw.h>
 #include <rthw.h>
@@ -191,7 +192,7 @@ STATIC const mp_rom_map_elem_t machine_module_globals_table[] = {
     { MP_ROM_QSTR(MP_QSTR_I2C),                 MP_ROM_PTR(&machine_i2c_type) },
     { MP_ROM_QSTR(MP_QSTR_I2C),                 MP_ROM_PTR(&machine_i2c_type) },
 #endif
 #endif
 #if MICROPY_PY_MACHINE_SPI
 #if MICROPY_PY_MACHINE_SPI
-    { MP_ROM_QSTR(MP_QSTR_SPI),                 MP_ROM_PTR(&machine_hard_spi_type) },
+    { MP_ROM_QSTR(MP_QSTR_SPI),                 MP_ROM_PTR(&mp_machine_soft_spi_type) },
 #endif
 #endif
 //    { MP_ROM_QSTR(MP_QSTR_UART),                MP_ROM_PTR(&pyb_uart_type) },
 //    { MP_ROM_QSTR(MP_QSTR_UART),                MP_ROM_PTR(&pyb_uart_type) },
 //    { MP_ROM_QSTR(MP_QSTR_WDT),                 MP_ROM_PTR(&pyb_wdt_type) },
 //    { MP_ROM_QSTR(MP_QSTR_WDT),                 MP_ROM_PTR(&pyb_wdt_type) },

+ 4 - 0
port/mphalport.h

@@ -57,3 +57,7 @@ extern void mp_hal_pin_open_set(void *machine_pin, int mode);
 #define mp_hal_pin_od_high(pin)  mp_pin_od_write(pin, PIN_HIGH)
 #define mp_hal_pin_od_high(pin)  mp_pin_od_write(pin, PIN_HIGH)
 #define mp_hal_pin_open_drain(p) mp_hal_pin_open_set(p, PIN_MODE_OUTPUT_OD)
 #define mp_hal_pin_open_drain(p) mp_hal_pin_open_set(p, PIN_MODE_OUTPUT_OD)
 
 
+// needed for soft machine.SPI
+#define mp_hal_pin_output(p)     mp_hal_pin_open_set(p, PIN_MODE_OUTPUT)
+#define mp_hal_pin_input(p)      mp_hal_pin_open_set(p, PIN_MODE_INPUT)
+#define mp_hal_pin_name(p)       mp_hal_pin_get_name(p)