diff --git a/lib/CMT2300a/cmt_spi3.c b/lib/CMT2300a/cmt_spi3.cpp similarity index 74% rename from lib/CMT2300a/cmt_spi3.c rename to lib/CMT2300a/cmt_spi3.cpp index aeae3d4..aaf00fc 100644 --- a/lib/CMT2300a/cmt_spi3.c +++ b/lib/CMT2300a/cmt_spi3.cpp @@ -15,7 +15,7 @@ SemaphoreHandle_t paramLock = NULL; spi_device_handle_t spi_reg, spi_fifo; -void cmt_spi3_init(const int8_t pin_sdio, const int8_t pin_clk, const int8_t pin_cs, const int8_t pin_fcs, const uint32_t spi_speed) +void cmt_spi3_init(const int8_t pin_sdio, const int8_t pin_clk, const int8_t pin_cs, const int8_t pin_fcs, const int32_t spi_speed) { paramLock = xSemaphoreCreateMutex(); @@ -25,24 +25,32 @@ void cmt_spi3_init(const int8_t pin_sdio, const int8_t pin_clk, const int8_t pin .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(SPI_CMT, &buscfg, SPI_DMA_DISABLED)); + spi_device_interface_config_t devcfg = { .command_bits = 1, .address_bits = 7, .dummy_bits = 0, .mode = 0, // SPI mode 0 + .duty_cycle_pos = 0, .cs_ena_pretrans = 1, .cs_ena_posttrans = 1, .clock_speed_hz = spi_speed, + .input_delay_ns = 0, .spics_io_num = pin_cs, .flags = SPI_DEVICE_HALFDUPLEX | SPI_DEVICE_3WIRE, .queue_size = 1, - .pre_cb = NULL, - .post_cb = NULL, + .pre_cb = nullptr, + .post_cb = nullptr, }; - - ESP_ERROR_CHECK(spi_bus_initialize(SPI_CMT, &buscfg, SPI_DMA_DISABLED)); ESP_ERROR_CHECK(spi_bus_add_device(SPI_CMT, &devcfg, &spi_reg)); // FiFo @@ -51,14 +59,16 @@ void cmt_spi3_init(const int8_t pin_sdio, const int8_t pin_clk, const int8_t pin .address_bits = 0, .dummy_bits = 0, .mode = 0, // SPI mode 0 + .duty_cycle_pos = 0, .cs_ena_pretrans = 2, - .cs_ena_posttrans = (uint8_t)(2 * spi_speed / 1000000), // >2 us + .cs_ena_posttrans = static_cast(2 * spi_speed / 1000000), // >2 us .clock_speed_hz = spi_speed, + .input_delay_ns = 0, .spics_io_num = pin_fcs, .flags = SPI_DEVICE_HALFDUPLEX | SPI_DEVICE_3WIRE, .queue_size = 1, - .pre_cb = NULL, - .post_cb = NULL, + .pre_cb = nullptr, + .post_cb = nullptr, }; ESP_ERROR_CHECK(spi_bus_add_device(SPI_CMT, &devcfg2, &spi_fifo)); } @@ -66,11 +76,14 @@ void cmt_spi3_init(const int8_t pin_sdio, const int8_t pin_clk, const int8_t pin void cmt_spi3_write(const uint8_t addr, const uint8_t data) { spi_transaction_t t = { + .flags = 0, .cmd = 0, .addr = addr, .length = 8, + .rxlength = 0, + .user = nullptr, .tx_buffer = &data, - .rx_buffer = NULL + .rx_buffer = nullptr, }; SPI_PARAM_LOCK(); ESP_ERROR_CHECK(spi_device_polling_transmit(spi_reg, &t)); @@ -81,11 +94,14 @@ uint8_t cmt_spi3_read(const uint8_t addr) { uint8_t data; spi_transaction_t t = { + .flags = 0, .cmd = 1, .addr = addr, + .length = 0, .rxlength = 8, - .tx_buffer = NULL, - .rx_buffer = &data + .user = nullptr, + .tx_buffer = nullptr, + .rx_buffer = &data, }; SPI_PARAM_LOCK(); ESP_ERROR_CHECK(spi_device_polling_transmit(spi_reg, &t)); @@ -96,8 +112,14 @@ uint8_t cmt_spi3_read(const uint8_t addr) void cmt_spi3_write_fifo(const uint8_t* buf, const uint16_t len) { spi_transaction_t t = { + .flags = 0, + .cmd = 0, + .addr = 0, .length = 8, - .rx_buffer = NULL + .rxlength = 0, + .user = nullptr, + .tx_buffer = nullptr, + .rx_buffer = nullptr, }; SPI_PARAM_LOCK(); @@ -113,8 +135,14 @@ void cmt_spi3_write_fifo(const uint8_t* buf, const uint16_t len) void cmt_spi3_read_fifo(uint8_t* buf, const uint16_t len) { spi_transaction_t t = { + .flags = 0, + .cmd = 0, + .addr = 0, + .length = 0, .rxlength = 8, - .tx_buffer = NULL + .user = nullptr, + .tx_buffer = nullptr, + .rx_buffer = nullptr, }; SPI_PARAM_LOCK(); diff --git a/lib/CMT2300a/cmt_spi3.h b/lib/CMT2300a/cmt_spi3.h index 6d3a67b..16655db 100644 --- a/lib/CMT2300a/cmt_spi3.h +++ b/lib/CMT2300a/cmt_spi3.h @@ -3,7 +3,11 @@ #include -void cmt_spi3_init(const int8_t pin_sdio, const int8_t pin_clk, const int8_t pin_cs, const int8_t pin_fcs, const uint32_t spi_speed); +#ifdef __cplusplus +extern "C" { +#endif + +void cmt_spi3_init(const int8_t pin_sdio, const int8_t pin_clk, const int8_t pin_cs, const int8_t pin_fcs, const int32_t spi_speed); void cmt_spi3_write(const uint8_t addr, const uint8_t dat); uint8_t cmt_spi3_read(const uint8_t addr); @@ -11,4 +15,8 @@ uint8_t cmt_spi3_read(const uint8_t addr); void cmt_spi3_write_fifo(const uint8_t* p_buf, const uint16_t len); void cmt_spi3_read_fifo(uint8_t* p_buf, const uint16_t len); +#ifdef __cplusplus +} +#endif + #endif