mirror of https://github.com/ARMmbed/mbed-os.git
Support USARTs up to USART5 in SPI
parent
e23ce9d87a
commit
b11914c967
|
@ -59,6 +59,18 @@ static inline CMU_Clock_TypeDef spi_get_clock_tree(spi_t *obj)
|
||||||
#ifdef USART2
|
#ifdef USART2
|
||||||
case SPI_2:
|
case SPI_2:
|
||||||
return cmuClock_USART2;
|
return cmuClock_USART2;
|
||||||
|
#endif
|
||||||
|
#ifdef USART3
|
||||||
|
case SPI_3:
|
||||||
|
return cmuClock_USART3;
|
||||||
|
#endif
|
||||||
|
#ifdef USART4
|
||||||
|
case SPI_4:
|
||||||
|
return cmuClock_USART4;
|
||||||
|
#endif
|
||||||
|
#ifdef USART5
|
||||||
|
case SPI_5:
|
||||||
|
return cmuClock_USART5;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
error("Spi module not available.. Out of bound access.");
|
error("Spi module not available.. Out of bound access.");
|
||||||
|
@ -84,6 +96,21 @@ static inline uint8_t spi_get_index(spi_t *obj)
|
||||||
case SPI_2:
|
case SPI_2:
|
||||||
index = 2;
|
index = 2;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef USART3
|
||||||
|
case SPI_3:
|
||||||
|
index = 3;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef USART4
|
||||||
|
case SPI_4:
|
||||||
|
index = 4;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef USART5
|
||||||
|
case SPI_5:
|
||||||
|
index = 5;
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
error("Spi module not available.. Out of bound access.");
|
error("Spi module not available.. Out of bound access.");
|
||||||
|
@ -286,6 +313,21 @@ void spi_enable_interrupt(spi_t *obj, uint32_t handler, uint8_t enable)
|
||||||
case USART_2:
|
case USART_2:
|
||||||
IRQvector = USART2_RX_IRQn;
|
IRQvector = USART2_RX_IRQn;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef USART3
|
||||||
|
case USART_3:
|
||||||
|
IRQvector = USART3_RX_IRQn;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef USART4
|
||||||
|
case USART_4:
|
||||||
|
IRQvector = USART4_RX_IRQn;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef USART5
|
||||||
|
case USART_5:
|
||||||
|
IRQvector = USART5_RX_IRQn;
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
error("Undefined SPI peripheral");
|
error("Undefined SPI peripheral");
|
||||||
|
@ -770,6 +812,24 @@ static void spi_master_dma_channel_setup(spi_t *obj, void* callback)
|
||||||
rxChnlCfg.select = DMAREQ_USART2_RXDATAV;
|
rxChnlCfg.select = DMAREQ_USART2_RXDATAV;
|
||||||
txChnlCfg.select = DMAREQ_USART2_TXEMPTY;
|
txChnlCfg.select = DMAREQ_USART2_TXEMPTY;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef USART3
|
||||||
|
case SPI_3:
|
||||||
|
rxChnlCfg.select = DMAREQ_USART3_RXDATAV;
|
||||||
|
txChnlCfg.select = DMAREQ_USART3_TXEMPTY;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef USART4
|
||||||
|
case SPI_4:
|
||||||
|
rxChnlCfg.select = DMAREQ_USART4_RXDATAV;
|
||||||
|
txChnlCfg.select = DMAREQ_USART4_TXEMPTY;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef USART5
|
||||||
|
case SPI_5:
|
||||||
|
rxChnlCfg.select = DMAREQ_USART5_RXDATAV;
|
||||||
|
txChnlCfg.select = DMAREQ_USART5_TXEMPTY;
|
||||||
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
error("Spi module not available.. Out of bound access.");
|
error("Spi module not available.. Out of bound access.");
|
||||||
|
@ -799,12 +859,36 @@ static void spi_activate_dma(spi_t *obj, void* rxdata, const void* txdata, int t
|
||||||
/* Select RX source address. 9 bit frame length requires to use extended register.
|
/* Select RX source address. 9 bit frame length requires to use extended register.
|
||||||
10 bit and larger frame requires to use RXDOUBLE register. */
|
10 bit and larger frame requires to use RXDOUBLE register. */
|
||||||
switch((int)obj->spi.spi) {
|
switch((int)obj->spi.spi) {
|
||||||
|
#ifdef USART0
|
||||||
case USART_0:
|
case USART_0:
|
||||||
dma_periph = ldmaPeripheralSignal_USART0_RXDATAV;
|
dma_periph = ldmaPeripheralSignal_USART0_RXDATAV;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef USART1
|
||||||
case USART_1:
|
case USART_1:
|
||||||
dma_periph = ldmaPeripheralSignal_USART1_RXDATAV;
|
dma_periph = ldmaPeripheralSignal_USART1_RXDATAV;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef USART2
|
||||||
|
case USART_2:
|
||||||
|
dma_periph = ldmaPeripheralSignal_USART2_RXDATAV;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef USART3
|
||||||
|
case USART_3:
|
||||||
|
dma_periph = ldmaPeripheralSignal_USART3_RXDATAV;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef USART4
|
||||||
|
case USART_4:
|
||||||
|
dma_periph = ldmaPeripheralSignal_USART4_RXDATAV;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef USART5
|
||||||
|
case USART_5:
|
||||||
|
dma_periph = ldmaPeripheralSignal_USART5_RXDATAV;
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
EFM_ASSERT(0);
|
EFM_ASSERT(0);
|
||||||
while(1);
|
while(1);
|
||||||
|
|
Loading…
Reference in New Issue