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:
parent
ca34429617
commit
4cef9cd480
@ -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));
|
||||
|
@ -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__
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user