mirror of
https://github.com/espressif/esp-idf.git
synced 2026-04-27 19:13:21 +00:00
Merge branch 'feature/improve_ulp_delay_api' into 'master'
feat(ulp): Improved ULP delay accuracy and removed floating point operations Closes IDFGH-16353 and IDFGH-15960 See merge request espressif/esp-idf!45937
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2021-2023 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2021-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||
*/
|
||||
@@ -43,7 +43,7 @@ static void ds18b20_write_bit(bool bit)
|
||||
}
|
||||
|
||||
/* Write slot duration at least 60 us */
|
||||
ulp_riscv_delay_cycles(60 * ULP_RISCV_CYCLES_PER_US);
|
||||
ulp_riscv_delay_us(60);
|
||||
ulp_riscv_gpio_output_level(EXAMPLE_1WIRE_GPIO, 1);
|
||||
}
|
||||
|
||||
@@ -56,11 +56,11 @@ static bool ds18b20_read_bit(void)
|
||||
ulp_riscv_gpio_output_level(EXAMPLE_1WIRE_GPIO, 1);
|
||||
|
||||
/* Must sample within 15 us of the failing edge */
|
||||
ulp_riscv_delay_cycles(5 * ULP_RISCV_CYCLES_PER_US);
|
||||
ulp_riscv_delay_us(5);
|
||||
bit = ulp_riscv_gpio_get_level(EXAMPLE_1WIRE_GPIO);
|
||||
|
||||
/* Read slot duration at least 60 us */
|
||||
ulp_riscv_delay_cycles(55 * ULP_RISCV_CYCLES_PER_US);
|
||||
ulp_riscv_delay_us(55);
|
||||
|
||||
return bit;
|
||||
}
|
||||
@@ -86,15 +86,15 @@ bool ds18b20_reset_pulse(void)
|
||||
bool presence_pulse;
|
||||
/* min 480 us reset pulse + 480 us reply time is specified by datasheet */
|
||||
ulp_riscv_gpio_output_level(EXAMPLE_1WIRE_GPIO, 0);
|
||||
ulp_riscv_delay_cycles(480 * ULP_RISCV_CYCLES_PER_US);
|
||||
ulp_riscv_delay_us(480);
|
||||
|
||||
ulp_riscv_gpio_output_level(EXAMPLE_1WIRE_GPIO, 1);
|
||||
|
||||
/* Wait for ds18b20 to pull low before sampling */
|
||||
ulp_riscv_delay_cycles(60 * ULP_RISCV_CYCLES_PER_US);
|
||||
ulp_riscv_delay_us(60);
|
||||
presence_pulse = ulp_riscv_gpio_get_level(EXAMPLE_1WIRE_GPIO) == 0;
|
||||
|
||||
ulp_riscv_delay_cycles(420 * ULP_RISCV_CYCLES_PER_US);
|
||||
ulp_riscv_delay_us(420);
|
||||
|
||||
return presence_pulse;
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||
*/
|
||||
@@ -23,7 +23,7 @@ int main (void)
|
||||
|
||||
/* Wakeup interrupt is a level interrupt, wait 1 sec to
|
||||
allow user to release button to avoid waking up the ULP multiple times */
|
||||
ulp_riscv_delay_cycles(1000*1000 * ULP_RISCV_CYCLES_PER_US);
|
||||
ulp_riscv_delay_us(1000000);
|
||||
ulp_riscv_gpio_wakeup_clear();
|
||||
|
||||
/* ulp_riscv_halt() is called automatically when main exits */
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||
*/
|
||||
@@ -71,7 +71,7 @@ static void bmp180_read_ut_data(int16_t *ut_data)
|
||||
ulp_riscv_i2c_master_write_to_device(&cmd, 1);
|
||||
|
||||
/* Wait at least 4.5 milliseconds for the sensor to complete the reading */
|
||||
ulp_riscv_delay_cycles(5 * ULP_RISCV_CYCLES_PER_MS);
|
||||
ulp_riscv_delay_us(5000);
|
||||
|
||||
/* Read uncompensated temperature data */
|
||||
bmp180_read16((uint16_t *)ut_data, BMP180_SENSOR_REG_ADDR_SENSOR_DATA_MSB, BMP180_SENSOR_REG_ADDR_SENSOR_DATA_LSB);
|
||||
@@ -92,26 +92,26 @@ static void bmp180_read_up_data(int32_t *up_data, oss_mode_t oss_mode)
|
||||
{
|
||||
case OSS_0:
|
||||
cmd = BMP180_SENSOR_CMD_READ_PRESSURE_OSS_0;
|
||||
wait = 5; // Wait atleast 4.5 msec
|
||||
wait = 5; // Wait at least 4.5 msec
|
||||
break;
|
||||
case OSS_1:
|
||||
cmd = BMP180_SENSOR_CMD_READ_PRESSURE_OSS_1;
|
||||
wait = 8; // Wait atleast 7.5 msec
|
||||
wait = 8; // Wait at least 7.5 msec
|
||||
break;
|
||||
case OSS_2:
|
||||
cmd = BMP180_SENSOR_CMD_READ_PRESSURE_OSS_2;
|
||||
wait = 14; // Wait atleast 13.5 msec
|
||||
wait = 14; // Wait at least 13.5 msec
|
||||
break;
|
||||
case OSS_3:
|
||||
cmd = BMP180_SENSOR_CMD_READ_PRESSURE_OSS_3;
|
||||
wait = 26; // Wait atleast 25.5 msec
|
||||
wait = 26; // Wait at least 25.5 msec
|
||||
break;
|
||||
}
|
||||
|
||||
ulp_riscv_i2c_master_write_to_device(&cmd, 1);
|
||||
|
||||
/* Wait for the required amount of time for the sensor to complete the reading */
|
||||
ulp_riscv_delay_cycles(wait * ULP_RISCV_CYCLES_PER_MS);
|
||||
ulp_riscv_delay_us(wait * 1000);
|
||||
|
||||
/* Read uncompensated temperature data */
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2023 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2023-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||
*/
|
||||
@@ -56,7 +56,7 @@ int main(void) {
|
||||
ulp_riscv_wakeup_main_processor();
|
||||
}
|
||||
|
||||
ulp_riscv_delay_cycles(1000 * ULP_RISCV_CYCLES_PER_MS);
|
||||
ulp_riscv_delay_us(1000000);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* SPDX-FileCopyrightText: 2022-2023 Espressif Systems (Shanghai) CO LTD
|
||||
* SPDX-FileCopyrightText: 2022-2026 Espressif Systems (Shanghai) CO LTD
|
||||
*
|
||||
* SPDX-License-Identifier: Unlicense OR CC0-1.0
|
||||
*/
|
||||
@@ -41,6 +41,6 @@ int main (void)
|
||||
ulp_riscv_print_str("\n");
|
||||
|
||||
cnt++;
|
||||
ulp_riscv_delay_cycles(1000 * ULP_RISCV_CYCLES_PER_MS);
|
||||
ulp_riscv_delay_us(1000000);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user