diff target-utils/libbase/serio.S @ 991:5cff3579814c

target-utils: libbase factored out of libcommon The library dependency order is now strictly unidirectional
author Mychaela Falconia <falcon@ivan.Harhan.ORG>
date Wed, 30 Dec 2015 20:48:12 +0000
parents target-utils/libcommon/serio.S@d7591faa1258
children a7b0b426f9ca
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/target-utils/libbase/serio.S	Wed Dec 30 20:48:12 2015 +0000
@@ -0,0 +1,34 @@
+#include "ns16550.h"
+
+@ this module implements the elementary serial I/O operations
+
+	.text
+	.code	32
+	.global	serial_out
+serial_out:
+	ldr	r1, =uart_base
+	ldr	r2, [r1]
+1:	ldrb	r3, [r2, #NS16550_LSR]
+	tst	r3, #NS16550_LSR_THRE
+	beq	1b
+	strb	r0, [r2, #NS16550_THR]
+	bx	lr
+
+	.global	serial_in_poll
+serial_in_poll:
+	ldr	r1, =uart_base
+	ldr	r2, [r1]
+	ldrb	r3, [r2, #NS16550_LSR]
+	tst	r3, #NS16550_LSR_DR
+	ldrneb	r0, [r2, #NS16550_RBR]
+	mvneq	r0, #0
+	bx	lr
+
+	.global	serial_flush
+serial_flush:
+	ldr	r1, =uart_base
+	ldr	r2, [r1]
+1:	ldrb	r3, [r2, #NS16550_LSR]
+	tst	r3, #NS16550_LSR_TEMP
+	beq	1b
+	bx	lr