STM32: correctly set PCLK1 to 36MHz (max allowed frequency).
[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
8 #define PRIO_HIGH       1
9 #define PRIO_LOW        0
10
11 #define STATUS_LED (1<<19)
12 #define LED_ON()  do { IOCLR1 =  STATUS_LED; } while (0)
13 #define LED_OFF() do { IOSET1 =  STATUS_LED; } while (0)
14
15 static Serial ser_port;
16
17 static void init(void)
18 {
19         IRQ_ENABLE;
20         kdbg_init();
21         timer_init();
22         proc_init();
23
24         timer_delay(3000);
25         kprintf("NXP LPC2378 BeRTOS port test\n");
26         timer_delay(3000);
27         /* Turn off boot led */
28         IODIR0 = (1<<21);
29         IOCLR0 = (1<<21);
30         /* Init status led */
31         IODIR1 |= STATUS_LED;
32         LED_OFF();
33 }
34
35 static void NORETURN ser_prompt(void)
36 {
37         char buf[32];
38         int i;
39
40         ser_init(&ser_port, SER_UART1);
41         ser_setbaudrate(&ser_port, 115200);
42
43         /* BeRTOS "echo" terminal */
44         kfile_printf(&ser_port.fd, "\n\rBeRTOS echo terminal\n\r");
45         proc_setPri(proc_current(), PRIO_HIGH);
46         for (i = 0; ; i++)
47         {
48                 kfile_printf(&ser_port.fd, "\n\r[%03d] BeRTOS:~$ ", i);
49                 kfile_gets_echo(&ser_port.fd, buf, sizeof(buf), true);
50                 kfile_printf(&ser_port.fd, "%s", buf);
51         }
52 }
53
54 static void NORETURN bertos_up(void)
55 {
56         char spinner[] = {'/', '-', '\\', '|'};
57         int i = 0;
58         while (1)
59         {
60                 i++;
61                 proc_forbid();
62                 kprintf("BeRTOS is up & running: %c\r",
63                         spinner[i % countof(spinner)]);
64                 proc_permit();
65                 timer_delay(100);
66         }
67 }
68
69 static void NORETURN status(void)
70 {
71         while (1)
72         {
73                 LED_ON();
74                 timer_delay(250);
75
76                 LED_OFF();
77                 timer_delay(250);
78         }
79 }
80
81 int main(void)
82 {
83
84         init();
85         proc_testRun();
86         proc_new(bertos_up, NULL, KERN_MINSTACKSIZE * 3, NULL);
87         proc_new(ser_prompt, NULL, KERN_MINSTACKSIZE * 3, NULL);
88         proc_new(status, NULL, 0, NULL);
89         while (1)
90         {
91         }
92
93         return 0;
94 }