Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "soc/rtc_cntl_reg.h"
- #include "soc/rtc_io_reg.h"
- #include "soc/soc_ulp.h"
- .bss
- .global loop_counter
- loop_counter:
- .long 0
- .global io_number
- io_number:
- .long 0
- .global sec_count
- sec_count:
- .long 0
- .text
- .global entry
- entry:
- /*WRITE_RTC_REG(RTC_IO_TOUCH_PAD1_REG,RTC_IO_TOUCH_PAD1_HOLD_S,1,0)
- WRITE_RTC_REG(RTC_IO_TOUCH_PAD1_REG,RTC_IO_TOUCH_PAD1_MUX_SEL_S,1,1)
- WRITE_RTC_REG(RTC_IO_TOUCH_PAD1_REG,RTC_IO_TOUCH_PAD1_SLP_OE_S,1,1)
- WRITE_RTC_REG(RTC_IO_TOUCH_PAD1_REG,RTC_IO_TOUCH_PAD1_TO_GPIO_S,1,1)
- WRITE_RTC_REG(RTC_GPIO_ENABLE_W1TS_REG,RTC_GPIO_ENABLE_W1TS_S+11,1,1)
- WRITE_RTC_REG(RTC_GPIO_OUT_W1TS_REG,RTC_GPIO_OUT_DATA_W1TS_S+11,1,1)
- move r3, loop_counter
- ld r2, r3, 0
- and r2, r2, 1
- jump set_gpio_one, eq
- jump set_gpio_zero*/
- //halt
- // Check the state of the state machine
- move r3, loop_counter
- ld r2, r3, 0
- and r2, r2, 1
- // If loop_counter = 0, check if the SoC is asleep
- jump define_gpio, eq
- ld r2, r3, 0
- rsh r2, r2, 1
- and r2, r2, 1
- // If loop_counter = 1, check if an interrupt as occurred
- //jump check_acc, eq
- jump check_sleep,eq
- jump check_acc
- jump entry
- halt
- //jump check_acc
- .global define_gpio
- define_gpio:
- /*GPIO0 - RTCIO11 pin definitions*/
- WRITE_RTC_REG(RTC_IO_TOUCH_PAD1_REG,RTC_IO_TOUCH_PAD1_HOLD_S,1,0)
- WRITE_RTC_REG(RTC_IO_TOUCH_PAD1_REG,RTC_IO_TOUCH_PAD1_MUX_SEL_S,1,1)
- WRITE_RTC_REG(RTC_IO_TOUCH_PAD1_REG,RTC_IO_TOUCH_PAD1_SLP_OE_S,1,1)
- WRITE_RTC_REG(RTC_IO_TOUCH_PAD1_REG,RTC_IO_TOUCH_PAD1_TO_GPIO_S,1,1)
- WRITE_RTC_REG(RTC_GPIO_ENABLE_W1TS_REG,RTC_GPIO_ENABLE_W1TS_S+11,1,1)
- WRITE_RTC_REG(RTC_GPIO_OUT_W1TS_REG,RTC_GPIO_OUT_DATA_W1TS_S+11,1,1)
- /*GPIO27 - RTCIO17 pin definitions*/
- WRITE_RTC_REG(RTC_IO_TOUCH_PAD7_REG,RTC_IO_TOUCH_PAD7_HOLD_S,1,0)
- WRITE_RTC_REG(RTC_IO_TOUCH_PAD7_REG,RTC_IO_TOUCH_PAD7_MUX_SEL_S,1,1)
- WRITE_RTC_REG(RTC_IO_TOUCH_PAD7_REG,RTC_IO_TOUCH_PAD7_SLP_OE_S,1,1)
- WRITE_RTC_REG(RTC_IO_TOUCH_PAD7_REG,RTC_IO_TOUCH_PAD7_TO_GPIO_S,1,1)
- WRITE_RTC_REG(RTC_GPIO_ENABLE_W1TS_REG,RTC_GPIO_ENABLE_W1TS_S+17,1,1)
- WRITE_RTC_REG(RTC_GPIO_OUT_W1TS_REG,RTC_GPIO_OUT_DATA_W1TS_S+17,1,1)
- WRITE_RTC_REG(RTC_IO_TOUCH_PAD7_REG,RTC_IO_TOUCH_PAD7_HOLD_S,1,1)
- move r3, loop_counter
- ld r2, r3, 0
- and r2, r2, 0
- or r2, r2, 0x0001
- st r2, r3, 0
- //jump set_gpio_one
- halt
- .global check_acc
- check_acc:
- // Check the input value of the Accelerometer Interrupt
- READ_RTC_REG(RTC_GPIO_IN_REG,RTC_GPIO_IN_NEXT_S+4,1)
- and r0, r0, 1
- // If LOW, check the Button
- jump check_but, eq
- // Else, jump to TEMP blinking code
- //jump set_gpio_one
- move r3, sec_count
- ld r2, r3, 0
- and r2, r2, 0
- st r2, r3, 0
- jump wake_up
- halt
- .global check_but
- check_but:
- /* Check the input value of BUTTON*/
- READ_RTC_REG(RTC_GPIO_IN_REG,RTC_GPIO_IN_NEXT_S+5,1)
- //READ_RTC_REG(RTC_GPIO_STATUS_REG,RTC_GPIO_STATUS_INT_S+5,1)
- and r0, r0, 1
- // If LOW, jump to the sleep_to label to stop the ULP program
- jump stop_prog, eq
- //jump set_gpio_one, eq
- //jump add_test_count, eq
- // if HIGH jump to TEMP blinking code
- //jump set_gpio_one
- move r3, sec_count
- ld r2, r3, 0
- and r2, r2, 0
- st r2, r3, 0
- jump wake_up
- stop_prog:
- halt
- .global check_sleep
- check_sleep:
- // Check the frequency of the CPU
- READ_RTC_REG(RTC_CNTL_DIAG0_REG,19,1)
- and r0, r0, 1
- jump stop_prog_s, eq
- // If it is sleeping, jump to the soc_sleeping label
- jump soc_sleeping
- // Else, stop the ULP program
- stop_prog_s:
- halt
- .global soc_sleeping
- soc_sleeping:
- // move r0, 450
- //delay_s:
- // WAIT 65535
- // sub r0, r0, 1
- // jumpr delay_s, 1, GE
- // Turn off DCDC_En
- WRITE_RTC_REG(RTC_IO_TOUCH_PAD7_REG,RTC_IO_TOUCH_PAD7_HOLD_S,1,0)
- WRITE_RTC_REG(RTC_GPIO_OUT_W1TC_REG,RTC_GPIO_OUT_DATA_W1TC_S+17,1,1)
- WRITE_RTC_REG(RTC_IO_TOUCH_PAD7_REG,RTC_IO_TOUCH_PAD7_HOLD_S,1,1)
- // update the loop counter variable for the next stateIT 10000
- move r3, loop_counter
- ld r2, r3, 0
- and r2, r2, 0
- or r2, r2, 0x0003
- st r2, r3, 0
- halt
- .global add_test_count
- add_test_count:
- move r3, sec_count
- ld r0, r3, 0
- add r0, r0, 1
- jumpr wak, 5, GE
- st r0, r3, 0
- jump set_gpio_one
- wak:
- and r0, r0, 0
- st r0, r3, 0
- jump wake_up
- halt
- .global set_gpio_zero
- set_gpio_zero:
- WRITE_RTC_REG(RTC_GPIO_OUT_W1TC_REG,RTC_GPIO_OUT_DATA_W1TC_S+11,1,1)
- move r3, loop_counter
- ld r2, r3, 0
- and r2, r2, 0
- add r2, r2, 1
- st r2, r3, 0
- //WRITE_RTC_REG(RTC_GPIO_OUT_W1TC_REG,RTC_GPIO_OUT_DATA_W1TC_S+17,1,1)
- /*WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000*/
- //SLEEP 0
- /* End program */
- //jump entry
- //jump set_gpio_one
- halt
- .global set_gpio_one
- set_gpio_one:
- WRITE_RTC_REG(RTC_GPIO_OUT_W1TS_REG,RTC_GPIO_OUT_DATA_W1TS_S+11,1,1)
- move r3, loop_counter
- ld r2, r3, 0
- and r2, r2, 0
- st r2, r3, 0
- /*WRITE_RTC_REG(RTC_GPIO_OUT_W1TS_REG,RTC_GPIO_OUT_DATA_W1TS_S+17,1,1)*/
- //SLEEP 0
- /*WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000
- WAIT 10000*/
- //jump set_gpio_zero
- //jump entry
- /* End program */
- halt
- .global wake_up
- wake_up:
- WRITE_RTC_REG(RTC_IO_TOUCH_PAD7_REG,RTC_IO_TOUCH_PAD7_HOLD_S,1,0)
- WRITE_RTC_REG(RTC_GPIO_OUT_W1TS_REG,RTC_GPIO_OUT_DATA_W1TS_S+17,1,1)
- WRITE_RTC_REG(RTC_IO_TOUCH_PAD7_REG,RTC_IO_TOUCH_PAD7_HOLD_S,1,1)
- move r3, loop_counter
- ld r2, r3, 0
- and r2, r2, 0
- or r2, r2, 0x0001
- st r2, r3, 0
- move r0,450
- //delay_w:
- // WAIT 65535
- // sub r0, r0, 1
- // jumpr delay_w, 1, GE
- wake
- halt
- .global loop
- loop:
- jump loop
- halt
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement