mbed library sources. Supersedes mbed-src.
Dependents: Nucleo_Hello_Encoder BLE_iBeaconScan AM1805_DEMO DISCO-F429ZI_ExportTemplate1 ... more
Diff: targets/TARGET_Silicon_Labs/TARGET_EFM32/spi_api.c
- Revision:
- 179:b0033dcd6934
- Parent:
- 170:19eb464bc2be
- Child:
- 180:96ed750bd169
--- a/targets/TARGET_Silicon_Labs/TARGET_EFM32/spi_api.c Thu Nov 23 11:57:25 2017 +0000 +++ b/targets/TARGET_Silicon_Labs/TARGET_EFM32/spi_api.c Thu Dec 07 14:01:42 2017 +0000 @@ -60,6 +60,18 @@ case SPI_2: 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 default: error("Spi module not available.. Out of bound access."); return cmuClock_HFPER; @@ -85,6 +97,21 @@ index = 2; 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 default: error("Spi module not available.. Out of bound access."); break; @@ -123,7 +150,7 @@ SPIName spi_ctrl = (SPIName) pinmap_merge(spi_clk, spi_cs); obj->spi.spi = (USART_TypeDef *) pinmap_merge(spi_data, spi_ctrl); - MBED_ASSERT((int) obj->spi.spi != NC); + MBED_ASSERT((unsigned int) obj->spi.spi != NC); if (cs != NC) { /* Slave mode */ obj->spi.master = false; @@ -287,6 +314,21 @@ IRQvector = USART2_RX_IRQn; 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 default: error("Undefined SPI peripheral"); return; @@ -771,6 +813,24 @@ txChnlCfg.select = DMAREQ_USART2_TXEMPTY; 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 default: error("Spi module not available.. Out of bound access."); break; @@ -799,12 +859,36 @@ /* Select RX source address. 9 bit frame length requires to use extended register. 10 bit and larger frame requires to use RXDOUBLE register. */ switch((int)obj->spi.spi) { +#ifdef USART0 case USART_0: dma_periph = ldmaPeripheralSignal_USART0_RXDATAV; break; +#endif +#ifdef USART1 case USART_1: dma_periph = ldmaPeripheralSignal_USART1_RXDATAV; 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: EFM_ASSERT(0); while(1); @@ -1222,7 +1306,7 @@ rx_pointer = ((uint16_t *)obj->rx_buff.buffer) + obj->rx_buff.pos; } else { rx_pointer = ((uint8_t *)obj->rx_buff.buffer) + obj->rx_buff.pos; - } + } } uint32_t rx_length = obj->rx_buff.length - obj->rx_buff.pos;