Browse Source

Use events to invoke menu handling on UART receive. We now have a basic

main dispatch loop.
master
Gavan Fantom 13 years ago
parent
commit
fda1b2a672
  1. 3
      event.h
  2. 29
      main.c
  3. 2
      uart.c

3
event.h

@ -5,8 +5,9 @@
#define EVENT_TIMER 0
#define EVENT_I2C_COMPLETE 1
#define EVENT_UART_INPUT 2
#define EVENT_MAX 1
#define EVENT_MAX 2
typedef void event_handler(void);

29
main.c

@ -159,21 +159,35 @@ void average_sample(void)
putstr(")\r\n");
}
int main(void) {
int i;
void menu_handler(void);
int main(void) {
init_interrupt();
init_uart();
init_i2c();
init_pins();
init_timer();
event_register(EVENT_UART_INPUT, menu_handler);
putstr("Your entire life has been a mathematical error... a mathematical error I'm about to correct!\r\n");
putstr("prompt> ");
while (1) {
char c;
putstr("prompt> ");
while (!getch(&c))
FP0XVAL ^= 0x04000000;
FP0XVAL ^= 0x04000000;
event_dispatch();
}
return 0;
}
void menu_handler(void)
{
int i;
char c;
while (getch(&c)) {
if (c == 0x0a)
continue;
putch(c);
@ -265,7 +279,6 @@ int main(void) {
reply("Unrecognised command.");
break;
}
putstr("prompt> ");
}
return 0;
}

2
uart.c

@ -1,6 +1,7 @@
#include "uart.h"
#include "types.h"
#include "interrupt.h"
#include "event.h"
#define UARTBASE 0xE000C000
@ -112,6 +113,7 @@ void __attribute__((interrupt("IRQ"))) uart_interrupt_handler(void)
}
}
uart_rxwrite = local_rxwrite;
event_set(EVENT_UART_INPUT);
break;
case 0x2: /* THRE interrupt */

Loading…
Cancel
Save