bsp/atsam: Speed up SPI DMA transfer start

This commit is contained in:
Sebastian Huber
2016-12-13 15:18:00 +01:00
parent 0396f60e59
commit f74e2959de
2 changed files with 10 additions and 9 deletions

View File

@@ -122,6 +122,12 @@
extern "C" { extern "C" {
#endif #endif
static inline void XDMAC_StartTransfer(Xdmac *pXdmac, uint8_t iChannel)
{
pXdmac->XDMAC_GE = (XDMAC_GE_EN0 << iChannel);
pXdmac->XDMAC_GIE = (XDMAC_GIE_IE0 << iChannel);
}
extern uint32_t XDMAC_GetType(Xdmac *pXdmac); extern uint32_t XDMAC_GetType(Xdmac *pXdmac);
extern uint32_t XDMAC_GetConfig(Xdmac *pXdmac); extern uint32_t XDMAC_GetConfig(Xdmac *pXdmac);
extern uint32_t XDMAC_GetArbiter(Xdmac *pXdmac); extern uint32_t XDMAC_GetArbiter(Xdmac *pXdmac);

View File

@@ -354,8 +354,8 @@ static uint32_t atsam_send_command(
) )
{ {
Spid *spid = &bus->SpiDma; Spid *spid = &bus->SpiDma;
Spi *pSpiHw = spid->pSpiHw; Spi *pSpiHw = spid->pSpiHw;
Xdmac *pXdmac = bus->SpiDma.pXdmad->pXdmacs;
if ( if (
atsam_configure_link_list( atsam_configure_link_list(
@@ -382,14 +382,9 @@ static uint32_t atsam_send_command(
bus->spi_switched_on = true; bus->spi_switched_on = true;
/* Start DMA 0(RX) && 1(TX) */ /* Start DMA */
if (XDMAD_StartTransfer(spid->pXdmad, bus->dma_rx_channel)) { XDMAC_StartTransfer(pXdmac, bus->dma_rx_channel);
return SPID_ERROR_LOCK; XDMAC_StartTransfer(pXdmac, bus->dma_tx_channel);
}
if (XDMAD_StartTransfer(spid->pXdmad, bus->dma_tx_channel)) {
return SPID_ERROR_LOCK;
}
return 0; return 0;
} }