mirror of
https://github.com/espressif/esp-idf.git
synced 2024-10-05 20:47:46 -04:00
spi_example: fix the example to pass in esp32s2beta
This commit is contained in:
parent
17378fd4c2
commit
fcf4502c6b
@ -1,6 +1,11 @@
|
|||||||
set(COMPONENT_SRCS "decode_image.c"
|
set(COMPONENT_SRCS "pretty_effect.c"
|
||||||
"pretty_effect.c"
|
|
||||||
"spi_master_example_main.c")
|
"spi_master_example_main.c")
|
||||||
|
|
||||||
|
#only esp32 has enough memory to do jpeg decoding
|
||||||
|
if (CONFIG_IDF_TARGET_ESP32)
|
||||||
|
list(APPEND COMPONENT_SRCS "decode_image.c")
|
||||||
|
endif()
|
||||||
|
|
||||||
set(COMPONENT_ADD_INCLUDEDIRS ".")
|
set(COMPONENT_ADD_INCLUDEDIRS ".")
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,6 +11,9 @@
|
|||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#include "pretty_effect.h"
|
#include "pretty_effect.h"
|
||||||
|
#include "sdkconfig.h"
|
||||||
|
|
||||||
|
#ifdef CONFIG_IDF_TARGET_ESP32
|
||||||
#include "decode_image.h"
|
#include "decode_image.h"
|
||||||
|
|
||||||
uint16_t **pixels;
|
uint16_t **pixels;
|
||||||
@ -23,6 +26,13 @@ static inline uint16_t get_bgnd_pixel(int x, int y)
|
|||||||
y+=8;
|
y+=8;
|
||||||
return pixels[y][x];
|
return pixels[y][x];
|
||||||
}
|
}
|
||||||
|
#elif defined CONFIG_IDF_TARGET_ESP32S2BETA
|
||||||
|
//esp32s2beta doesn't have enough memory to hold the decoded image, calculate instead
|
||||||
|
static inline uint16_t get_bgnd_pixel(int x, int y)
|
||||||
|
{
|
||||||
|
return ((x<<3)^(y<<3)^(x*y));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
//This variable is used to detect the next frame.
|
//This variable is used to detect the next frame.
|
||||||
@ -55,7 +65,12 @@ void pretty_effect_calc_lines(uint16_t *dest, int line, int frame, int linect)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
esp_err_t pretty_effect_init()
|
esp_err_t pretty_effect_init()
|
||||||
{
|
{
|
||||||
|
#ifdef CONFIG_IDF_TARGET_ESP32
|
||||||
return decode_image(&pixels);
|
return decode_image(&pixels);
|
||||||
|
#elif defined CONFIG_IDF_TARGET_ESP32S2BETA
|
||||||
|
//esp32s2beta doesn't have enough memory to hold the decoded image, calculate instead
|
||||||
|
return ESP_OK;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,10 @@
|
|||||||
before the transaction is sent, the callback will set this line to the correct state.
|
before the transaction is sent, the callback will set this line to the correct state.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifdef CONFIG_IDF_TARGET_ESP32
|
||||||
|
#define LCD_HOST HSPI_HOST
|
||||||
|
#define DMA_CHAN 2
|
||||||
|
|
||||||
#define PIN_NUM_MISO 25
|
#define PIN_NUM_MISO 25
|
||||||
#define PIN_NUM_MOSI 23
|
#define PIN_NUM_MOSI 23
|
||||||
#define PIN_NUM_CLK 19
|
#define PIN_NUM_CLK 19
|
||||||
@ -36,6 +40,19 @@
|
|||||||
#define PIN_NUM_DC 21
|
#define PIN_NUM_DC 21
|
||||||
#define PIN_NUM_RST 18
|
#define PIN_NUM_RST 18
|
||||||
#define PIN_NUM_BCKL 5
|
#define PIN_NUM_BCKL 5
|
||||||
|
#elif defined CONFIG_IDF_TARGET_ESP32S2BETA
|
||||||
|
#define LCD_HOST SPI2_HOST
|
||||||
|
#define DMA_CHAN LCD_HOST
|
||||||
|
|
||||||
|
#define PIN_NUM_MISO 37
|
||||||
|
#define PIN_NUM_MOSI 35
|
||||||
|
#define PIN_NUM_CLK 36
|
||||||
|
#define PIN_NUM_CS 34
|
||||||
|
|
||||||
|
#define PIN_NUM_DC 4
|
||||||
|
#define PIN_NUM_RST 5
|
||||||
|
#define PIN_NUM_BCKL 6
|
||||||
|
#endif
|
||||||
|
|
||||||
//To speed up transfers, every SPI transfer sends a bunch of lines. This define specifies how many. More means more memory use,
|
//To speed up transfers, every SPI transfer sends a bunch of lines. This define specifies how many. More means more memory use,
|
||||||
//but less overhead for setting up / finishing transfers. Make sure 240 is dividable by this.
|
//but less overhead for setting up / finishing transfers. Make sure 240 is dividable by this.
|
||||||
@ -410,10 +427,10 @@ void app_main()
|
|||||||
.pre_cb=lcd_spi_pre_transfer_callback, //Specify pre-transfer callback to handle D/C line
|
.pre_cb=lcd_spi_pre_transfer_callback, //Specify pre-transfer callback to handle D/C line
|
||||||
};
|
};
|
||||||
//Initialize the SPI bus
|
//Initialize the SPI bus
|
||||||
ret=spi_bus_initialize(HSPI_HOST, &buscfg, 1);
|
ret=spi_bus_initialize(LCD_HOST, &buscfg, DMA_CHAN);
|
||||||
ESP_ERROR_CHECK(ret);
|
ESP_ERROR_CHECK(ret);
|
||||||
//Attach the LCD to the SPI bus
|
//Attach the LCD to the SPI bus
|
||||||
ret=spi_bus_add_device(HSPI_HOST, &devcfg, &spi);
|
ret=spi_bus_add_device(LCD_HOST, &devcfg, &spi);
|
||||||
ESP_ERROR_CHECK(ret);
|
ESP_ERROR_CHECK(ret);
|
||||||
//Initialize the LCD
|
//Initialize the LCD
|
||||||
lcd_init(spi);
|
lcd_init(spi);
|
||||||
|
@ -57,6 +57,17 @@ Pins in use. The SPI Master can use the GPIO mux, so feel free to change these i
|
|||||||
#define GPIO_SCLK 15
|
#define GPIO_SCLK 15
|
||||||
#define GPIO_CS 14
|
#define GPIO_CS 14
|
||||||
|
|
||||||
|
#ifdef CONFIG_IDF_TARGET_ESP32
|
||||||
|
#define RCV_HOST HSPI_HOST
|
||||||
|
#define DMA_CHAN 2
|
||||||
|
|
||||||
|
#elif defined CONFIG_IDF_TARGET_ESP32S2BETA
|
||||||
|
#define RCV_HOST SPI2_HOST
|
||||||
|
#define DMA_CHAN RCV_HOST
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//Called after a transaction is queued and ready for pickup by master. We use this to set the handshake line high.
|
//Called after a transaction is queued and ready for pickup by master. We use this to set the handshake line high.
|
||||||
void my_post_setup_cb(spi_slave_transaction_t *trans) {
|
void my_post_setup_cb(spi_slave_transaction_t *trans) {
|
||||||
@ -78,7 +89,9 @@ void app_main()
|
|||||||
spi_bus_config_t buscfg={
|
spi_bus_config_t buscfg={
|
||||||
.mosi_io_num=GPIO_MOSI,
|
.mosi_io_num=GPIO_MOSI,
|
||||||
.miso_io_num=GPIO_MISO,
|
.miso_io_num=GPIO_MISO,
|
||||||
.sclk_io_num=GPIO_SCLK
|
.sclk_io_num=GPIO_SCLK,
|
||||||
|
.quadwp_io_num = -1,
|
||||||
|
.quadhd_io_num = -1,
|
||||||
};
|
};
|
||||||
|
|
||||||
//Configuration for the SPI slave interface
|
//Configuration for the SPI slave interface
|
||||||
@ -106,7 +119,7 @@ void app_main()
|
|||||||
gpio_set_pull_mode(GPIO_CS, GPIO_PULLUP_ONLY);
|
gpio_set_pull_mode(GPIO_CS, GPIO_PULLUP_ONLY);
|
||||||
|
|
||||||
//Initialize SPI slave interface
|
//Initialize SPI slave interface
|
||||||
ret=spi_slave_initialize(HSPI_HOST, &buscfg, &slvcfg, 1);
|
ret=spi_slave_initialize(RCV_HOST, &buscfg, &slvcfg, DMA_CHAN);
|
||||||
assert(ret==ESP_OK);
|
assert(ret==ESP_OK);
|
||||||
|
|
||||||
WORD_ALIGNED_ATTR char sendbuf[129]="";
|
WORD_ALIGNED_ATTR char sendbuf[129]="";
|
||||||
@ -130,7 +143,7 @@ void app_main()
|
|||||||
.post_setup_cb callback that is called as soon as a transaction is ready, to let the master know it is free to transfer
|
.post_setup_cb callback that is called as soon as a transaction is ready, to let the master know it is free to transfer
|
||||||
data.
|
data.
|
||||||
*/
|
*/
|
||||||
ret=spi_slave_transmit(HSPI_HOST, &t, portMAX_DELAY);
|
ret=spi_slave_transmit(RCV_HOST, &t, portMAX_DELAY);
|
||||||
|
|
||||||
//spi_slave_transmit does not return until the master has done a transmission, so by here we have sent our data and
|
//spi_slave_transmit does not return until the master has done a transmission, so by here we have sent our data and
|
||||||
//received data from the master. Print it.
|
//received data from the master. Print it.
|
||||||
|
@ -39,12 +39,12 @@
|
|||||||
/*
|
/*
|
||||||
SPI sender (master) example.
|
SPI sender (master) example.
|
||||||
|
|
||||||
This example is supposed to work together with the SPI receiver. It uses the standard SPI pins (MISO, MOSI, SCLK, CS) to
|
This example is supposed to work together with the SPI receiver. It uses the standard SPI pins (MISO, MOSI, SCLK, CS) to
|
||||||
transmit data over in a full-duplex fashion, that is, while the master puts data on the MOSI pin, the slave puts its own
|
transmit data over in a full-duplex fashion, that is, while the master puts data on the MOSI pin, the slave puts its own
|
||||||
data on the MISO pin.
|
data on the MISO pin.
|
||||||
|
|
||||||
This example uses one extra pin: GPIO_HANDSHAKE is used as a handshake pin. The slave makes this pin high as soon as it is
|
This example uses one extra pin: GPIO_HANDSHAKE is used as a handshake pin. The slave makes this pin high as soon as it is
|
||||||
ready to receive/send data. This code connects this line to a GPIO interrupt which gives the rdySem semaphore. The main
|
ready to receive/send data. This code connects this line to a GPIO interrupt which gives the rdySem semaphore. The main
|
||||||
task waits for this semaphore to be given before queueing a transmission.
|
task waits for this semaphore to be given before queueing a transmission.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -58,6 +58,17 @@ Pins in use. The SPI Master can use the GPIO mux, so feel free to change these i
|
|||||||
#define GPIO_SCLK 15
|
#define GPIO_SCLK 15
|
||||||
#define GPIO_CS 14
|
#define GPIO_CS 14
|
||||||
|
|
||||||
|
#ifdef CONFIG_IDF_TARGET_ESP32
|
||||||
|
#define SENDER_HOST HSPI_HOST
|
||||||
|
#define DMA_CHAN 2
|
||||||
|
|
||||||
|
#elif defined CONFIG_IDF_TARGET_ESP32S2BETA
|
||||||
|
#define SENDER_HOST SPI2_HOST
|
||||||
|
#define DMA_CHAN SENDER_HOST
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
//The semaphore indicating the slave is ready to receive stuff.
|
//The semaphore indicating the slave is ready to receive stuff.
|
||||||
static xQueueHandle rdySem;
|
static xQueueHandle rdySem;
|
||||||
|
|
||||||
@ -132,12 +143,12 @@ void app_main()
|
|||||||
gpio_isr_handler_add(GPIO_HANDSHAKE, gpio_handshake_isr_handler, NULL);
|
gpio_isr_handler_add(GPIO_HANDSHAKE, gpio_handshake_isr_handler, NULL);
|
||||||
|
|
||||||
//Initialize the SPI bus and add the device we want to send stuff to.
|
//Initialize the SPI bus and add the device we want to send stuff to.
|
||||||
ret=spi_bus_initialize(HSPI_HOST, &buscfg, 1);
|
ret=spi_bus_initialize(SENDER_HOST, &buscfg, DMA_CHAN);
|
||||||
assert(ret==ESP_OK);
|
assert(ret==ESP_OK);
|
||||||
ret=spi_bus_add_device(HSPI_HOST, &devcfg, &handle);
|
ret=spi_bus_add_device(SENDER_HOST, &devcfg, &handle);
|
||||||
assert(ret==ESP_OK);
|
assert(ret==ESP_OK);
|
||||||
|
|
||||||
//Assume the slave is ready for the first transmission: if the slave started up before us, we will not detect
|
//Assume the slave is ready for the first transmission: if the slave started up before us, we will not detect
|
||||||
//positive edge on the handshake line.
|
//positive edge on the handshake line.
|
||||||
xSemaphoreGive(rdySem);
|
xSemaphoreGive(rdySem);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user