summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/bfin
diff options
context:
space:
mode:
authorJoel Sherrill <joel.sherrill@OARcorp.com>2008-08-18 21:51:35 +0000
committerJoel Sherrill <joel.sherrill@OARcorp.com>2008-08-18 21:51:35 +0000
commitc8b1ab96c82f6ea4a554356a2f6f25ad71973c98 (patch)
tree2260464e65d096434e88e35d217848b1ab11790f /c/src/lib/libbsp/bfin
parent2008-08-18 Joel Sherrill <joel.sherrill@oarcorp.com> (diff)
downloadrtems-c8b1ab96c82f6ea4a554356a2f6f25ad71973c98.tar.bz2
2008-08-18 Allan Hessenflow <allanh@kallisti.com>
* Makefile.am, console/console-io.c, startup/bspstart.c: Update to use shared libcpu version of code implemented as part of bf537Stamp effort.
Diffstat (limited to 'c/src/lib/libbsp/bfin')
-rw-r--r--c/src/lib/libbsp/bfin/eZKit533/ChangeLog6
-rw-r--r--c/src/lib/libbsp/bfin/eZKit533/Makefile.am30
-rw-r--r--c/src/lib/libbsp/bfin/eZKit533/console/console-io.c282
-rw-r--r--c/src/lib/libbsp/bfin/eZKit533/startup/bspstart.c4
4 files changed, 108 insertions, 214 deletions
diff --git a/c/src/lib/libbsp/bfin/eZKit533/ChangeLog b/c/src/lib/libbsp/bfin/eZKit533/ChangeLog
index 9dbe88bbac..17904a24ef 100644
--- a/c/src/lib/libbsp/bfin/eZKit533/ChangeLog
+++ b/c/src/lib/libbsp/bfin/eZKit533/ChangeLog
@@ -1,3 +1,9 @@
+2008-08-18 Allan Hessenflow <allanh@kallisti.com>
+
+ * Makefile.am, console/console-io.c, startup/bspstart.c: Update to use
+ shared libcpu version of code implemented as part of bf537Stamp
+ effort.
+
2008-08-15 Joel Sherrill <joel.sherrill@OARcorp.com>
* include/bsp.h: Fix CVS Id.
diff --git a/c/src/lib/libbsp/bfin/eZKit533/Makefile.am b/c/src/lib/libbsp/bfin/eZKit533/Makefile.am
index ca29e13c5c..7cbefeb94c 100644
--- a/c/src/lib/libbsp/bfin/eZKit533/Makefile.am
+++ b/c/src/lib/libbsp/bfin/eZKit533/Makefile.am
@@ -27,17 +27,29 @@ project_lib_DATA = start.$(OBJEXT)
dist_project_lib_DATA += startup/linkcmds
-startup_SOURCES = ../../shared/bsplibc.c ../../shared/bsppost.c \
- ../../shared/bsppredriverhook.c startup/bspstart.c \
- ../../shared/bspclean.c ../../shared/sbrk.c ../../shared/setvec.c \
- ../../shared/bootcard.c ../../shared/gnatinstallhandler.c
-clock_SOURCES = ../shared/clock/clockdrv.c ../shared/clock/rtc.c
-console_SOURCES = console/console-io.c ../shared/console/console.c
-timer_SOURCES = ../shared/timer/timer.c
+noinst_PROGRAMS += startup.rel
+startup_rel_SOURCES = ../../shared/bsplibc.c ../../shared/bsppost.c \
+ ../../shared/bsppredriverhook.c startup/bspstart.c \
+ ../../shared/bspclean.c ../../shared/sbrk.c ../../shared/setvec.c \
+ ../../shared/bootcard.c ../../shared/gnatinstallhandler.c
+startup_rel_CPPFLAGS = $(AM_CPPFLAGS)
+startup_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
+
+noinst_PROGRAMS += console.rel
+console_rel_SOURCES = console/console-io.c
+console_rel_CPPFLAGS = $(AM_CPPFLAGS)
+console_rel_LDFLAGS = $(RTEMS_RELLDFLAGS)
noinst_LIBRARIES = libbsp.a
-libbsp_a_SOURCES = $(startup_SOURCES) $(clock_SOURCES) $(console_SOURCES) \
- $(timer_SOURCES)
+libbsp_a_SOURCES =
+libbsp_a_LIBADD = startup.rel console.rel
+libbsp_a_LIBADD += ../../../libcpu/@RTEMS_CPU@/mmu.rel
+libbsp_a_LIBADD += ../../../libcpu/@RTEMS_CPU@/interrupt.rel
+libbsp_a_LIBADD += ../../../libcpu/@RTEMS_CPU@/cache.rel
+libbsp_a_LIBADD += ../../../libcpu/@RTEMS_CPU@/uart.rel
+libbsp_a_LIBADD += ../../../libcpu/@RTEMS_CPU@/clock.rel
+libbsp_a_LIBADD += ../../../libcpu/@RTEMS_CPU@/rtc.rel
+libbsp_a_LIBADD += ../../../libcpu/@RTEMS_CPU@/timer.rel
EXTRA_DIST += times
diff --git a/c/src/lib/libbsp/bfin/eZKit533/console/console-io.c b/c/src/lib/libbsp/bfin/eZKit533/console/console-io.c
index ad07c9562f..dd68468bac 100644
--- a/c/src/lib/libbsp/bfin/eZKit533/console/console-io.c
+++ b/c/src/lib/libbsp/bfin/eZKit533/console/console-io.c
@@ -15,235 +15,109 @@
*/
-#include <bsp.h>
-#include <cplb.h>
+#include <rtems.h>
#include <rtems/libio.h>
-#include <stdlib.h>
-#include <assert.h>
-#include <inttypes.h>
+#include <bsp.h>
+#include <rtems/bspIo.h>
-/*
- * console_initialize_hardware
- *
- * This routine initializes the console hardware.
- *
- */
+#include <libcpu/bf533.h>
+#include <libcpu/interrupt.h>
+#include <libcpu/uart.h>
+
+static bfin_uart_channel_t channels[] = {
+ {"/dev/console",
+ (char *) UART0_BASE_ADDRESS,
+ CONSOLE_USE_INTERRUPTS,
+#ifdef CONSOLE_FORCE_BAUD
+ CONSOLE_FORCE_BAUD,
+#else
+ 0,
+#endif
+ NULL,
+ 0}
+};
+
+static bfin_uart_config_t config = {
+ SCLK,
+ sizeof(channels) / sizeof(channels[0]),
+ channels
+};
+
+#if CONSOLE_USE_INTERRUPTS
+static bfin_isr_t bfinUARTISRs[] = {
+ {SIC_DMA6_UART0_RX_VECTOR, bfin_uart_isr, 0, 0, NULL},
+ {SIC_DMA7_UART0_TX_VECTOR, bfin_uart_isr, 0, 0, NULL},
+};
+#endif
-/*
- * console_initialize_hardware does not compile with optimizations.
- * Makefile.am has been changed to compile the console driver with -O0.
- */
-void console_initialize_hardware(void)
-{
- unsigned int divisor;
-
- /* Set DLAB to access divisor registers */
- *((uint16_t*)UART_LCR) = DLAB;
-
- /* Set divisor registers
- * BAUDRATE = SCLK/(16xDIVISOR)
- */
- divisor = SCLK/(BAUDRATE*16); /* 1300000/(16x57600) */
- *((uint16_t*)UART_DLL) = (divisor & 0x00ff);
- *((uint16_t*)UART_DLH) = ((divisor >> 8) & 0x00ff);
-
- /* Set Control Register - 8 bits, no parity, 1 stop bit*/
- *((uint16_t*)UART_LCR) = WORD_8BITS;
-
- /* Enable Serial Clocks */
- *((uint16_t*)UART_GCTL) = UCEN;
-
- return;
-}
-/*
- * console_outbyte_polled
- *
- * This routine transmits a character using polling.
- */
+static void eZKit533_BSP_output_char(char c) {
-void console_outbyte_polled(
- int port,
- char ch
-)
-{
- while (!((*((uint16_t*)UART_LSR))&THRE)){} /* Wait for sending last byte */
- *((uint16_t*)UART_THR) = ch;
+ bfin_uart_poll_write(0, c);
}
-/*
- * console_inbyte_nonblocking
- *
- * This routine polls for a character.
- */
-
-int console_inbyte_nonblocking(
- int port
-)
-{
- char c;
-
- if ( *((uint16_t*)UART_LSR) & DR){
- c = *((uint16_t*)UART_RBR);
- }else{
- return -1;
- }
+static char eZKit533_BSP_poll_char(void) {
- return c;
+ return bfin_uart_poll_read(0);
}
-#if (CONSOLE_USE_INTERRUPTS)
-
-#include <rtems/ringbuf.h>
+BSP_output_char_function_type BSP_output_char = eZKit533_BSP_output_char;
+BSP_polling_getchar_function_type BSP_poll_char = eZKit533_BSP_poll_char;
-Ring_buffer_t TX_Buffer[ 1 ];
-boolean Is_TX_active[ 1 ];
+rtems_device_driver console_initialize(rtems_device_major_number major,
+ rtems_device_minor_number minor,
+ void *arg) {
+ rtems_status_code status;
+#if CONSOLE_USE_INTERRUPTS
+ int i;
+#endif
-extern void *console_termios_data[ 1 ];
-/*
- * console_isr
- *
- * This routine is the console interrupt handler for Channel A.
- *
- * Input parameters:
- * vector - vector number
- *
- * Output parameters: NONE
- *
- * Return values: NONE
- */
-rtems_isr console_isr(
- rtems_vector_number vector
-)
-{
- char ch;
- uint16_t UStat;
-
- UStat = *((uint16_t*)UART_IIR);
-
- if ( ((UStat&0x06) == 0x04) && ( (*((uint16_t*)UART_LSR)) & DR)) {
- ch = *((uint16_t*)UART_RBR);
- rtems_termios_enqueue_raw_characters( console_termios_data[ 0 ], &ch, 1 );
+ status = bfin_uart_initialize(major, &config);
+#if CONSOLE_USE_INTERRUPTS
+ for (i = 0; i < sizeof(bfinUARTISRs) / sizeof(bfinUARTISRs[0]); i++) {
+ bfin_interrupt_register(&bfinUARTISRs[i]);
+ bfin_interrupt_enable(&bfinUARTISRs[i], TRUE);
}
+#endif
- if ( ((UStat&0x06) == 0x02) && ((*((uint16_t*)UART_LSR))&THRE) ) {
- if ( !Ring_buffer_Is_empty( &TX_Buffer[ 0 ] ) ) {
- Ring_buffer_Remove_character( &TX_Buffer[ 0 ], ch );
- *((uint16_t*)UART_THR) = ch;
- } else {
- Is_TX_active[ 0 ] = FALSE;
- }
- }
-}
+ if (status != RTEMS_SUCCESSFUL)
+ rtems_fatal_error_occurred(status);
-/*
- * console_exit
- *
- * This routine allows the console to exit by masking its associated interrupt
- * vectors.
- *
- * Input parameters: NONE
- *
- * Output parameters: NONE
- *
- * Return values: NONE
- */
-void console_exit()
-{
- uint32_t port;
- uint16_t ch;
-
- /*
- * Although the interrupts for the UART are unmasked, the PIL is set to
- * disable all external interrupts. So we might as well do this first.
- */
-
- /* Disable UART interruptions */
- *((uint16_t*)UART_IER) = 0x0000;
- *((uint16_t*)SIC_IMASK) &= 0xFFFF3FBF;
-
- while ( !Ring_buffer_Is_empty( &TX_Buffer[ port ] ) ) {
- Ring_buffer_Remove_character( &TX_Buffer[ port ], ch );
- console_outbyte_polled( port, ch );
- }
+ return RTEMS_SUCCESSFUL;
+}
- /*
- * Now wait for all the data to actually get out ... the send register
- * should be empty.
- */
+rtems_device_driver console_open(rtems_device_major_number major,
+ rtems_device_minor_number minor,
+ void *arg) {
- while ( !((*((uint16_t*)UART_LSR))&THRE) );
+ return bfin_uart_open(major, minor, arg);
}
-/*
- * console_initialize_interrupts
- *
- * This routine initializes the console's receive and transmit
- * ring buffers and loads the appropriate vectors to handle the interrupts.
- *
- * Input parameters: NONE
- *
- * Output parameters: NONE
- *
- * Return values: NONE
- */
+rtems_device_driver console_close(rtems_device_major_number major,
+ rtems_device_minor_number minor,
+ void *arg) {
-/*#ifdef RDB_BREAK_IN
- extern uint32_t trap_table[];
-#endif*/
-
-void console_initialize_interrupts( void )
-{
- Ring_buffer_Initialize( &TX_Buffer[ 0 ] );
-
- Is_TX_active[ 0 ] = FALSE;
-
- atexit( console_exit );
-
- /* Setting priority - IVG10*/
- *((uint32_t*)SIC_IAR0) &= 0xF0FFFFFF;
- *((uint32_t*)SIC_IAR0) |= 0x03000000;
- *((uint32_t*)SIC_IAR1) &= 0x00FFFFFF;
- *((uint32_t*)SIC_IAR1) |= 0x33000000;
-
- /* System Interrupt Mask */
- *((uint32_t*)SIC_IMASK) |= 0x0000C040;
-
- set_vector( console_isr, UART_VECTOR, 1 );
-
- /* Enable UART Interruption
- * ELSI - RX error interrupt
- * ETBEI - TX buffer empty
- * ERBFI - RX buffer full
- */
- *((uint16_t*)UART_IER) = ELSI | ETBEI | ERBFI;
+ return rtems_termios_close(arg);
}
-void console_outbyte_interrupt(
- int port,
- char ch
-)
-{
- /*
- * If this is the first character then we need to prime the pump
- */
-
- if ( Is_TX_active[ port ] == FALSE ) {
- Is_TX_active[ port ] = TRUE;
- console_outbyte_polled( port, ch );
- return;
- }
-
- while ( Ring_buffer_Is_full( &TX_Buffer[ port ] ) );
+rtems_device_driver console_read(rtems_device_major_number major,
+ rtems_device_minor_number minor,
+ void *arg) {
- Ring_buffer_Add_character( &TX_Buffer[ port ], ch );
+ return rtems_termios_read(arg);
}
-#endif
+rtems_device_driver console_write(rtems_device_major_number major,
+ rtems_device_minor_number minor,
+ void *arg) {
-#include <rtems/bspIo.h>
+ return rtems_termios_write(arg);
+}
-void bfsim_BSP_output_char(char c) { console_outbyte_polled( 0, c ); }
+rtems_device_driver console_control(rtems_device_major_number major,
+ rtems_device_minor_number minor,
+ void *arg) {
+
+ return rtems_termios_ioctl(arg);
+}
-BSP_output_char_function_type BSP_output_char = bfsim_BSP_output_char;
-BSP_polling_getchar_function_type BSP_poll_char = NULL;
diff --git a/c/src/lib/libbsp/bfin/eZKit533/startup/bspstart.c b/c/src/lib/libbsp/bfin/eZKit533/startup/bspstart.c
index 321935bb8a..2da422b9ed 100644
--- a/c/src/lib/libbsp/bfin/eZKit533/startup/bspstart.c
+++ b/c/src/lib/libbsp/bfin/eZKit533/startup/bspstart.c
@@ -23,7 +23,7 @@
#include <cplb.h>
#include <rtems/libio.h>
#include <rtems/libcsupport.h>
-
+#include <libcpu/interrupt.h>
const unsigned int dcplbs_table[16][2] = {
{ 0xFFA00000, (PAGE_SIZE_1MB | CPLB_D_PAGE_MGMT | CPLB_WT) },
@@ -104,6 +104,8 @@ void bsp_pretasking_hook(void)
void *heapStart = &HeapBase;
unsigned long heapSize = (unsigned long)&HeapSize;
+ bfin_interrupt_init();
+
bsp_libc_init(heapStart, heapSize, 0);
}