summaryrefslogtreecommitdiff
path: root/firmware/drivers/serial.c
diff options
context:
space:
mode:
authorBjörn Stenberg <bjorn@haxx.se>2002-04-23 09:13:23 +0000
committerBjörn Stenberg <bjorn@haxx.se>2002-04-23 09:13:23 +0000
commitc6773e1436ba3adda0a6456dbe54ba1320a095be (patch)
tree172c21804499aa84fcab2f755596a3272cfbd59a /firmware/drivers/serial.c
parent34f948291202bdb42391bbc1200326e1aca00e5c (diff)
downloadrockbox-c6773e1436ba3adda0a6456dbe54ba1320a095be.zip
rockbox-c6773e1436ba3adda0a6456dbe54ba1320a095be.tar.gz
rockbox-c6773e1436ba3adda0a6456dbe54ba1320a095be.tar.bz2
rockbox-c6773e1436ba3adda0a6456dbe54ba1320a095be.tar.xz
Moved driver to 'drivers' subdir
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@189 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/drivers/serial.c')
-rw-r--r--firmware/drivers/serial.c75
1 files changed, 75 insertions, 0 deletions
diff --git a/firmware/drivers/serial.c b/firmware/drivers/serial.c
new file mode 100644
index 0000000..d101ab8
--- /dev/null
+++ b/firmware/drivers/serial.c
@@ -0,0 +1,75 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2002 by Alan Korr
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#include "serial.h"
+
+#define TDRE 7 /* transmit data register empty */
+#define RDRF 6 /* receive data register full */
+#define ORER 5 /* overrun error */
+#define FER 4 /* frame error */
+#define PER 3 /* parity error */
+
+static int serial_byte,serial_flag;
+
+void serial_putc (char byte)
+{
+ while (!(SSR1 & (1<<TDRE)));
+ TDR1 = byte;
+ clear_bit(TDRE,SSR1_ADDR);
+}
+
+void serial_puts (char const *string)
+{
+ int byte;
+ while ((byte = *string++))
+ serial_putc (byte);
+}
+
+int serial_getc( void )
+{
+ int byte;
+ while (!serial_flag);
+ byte = serial_byte;
+ serial_flag = 0;
+ serial_putc (byte);
+ return byte;
+}
+
+void serial_setup (int baudrate)
+{
+ SCR1 = 0;
+ SSR1 = 0;
+ SMR1 = 0;
+ BRR1 = (FREQ/(32*baudrate))-1;
+ SCR1 = 0x70;
+}
+
+#pragma interrupt
+void REI1 (void)
+{
+ clear_bit (FER,SSR1_ADDR);
+}
+
+#pragma interrupt
+void RXI1 (void)
+{
+ serial_byte = RDR1;
+ serial_flag = 1;
+ clear_bit(RDRF,SSR1_ADDR);
+}