Beispiel #1
0
void loop(void *pvParameters)
{
    uint32_t time = 0 ; // SPI transmission time
    float avr_time = 0 ; // Average of SPI transmission
    float u = 0 ;

    spi_init(1, SPI_MODE0, SPI_FREQ_DIV_1M, 1, SPI_LITTLE_ENDIAN, false); // init SPI module


    while(1) {

        time = sdk_system_get_time();

        spi_set_command(1,1,1) ; // Set one command bit to 1
        spi_set_address(1,4,8) ; // Set 4 address bits to 8
        spi_set_dummy_bits(1,4,false); // Set 4 dummy bit before Dout

        spi_repeat_send_16(1,0xC584,10);  // Send 1 bit command + 4 bits address + 4 bits dummy + 160 bits data

        spi_clear_address(1); // remove address
        spi_clear_command(1); // remove command
        spi_clear_dummy(1); // remove dummy


        time = sdk_system_get_time() -time ;
        avr_time = ((avr_time * (float)u ) + (float)time)/((float)u+1.0)  ; // compute average
        u++;
        if (u==100) {
            u=0 ;
            printf("Time: %f\n",avr_time);
        }
        vTaskDelay(100/portTICK_PERIOD_MS);
    }
}
/*
 * User task that triggers measurements of sensor every seconds. It uses
 * function *vTaskDelay* to wait for measurement results. Busy wating
 * alternative is shown in comments
 */
void user_task(void *pvParameters)
{
    bme680_values_float_t values;

    TickType_t last_wakeup = xTaskGetTickCount();

    // as long as sensor configuration isn't changed, duration is constant
    uint32_t duration = bme680_get_measurement_duration(sensor);

    while (1)
    {
        // trigger the sensor to start one TPHG measurement cycle
        if (bme680_force_measurement (sensor))
        {
            // passive waiting until measurement results are available
            vTaskDelay (duration);

            // alternatively: busy waiting until measurement results are available
            // while (bme680_is_measuring (sensor)) ;

            // get the results and do something with them
            if (bme680_get_results_float (sensor, &values))
                printf("%.3f BME680 Sensor: %.2f °C, %.2f %%, %.2f hPa, %.2f Ohm\n",
                       (double)sdk_system_get_time()*1e-3,
                       values.temperature, values.humidity,
                       values.pressure, values.gas_resistance);
        }
        // passive waiting until 1 second is over
        vTaskDelayUntil(&last_wakeup, 1000 / portTICK_PERIOD_MS);
    }
}
/*
 * User task that triggers measurements of sensor1 every 2 seconds and
 * uses *bme680_is_measuring* to wait for measurement results.
 */
void user_task_sensor2(void *pvParameters)
{
    bme680_values_float_t values;

    TickType_t last_wakeup = xTaskGetTickCount();

    while (1)
    {
        // trigger the sensor to start one TPHG measurement cycle
        if (bme680_force_measurement (sensor2))
        {
            // busy waiting until measurement results are available
            while (bme680_is_measuring (sensor2)) ;

            // get the results and so something with them
            if (bme680_get_results_float (sensor2, &values))
                printf("%.3f BME680 Sensor2: %.2f °C, %.2f %%, %.2f hPa, %.2f Ohm\n",
                       (double)sdk_system_get_time()*1e-3,
                       values.temperature, values.humidity,
                       values.pressure, values.gas_resistance);
        }

        // passive waiting until 2 seconds are over
        vTaskDelayUntil(&last_wakeup, 2000 / portTICK_PERIOD_MS);
    }
}
Beispiel #4
0
void OS_SetTime(uint_t now)
{
	taskENTER_CRITICAL();
	s_lastSysTime = sdk_system_get_time();
	s_timeAdj = (uint64_t)now * 1000000 - s_lastSysTime;
	taskEXIT_CRITICAL();

	// DEBUG_PRINT("OS_SetTime:now=%08X, s_lastSysTime=%08X, s_timeAdj=%016llX\n", now, s_lastSysTime, s_timeAdj);
}
Beispiel #5
0
void user_init(void)
{
    uart_set_baud(0, 115200);
    printf("SDK version:%s\n", sdk_system_get_sdk_version());

    i2c_init(I2C_BUS, SCL_PIN, SDA_PIN, I2C_FREQ_100K);

    hd44780_t lcd = {
        .i2c_dev.bus = I2C_BUS,
        .i2c_dev.addr = ADDR,
        .font = HD44780_FONT_5X8,
        .lines = 2,
        .pins = {
            .rs = 0,
            .e  = 2,
            .d4 = 4,
            .d5 = 5,
            .d6 = 6,
            .d7 = 7,
            .bl = 3
        },
        .backlight = true
    };

    hd44780_init(&lcd);
    hd44780_upload_character(&lcd, 0, char_data);
    hd44780_upload_character(&lcd, 1, char_data + 8);

    hd44780_gotoxy(&lcd, 0, 0);
    hd44780_puts(&lcd, "\x08 Hello world!");
    hd44780_gotoxy(&lcd, 0, 1);
    hd44780_puts(&lcd, "\x09 ");

    char time[16];

    while (true)
    {
        hd44780_gotoxy(&lcd, 2, 1);

        snprintf(time, 7, "%u     ", sdk_system_get_time() / 1000000);
        time[sizeof(time) - 1] = 0;

        hd44780_puts(&lcd, time);

        for (uint32_t i = 0; i < 1000; i++)
            sdk_os_delay_us(1000);
    }
}
Beispiel #6
0
int _gettimeofday_r(struct _reent *, struct timeval *__tp, void *__tzp)
{
	taskENTER_CRITICAL();

	uint_t t = sdk_system_get_time();
	if (s_lastSysTime > t)
	{
		s_timeAdj += (uint_t)-1;
	}

	s_lastSysTime = t;
	taskEXIT_CRITICAL();

	uint64_t usec = s_lastSysTime + s_timeAdj;

	__tp->tv_usec = usec;
	__tp->tv_sec = usec / 1000000;

	// DEBUG_PRINT("_gettimeofday_r:__tp->tv_sec=%08X, __tp->tv_usec=%08X, s_lastSysTime=%08X, s_timeAdj=%016llX\n", __tp->tv_sec, __tp->tv_usec, s_lastSysTime, s_timeAdj);

	return 0;
}
Beispiel #7
0
unsigned int time_ms() {
  //#include "user_interface.h" espressif: uint32 system_get_time(void)
  // it returns microseconds ( http://bbs.espressif.com/viewtopic.php?t=42 )
  // also: system_get_rtc_time();
  return sdk_system_get_time() / 1000;
}
Beispiel #8
0
uint_t OS_GetTick()
{
	return sdk_system_get_time();
}
Beispiel #9
0
void OS_DebugPrintTimestamp()
{
	uint_t t = sdk_system_get_time() / 1000;
	printf("[%6d.%03d] ", t / 1000, t % 1000);
}