-
-
Save wnienhaus/56c534079823ed036a8f13a43ab7ddf8 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
.set gpio2_channel, 12 ##12 is the channel no of gpio2 | |
.set gpio4_channel, 10 ##10 is the channel no of gpio4 | |
.set token, 0xcafe | |
.text | |
Counter: .long 0 | |
Dummy1: .long 0 | |
Dummy2: .long 0 | |
State: .long 0 | |
Magic: .long 0 | |
.global entry | |
entry: //20 | |
// load magic flag | |
move r0, Magic | |
ld r1, r0, 0 | |
// test if we have initialised already | |
sub r1, r1, token | |
jump after_init, eq //jump if 0 (equal to token) | |
init: | |
//flag that we started running | |
move r1, token | |
st r1, r0, 0 | |
init_led: | |
// set gpio2 (rtcio channel 12) to RTC | |
// 0: GPIO connected to digital GPIO module. 1: GPIO connected to analog RTC module. | |
WRITE_RTC_REG(RTC_IO_TOUCH_PAD2_REG, RTC_IO_TOUCH_PAD2_MUX_SEL_M, 1, 1); //SET_PERI_REG_MASK(RTC_IO_TOUCH_PAD2_REG, RTC_IO_TOUCH_PAD2_MUX_SEL_M); | |
// gpio_2 shall be output, not input | |
WRITE_RTC_REG(RTC_GPIO_OUT_REG, RTC_GPIO_OUT_DATA_S + gpio2_channel, 1, 1); //REG_SET_BIT(RTC_GPIO_OUT_REG, RTC_GPIO_OUT_DATA_S + gpio2_channel) | |
init_input: | |
// set gpio4 (rtcio channel 10) to RTC | |
// 0: GPIO connected to digital GPIO module. 1: GPIO connected to analog RTC module. | |
WRITE_RTC_REG(RTC_IO_TOUCH_PAD0_REG, RTC_IO_TOUCH_PAD0_MUX_SEL_M, 1, 1); //SET_PERI_REG_MASK(RTC_IO_TOUCH_PAD0_REG, RTC_IO_TOUCH_PAD0_MUX_SEL_M); | |
// 1: input enabled (this gpio has a pull-down by default) | |
WRITE_RTC_REG(RTC_IO_TOUCH_PAD0_REG, RTC_IO_TOUCH_PAD0_FUN_IE_M, 1, 1); //SET_PERI_REG_MASK(RTC_IO_TOUCH_PAD0_REG, RTC_IO_TOUCH_PAD0_FUN_IE_M); | |
after_init: | |
/* read GPIO4 (rtcio 10) */ | |
READ_RTC_REG(RTC_GPIO_IN_REG, RTC_GPIO_IN_NEXT_S + gpio4_channel, 1) | |
add r0, r0, 0 | |
load_last: | |
move r1, State | |
ld r2, r1, 0 //r2 = prev_State | |
decision: | |
sub r2, r0, r2 //r2=r0-r2 //00=0,01=-1,10=1,11=0 | |
jump exit, eq //jump to exit if 0 (no diff between cur and prev level) | |
//else we trigger | |
trigger: | |
//enable led (set GPIO2) | |
WRITE_RTC_REG(RTC_GPIO_ENABLE_W1TS_REG, RTC_GPIO_ENABLE_W1TS_S + gpio2_channel, 1, 1) | |
move r1, State | |
st r0, r1, 0 //store new State | |
//count this event | |
move r1, Counter | |
ld r0, r1, 0 | |
add r0, r0, 1 | |
st r0, r1, 0 | |
//delay | |
move r1, 200 | |
move r2, off | |
jump delay | |
off: | |
//turn off led (clear GPIO2) | |
WRITE_RTC_REG(RTC_GPIO_ENABLE_W1TC_REG, RTC_GPIO_ENABLE_W1TC_S + gpio2_channel, 1, 1) | |
jump exit | |
delay: | |
wait 8000 //1ms at 8MHz | |
sub r1, r1, 1 | |
jump r2, eq | |
jump delay | |
exit: | |
/* Get ULP back to sleep */ | |
halt |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment