/* The example of esp-free-rtos
*
* This sample code is in the public domain.
*/
#include <stdlib.h>
#include "espressif/esp_common.h"
#include "esp/uart.h"
#include "esp/spi.h"
#include "FreeRTOS.h"
#include "task.h"
#define SPI_BUS 1
#define SPI_CS_GPIO 15 // GPIO 15,
the default CS of SPI bus 1
#define Vref 3.26
static const spi_settings_t bus_settings = {
.mode =
SPI_MODE0,
.freq_divider = SPI_FREQ_DIV_1M,
.msb
= true,
.minimal_pins = false,
.endianness =
SPI_LITTLE_ENDIAN
};
static void measure(void *pvParameters)
{
#if 0
spi_settings_t old_settings;
spi_get_settings(SPI_BUS,
&old_settings);
spi_set_settings(SPI_BUS,
&bus_settings);
#endif
#if 1
spi_init(SPI_BUS, bus_settings.mode,
bus_settings.freq_divider,
bus_settings.msb,
bus_settings.endianness,
bus_settings.minimal_pins);
#endif
uint8_t mosi[2];
uint8_t miso[2];
uint16_t adc_read;
float voltage;
gpio_enable(SPI_CS_GPIO, GPIO_OUTPUT);
while (1)
{
vTaskDelay(1000
/ portTICK_PERIOD_MS);
gpio_write(SPI_CS_GPIO, false);
mosi[0] = 0x60;
mosi[1] = 0x00;
size_t
transfered = spi_transfer (SPI_BUS, (const void*)mosi,
(void*)miso, 2, SPI_8BIT);
gpio_write(SPI_CS_GPIO, true);
printf("spi_transfer=%x 0x%02x
0x%02x\n",transfered,miso[0],miso[1]);
adc_read =
miso[1] | (miso[0] & 0x03) << 8;
voltage =
(adc_read * Vref) / 1023.0;
printf("adc_read=0x%04x voltage=%f\n",adc_read,voltage);
}
}
void user_init(void)
{
uart_set_baud(0, 115200);
printf("SDK version : %s\n",
sdk_system_get_sdk_version());
xTaskCreate(measure, "measure_task",
256, NULL, 2, NULL);
} |