@@ -215,13 +215,19 @@ static inline int ssp_writeable(spi_t *obj) {
215
215
static inline void ssp_write (spi_t * obj , int value ) {
216
216
SPI_TypeDef * spi = (SPI_TypeDef * )(obj -> spi );
217
217
while (!ssp_writeable (obj ));
218
- SPI_SendData8 (spi , (uint8_t )value );
218
+ if (obj -> bits == SPI_DATASIZE_8BIT ) // 8 bit mode
219
+ SPI_SendData8 (spi , (uint8_t )value );
220
+ else
221
+ SPI_I2S_SendData16 (spi , (uint16_t )value );
219
222
}
220
223
221
224
static inline int ssp_read (spi_t * obj ) {
222
225
SPI_TypeDef * spi = (SPI_TypeDef * )(obj -> spi );
223
226
while (!ssp_readable (obj ));
224
- return (int )SPI_ReceiveData8 (spi );
227
+ if (obj -> bits == SPI_DATASIZE_8BIT ) // 8 bit mode
228
+ return (int )SPI_ReceiveData8 (spi );
229
+ else // 16 bit mode
230
+ return (int )SPI_I2S_ReceiveData16 (spi );
225
231
}
226
232
227
233
static inline int ssp_busy (spi_t * obj ) {
@@ -242,13 +248,19 @@ int spi_slave_receive(spi_t *obj) {
242
248
243
249
int spi_slave_read (spi_t * obj ) {
244
250
SPI_TypeDef * spi = (SPI_TypeDef * )(obj -> spi );
245
- return (int )SPI_ReceiveData8 (spi );
251
+ if (obj -> bits == SPI_DATASIZE_8BIT ) // 8 bit mode
252
+ return (int )SPI_ReceiveData8 (spi );
253
+ else
254
+ return (int )SPI_I2S_ReceiveData16 (spi );
246
255
}
247
256
248
257
void spi_slave_write (spi_t * obj , int value ) {
249
258
SPI_TypeDef * spi = (SPI_TypeDef * )(obj -> spi );
250
- while (!ssp_writeable (obj ));
251
- SPI_SendData8 (spi , (uint8_t )value );
259
+ while (!ssp_writeable (obj ));
260
+ if (obj -> bits == SPI_DATASIZE_8BIT ) // 8 bit mode
261
+ SPI_SendData8 (spi , (uint8_t )value );
262
+ else
263
+ SPI_I2S_SendData16 (spi , (uint16_t )value );
252
264
}
253
265
254
266
int spi_busy (spi_t * obj ) {
0 commit comments