@@ -38,18 +38,11 @@ extern const mcu_pin_obj_t pin_MTMS;
38
38
extern const mcu_pin_obj_t pin_MTCK ;
39
39
extern const mcu_pin_obj_t pin_MTDI ;
40
40
41
- void common_hal_busio_spi_construct (busio_spi_obj_t * self ,
42
- const mcu_pin_obj_t * clock , const mcu_pin_obj_t
8000
* mosi ,
43
- const mcu_pin_obj_t * miso ) {
44
- if (clock != & pin_MTMS || !((mosi == & pin_MTCK && miso == MP_OBJ_TO_PTR (mp_const_none )) ||
45
- (mosi == MP_OBJ_TO_PTR (mp_const_none ) && miso == & pin_MTDI ) ||
46
- (mosi == & pin_MTCK && miso == & pin_MTDI ))) {
47
- nlr_raise (mp_obj_new_exception_msg_varg (& mp_type_OSError ,
48
- "Pins not valid for SPI" ));
49
- }
41
+ void busio_spi_init_gpio (uint8_t sysclk_as_spiclk , const mcu_pin_obj_t * clock ,
42
+ const mcu_pin_obj_t * mosi , const mcu_pin_obj_t * miso ) {
50
43
51
44
uint32_t clock_div_flag = 0 ;
52
- if (SPI_CLK_USE_DIV ) {
45
+ if (sysclk_as_spiclk ) {
53
46
clock_div_flag = 0x0001 ;
54
47
}
55
48
@@ -65,6 +58,23 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
65
58
}
66
59
// GPIO14 is HSPI CLK pin (Clock)
67
60
PIN_FUNC_SELECT (PERIPHS_IO_MUX_MTMS_U , 2 );
61
+ }
62
+
63
+
64
+ void common_hal_busio_spi_construct (busio_spi_obj_t * self ,
65
+ const mcu_pin_obj_t * clock , const mcu_pin_obj_t * mosi ,
66
+ const mcu_pin_obj_t * miso ) {
67
+ if (clock != & pin_MTMS || !((mosi == & pin_MTCK && miso == MP_OBJ_TO_PTR (mp_const_none )) ||
68
+ (mosi == MP_OBJ_TO_PTR (mp_const_none ) && miso == & pin_MTDI ) ||
69
+ (mosi == & pin_MTCK && miso == & pin_MTDI ))) {
70
+ nlr_raise (mp_obj_new_exception_msg_varg (& mp_type_OSError ,
71
+ "Pins not valid for SPI" ));
72
+ }
73
+
74
+ busio_spi_init_gpio (SPI_CLK_USE_DIV , clock , mosi , miso );
75
+ self -> clock = clock ;
76
+ self -> mosi = mosi ;
77
+ self -> miso = miso ;
68
78
69
79
spi_clock (HSPI , SPI_CLK_PREDIV , SPI_CLK_CNTDIV );
70
80
self -> frequency = SPI_CLK_FREQ ;
@@ -106,7 +116,7 @@ bool common_hal_busio_spi_configure(busio_spi_obj_t *self,
106
116
}
107
117
if (baudrate == 80000000L ) {
108
118
// Special case for full speed.
109
- spi_init_gpio ( HSPI , SPI_CLK_80MHZ_NODIV );
119
+ busio_spi_init_gpio ( SPI_CLK_80MHZ_NODIV , self -> clock , self -> mosi , self -> miso );
110
120
spi_clock (HSPI , 0 , 0 );
111
121
self -> frequency = 80000000L ;
112
122
} else if (baudrate > 40000000L ) {
@@ -118,7 +128,7 @@ bool common_hal_busio_spi_configure(busio_spi_obj_t *self,
118
128
if (cntdiv > SPI_CLKCNT_N + 1 || cntdiv == 0 || prediv == 0 ) {
119
129
return false;
120
130
}
121
- spi_init_gpio ( HSPI , SPI_CLK_USE_DIV );
131
+ busio_spi_init_gpio ( SPI_CLK_USE_DIV , self -> clock , self -> mosi , self -> miso );
122
132
spi_clock (HSPI , prediv , cntdiv );
123
133
self -> frequency = 80000000L / (prediv * cntdiv );
124
134
}
0 commit comments