summaryrefslogtreecommitdiffstats
path: root/firmware/target
diff options
context:
space:
mode:
authorBertrik Sikken <bertrik@sikken.nl>2011-04-23 08:23:07 +0000
committerBertrik Sikken <bertrik@sikken.nl>2011-04-23 08:23:07 +0000
commit55a7a31ce3a742feea2ff47f6ec35356ebb0ba06 (patch)
tree046dbe8a4bbc816be2cc7ad5f9653006eceb0ccf /firmware/target
parent0dfce1972b4ba781411b193b13d0c35c2b6769d7 (diff)
downloadrockbox-55a7a31ce3a742feea2ff47f6ec35356ebb0ba06.tar.gz
rockbox-55a7a31ce3a742feea2ff47f6ec35356ebb0ba06.zip
Split off target-specific parts from firmware/drivers/serial.c
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@29768 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target')
-rw-r--r--firmware/target/arm/imx31/uart-imx31.c72
-rw-r--r--firmware/target/coldfire/uart-coldfire.c60
-rw-r--r--firmware/target/sh/archos/uart-archos.c167
3 files changed, 299 insertions, 0 deletions
diff --git a/firmware/target/arm/imx31/uart-imx31.c b/firmware/target/arm/imx31/uart-imx31.c
new file mode 100644
index 0000000000..c54ac0c0ce
--- /dev/null
+++ b/firmware/target/arm/imx31/uart-imx31.c
@@ -0,0 +1,72 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2002 by Alan Korr & Nick Robinson
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+#include "config.h"
+#include "button.h"
+#include "cpu.h"
+#include "system.h"
+#include "kernel.h"
+#include "serial.h"
+
+#include "serial-imx31.h"
+
+void serial_setup(void)
+{
+#ifdef UART_INT /*enable UART Interrupts */
+ UCR1_1 |= (EUARTUCR1_TRDYEN | EUARTUCR1_RRDYEN | EUARTUCR1_TXMPTYEN);
+ UCR4_1 |= (EUARTUCR4_TCEN);
+#else /*disable UART Interrupts*/
+ UCR1_1 &= ~(EUARTUCR1_TRDYEN | EUARTUCR1_RRDYEN | EUARTUCR1_TXMPTYEN);
+ UCR4_1 &= ~(EUARTUCR4_TCEN);
+#endif
+ UCR1_1 |= EUARTUCR1_UARTEN;
+ UCR2_1 |= (EUARTUCR2_TXEN | EUARTUCR2_RXEN | EUARTUCR2_IRTS);
+
+ /* Tx,Rx Interrupt Trigger levels, Disable for now*/
+ /*UFCR1 |= (UFCR1_TXTL_32 | UFCR1_RXTL_32);*/
+}
+
+int tx_rdy(void)
+{
+ if((UTS1 & EUARTUTS_TXEMPTY))
+ return 1;
+ else
+ return 0;
+}
+
+/*Not ready...After first Rx, UTS1 & UTS1_RXEMPTY
+ keeps returning true*/
+int rx_rdy(void)
+{
+ if(!(UTS1 & EUARTUTS_RXEMPTY))
+ return 1;
+ else
+ return 0;
+}
+
+void tx_writec(unsigned char c)
+{
+ UTXD1=(int) c;
+}
+
diff --git a/firmware/target/coldfire/uart-coldfire.c b/firmware/target/coldfire/uart-coldfire.c
new file mode 100644
index 0000000000..c5992a956c
--- /dev/null
+++ b/firmware/target/coldfire/uart-coldfire.c
@@ -0,0 +1,60 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2002 by Alan Korr & Nick Robinson
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+#include "config.h"
+#include "cpu.h"
+#include "system.h"
+#include "serial.h"
+
+void serial_setup (void)
+{
+ UCR0 = 0x30; /* Reset transmitter */
+ UCSR0 = 0xdd; /* Timer mode */
+
+ UCR0 = 0x10; /* Reset pointer */
+ UMR0 = 0x13; /* No parity, 8 bits */
+ UMR0 = 0x07; /* 1 stop bit */
+
+ UCR0 = 0x04; /* Tx enable */
+}
+
+int tx_rdy(void)
+{
+ if(USR0 & 0x04)
+ return 1;
+ else
+ return 0;
+}
+
+int rx_rdy(void)
+{
+ /* a dummy */
+ return 0;
+}
+
+void tx_writec(unsigned char c)
+{
+ UTB0 = c;
+}
+
diff --git a/firmware/target/sh/archos/uart-archos.c b/firmware/target/sh/archos/uart-archos.c
new file mode 100644
index 0000000000..14fea943b3
--- /dev/null
+++ b/firmware/target/sh/archos/uart-archos.c
@@ -0,0 +1,167 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2002 by Alan Korr & Nick Robinson
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdarg.h>
+
+#include "config.h"
+#include "button.h"
+#include "cpu.h"
+#include "system.h"
+#include "kernel.h"
+#include "serial.h"
+
+/* FIX: this doesn't work on iRiver or iPod yet */
+/* iFP7xx has no remote */
+
+/* Received byte identifiers */
+#define PLAY 0xC1
+#define STOP 0xC2
+#define PREV 0xC4
+#define NEXT 0xC8
+#define VOLUP 0xD0
+#define VOLDN 0xE0
+
+void serial_setup (void)
+{
+ /* Set PB10 function to serial Rx */
+ PBCR1 = (PBCR1 & 0xffcf) | 0x0020;
+
+ SMR1 = 0x00;
+ SCR1 = 0;
+ BRR1 = (FREQ/(32*9600))-1;
+ and_b(0, &SSR1); /* The status bits must be read before they are cleared,
+ so we do an AND operation */
+
+ /* Let the hardware settle. The serial port needs to wait "at least
+ the interval required to transmit or receive one bit" before it
+ can be used. */
+ sleep(1);
+
+ SCR1 = 0x10; /* Enable the receiver, no interrupt */
+}
+
+int tx_rdy(void)
+{
+ /* a dummy */
+ return 1;
+}
+
+int rx_rdy(void)
+{
+ if(SSR1 & SCI_RDRF)
+ return 1;
+ else
+ return 0;
+}
+
+void tx_writec(unsigned char c)
+{
+ /* a dummy */
+ (void)c;
+}
+
+unsigned char rx_readc(void)
+{
+ char tmp;
+ /* Read byte and clear the Rx Full bit */
+ tmp = RDR1;
+ and_b(~SCI_RDRF, &SSR1);
+ return tmp;
+}
+
+
+/* This function returns the received remote control code only if it is
+ received without errors before or after the reception.
+ It therefore returns the received code on the second call after the
+ code has been received. */
+int remote_control_rx(void)
+{
+ static int last_valid_button = BUTTON_NONE;
+ static int last_was_error = false;
+ int btn;
+ int ret = BUTTON_NONE;
+
+ /* Errors? Just clear'em. The receiver stops if we don't */
+ if(SSR1 & (SCI_ORER | SCI_FER | SCI_PER)) {
+ and_b(~(SCI_ORER | SCI_FER | SCI_PER), &SSR1);
+ last_valid_button = BUTTON_NONE;
+ last_was_error = true;
+ return BUTTON_NONE;
+ }
+
+ if(rx_rdy()) {
+ btn = rx_readc();
+
+ if(last_was_error)
+ {
+ last_valid_button = BUTTON_NONE;
+ ret = BUTTON_NONE;
+ }
+ else
+ {
+ switch (btn)
+ {
+ case STOP:
+ last_valid_button = BUTTON_RC_STOP;
+ break;
+
+ case PLAY:
+ last_valid_button = BUTTON_RC_PLAY;
+ break;
+
+ case VOLUP:
+ last_valid_button = BUTTON_RC_VOL_UP;
+ break;
+
+ case VOLDN:
+ last_valid_button = BUTTON_RC_VOL_DOWN;
+ break;
+
+ case PREV:
+ last_valid_button = BUTTON_RC_LEFT;
+ break;
+
+ case NEXT:
+ last_valid_button = BUTTON_RC_RIGHT;
+ break;
+
+ default:
+ last_valid_button = BUTTON_NONE;
+ break;
+ }
+ }
+ }
+ else
+ {
+ /* This means that a valid remote control character was received
+ the last time we were called, with no receiver errors either before
+ or after. Then we can assume that there really is a remote control
+ attached, and return the button code. */
+ ret = last_valid_button;
+ last_valid_button = BUTTON_NONE;
+ }
+
+ last_was_error = false;
+
+ return ret;
+}
+