|
|
@@ -728,3 +728,76 @@ TEST_CASE("SPI master variable cmd & addr test","[spi]")
|
|
|
|
|
|
ESP_LOGI(MASTER_TAG, "test passed.");
|
|
|
}
|
|
|
+
|
|
|
+#define RECORD_TIME_PREPARE() uint32_t __t1, __t2
|
|
|
+#define RECORD_TIME_START() do {__t1 = xthal_get_ccount();}while(0)
|
|
|
+#define RECORD_TIME_END(p_time) do{__t2 = xthal_get_ccount(); *p_time = (__t2-__t1)/240;}while(0)
|
|
|
+
|
|
|
+TEST_CASE("spi_speed","[spi]")
|
|
|
+{
|
|
|
+ RECORD_TIME_PREPARE();
|
|
|
+ uint32_t t_no_dma, t_dma;
|
|
|
+ esp_err_t ret;
|
|
|
+ spi_device_handle_t spi;
|
|
|
+ spi_bus_config_t buscfg={
|
|
|
+ .miso_io_num=PIN_NUM_MISO,
|
|
|
+ .mosi_io_num=PIN_NUM_MOSI,
|
|
|
+ .sclk_io_num=PIN_NUM_CLK,
|
|
|
+ .quadwp_io_num=-1,
|
|
|
+ .quadhd_io_num=-1
|
|
|
+ };
|
|
|
+ spi_device_interface_config_t devcfg={
|
|
|
+ .clock_speed_hz=10*1000*1000, //currently only up to 4MHz for internel connect
|
|
|
+ .mode=0, //SPI mode 0
|
|
|
+ .spics_io_num=PIN_NUM_CS, //CS pin
|
|
|
+ .queue_size=16, //We want to be able to queue 7 transactions at a time
|
|
|
+ .pre_cb=NULL,
|
|
|
+ .cs_ena_pretrans = 0,
|
|
|
+ };
|
|
|
+ //Initialize the SPI bus
|
|
|
+ ret=spi_bus_initialize(HSPI_HOST, &buscfg, 1);
|
|
|
+ TEST_ASSERT(ret==ESP_OK);
|
|
|
+ //Attach the LCD to the SPI bus
|
|
|
+ ret=spi_bus_add_device(HSPI_HOST, &devcfg, &spi);
|
|
|
+ TEST_ASSERT(ret==ESP_OK);
|
|
|
+
|
|
|
+ spi_transaction_t trans = {
|
|
|
+ .length = 1*8,
|
|
|
+ .flags = SPI_TRANS_USE_TXDATA,
|
|
|
+ };
|
|
|
+ spi_device_transmit(spi, &trans);
|
|
|
+
|
|
|
+ //only record the second time
|
|
|
+ RECORD_TIME_START();
|
|
|
+ spi_device_transmit(spi, &trans);
|
|
|
+ RECORD_TIME_END(&t_dma);
|
|
|
+
|
|
|
+ TEST_PERFORMANCE_LESS_THAN( SPI_PER_TRANS_NO_POLLING, "%d us", t_dma );
|
|
|
+
|
|
|
+ TEST_ESP_OK( spi_bus_remove_device(spi) );
|
|
|
+ TEST_ESP_OK( spi_bus_free(HSPI_HOST) );
|
|
|
+
|
|
|
+ ret=spi_bus_initialize(HSPI_HOST, &buscfg, 0);
|
|
|
+ TEST_ASSERT(ret==ESP_OK);
|
|
|
+ //Attach the LCD to the SPI bus
|
|
|
+ ret=spi_bus_add_device(HSPI_HOST, &devcfg, &spi);
|
|
|
+ TEST_ASSERT(ret==ESP_OK);
|
|
|
+
|
|
|
+ trans = (spi_transaction_t){
|
|
|
+ .length = 1*8,
|
|
|
+ .flags = SPI_TRANS_USE_TXDATA,
|
|
|
+ };
|
|
|
+ spi_device_transmit(spi, &trans);
|
|
|
+
|
|
|
+ //only record the second time
|
|
|
+ RECORD_TIME_START();
|
|
|
+ spi_device_transmit(spi, &trans);
|
|
|
+ RECORD_TIME_END(&t_no_dma);
|
|
|
+
|
|
|
+ TEST_PERFORMANCE_LESS_THAN( SPI_PER_TRANS_NO_POLLING_NO_DMA, "%d us", t_no_dma );
|
|
|
+
|
|
|
+ TEST_ESP_OK( spi_bus_remove_device(spi) );
|
|
|
+ TEST_ESP_OK( spi_bus_free(HSPI_HOST) );
|
|
|
+
|
|
|
+
|
|
|
+}
|