Root/lm32/logic/sakc/firmware/boot0-serial/main.c

1/**
2 * Primitive first stage bootloader
3 *
4 *
5 */
6#include "soc-hw.h"
7
8/* prototypes */
9uint32_t read_uint32()
10{
11    uint32_t val = 0, i;
12
13    for (i = 0; i < 4; i++) {
14        val <<= 8;
15        val += (uint8_t)uart_getchar();
16    }
17
18    return val;
19}
20
21int main(int argc, char **argv)
22{
23    int8_t *p;
24    uint8_t c;
25
26    // Initialize UART
27    uart_init();
28
29    c = '*'; // print msg on first iteration
30    for(;;) {
31        uint32_t start, size;
32
33        switch (c) {
34            case 'u': // upload
35                start = read_uint32();
36                size = read_uint32();
37                for (p = (int8_t *) start; p < (int8_t *) (start+size); p++)
38                    *p = uart_getchar();
39                break;
40        case 'd': // download
41                start = read_uint32();
42                size = read_uint32();
43                for (p = (int8_t *) start; p < (int8_t *) (start+size); p++)
44                uart_putchar( *p );
45                break;
46            case 'g': // goto
47                start = read_uint32();
48                jump(start);
49                break;
50        default:
51            uart_putstr("**SAKC/bootloader** > \r\n");
52            break;
53        };
54        c = uart_getchar();
55    }
56}
57
58

Archive Download this file

Branches:
master



interactive