FreeCalypso > hg > freecalypso-tools
comparison target-utils/libcommon/uartsel.c @ 0:e7502631a0f9
initial import from freecalypso-sw rev 1033:5ab737ac3ad7
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sat, 11 Jun 2016 00:13:35 +0000 |
parents | |
children | 2942c5ef76ed |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:e7502631a0f9 |
---|---|
1 /* | |
2 * uart_select_init() figures out which UART was used to load us | |
3 * through the boot ROM, and sets things up for us to use the same | |
4 * UART for our communication. | |
5 */ | |
6 | |
7 #include "types.h" | |
8 #include "romvars.h" | |
9 #include "ns16550.h" | |
10 #include "halt.h" | |
11 | |
12 extern struct ns16550_regs *uart_base; | |
13 | |
14 static u16 rom_version; | |
15 static struct boot_rom_vars *rom_vars; | |
16 static char *uart_name; | |
17 | |
18 uart_select_init() | |
19 { | |
20 rom_version = *(u16 *)0x1FFE; | |
21 | |
22 switch (rom_version) { | |
23 case 0x0200: | |
24 rom_vars = (struct boot_rom_vars *) 0x800504; | |
25 break; | |
26 case 0x0300: | |
27 rom_vars = (struct boot_rom_vars *) 0x800518; | |
28 break; | |
29 default: | |
30 _exit(HALTCODE_BOOTROMVER); | |
31 } | |
32 | |
33 switch (rom_vars->uart_id) { | |
34 case 0: | |
35 uart_base = (struct ns16550_regs *) 0xFFFF5800; | |
36 uart_name = "MODEM"; | |
37 break; | |
38 case 1: | |
39 uart_base = (struct ns16550_regs *) 0xFFFF5000; | |
40 uart_name = "IrDA"; | |
41 break; | |
42 default: | |
43 _exit(HALTCODE_INVALIDUART); | |
44 } | |
45 } | |
46 | |
47 print_boot_rom_info() | |
48 { | |
49 printf("Loaded via boot ROM v%04X, UART %d (%s) at baud rate #%d\n", | |
50 rom_version, rom_vars->uart_id, uart_name, | |
51 rom_vars->baud_rate_code); | |
52 printf("CLKTCXO input autodetected to be %d MHz\n", | |
53 rom_vars->clktcxo_13mhz ? 13 : 26); | |
54 } |