LPC-P2378: implement status LED on/off macros.
[bertos.git] / examples / lpc2378 / main.c
1 // Emtpy main.c file generated by the wizard
2 #include <cpu/irq.h>
3 #include <cfg/debug.h>
4 #include <drv/timer.h>
5 #include <drv/ser.h>
6 #include <io/lpc23xx.h>
7 #include "hw/hw_led.h"
8
9 #define PRIO_HIGH       1
10 #define PRIO_LOW        0
11
12 static Serial ser_port;
13
14 static void init(void)
15 {
16         IRQ_ENABLE;
17         kdbg_init();
18         timer_init();
19         proc_init();
20
21         timer_delay(3000);
22         kprintf("NXP LPC2378 BeRTOS port test\n");
23         timer_delay(3000);
24         /* Turn off boot led */
25         IODIR0 = (1<<21);
26         IOCLR0 = (1<<21);
27         /* Init status led */
28         LED_INIT();
29         LED_OFF();
30 }
31
32 static void NORETURN ser_prompt(void)
33 {
34         char buf[32];
35         int i;
36
37         ser_init(&ser_port, SER_UART1);
38         ser_setbaudrate(&ser_port, 115200);
39
40         /* BeRTOS "echo" terminal */
41         kfile_printf(&ser_port.fd, "\n\rBeRTOS echo terminal\n\r");
42         proc_setPri(proc_current(), PRIO_HIGH);
43         for (i = 0; ; i++)
44         {
45                 kfile_printf(&ser_port.fd, "\n\r[%03d] BeRTOS:~$ ", i);
46                 kfile_gets_echo(&ser_port.fd, buf, sizeof(buf), true);
47                 kfile_printf(&ser_port.fd, "%s", buf);
48         }
49 }
50
51 static void NORETURN bertos_up(void)
52 {
53         char spinner[] = {'/', '-', '\\', '|'};
54         int i = 0;
55         while (1)
56         {
57                 i++;
58                 proc_forbid();
59                 kprintf("BeRTOS is up & running: %c\r",
60                         spinner[i % countof(spinner)]);
61                 proc_permit();
62                 timer_delay(100);
63         }
64 }
65
66 static void NORETURN status(void)
67 {
68         while (1)
69         {
70                 LED_ON();
71                 timer_delay(250);
72
73                 LED_OFF();
74                 timer_delay(250);
75         }
76 }
77
78 int main(void)
79 {
80
81         init();
82         proc_testRun();
83         proc_new(bertos_up, NULL, KERN_MINSTACKSIZE * 3, NULL);
84         proc_new(ser_prompt, NULL, KERN_MINSTACKSIZE * 3, NULL);
85         proc_new(status, NULL, 0, NULL);
86         while (1)
87         {
88         }
89
90         return 0;
91 }