60 lines
1.5 KiB
C
60 lines
1.5 KiB
C
|
#include "espressif/esp_misc.h"
|
||
|
#include "esp/gpio_regs.h"
|
||
|
#include "esp/rtc_regs.h"
|
||
|
#include "sdk_internal.h"
|
||
|
#include "xtensa/hal.h"
|
||
|
|
||
|
static int cpu_freq = 80;
|
||
|
|
||
|
void (*sdk__putc1)(char);
|
||
|
|
||
|
int IRAM sdk_os_get_cpu_frequency(void) {
|
||
|
return cpu_freq;
|
||
|
}
|
||
|
|
||
|
void sdk_os_update_cpu_frequency(int freq) {
|
||
|
cpu_freq = freq;
|
||
|
}
|
||
|
|
||
|
void sdk_ets_update_cpu_frequency(int freq) __attribute__ (( alias ("sdk_os_update_cpu_frequency") ));
|
||
|
|
||
|
void sdk_os_delay_us(uint16_t us) {
|
||
|
uint32_t start_ccount = xthal_get_ccount();
|
||
|
uint32_t delay_ccount = cpu_freq * us;
|
||
|
while (xthal_get_ccount() - start_ccount < delay_ccount) {}
|
||
|
}
|
||
|
|
||
|
void sdk_ets_delay_us(uint16_t us) __attribute__ (( alias ("sdk_os_delay_us") ));
|
||
|
|
||
|
void sdk_os_install_putc1(void (*p)(char)) {
|
||
|
sdk__putc1 = p;
|
||
|
}
|
||
|
|
||
|
void sdk_os_putc(char c) {
|
||
|
sdk__putc1(c);
|
||
|
}
|
||
|
|
||
|
void sdk_gpio_output_set(uint32_t set_mask, uint32_t clear_mask, uint32_t enable_mask, uint32_t disable_mask) {
|
||
|
GPIO.OUT_SET = set_mask;
|
||
|
GPIO.OUT_CLEAR = clear_mask;
|
||
|
GPIO.ENABLE_OUT_SET = enable_mask;
|
||
|
GPIO.ENABLE_OUT_CLEAR = disable_mask;
|
||
|
}
|
||
|
|
||
|
uint8_t sdk_rtc_get_reset_reason(void) {
|
||
|
uint8_t reason;
|
||
|
|
||
|
reason = FIELD2VAL(RTC_RESET_REASON1_CODE, RTC.RESET_REASON1);
|
||
|
if (reason == 5) {
|
||
|
if (FIELD2VAL(RTC_RESET_REASON2_CODE, RTC.RESET_REASON2) == 1) {
|
||
|
reason = 6;
|
||
|
} else {
|
||
|
if (FIELD2VAL(RTC_RESET_REASON2_CODE, RTC.RESET_REASON2) != 8) {
|
||
|
reason = 0;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
RTC.RESET_REASON0 &= ~RTC_RESET_REASON0_SOMETHING;
|
||
|
return reason;
|
||
|
}
|