35
35
#include "em_gpio.h"
36
36
#include "em_ldma.h"
37
37
#include "gpiointerrupt.h"
38
- #include "spidrv.h"
39
-
38
+ #include "sl_board_control.h"
40
39
#include "sl_device_init_clocks.h"
41
40
#include "sl_device_init_hfxo.h"
42
41
#include "sl_spidrv_instances.h"
43
42
#include "sl_status.h"
43
+ #include "spidrv.h"
44
44
45
45
#include "silabs_utils.h"
46
46
#include "spi_multiplex.h"
47
47
#include "wfx_host_events.h"
48
48
#include "wfx_rsi.h"
49
49
50
- #define DEFAULT_SPI_TRASFER_MODE 0
51
- // Macro to drive semaphore block minimun timer in milli seconds
52
- #define RSI_SEM_BLOCK_MIN_TIMER_VALUE_MS (50)
53
50
#if defined(SL_CATALOG_POWER_MANAGER_PRESENT )
54
51
#include "sl_power_manager.h"
55
52
#endif
62
59
#endif // SL_BTLCTRL_MUX
63
60
#if SL_LCDCTRL_MUX
64
61
#include "sl_memlcd.h"
62
+ #include "sl_memlcd_display.h"
65
63
#endif // SL_LCDCTRL_MUX
66
64
#if SL_MX25CTRL_MUX
67
65
#include "sl_mx25_flash_shutdown_usart_config.h"
68
66
#endif // SL_MX25CTRL_MUX
69
67
70
68
#if defined(EFR32MG12 )
71
69
#include "em_usart.h"
72
-
70
+ #include "sl_spidrv_exp_config.h"
73
71
#define SL_SPIDRV_HANDLE sl_spidrv_exp_handle
74
-
75
72
#elif defined(EFR32MG24 )
76
73
#include "em_eusart.h"
77
74
#include "sl_spidrv_eusart_exp_config.h"
75
+ #include "spi_multiplex.h"
76
+ #else
77
+ #error "Unknown platform"
78
+ #endif
78
79
80
+ #if defined(EFR32MG24 )
79
81
#define SL_SPIDRV_HANDLE sl_spidrv_eusart_exp_handle
80
82
#define SL_SPIDRV_EXP_BITRATE_MULTIPLEXED SL_SPIDRV_EUSART_EXP_BITRATE
81
- #define SL_SPIDRV_UART_CONSOLE_BITRATE SL_UARTDRV_EUSART_VCOM_BAUDRATE
82
- #define SL_SPIDRV_FRAME_LENGTH SL_SPIDRV_EUSART_EXP_FRAME_LENGTH
83
-
84
- #endif // EFR32MG12 || EFR32MG24
83
+ #endif
85
84
86
85
#define CONCAT (A , B ) (A##B)
87
86
#define SPI_CLOCK (N ) CONCAT(cmuClock_USART, N)
87
+ // Macro to drive semaphore block minimun timer in milli seconds
88
+ #define RSI_SEM_BLOCK_MIN_TIMER_VALUE_MS (50)
88
89
89
90
#if SL_SPICTRL_MUX
90
91
StaticSemaphore_t spi_sem_peripheral ;
@@ -97,16 +98,6 @@ static TaskHandle_t spiInitiatorTaskHandle = NULL;
97
98
98
99
static uint32_t dummy_buffer ; /* Used for DMA - when results don't matter */
99
100
100
- #if defined(EFR32MG12 )
101
- #include "sl_spidrv_exp_config.h"
102
- extern SPIDRV_Handle_t sl_spidrv_exp_handle ;
103
- #define SL_SPIDRV_HANDLE sl_spidrv_exp_handle
104
- #elif defined(EFR32MG24 )
105
- #include "spi_multiplex.h"
106
- #else
107
- #error "Unknown platform"
108
- #endif
109
-
110
101
// variable to identify spi configured for expansion header
111
102
// EUSART configuration available on the SPIDRV
112
103
static bool spi_enabled = false;
@@ -129,7 +120,7 @@ void sl_wfx_host_gpio_init(void)
129
120
#if defined(EFR32MG24 )
130
121
// Set CS pin to high/inactive
131
122
GPIO_PinModeSet (SL_SPIDRV_EUSART_EXP_CS_PORT , SL_SPIDRV_EUSART_EXP_CS_PIN , gpioModePushPull , PINOUT_SET );
132
- #endif
123
+ #endif // EFR32MG24
133
124
134
125
GPIO_PinModeSet (WFX_RESET_PIN .port , WFX_RESET_PIN .pin , gpioModePushPull , PINOUT_SET );
135
126
GPIO_PinModeSet (WFX_SLEEP_CONFIRM_PIN .port , WFX_SLEEP_CONFIRM_PIN .pin , gpioModePushPull , PINOUT_CLEAR );
@@ -171,8 +162,6 @@ void sl_wfx_host_reset_chip(void)
171
162
vTaskDelay (pdMS_TO_TICKS (3 ));
172
163
}
173
164
174
- void gpio_interrupt ([[maybe_unused ]] uint8_t interrupt_number ) {}
175
-
176
165
/*****************************************************************
177
166
* @fn void rsi_hal_board_init(void)
178
167
* @brief
@@ -201,26 +190,12 @@ void rsi_hal_board_init(void)
201
190
sl_wfx_host_reset_chip ();
202
191
}
203
192
204
- void sl_si91x_host_enable_high_speed_bus ()
205
- {
206
- // dummy function for wifi-sdk
207
- }
208
-
209
193
#if SL_SPICTRL_MUX
210
- void SPIDRV_SetBaudrate (uint32_t baudrate )
211
- {
212
- if (EUSART_BaudrateGet (MY_USART ) == baudrate )
213
- {
214
- // EUSART synced to baudrate already
215
- return ;
216
- }
217
- EUSART_BaudrateSet (MY_USART , 0 , baudrate );
218
- }
219
-
220
194
sl_status_t sl_wfx_host_spi_cs_assert (void )
221
195
{
196
+ #if SL_SPICTRL_MUX
222
197
xSemaphoreTake (spi_sem_sync_hdl , portMAX_DELAY );
223
-
198
+ #endif // SL_SPICTRL_MUX
224
199
if (!spi_enabled ) // Reduce sl_spidrv_init_instances
225
200
{
226
201
sl_spidrv_init_instances ();
@@ -234,22 +209,23 @@ sl_status_t sl_wfx_host_spi_cs_assert(void)
234
209
235
210
sl_status_t sl_wfx_host_spi_cs_deassert (void )
236
211
{
212
+ sl_status_t status = SL_STATUS_OK ;
237
213
if (spi_enabled )
238
214
{
239
- if (ECODE_EMDRV_SPIDRV_OK != SPIDRV_DeInit (SL_SPIDRV_HANDLE ))
215
+ status = SPIDRV_DeInit (SL_SPIDRV_HANDLE );
216
+ if (SL_STATUS_OK == status )
240
217
{
241
- xSemaphoreGive (spi_sem_sync_hdl );
242
- SILABS_LOG ("%s error." , __func__ );
243
- return SL_STATUS_FAIL ;
244
- }
245
218
#if defined(EFR32MG24 )
246
- GPIO_PinOutSet (SL_SPIDRV_EUSART_EXP_CS_PORT , SL_SPIDRV_EUSART_EXP_CS_PIN );
247
- GPIO -> EUSARTROUTE [SL_SPIDRV_EUSART_EXP_PERIPHERAL_NO ].ROUTEEN = PINOUT_CLEAR ;
219
+ GPIO_PinOutSet (SL_SPIDRV_EUSART_EXP_CS_PORT , SL_SPIDRV_EUSART_EXP_CS_PIN );
220
+ GPIO -> EUSARTROUTE [SL_SPIDRV_EUSART_EXP_PERIPHERAL_NO ].ROUTEEN = PINOUT_CLEAR ;
248
221
#endif // EFR32MG24
249
- spi_enabled = false;
222
+ spi_enabled = false;
223
+ }
250
224
}
225
+ #if SL_SPICTRL_MUX
251
226
xSemaphoreGive (spi_sem_sync_hdl );
252
- return SL_STATUS_OK ;
227
+ #endif // SL_SPICTRL_MUX
228
+ return status ;
253
229
}
254
230
#endif // SL_SPICTRL_MUX
255
231
@@ -320,33 +296,30 @@ sl_status_t sl_wfx_host_post_bootloader_spi_transfer(void)
320
296
sl_status_t sl_wfx_host_pre_lcd_spi_transfer (void )
321
297
{
322
298
#if SL_SPICTRL_MUX
323
- if (sl_wfx_host_spi_cs_deassert () != SL_STATUS_OK )
324
- {
325
- return SL_STATUS_FAIL ;
326
- }
327
299
xSemaphoreTake (spi_sem_sync_hdl , portMAX_DELAY );
328
300
#endif // SL_SPICTRL_MUX
329
- // sl_memlcd_refresh takes care of SPIDRV_Init()
330
- if (SL_STATUS_OK != sl_memlcd_refresh ( sl_memlcd_get ()) )
301
+ sl_status_t status = sl_board_enable_display ();
302
+ if (SL_STATUS_OK == status )
331
303
{
304
+ // sl_memlcd_refresh takes care of SPIDRV_Init()
305
+ status = sl_memlcd_refresh (sl_memlcd_get ());
306
+ }
332
307
#if SL_SPICTRL_MUX
333
- xSemaphoreGive (spi_sem_sync_hdl );
308
+ xSemaphoreGive (spi_sem_sync_hdl );
334
309
#endif // SL_SPICTRL_MUX
335
- SILABS_LOG ("%s error." , __func__ );
336
- return SL_STATUS_FAIL ;
337
- }
338
- return SL_STATUS_OK ;
310
+ return status ;
339
311
}
340
312
341
313
sl_status_t sl_wfx_host_post_lcd_spi_transfer (void )
342
314
{
343
315
USART_Enable (SL_MEMLCD_SPI_PERIPHERAL , usartDisable );
344
316
CMU_ClockEnable (SPI_CLOCK (SL_MEMLCD_SPI_PERIPHERAL_NO ), false);
345
317
GPIO -> USARTROUTE [SL_MEMLCD_SPI_PERIPHERAL_NO ].ROUTEEN = PINOUT_CLEAR ;
318
+ sl_status_t status = sl_board_disable_display ();
346
319
#if SL_SPICTRL_MUX
347
320
xSemaphoreGive (spi_sem_sync_hdl );
348
321
#endif // SL_SPICTRL_MUX
349
- return SL_STATUS_OK ;
322
+ return status ;
350
323
}
351
324
#endif // SL_LCDCTRL_MUX
352
325
0 commit comments