diff --git a/components/driver/spi_master.c b/components/driver/spi_master.c index f37f7aaf1..17a68c323 100644 --- a/components/driver/spi_master.c +++ b/components/driver/spi_master.c @@ -600,7 +600,7 @@ static void IRAM_ATTR spi_intr(void *arg) } else { data=trans->rx_buffer; } - if (trans->rxlengthrxlength <= THRESH_DMA_TRANS) { //No need for DMA; we'll copy the result out of the work registers directly later. } else { host->hw->user.usr_miso_highpart=0; @@ -625,9 +625,9 @@ static void IRAM_ATTR spi_intr(void *arg) } else { data=(uint32_t *)trans->tx_buffer; } - if (trans->rxlength < 8*32) { + if (trans->length <= THRESH_DMA_TRANS) { //No need for DMA. - for (int x=0; x < trans->rxlength; x+=32) { + for (int x=0; x < trans->length; x+=32) { //Use memcpy to get around alignment issues for txdata uint32_t word; memcpy(&word, &data[x/32], 4); @@ -656,7 +656,7 @@ static void IRAM_ATTR spi_intr(void *arg) host->hw->addr=trans->address & 0xffffffff; } host->hw->user.usr_mosi=(trans->tx_buffer==NULL)?0:1; - host->hw->user.usr_miso=(trans->tx_buffer==NULL)?0:1; + host->hw->user.usr_miso=(trans->rx_buffer==NULL)?0:1; //Call pre-transmission callback, if any if (dev->cfg.pre_cb) dev->cfg.pre_cb(trans);