@@ -241,23 +241,21 @@ static inline int ssp_writeable(spi_t *obj) {
241
241
static inline void ssp_write (spi_t * obj , int value ) {
242
242
SPI_TypeDef * spi = (SPI_TypeDef * )(obj -> spi );
243
243
while (!ssp_writeable (obj ));
244
-
245
- if (obj -> bits <= SPI_DATASIZE_8BIT ) {
246
- // force 8-bit access the data register due to SPI data buffer in this device
244
+ if (obj -> bits == SPI_DATASIZE_8BIT ) {
245
+ // Force 8-bit access to the data register
247
246
uint8_t * p_spi_dr = 0 ;
248
247
p_spi_dr = (uint8_t * ) & (spi -> DR );
249
248
* p_spi_dr = (uint8_t )value ;
250
- } else {
249
+ } else { // SPI_DATASIZE_16BIT
251
250
spi -> DR = (uint16_t )value ;
252
251
}
253
252
}
254
253
255
254
static inline int ssp_read (spi_t * obj ) {
256
255
SPI_TypeDef * spi = (SPI_TypeDef * )(obj -> spi );
257
256
while (!ssp_readable (obj ));
258
-
259
- if (obj -> bits <= SPI_DATASIZE_8BIT ) {
260
- // force 8-bit access the data register due to SPI data buffer in this device
257
+ if (obj -> bits == SPI_DATASIZE_8BIT ) {
258
+ // Force 8-bit access to the data register
261
259
uint8_t * p_spi_dr = 0 ;
262
260
p_spi_dr = (uint8_t * ) & (spi -> DR );
263
261
return (int )(* p_spi_dr );
@@ -285,13 +283,27 @@ int spi_slave_receive(spi_t *obj) {
285
283
int spi_slave_read (spi_t * obj ) {
286
284
SPI_TypeDef * spi = (SPI_TypeDef * )(obj -> spi );
287
285
while (!ssp_readable (obj ));
288
- return (int )spi -> DR ;
286
+ if (obj -> bits == SPI_DATASIZE_8BIT ) {
287
+ // Force 8-bit access to the data register
288
+ uint8_t * p_spi_dr = 0 ;
289
+ p_spi_dr = (uint8_t * ) & (spi -> DR );
290
+ return (int )(* p_spi_dr );
291
+ } else {
292
+ return (int )spi -> DR ;
293
+ }
289
294
}
290
295
291
296
void spi_slave_write (spi_t * obj , int value ) {
292
297
SPI_TypeDef * spi = (SPI_TypeDef * )(obj -> spi );
293
298
while (!ssp_writeable (obj ));
294
- spi -> DR = (uint16_t )value ;
299
+ if (obj -> bits == SPI_DATASIZE_8BIT ) {
300
+ // Force 8-bit access to the data register
301
+ uint8_t * p_spi_dr = 0 ;
302
+ p_spi_dr = (uint8_t * ) & (spi -> DR );
303
+ * p_spi_dr = (uint8_t )value ;
304
+ } else { // SPI_DATASIZE_16BIT
305
+ spi -> DR = (uint16_t )value ;
306
+ }
295
307
}
296
308
297
309
int spi_busy (spi_t * obj ) {
0 commit comments