nrf5/spi: Adding posibility to configure SPI firstbit mode to LSB or MSB. Default is MSB. Updating python module and hal driver.

This commit is contained in:
Glenn Ruben Bakke 2017-01-19 20:04:49 +01:00
parent ca34429617
commit 4cef9cd480
3 changed files with 19 additions and 11 deletions

View File

@ -85,7 +85,7 @@ void hal_spi_master_init(NRF_SPI_Type * p_instance, hal_spi_init_t const * p_spi
break;
}
if (p_spi_init->lsb_first) {
if (p_spi_init->firstbit == HAL_SPI_LSB_FIRST) {
p_instance->CONFIG = (mode | (SPI_CONFIG_ORDER_LsbFirst << SPI_CONFIG_ORDER_Pos));
} else {
p_instance->CONFIG = (mode | (SPI_CONFIG_ORDER_MsbFirst << SPI_CONFIG_ORDER_Pos));

View File

@ -73,6 +73,14 @@ typedef enum {
HAL_SPI_MODE_CPOL1_CPHA1 // CPOL = 1, CPHA = 1 (data on trailing edge)
} hal_spi_mode_t;
/**
* @brief SPI firstbit mode definition
*/
typedef enum {
HAL_SPI_MSB_FIRST = 0,
HAL_SPI_LSB_FIRST
} hal_spi_firstbit_t;
/**
* @brief SPI Configuration Structure definition
*/
@ -83,7 +91,7 @@ typedef struct {
uint8_t mosi_pin_port;
uint8_t miso_pin_port;
uint8_t clk_pin_port;
bool lsb_first;
hal_spi_firstbit_t firstbit;
hal_spi_mode_t mode;
uint32_t irq_priority;
hal_spi_clk_freq_t freq;
@ -94,15 +102,15 @@ typedef struct {
*/
typedef struct __SPI_HandleTypeDef
{
NRF_SPI_Type *instance; /* SPI registers base address */
hal_spi_init_t init; /* SPI initialization parameters */
NRF_SPI_Type *instance; /* SPI registers base address */
hal_spi_init_t init; /* SPI initialization parameters */
} SPI_HandleTypeDef;
void hal_spi_master_init(NRF_SPI_Type * p_instance, hal_spi_init_t const * p_spi_init);
void hal_spi_master_tx_rx(NRF_SPI_Type * p_instance,
uint16_t transfer_size,
const uint8_t * tx_data,
uint8_t * rx_data);
void hal_spi_master_tx_rx(NRF_SPI_Type * p_instance,
uint16_t transfer_size,
const uint8_t * tx_data,
uint8_t * rx_data);
#endif // HAL_SPI_H__

View File

@ -221,8 +221,8 @@ STATIC const mp_rom_map_elem_t machine_spi_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_write), MP_ROM_PTR(&mp_machine_spi_write_obj) },
{ MP_ROM_QSTR(MP_QSTR_write_readinto), MP_ROM_PTR(&mp_machine_spi_write_readinto_obj) },
{ MP_ROM_QSTR(MP_QSTR_MSB), MP_ROM_INT(0) }, // SPI_FIRSTBIT_MSB
{ MP_ROM_QSTR(MP_QSTR_LSB), MP_ROM_INT(1) }, // SPI_FIRSTBIT_LSB
{ MP_ROM_QSTR(MP_QSTR_MSB), MP_ROM_INT(HAL_SPI_MSB_FIRST) }, // SPI_FIRSTBIT_MSB
{ MP_ROM_QSTR(MP_QSTR_LSB), MP_ROM_INT(HAL_SPI_LSB_FIRST) }, // SPI_FIRSTBIT_LSB
};
STATIC MP_DEFINE_CONST_DICT(machine_spi_locals_dict, machine_spi_locals_dict_table);
@ -280,7 +280,7 @@ STATIC mp_obj_t machine_hard_spi_make_new(mp_arg_val_t *args) {
self->pyb->spi->init.irq_priority = 4;
self->pyb->spi->init.mode = HAL_SPI_MODE_CPOL0_CPHA0;
self->pyb->spi->init.lsb_first = false;
self->pyb->spi->init.firstbit = (args[ARG_NEW_firstbit].u_int == 0) ? HAL_SPI_MSB_FIRST : HAL_SPI_LSB_FIRST;;
hal_spi_master_init(self->pyb->spi->instance, &self->pyb->spi->init);
return MP_OBJ_FROM_PTR(self);