Skip to content

Wakeup from ULP -> esp32s3_ulp state0 in rtc_cntl register #343

@sandcore

Description

@sandcore

Hi,

I'm writing an ULP program and need a way to wakeup the main CPU. I ported over the Espressif C lib wakeup function like so:

const DR_REG_RTCCNTL_BASE: u32 = 0x60008000;
const RTC_CNTL_STATE0_REG: u32 = 0x60008018; // DR_REG_RTCCNTL_BASE + 0x18
const RTC_CNTL_SW_CPU_INT: u32 = 1; // BIT(0)

fn wakeup_main_processor() {
    unsafe {
        let reg_ptr = RTC_CNTL_STATE0_REG as *mut u32;
        let current_value = reg_ptr.read_volatile();
        reg_ptr.write_volatile(current_value | RTC_CNTL_SW_CPU_INT);
    }
}

That works. Figured it's nicer to work with PAC instead, but State0 of rtc_cntl is not in esp32s3_ulp I think. It IS in esp32s3 PAC, but I'm already using esp32s3_ulp for other stuff and can't disable it, and the two PACs don't play nicely together.

Can I make the 2 PAC's work together? Or is there some other direct way to wake up the main cpu using ESP32S3_ULP? Thanks

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    Todo

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions