@@ -79,8 +79,8 @@ static inline uint32_t spi_get_clk(machine_spi_obj_t *spi) {
7979 return spi -> is_lp ? GetSystemCoreClock () : GetSystemAHBClock ();
8080}
8181
82- static void spi_init (machine_spi_obj_t * spi , uint32_t baudrate ,
83- uint32_t polarity , uint32_t phase , uint32_t bits , uint32_t firstbit ) {
82+ static void spi_init (machine_spi_obj_t * spi , int32_t baudrate ,
83+ int32_t polarity , int32_t phase , int32_t bits , int32_t firstbit ) {
8484 const machine_pin_obj_t * pins [4 ] = { NULL , NULL , NULL , NULL };
8585 switch (spi -> id ) {
8686 #if defined(MICROPY_HW_SPI0_SCK )
@@ -161,7 +161,9 @@ static void spi_init(machine_spi_obj_t *spi, uint32_t baudrate,
161161 spi_mask_interrupts (spi -> inst );
162162
163163 // Configure baudrate clock
164- spi_set_bus_speed (spi -> inst , baudrate , spi_get_clk (spi ));
164+ if (baudrate > 0 ) {
165+ spi_set_bus_speed (spi -> inst , baudrate , spi_get_clk (spi ));
166+ }
165167
166168 // Configure FIFOs
167169 spi_set_tx_threshold (spi -> inst , 0 );
@@ -172,6 +174,21 @@ static void spi_init(machine_spi_obj_t *spi, uint32_t baudrate,
172174 }
173175
174176 // Configure SPI bus mode.
177+ if (!spi -> is_lp ) {
178+ if (polarity < 0 ) {
179+ polarity = (spi -> inst -> SPI_CTRLR0 & SPI_CTRLR0_SCPOL_HIGH ) ? 1 : 0 ;
180+ }
181+ if (phase < 0 ) {
182+ phase = (spi -> inst -> SPI_CTRLR0 & SPI_CTRLR0_SCPH_HIGH ) ? 1 : 0 ;
183+ }
184+ } else {
185+ if (polarity < 0 ) {
186+ polarity = (spi -> inst -> SPI_CTRLR0 & LPSPI_CTRLR0_SCPOL_HIGH ) ? 1 : 0 ;
187+ }
188+ if (phase < 0 ) {
189+ phase = (spi -> inst -> SPI_CTRLR0 & LPSPI_CTRLR0_SCPH_HIGH ) ? 1 : 0 ;
190+ }
191+ }
175192 uint32_t spi_mode = (polarity << 1 ) | phase ;
176193 if (!spi -> is_lp ) {
177194 spi_set_mode (spi -> inst , spi_mode );
@@ -193,10 +210,12 @@ static void spi_init(machine_spi_obj_t *spi, uint32_t baudrate,
193210 }
194211
195212 // Configure frame size.
196- if (!spi -> is_lp ) {
197- spi_set_dfs (spi -> inst , bits );
198- } else {
199- lpspi_set_dfs (spi -> inst , bits );
213+ if (bits > 0 ) {
214+ if (!spi -> is_lp ) {
215+ spi_set_dfs (spi -> inst , bits );
216+ } else {
217+ lpspi_set_dfs (spi -> inst , bits );
218+ }
200219 }
201220
202221 // Configure slave select pin
0 commit comments