Use shared SPI bus for CMT and W5500
This commit is contained in:
parent
5457db269c
commit
36da830f96
@ -15,25 +15,11 @@ void cmt_spi3_init(const int8_t pin_sdio, const int8_t pin_clk, const int8_t pin
|
|||||||
{
|
{
|
||||||
paramLock = xSemaphoreCreateMutex();
|
paramLock = xSemaphoreCreateMutex();
|
||||||
|
|
||||||
spi_host_device_t host_device;
|
auto bus_config = std::make_shared<SpiBusConfig>(
|
||||||
if (!SpiManagerInst.claim_bus(host_device))
|
static_cast<gpio_num_t>(pin_sdio),
|
||||||
ESP_ERROR_CHECK(ESP_FAIL);
|
GPIO_NUM_NC,
|
||||||
|
static_cast<gpio_num_t>(pin_clk)
|
||||||
spi_bus_config_t buscfg = {
|
);
|
||||||
.mosi_io_num = pin_sdio,
|
|
||||||
.miso_io_num = -1, // single wire MOSI/MISO
|
|
||||||
.sclk_io_num = pin_clk,
|
|
||||||
.quadwp_io_num = -1,
|
|
||||||
.quadhd_io_num = -1,
|
|
||||||
.data4_io_num = -1,
|
|
||||||
.data5_io_num = -1,
|
|
||||||
.data6_io_num = -1,
|
|
||||||
.data7_io_num = -1,
|
|
||||||
.max_transfer_sz = 32,
|
|
||||||
.flags = 0,
|
|
||||||
.intr_flags = 0,
|
|
||||||
};
|
|
||||||
ESP_ERROR_CHECK(spi_bus_initialize(host_device, &buscfg, SPI_DMA_DISABLED));
|
|
||||||
|
|
||||||
spi_device_interface_config_t devcfg = {
|
spi_device_interface_config_t devcfg = {
|
||||||
.command_bits = 1,
|
.command_bits = 1,
|
||||||
@ -51,7 +37,10 @@ void cmt_spi3_init(const int8_t pin_sdio, const int8_t pin_clk, const int8_t pin
|
|||||||
.pre_cb = nullptr,
|
.pre_cb = nullptr,
|
||||||
.post_cb = nullptr,
|
.post_cb = nullptr,
|
||||||
};
|
};
|
||||||
ESP_ERROR_CHECK(spi_bus_add_device(host_device, &devcfg, &spi_reg));
|
|
||||||
|
spi_reg = SpiManagerInst.alloc_device("", bus_config, devcfg);
|
||||||
|
if (!spi_reg)
|
||||||
|
ESP_ERROR_CHECK(ESP_FAIL);
|
||||||
|
|
||||||
// FiFo
|
// FiFo
|
||||||
spi_device_interface_config_t devcfg2 = {
|
spi_device_interface_config_t devcfg2 = {
|
||||||
@ -70,7 +59,10 @@ void cmt_spi3_init(const int8_t pin_sdio, const int8_t pin_clk, const int8_t pin
|
|||||||
.pre_cb = nullptr,
|
.pre_cb = nullptr,
|
||||||
.post_cb = nullptr,
|
.post_cb = nullptr,
|
||||||
};
|
};
|
||||||
ESP_ERROR_CHECK(spi_bus_add_device(host_device, &devcfg2, &spi_fifo));
|
|
||||||
|
spi_fifo = SpiManagerInst.alloc_device("", bus_config, devcfg2);
|
||||||
|
if (!spi_fifo)
|
||||||
|
ESP_ERROR_CHECK(ESP_ERR_NOT_SUPPORTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmt_spi3_write(const uint8_t addr, const uint8_t data)
|
void cmt_spi3_write(const uint8_t addr, const uint8_t data)
|
||||||
|
|||||||
@ -12,41 +12,22 @@ W5500::W5500(int8_t pin_mosi, int8_t pin_miso, int8_t pin_sclk, int8_t pin_cs, i
|
|||||||
eth_handle(nullptr),
|
eth_handle(nullptr),
|
||||||
eth_netif(nullptr)
|
eth_netif(nullptr)
|
||||||
{
|
{
|
||||||
spi_host_device_t host_device;
|
|
||||||
if (!SpiManagerInst.claim_bus(host_device))
|
|
||||||
ESP_ERROR_CHECK(ESP_FAIL);
|
|
||||||
|
|
||||||
gpio_reset_pin(static_cast<gpio_num_t>(pin_rst));
|
gpio_reset_pin(static_cast<gpio_num_t>(pin_rst));
|
||||||
gpio_set_level(static_cast<gpio_num_t>(pin_rst), 0);
|
gpio_set_level(static_cast<gpio_num_t>(pin_rst), 0);
|
||||||
gpio_set_direction(static_cast<gpio_num_t>(pin_rst), GPIO_MODE_OUTPUT);
|
gpio_set_direction(static_cast<gpio_num_t>(pin_rst), GPIO_MODE_OUTPUT);
|
||||||
|
|
||||||
gpio_reset_pin(static_cast<gpio_num_t>(pin_mosi));
|
|
||||||
gpio_reset_pin(static_cast<gpio_num_t>(pin_miso));
|
|
||||||
gpio_reset_pin(static_cast<gpio_num_t>(pin_sclk));
|
|
||||||
gpio_reset_pin(static_cast<gpio_num_t>(pin_cs));
|
gpio_reset_pin(static_cast<gpio_num_t>(pin_cs));
|
||||||
|
|
||||||
gpio_reset_pin(static_cast<gpio_num_t>(pin_int));
|
gpio_reset_pin(static_cast<gpio_num_t>(pin_int));
|
||||||
|
|
||||||
esp_err_t err = gpio_install_isr_service(ARDUINO_ISR_FLAG);
|
esp_err_t err = gpio_install_isr_service(ARDUINO_ISR_FLAG);
|
||||||
if (err != ESP_ERR_INVALID_STATE) // don't raise an error when ISR service is already installed
|
if (err != ESP_ERR_INVALID_STATE) // don't raise an error when ISR service is already installed
|
||||||
ESP_ERROR_CHECK(err);
|
ESP_ERROR_CHECK(err);
|
||||||
|
|
||||||
spi_bus_config_t bus_config {
|
auto bus_config = std::make_shared<SpiBusConfig>(
|
||||||
.mosi_io_num = pin_mosi,
|
static_cast<gpio_num_t>(pin_mosi),
|
||||||
.miso_io_num = pin_miso,
|
static_cast<gpio_num_t>(pin_miso),
|
||||||
.sclk_io_num = pin_sclk,
|
static_cast<gpio_num_t>(pin_sclk)
|
||||||
.quadwp_io_num = -1,
|
);
|
||||||
.quadhd_io_num = -1,
|
|
||||||
.data4_io_num = -1,
|
|
||||||
.data5_io_num = -1,
|
|
||||||
.data6_io_num = -1,
|
|
||||||
.data7_io_num = -1,
|
|
||||||
.max_transfer_sz = 0, // uses default value internally
|
|
||||||
.flags = 0,
|
|
||||||
.intr_flags = 0,
|
|
||||||
};
|
|
||||||
|
|
||||||
ESP_ERROR_CHECK(spi_bus_initialize(host_device, &bus_config, SPI_DMA_CH_AUTO));
|
|
||||||
|
|
||||||
spi_device_interface_config_t device_config {
|
spi_device_interface_config_t device_config {
|
||||||
.command_bits = 16, // actually address phase
|
.command_bits = 16, // actually address phase
|
||||||
@ -65,8 +46,9 @@ W5500::W5500(int8_t pin_mosi, int8_t pin_miso, int8_t pin_sclk, int8_t pin_cs, i
|
|||||||
.post_cb = nullptr,
|
.post_cb = nullptr,
|
||||||
};
|
};
|
||||||
|
|
||||||
spi_device_handle_t spi;
|
spi_device_handle_t spi = SpiManagerInst.alloc_device("", bus_config, device_config);
|
||||||
ESP_ERROR_CHECK(spi_bus_add_device(host_device, &device_config, &spi));
|
if (!spi)
|
||||||
|
ESP_ERROR_CHECK(ESP_FAIL);
|
||||||
|
|
||||||
// Reset sequence
|
// Reset sequence
|
||||||
delayMicroseconds(500);
|
delayMicroseconds(500);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user