diff options
author | Daniel Friesel <derf@finalrewind.org> | 2018-01-12 14:40:30 +0100 |
---|---|---|
committer | Daniel Friesel <derf@finalrewind.org> | 2018-01-12 14:40:30 +0100 |
commit | 3875f37b2ce1d020aaf5174ea2a885bfdb98db98 (patch) | |
tree | 8815e77b3407ea45209bb03147dd08be82b8e539 /src/arch/msp430fr5969lp | |
parent | c00a200c508e18c41b6c55506ee35a2f21a6fa57 (diff) |
add stdin for esp8266 and msp430 as well as preliminary shell app
Diffstat (limited to 'src/arch/msp430fr5969lp')
-rw-r--r-- | src/arch/msp430fr5969lp/Makefile.inc | 4 | ||||
-rw-r--r-- | src/arch/msp430fr5969lp/arch.cc | 13 | ||||
-rw-r--r-- | src/arch/msp430fr5969lp/driver/stdin.cc | 31 |
3 files changed, 46 insertions, 2 deletions
diff --git a/src/arch/msp430fr5969lp/Makefile.inc b/src/arch/msp430fr5969lp/Makefile.inc index 05fcab1..bb91973 100644 --- a/src/arch/msp430fr5969lp/Makefile.inc +++ b/src/arch/msp430fr5969lp/Makefile.inc @@ -24,6 +24,10 @@ TARGETS += src/arch/msp430fr5969lp/driver/gpio.cc TARGETS += src/arch/msp430fr5969lp/driver/stdout.cc TARGETS += src/arch/msp430fr5969lp/driver/uptime.cc +ifneq ($(findstring stdin,${arch_drivers}), ) + TARGETS += src/arch/msp430fr5969lp/driver/stdin.cc +endif + ifneq ($(findstring i2c,${arch_drivers}), ) TARGETS += src/arch/msp430fr5969lp/driver/i2c.cc endif diff --git a/src/arch/msp430fr5969lp/arch.cc b/src/arch/msp430fr5969lp/arch.cc index 44a22c6..8281e66 100644 --- a/src/arch/msp430fr5969lp/arch.cc +++ b/src/arch/msp430fr5969lp/arch.cc @@ -63,10 +63,19 @@ void Arch::setup(void) //P4OUT = 0; } +#ifdef WITH_WAKEUP +extern void wakeup(); +#endif + void Arch::idle_loop(void) { - __eint(); - while (1); + while (1) { + __eint(); + __bis_SR_register(LPM0_bits); +#ifdef WITH_WAKEUP + wakeup(); +#endif + } } Arch arch; diff --git a/src/arch/msp430fr5969lp/driver/stdin.cc b/src/arch/msp430fr5969lp/driver/stdin.cc new file mode 100644 index 0000000..cc6e586 --- /dev/null +++ b/src/arch/msp430fr5969lp/driver/stdin.cc @@ -0,0 +1,31 @@ +#include "driver/stdin.h" +#include <msp430.h> + +void StandardInput::setup() +{ + UCA0IE |= UCRXIE; +} + +bool StandardInput::hasKey() +{ + if (write_pos != read_pos) { + return true; + } + return false; +} + +char StandardInput::getKey() +{ + char ret = buffer[read_pos++]; + read_pos %= 8; + return ret; +} + +StandardInput kin; + +__attribute__((interrupt(USCI_A0_VECTOR))) __attribute__((wakeup)) void handle_stdin() +{ + if (UCA0IFG & UCRXIFG) { + kin.addKey(UCA0RXBUF); + } +} |