Chapter 4. API Guides
• load_addr: address where the program should be loaded, expressed in 32-bit words
• program: ulp_insn_t array with the program
• psize: size of the program, expressed in 32-bit words
esp_err_t
ulp_run(uint32_t entry_point)
Run the program loaded into RTC memory.
Return ESP_OK on success
Parameters
• entry_point: entry point, expressed in 32-bit words
Error codes
ESP_ERR_ULP_BASE
Offset for ULP-related error codes
ESP_ERR_ULP_SIZE_TOO_BIG
Program doesn't fit into RTC memory reserved for the ULP
ESP_ERR_ULP_INVALID_LOAD_ADDR
Load address is outside of RTC memory reserved for the ULP
ESP_ERR_ULP_DUPLICATE_LABEL
More than one label with the same number was defined
ESP_ERR_ULP_UNDEFINED_LABEL
Branch instructions references an undefined label
ESP_ERR_ULP_BRANCH_OUT_OF_RANGE
Branch target is out of range of B instruction (try replacing with BX)
ULP coprocessor registers
functionality, with one exception. R0 register is used by some of the compare-and-branch instructions as a source
register.
These definitions can be used for all instructions which require a register.
R0
general purpose register 0
R1
general purpose register 1
R2
general purpose register 2
R3
general purpose register 3
ULP coprocessor instruction defines
I_DELAY(cycles_)
Delay (nop) for a given number of cycles
I_HALT()
Halt the coprocessor.
This instruction halts the coprocessor, but keeps ULP timer active. As such, ULP program will be restarted
again by timer. To stop the program and prevent the timer from restarting the program, use I_END(0) instruc-
tion.
I_END()
Stop ULP program timer.
This is a convenience macro which disables the ULP program timer. Once this instruction is used, ULP
program will not be restarted anymore until ulp_run function is called.
Espressif Systems
ULP co-processor has 4 16-bit general purpose registers. All registers have same
1493
Submit Document Feedback
Release v4.4
Need help?
Do you have a question about the ESP32-S2 and is the answer not in the manual?
Questions and answers