mirror of
https://github.com/espressif/esp-idf.git
synced 2025-08-01 03:34:32 +02:00
spi: Remove Slave TX/RX set bitlen not effective for ESP32-S2/C3/S3
Furthermore, RX_EOF_EN should only be set when SPI Slave is configured for segment transfer mode and the "ms_data_bitlen" field is configured to control the "IN_SUC_EOF" interrupt. Since "ms_data_bitlen" is not set anymore for S2, C3 and S3, "RX_EOF_EN" should be cleared.
This commit is contained in:
committed by
bot
parent
6fb126657a
commit
2bc4a0836f
@@ -584,7 +584,6 @@ static inline void spi_ll_master_set_io_mode(spi_dev_t *hw, spi_ll_io_mode_t io_
|
|||||||
static inline void spi_ll_slave_set_seg_mode(spi_dev_t *hw, bool seg_trans)
|
static inline void spi_ll_slave_set_seg_mode(spi_dev_t *hw, bool seg_trans)
|
||||||
{
|
{
|
||||||
hw->dma_conf.dma_seg_trans_en = seg_trans;
|
hw->dma_conf.dma_seg_trans_en = seg_trans;
|
||||||
hw->dma_conf.rx_eof_en = seg_trans;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -819,7 +818,7 @@ static inline void spi_ll_set_miso_bitlen(spi_dev_t *hw, size_t bitlen)
|
|||||||
*/
|
*/
|
||||||
static inline void spi_ll_slave_set_rx_bitlen(spi_dev_t *hw, size_t bitlen)
|
static inline void spi_ll_slave_set_rx_bitlen(spi_dev_t *hw, size_t bitlen)
|
||||||
{
|
{
|
||||||
spi_ll_set_mosi_bitlen(hw, bitlen);
|
//This is not used in esp32c3
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -830,7 +829,7 @@ static inline void spi_ll_slave_set_rx_bitlen(spi_dev_t *hw, size_t bitlen)
|
|||||||
*/
|
*/
|
||||||
static inline void spi_ll_slave_set_tx_bitlen(spi_dev_t *hw, size_t bitlen)
|
static inline void spi_ll_slave_set_tx_bitlen(spi_dev_t *hw, size_t bitlen)
|
||||||
{
|
{
|
||||||
spi_ll_set_mosi_bitlen(hw, bitlen);
|
//This is not used in esp32c3
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -545,7 +545,6 @@ static inline void spi_ll_master_set_io_mode(spi_dev_t *hw, spi_ll_io_mode_t io_
|
|||||||
static inline void spi_ll_slave_set_seg_mode(spi_dev_t *hw, bool seg_trans)
|
static inline void spi_ll_slave_set_seg_mode(spi_dev_t *hw, bool seg_trans)
|
||||||
{
|
{
|
||||||
hw->dma_conf.dma_seg_trans_en = seg_trans;
|
hw->dma_conf.dma_seg_trans_en = seg_trans;
|
||||||
hw->dma_conf.rx_eof_en = seg_trans;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -807,7 +806,7 @@ static inline void spi_ll_set_mosi_bitlen(spi_dev_t *hw, size_t bitlen)
|
|||||||
*/
|
*/
|
||||||
static inline void spi_ll_slave_set_rx_bitlen(spi_dev_t *hw, size_t bitlen)
|
static inline void spi_ll_slave_set_rx_bitlen(spi_dev_t *hw, size_t bitlen)
|
||||||
{
|
{
|
||||||
spi_ll_set_miso_bitlen(hw, bitlen);
|
//This is not used in esp32s2
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -818,7 +817,7 @@ static inline void spi_ll_slave_set_rx_bitlen(spi_dev_t *hw, size_t bitlen)
|
|||||||
*/
|
*/
|
||||||
static inline void spi_ll_slave_set_tx_bitlen(spi_dev_t *hw, size_t bitlen)
|
static inline void spi_ll_slave_set_tx_bitlen(spi_dev_t *hw, size_t bitlen)
|
||||||
{
|
{
|
||||||
spi_ll_set_miso_bitlen(hw, bitlen);
|
//This is not used in esp32s2
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -583,7 +583,6 @@ static inline void spi_ll_master_set_io_mode(spi_dev_t *hw, spi_ll_io_mode_t io_
|
|||||||
static inline void spi_ll_slave_set_seg_mode(spi_dev_t *hw, bool seg_trans)
|
static inline void spi_ll_slave_set_seg_mode(spi_dev_t *hw, bool seg_trans)
|
||||||
{
|
{
|
||||||
hw->dma_conf.dma_seg_trans_en = seg_trans;
|
hw->dma_conf.dma_seg_trans_en = seg_trans;
|
||||||
hw->dma_conf.rx_eof_en = seg_trans;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -826,7 +825,7 @@ static inline void spi_ll_set_miso_bitlen(spi_dev_t *hw, size_t bitlen)
|
|||||||
*/
|
*/
|
||||||
static inline void spi_ll_slave_set_rx_bitlen(spi_dev_t *hw, size_t bitlen)
|
static inline void spi_ll_slave_set_rx_bitlen(spi_dev_t *hw, size_t bitlen)
|
||||||
{
|
{
|
||||||
spi_ll_set_mosi_bitlen(hw, bitlen);
|
//This is not used in esp32s3
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -837,7 +836,7 @@ static inline void spi_ll_slave_set_rx_bitlen(spi_dev_t *hw, size_t bitlen)
|
|||||||
*/
|
*/
|
||||||
static inline void spi_ll_slave_set_tx_bitlen(spi_dev_t *hw, size_t bitlen)
|
static inline void spi_ll_slave_set_tx_bitlen(spi_dev_t *hw, size_t bitlen)
|
||||||
{
|
{
|
||||||
spi_ll_set_mosi_bitlen(hw, bitlen);
|
//This is not used in esp32s3
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -71,8 +71,11 @@ void spi_slave_hal_prepare_data(const spi_slave_hal_context_t *hal)
|
|||||||
spi_ll_slave_set_rx_bitlen(hal->hw, hal->bitlen);
|
spi_ll_slave_set_rx_bitlen(hal->hw, hal->bitlen);
|
||||||
spi_ll_slave_set_tx_bitlen(hal->hw, hal->bitlen);
|
spi_ll_slave_set_tx_bitlen(hal->hw, hal->bitlen);
|
||||||
|
|
||||||
|
#ifdef CONFIG_IDF_TARGET_ESP32
|
||||||
|
//SPI Slave mode on ESP32 requires MOSI/MISO enable
|
||||||
spi_ll_enable_mosi(hal->hw, (hal->rx_buffer == NULL) ? 0 : 1);
|
spi_ll_enable_mosi(hal->hw, (hal->rx_buffer == NULL) ? 0 : 1);
|
||||||
spi_ll_enable_miso(hal->hw, (hal->tx_buffer == NULL) ? 0 : 1);
|
spi_ll_enable_miso(hal->hw, (hal->tx_buffer == NULL) ? 0 : 1);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void spi_slave_hal_store_result(spi_slave_hal_context_t *hal)
|
void spi_slave_hal_store_result(spi_slave_hal_context_t *hal)
|
||||||
|
@@ -149,7 +149,6 @@ void spi_slave_hd_hal_rxdma(spi_slave_hd_hal_context_t *hal, uint8_t *out_buf, s
|
|||||||
spi_ll_infifo_full_clr(hal->dev);
|
spi_ll_infifo_full_clr(hal->dev);
|
||||||
spi_ll_clear_intr(hal->dev, SPI_LL_INTR_CMD7);
|
spi_ll_clear_intr(hal->dev, SPI_LL_INTR_CMD7);
|
||||||
|
|
||||||
spi_ll_slave_set_rx_bitlen(hal->dev, len * 8);
|
|
||||||
spi_ll_dma_rx_enable(hal->dev, 1);
|
spi_ll_dma_rx_enable(hal->dev, 1);
|
||||||
spi_dma_ll_rx_start(hal->dma_in, hal->rx_dma_chan, &hal->dmadesc_rx->desc);
|
spi_dma_ll_rx_start(hal->dma_in, hal->rx_dma_chan, &hal->dmadesc_rx->desc);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user