summaryrefslogtreecommitdiffstatshomepage
path: root/stmhal
diff options
context:
space:
mode:
authorDave Hylands <dhylands@gmail.com>2015-08-04 22:50:56 -0700
committerDamien George <damien.p.george@gmail.com>2015-08-05 23:38:49 +0100
commit5e11d2b349bffe92c539649799b27c946c2ff17b (patch)
treed52d090c3269eb29535bba009d2375f59e0f5b41 /stmhal
parent34fe5a30c6b9ec4ff5d9b10ef9b2e39ec5fd778f (diff)
downloadmicropython-5e11d2b349bffe92c539649799b27c946c2ff17b.tar.gz
micropython-5e11d2b349bffe92c539649799b27c946c2ff17b.zip
stmhal: Enable SPI support for F7 MCUs.
Diffstat (limited to 'stmhal')
-rw-r--r--stmhal/boards/STM32F7DISC/mpconfigboard.h8
-rw-r--r--stmhal/main.c2
-rw-r--r--stmhal/modpyb.c2
-rw-r--r--stmhal/spi.c54
4 files changed, 42 insertions, 24 deletions
diff --git a/stmhal/boards/STM32F7DISC/mpconfigboard.h b/stmhal/boards/STM32F7DISC/mpconfigboard.h
index 6a0d46bf4c..62712d85b1 100644
--- a/stmhal/boards/STM32F7DISC/mpconfigboard.h
+++ b/stmhal/boards/STM32F7DISC/mpconfigboard.h
@@ -13,7 +13,7 @@
#define MICROPY_HW_ENABLE_TIMER (1)
#define MICROPY_HW_ENABLE_SERVO (0)
#define MICROPY_HW_ENABLE_DAC (0)
-#define MICROPY_HW_ENABLE_SPI1 (1)
+#define MICROPY_HW_ENABLE_SPI1 (0)
#define MICROPY_HW_ENABLE_SPI2 (1)
#define MICROPY_HW_ENABLE_SPI3 (0)
#define MICROPY_HW_ENABLE_CAN (1)
@@ -60,6 +60,12 @@ void STM32F7DISC_board_early_init(void);
#define MICROPY_HW_I2C_BAUDRATE_DEFAULT 100000
#define MICROPY_HW_I2C_BAUDRATE_MAX 100000
+// SPI
+#define MICROPY_HW_SPI2_NSS (pin_I0)
+#define MICROPY_HW_SPI2_SCK (pin_I1)
+#define MICROPY_HW_SPI2_MISO (pin_B14)
+#define MICROPY_HW_SPI2_MOSI (pin_B15)
+
// USRSW is pulled low. Pressing the button makes the input go high.
#define MICROPY_HW_USRSW_PIN (pin_I11)
#define MICROPY_HW_USRSW_PULL (GPIO_NOPULL)
diff --git a/stmhal/main.c b/stmhal/main.c
index c1d85f978a..1413c59622 100644
--- a/stmhal/main.c
+++ b/stmhal/main.c
@@ -472,9 +472,7 @@ soft_reset:
#endif
i2c_init0();
-#if !defined(STM32F7) // Temp hack
spi_init0();
-#endif
pyb_usb_init0();
// Initialise the local flash filesystem.
diff --git a/stmhal/modpyb.c b/stmhal/modpyb.c
index dcc0f3da10..14dc4c4c40 100644
--- a/stmhal/modpyb.c
+++ b/stmhal/modpyb.c
@@ -590,9 +590,7 @@ STATIC const mp_map_elem_t pyb_module_globals_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR_LED), (mp_obj_t)&pyb_led_type },
#endif
{ MP_OBJ_NEW_QSTR(MP_QSTR_I2C), (mp_obj_t)&pyb_i2c_type },
-#if !defined(STM32F7) // Temp hack
{ MP_OBJ_NEW_QSTR(MP_QSTR_SPI), (mp_obj_t)&pyb_spi_type },
-#endif
{ MP_OBJ_NEW_QSTR(MP_QSTR_UART), (mp_obj_t)&pyb_uart_type },
#if MICROPY_HW_ENABLE_CAN
{ MP_OBJ_NEW_QSTR(MP_QSTR_CAN), (mp_obj_t)&pyb_can_type },
diff --git a/stmhal/spi.c b/stmhal/spi.c
index c318d923c3..311f176b31 100644
--- a/stmhal/spi.c
+++ b/stmhal/spi.c
@@ -37,9 +37,29 @@
#include "spi.h"
#include MICROPY_HAL_H
-#if !defined(STM32F7)
-// The STM32F7 has the SPI pins mapped differently. Need to figure this out
-// before enabling SPI for the F7
+// The following defines are for compatability with the '405
+#if !defined(MICROPY_HW_SPI1_NSS)
+// X-skin: X5=PA4=SPI1_NSS, X6=PA5=SPI1_SCK, X7=PA6=SPI1_MISO, X8=PA7=SPI1_MOSI
+#define MICROPY_HW_SPI1_NSS (pin_A4)
+#define MICROPY_HW_SPI1_SCK (pin_A5)
+#define MICROPY_HW_SPI1_MISO (pin_A6)
+#define MICROPY_HW_SPI1_MOSI (pin_A7)
+#endif
+
+#if !defined(MICROPY_HW_SPI2_NSS)
+// Y-skin: Y5=PB12=SPI2_NSS, Y6=PB13=SPI2_SCK, Y7=PB14=SPI2_MISO, Y8=PB15=SPI2_MOSI
+#define MICROPY_HW_SPI2_NSS (pin_B12)
+#define MICROPY_HW_SPI2_SCK (pin_B13)
+#define MICROPY_HW_SPI2_MISO (pin_B14)
+#define MICROPY_HW_SPI2_MOSI (pin_B15)
+#endif
+
+#if !defined(MICROPY_HW_SPI3_NSS)
+#define MICROPY_HW_SPI3_NSS (pin_A4)
+#define MICROPY_HW_SPI3_SCK (pin_B3)
+#define MICROPY_HW_SPI3_MISO (pin_B4)
+#define MICROPY_HW_SPI3_MOSI (pin_B5)
+#endif
/// \moduleref pyb
/// \class SPI - a master-driven serial protocol
@@ -140,24 +160,22 @@ void spi_init(SPI_HandleTypeDef *spi, bool enable_nss_pin) {
if (0) {
#if MICROPY_HW_ENABLE_SPI1
} else if (spi->Instance == SPI1) {
- // X-skin: X5=PA4=SPI1_NSS, X6=PA5=SPI1_SCK, X7=PA6=SPI1_MISO, X8=PA7=SPI1_MOSI
self = &pyb_spi_obj[0];
- pins[0] = &pin_A4;
- pins[1] = &pin_A5;
- pins[2] = &pin_A6;
- pins[3] = &pin_A7;
+ pins[0] = &MICROPY_HW_SPI1_NSS;
+ pins[1] = &MICROPY_HW_SPI1_SCK;
+ pins[2] = &MICROPY_HW_SPI1_MISO;
+ pins[3] = &MICROPY_HW_SPI1_MOSI;
GPIO_InitStructure.Alternate = GPIO_AF5_SPI1;
// enable the SPI clock
__SPI1_CLK_ENABLE();
#endif
#if MICROPY_HW_ENABLE_SPI2
} else if (spi->Instance == SPI2) {
- // Y-skin: Y5=PB12=SPI2_NSS, Y6=PB13=SPI2_SCK, Y7=PB14=SPI2_MISO, Y8=PB15=SPI2_MOSI
self = &pyb_spi_obj[1];
- pins[0] = &pin_B12;
- pins[1] = &pin_B13;
- pins[2] = &pin_B14;
- pins[3] = &pin_B15;
+ pins[0] = &MICROPY_HW_SPI2_NSS;
+ pins[1] = &MICROPY_HW_SPI2_SCK;
+ pins[2] = &MICROPY_HW_SPI2_MISO;
+ pins[3] = &MICROPY_HW_SPI2_MOSI;
GPIO_InitStructure.Alternate = GPIO_AF5_SPI2;
// enable the SPI clock
__SPI2_CLK_ENABLE();
@@ -165,10 +183,10 @@ void spi_init(SPI_HandleTypeDef *spi, bool enable_nss_pin) {
#if MICROPY_HW_ENABLE_SPI3
} else if (spi->Instance == SPI3) {
self = &pyb_spi_obj[2];
- pins[0] = &pin_A4;
- pins[1] = &pin_B3;
- pins[2] = &pin_B4;
- pins[3] = &pin_B5;
+ pins[0] = &MICROPY_HW_SPI3_NSS;
+ pins[1] = &MICROPY_HW_SPI3_SCK;
+ pins[2] = &MICROPY_HW_SPI3_MISO;
+ pins[3] = &MICROPY_HW_SPI3_MOSI;
GPIO_InitStructure.Alternate = GPIO_AF6_SPI3;
// enable the SPI clock
__SPI3_CLK_ENABLE();
@@ -670,5 +688,3 @@ const mp_obj_type_t pyb_spi_type = {
.make_new = pyb_spi_make_new,
.locals_dict = (mp_obj_t)&pyb_spi_locals_dict,
};
-
-#endif // STM32F7