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 +}