diff options
author | Joel Sherrill <joel.sherrill@OARcorp.com> | 2008-08-18 21:51:35 +0000 |
---|---|---|
committer | Joel Sherrill <joel.sherrill@OARcorp.com> | 2008-08-18 21:51:35 +0000 |
commit | c8b1ab96c82f6ea4a554356a2f6f25ad71973c98 (patch) | |
tree | 2260464e65d096434e88e35d217848b1ab11790f /c/src/lib/libbsp/bfin | |
parent | 2008-08-18 Joel Sherrill <joel.sherrill@oarcorp.com> (diff) | |
download | rtems-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/ChangeLog | 6 | ||||
-rw-r--r-- | c/src/lib/libbsp/bfin/eZKit533/Makefile.am | 30 | ||||
-rw-r--r-- | c/src/lib/libbsp/bfin/eZKit533/console/console-io.c | 282 | ||||
-rw-r--r-- | c/src/lib/libbsp/bfin/eZKit533/startup/bspstart.c | 4 |
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); } |