forked from Imagelibrary/rtems
bsp/imx: Allow gapless SPI transfers.
This uses the tx-threshold to reduce gaps in SPI transmissions. Update #3869.
This commit is contained in:
@@ -174,12 +174,14 @@ static void imx_ecspi_config(
|
|||||||
uint32_t conreg;
|
uint32_t conreg;
|
||||||
uint32_t testreg;
|
uint32_t testreg;
|
||||||
uint32_t configreg;
|
uint32_t configreg;
|
||||||
|
uint32_t dmareg;
|
||||||
uint32_t cs_bit;
|
uint32_t cs_bit;
|
||||||
|
|
||||||
conreg = IMX_ECSPI_CONREG_CHANNEL_MODE(0xf)
|
conreg = IMX_ECSPI_CONREG_CHANNEL_MODE(0xf)
|
||||||
| IMX_ECSPI_CONREG_SMC | IMX_ECSPI_CONREG_EN;
|
| IMX_ECSPI_CONREG_SMC | IMX_ECSPI_CONREG_EN;
|
||||||
testreg = regs->testreg;
|
testreg = regs->testreg;
|
||||||
configreg = regs->configreg;
|
configreg = regs->configreg;
|
||||||
|
dmareg = regs->dmareg;
|
||||||
cs_bit = 1U << cs;
|
cs_bit = 1U << cs;
|
||||||
|
|
||||||
conreg |= imx_ecspi_conreg_divider(bus, speed_hz);
|
conreg |= imx_ecspi_conreg_divider(bus, speed_hz);
|
||||||
@@ -213,8 +215,11 @@ static void imx_ecspi_config(
|
|||||||
testreg &= ~IMX_ECSPI_TESTREG_LBC;
|
testreg &= ~IMX_ECSPI_TESTREG_LBC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dmareg = IMX_ECSPI_DMAREG_TX_THRESHOLD_SET(dmareg, IMX_ECSPI_FIFO_SIZE/2);
|
||||||
|
|
||||||
regs->conreg = conreg;
|
regs->conreg = conreg;
|
||||||
regs->testreg = testreg;
|
regs->testreg = testreg;
|
||||||
|
regs->dmareg = dmareg;
|
||||||
regs->configreg = configreg;
|
regs->configreg = configreg;
|
||||||
|
|
||||||
bus->conreg = conreg;
|
bus->conreg = conreg;
|
||||||
@@ -287,7 +292,7 @@ static void imx_ecspi_next_msg(imx_ecspi_bus *bus, volatile imx_ecspi *regs)
|
|||||||
bus->tx_buf = msg->tx_buf;
|
bus->tx_buf = msg->tx_buf;
|
||||||
imx_ecspi_set_push_pop(bus, msg->len, msg->bits_per_word);
|
imx_ecspi_set_push_pop(bus, msg->len, msg->bits_per_word);
|
||||||
imx_ecspi_push(bus, regs);
|
imx_ecspi_push(bus, regs);
|
||||||
regs->intreg = IMX_ECSPI_TE;
|
regs->intreg = IMX_ECSPI_TE | IMX_ECSPI_TDR;
|
||||||
} else {
|
} else {
|
||||||
regs->intreg = 0;
|
regs->intreg = 0;
|
||||||
imx_ecspi_done(bus);
|
imx_ecspi_done(bus);
|
||||||
|
|||||||
Reference in New Issue
Block a user