amiga_boottest
diff src/serial.c @ 4:995d42b33974
serial output
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Fri, 23 Feb 2018 13:29:37 +0200 |
parents | |
children |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/src/serial.c Fri Feb 23 13:29:37 2018 +0200 1.3 @@ -0,0 +1,48 @@ 1.4 +#include "hwregs.h" 1.5 +#include "serial.h" 1.6 + 1.7 +#define CLK 3546895 1.8 +#define BVAL(b) (CLK / (b) - 1) 1.9 + 1.10 +static inline uint16_t baudval(int baud) 1.11 +{ 1.12 + switch(baud) { 1.13 + case 110: return BVAL(110); 1.14 + case 300: return BVAL(300); 1.15 + case 600: return BVAL(600); 1.16 + case 1200: return BVAL(1200); 1.17 + case 2400: return BVAL(2400); 1.18 + case 4800: return BVAL(4800); 1.19 + case 9600: return BVAL(9600); 1.20 + case 14400: return BVAL(14400); 1.21 + case 19200: return BVAL(19200); 1.22 + case 38400: return BVAL(38400); 1.23 + case 57600: return BVAL(57600); 1.24 + case 115200: return BVAL(115200); 1.25 + default: 1.26 + break; 1.27 + } 1.28 + return BVAL(baud); 1.29 +} 1.30 + 1.31 +void ser_init(int baud) 1.32 +{ 1.33 + REG_SERPER = baudval(baud) & 0x7fff; 1.34 +} 1.35 + 1.36 +/* 1.37 +void ser_putchar(int c) 1.38 +{ 1.39 + REG_SERDAT = ((uint16_t)c & 0xff) | 0x100; 1.40 +} 1.41 +*/ 1.42 + 1.43 +void ser_print(const char *s) 1.44 +{ 1.45 + while(*s) { 1.46 + if(*s == '\n') { 1.47 + ser_putchar('\r'); 1.48 + } 1.49 + ser_putchar(*s++); 1.50 + } 1.51 +}