forked from Imagelibrary/rtems
bsp/atsam: Speed up SPI DMA transfer start
This commit is contained in:
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user