aboutsummaryrefslogtreecommitdiff
path: root/kernel/uart.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/uart.c')
-rw-r--r--kernel/uart.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/kernel/uart.c b/kernel/uart.c
index 8407113..9522808 100644
--- a/kernel/uart.c
+++ b/kernel/uart.c
@@ -33,6 +33,9 @@
FILE uart_stream = FDEV_SETUP_STREAM(uart_putchar, uart_getchar, _FDEV_SETUP_RW);
+enum { Tasks, Load };
+uint8_t udrie_flag = Tasks;
+
#ifdef USE_RXCIE
ISR(SIG_UART_RECV)
{
@@ -53,8 +56,14 @@ ISR(SIG_UART_RECV)
break;
case 'T':
UCSRB |= _BV(UDRIE);
+ udrie_flag = Tasks;
+ break;
+ case 'L':
+ UCSRB |= _BV(UDRIE);
+ udrie_flag = Load;
break;
case 't':
+ case 'l':
UCSRB &= ~_BV(UDRIE);
break;
case '\r':
@@ -68,7 +77,16 @@ ISR(SIG_UART_RECV)
ISR(SIG_UART_DATA)
{
- uint8_t r = running();
+ uint8_t r = 0;
+
+ switch (udrie_flag) {
+ case Tasks:
+ r = running();
+ break;
+ case Load:
+ r = load();
+ break;
+ }
UDR = r ? '0' + r : '.';
}