Use events to invoke menu handling on UART receive. We now have a basic
main dispatch loop.
This commit is contained in:
3
event.h
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
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
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 */
|
||||
|
||||
Reference in New Issue
Block a user