mirror of https://github.com/ARMmbed/mbed-os.git
TARGET_NRF: corrected spi_init() to properly handle re-initialization on the same pins + minor editorial corrections.
parent
74695e74cf
commit
2129b29bed
|
@ -90,22 +90,22 @@ void SPI0_TWI0_IRQHandler(void);
|
||||||
void SPI1_TWI1_IRQHandler(void);
|
void SPI1_TWI1_IRQHandler(void);
|
||||||
void SPIM2_SPIS2_SPI2_IRQHandler(void);
|
void SPIM2_SPIS2_SPI2_IRQHandler(void);
|
||||||
|
|
||||||
static const peripheral_handler_desc_t spi_hanlder_desc[SPI_COUNT] = {
|
static const peripheral_handler_desc_t spi_handler_desc[SPI_COUNT] = {
|
||||||
#if SPI0_ENABLED
|
#if SPI0_ENABLED
|
||||||
{
|
{
|
||||||
SPIS0_IRQ,
|
SPI0_IRQ,
|
||||||
(uint32_t) SPI0_TWI0_IRQHandler
|
(uint32_t) SPI0_TWI0_IRQHandler
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#if SPI1_ENABLED
|
#if SPI1_ENABLED
|
||||||
{
|
{
|
||||||
SPIS1_IRQ,
|
SPI1_IRQ,
|
||||||
(uint32_t) SPI1_TWI1_IRQHandler
|
(uint32_t) SPI1_TWI1_IRQHandler
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
#if SPI2_ENABLED
|
#if SPI2_ENABLED
|
||||||
{
|
{
|
||||||
SPIS2_IRQ,
|
SPI2_IRQ,
|
||||||
(uint32_t) SPIM2_SPIS2_SPI2_IRQHandler
|
(uint32_t) SPIM2_SPIS2_SPI2_IRQHandler
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
|
@ -254,12 +254,24 @@ void spi_init(spi_t *obj,
|
||||||
PinName mosi, PinName miso, PinName sclk, PinName ssel)
|
PinName mosi, PinName miso, PinName sclk, PinName ssel)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
for (i = 0; i < SPI_COUNT; ++i) {
|
||||||
|
spi_info_t *p_spi_info = &m_spi_info[i];
|
||||||
|
if (p_spi_info->initialized &&
|
||||||
|
p_spi_info->mosi_pin == (uint8_t)mosi &&
|
||||||
|
p_spi_info->miso_pin == (uint8_t)miso &&
|
||||||
|
p_spi_info->sck_pin == (uint8_t)sclk &&
|
||||||
|
p_spi_info->ss_pin == (uint8_t)ssel) {
|
||||||
|
// Reuse the already allocated SPI instance (instead of allocating
|
||||||
|
// a new one), if it appears to be initialized with exactly the same
|
||||||
|
// pin assignments.
|
||||||
|
SPI_IDX(obj) = i;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < SPI_COUNT; ++i) {
|
for (i = 0; i < SPI_COUNT; ++i) {
|
||||||
spi_info_t *p_spi_info = &m_spi_info[i];
|
spi_info_t *p_spi_info = &m_spi_info[i];
|
||||||
if (!p_spi_info->initialized) {
|
if (!p_spi_info->initialized) {
|
||||||
|
|
||||||
NVIC_SetVector(spi_hanlder_desc[i].IRQn, spi_hanlder_desc[i].vector);
|
|
||||||
|
|
||||||
p_spi_info->sck_pin = (uint8_t)sclk;
|
p_spi_info->sck_pin = (uint8_t)sclk;
|
||||||
p_spi_info->mosi_pin = (mosi != NC) ?
|
p_spi_info->mosi_pin = (mosi != NC) ?
|
||||||
(uint8_t)mosi : NRF_DRV_SPI_PIN_NOT_USED;
|
(uint8_t)mosi : NRF_DRV_SPI_PIN_NOT_USED;
|
||||||
|
@ -270,6 +282,8 @@ void spi_init(spi_t *obj,
|
||||||
p_spi_info->spi_mode = (uint8_t)NRF_DRV_SPI_MODE_0;
|
p_spi_info->spi_mode = (uint8_t)NRF_DRV_SPI_MODE_0;
|
||||||
p_spi_info->frequency = NRF_DRV_SPI_FREQ_1M;
|
p_spi_info->frequency = NRF_DRV_SPI_FREQ_1M;
|
||||||
|
|
||||||
|
NVIC_SetVector(spi_handler_desc[i].IRQn, spi_handler_desc[i].vector);
|
||||||
|
|
||||||
// By default each SPI instance is initialized to work as a master.
|
// By default each SPI instance is initialized to work as a master.
|
||||||
// Should the slave mode be used, the instance will be reconfigured
|
// Should the slave mode be used, the instance will be reconfigured
|
||||||
// appropriately in 'spi_format'.
|
// appropriately in 'spi_format'.
|
||||||
|
|
Loading…
Reference in New Issue