@@ -38,18 +38,11 @@ extern const mcu_pin_obj_t pin_MTMS;
3838extern const mcu_pin_obj_t pin_MTCK ;
3939extern const mcu_pin_obj_t pin_MTDI ;
4040
41- void common_hal_busio_spi_construct (busio_spi_obj_t * self ,
42- const mcu_pin_obj_t * clock , const mcu_pin_obj_t * 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 ) {
5043
5144 uint32_t clock_div_flag = 0 ;
52- if (SPI_CLK_USE_DIV ) {
45+ if (sysclk_as_spiclk ) {
5346 clock_div_flag = 0x0001 ;
5447 }
5548
@@ -65,6 +58,23 @@ void common_hal_busio_spi_construct(busio_spi_obj_t *self,
6558 }
6659 // GPIO14 is HSPI CLK pin (Clock)
6760 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 ;
6878
6979 spi_clock (HSPI , SPI_CLK_PREDIV , SPI_CLK_CNTDIV );
7080 self -> frequency = SPI_CLK_FREQ ;
@@ -106,7 +116,7 @@ bool common_hal_busio_spi_configure(busio_spi_obj_t *self,
106116 }
107117 if (baudrate == 80000000L ) {
108118 // 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 );
110120 spi_clock (HSPI , 0 , 0 );
111121 self -> frequency = 80000000L ;
112122 } else if (baudrate > 40000000L ) {
@@ -118,7 +128,7 @@ bool common_hal_busio_spi_configure(busio_spi_obj_t *self,
118128 if (cntdiv > SPI_CLKCNT_N + 1 || cntdiv == 0 || prediv == 0 ) {
119129 return false;
120130 }
121- spi_init_gpio ( HSPI , SPI_CLK_USE_DIV );
131+ busio_spi_init_gpio ( SPI_CLK_USE_DIV , self -> clock , self -> mosi , self -> miso );
122132 spi_clock (HSPI , prediv , cntdiv );
123133 self -> frequency = 80000000L / (prediv * cntdiv );
124134 }
0 commit comments