OpenCores
URL https://opencores.org/ocsvn/openrisc_me/openrisc_me/trunk

Subversion Repositories openrisc_me

Compare Revisions

  • This comparison shows the changes necessary to convert path
    /openrisc/trunk/rtos/ecos-2.0/packages/devs/serial/v85x
    from Rev 27 to Rev 174
    Reverse comparison

Rev 27 → Rev 174

/v850/v2_0/cdl/ser_v85x_v850.cdl
0,0 → 1,132
# ====================================================================
#
# ser_v85x_v850.cdl
#
# eCos serial NEC/V850 configuration data
#
# ====================================================================
#####ECOSGPLCOPYRIGHTBEGIN####
## -------------------------------------------
## This file is part of eCos, the Embedded Configurable Operating System.
## Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
##
## eCos 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 or (at your option) any later version.
##
## eCos is distributed in the hope that it will be useful, but WITHOUT ANY
## WARRANTY; without even the implied warranty of MERCHANTABILITY or
## FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
## for more details.
##
## You should have received a copy of the GNU General Public License along
## with eCos; if not, write to the Free Software Foundation, Inc.,
## 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
##
## As a special exception, if other files instantiate templates or use macros
## or inline functions from this file, or you compile this file and link it
## with other works to produce a work based on this file, this file does not
## by itself cause the resulting work to be covered by the GNU General Public
## License. However the source code for this file must still be made available
## in accordance with section (3) of the GNU General Public License.
##
## This exception does not invalidate any other reasons why a work based on
## this file might be covered by the GNU General Public License.
##
## Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
## at http://sources.redhat.com/ecos/ecos-license/
## -------------------------------------------
#####ECOSGPLCOPYRIGHTEND####
# ====================================================================
######DESCRIPTIONBEGIN####
#
# Author(s): gthomas
# Original data: gthomas
# Contributors: jlarmour
# Date: 2000-05-26
#
#####DESCRIPTIONEND####
#
# ====================================================================
 
cdl_package CYGPKG_IO_SERIAL_V85X_V850 {
display "NEC V850 serial device drivers"
 
parent CYGPKG_IO_SERIAL_DEVICES
active_if CYGPKG_IO_SERIAL
active_if CYGPKG_HAL_V85X_V850
 
requires CYGPKG_ERROR
include_dir cyg/io
include_files ; # none _exported_ whatsoever
description "
This option enables the serial device drivers for the
NEC V850."
 
compile -library=libextras.a v85x_v850_serial.c
 
define_proc {
puts $::cdl_system_header "/***** serial driver proc output start *****/"
puts $::cdl_system_header "#define CYGDAT_IO_SERIAL_DEVICE_HEADER <pkgconf/io_serial_v85x_v850.h>"
puts $::cdl_system_header "/***** serial driver proc output end *****/"
}
 
cdl_component CYGPKG_IO_SERIAL_V85X_V850_SERIAL0 {
display "NEC V850 serial port 0 driver"
flavor bool
default_value 1
description "
This option includes the serial device driver for the NEC V850
SA1 (70F3017) and SB1 (70F3033) devices, port 0."
cdl_option CYGDAT_IO_SERIAL_V85X_V850_SERIAL0_NAME {
display "Device name for NEC V850 serial port 0 driver"
flavor data
default_value {"\"/dev/ser0\""}
description "
This option specifies the name of the serial device for the
NEC V850, port 0."
}
cdl_option CYGNUM_IO_SERIAL_V85X_V850_SERIAL0_BAUD {
display "Baud rate for the NEC V850 serial port 0 driver"
flavor data
legal_values { 50 75 110 "134_5" 150 200 300 600 1200 1800 2400 3600
4800 7200 9600 14400 19200 38400 57600 115200
}
default_value 38400
description "
This option specifies the default baud rate (speed) for the
NEC V850, port 0."
}
cdl_option CYGNUM_IO_SERIAL_V85X_V850_SERIAL0_BUFSIZE {
display "Buffer size for the NEC V850 serial port 0 driver"
flavor data
legal_values 0 to 8192
default_value 128
description "
This option specifies the size of the internal buffers used
for the NEC V850, port 0."
}
}
 
cdl_component CYGPKG_IO_SERIAL_V85X_V850_TESTING {
display "Testing parameters"
flavor bool
calculated 1
active_if CYGPKG_IO_SERIAL_V85X_V850_SERIAL0
 
cdl_option CYGPRI_SER_TEST_SER_DEV {
display "Serial device used for testing"
flavor data
default_value { CYGDAT_IO_SERIAL_V85X_V850_SERIAL0_NAME }
}
 
define_proc {
puts $::cdl_header "#define CYGPRI_SER_TEST_CRASH_ID \"v85x/v850\""
puts $::cdl_header "#define CYGPRI_SER_TEST_TTY_DEV \"/dev/tty0\""
}
}
 
}
/v850/v2_0/src/v85x_v850_serial.h
0,0 → 1,165
#ifndef CYGONCE_V85X_V850_SERIAL_H
#define CYGONCE_V85X_V850_SERIAL_H
 
// ====================================================================
//
// v850_ceb_serial.h
//
// Device I/O - Description of NEC V850 serial hardware
//
// ====================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos 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 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
// ====================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): gthomas
// Contributors: gthomas,jlarmour
// Date: 2001-03-21
// Purpose: Internal interfaces for serial I/O drivers
// Description:
//
//####DESCRIPTIONEND####
//
// ====================================================================
 
// Description of serial ports on NEC V850/SA1 & SB1
 
#include <pkgconf/system.h>
#include CYGBLD_HAL_TARGET_H
 
#include <cyg/hal/v850_common.h>
 
struct serial_port {
unsigned char asim; // Serial interface mode
unsigned char _filler0;
unsigned char asis; // Serial interface status
unsigned char _filler1;
unsigned char brgc; // Baud rate control
unsigned char _filler2;
unsigned char txs; // Transmit shift register
unsigned char _filler3;
unsigned char rxs; // Receive shift register
unsigned char _filler4[5];
unsigned char brgm; // Baud rate mode
unsigned char _filler5;
#if CYGINT_HAL_V850_VARIANT_SB1
unsigned char _filler6[0x10];
unsigned char brgm1; // Baud rate overflow
#endif
};
 
// Relative interrupt numbers
#define INT_ERR 0 // Receive error condition
#define INT_Rx 1 // Receive data
#define INT_Tx 2 // Transmit data
 
// Serial interface mode
#define ASIM_TxRx_MASK (3<<6) // Receive & Transmit enables
#define ASIM_TxRx_Rx (1<<6) // Receive enable
#define ASIM_TxRx_Tx (2<<6) // Transmit enable
#define ASIM_Parity_MASK (3<<4) // Parity mode bits
#define ASIM_Parity_none (0<<4) // No parity
#define ASIM_Parity_space (1<<4) // Send zero bit, ignore errors
#define ASIM_Parity_odd (2<<4) // Odd parity
#define ASIM_Parity_even (3<<4) // Even parity
#define ASIM_Length_MASK (1<<3) // Character length select
#define ASIM_Length_7 (0<<3) // 7 bit chars
#define ASIM_Length_8 (1<<3) // 8 bit chars
#define ASIM_Stop_MASK (1<<2) // Stop bit select
#define ASIM_Stop_1 (0<<2) // 1 stop bit
#define ASIM_Stop_2 (1<<2) // 2 stop bits
#define ASIM_Error_MASK (1<<1) // Receive error select
#define ASIM_Error_enable (0<<1) // Issue interrupt on receive error
#define ASIM_Error_disable (1<<1) // No interrupts on receive error
 
// Serial interface status (errors only)
#define ASIS_OVE (1<<0) // Overrun error
#define ASIS_FE (1<<1) // Framing error
#define ASIS_PE (1<<2) // Parity error
 
static unsigned char select_word_length[] = {
0xFF, // 5 bits / word (char)
0xFF,
ASIM_Length_7,
ASIM_Length_8
};
 
static unsigned char select_stop_bits[] = {
0,
ASIM_Stop_1, // 1 stop bit
0xFF, // 1.5 stop bit
ASIM_Stop_2 // 2 stop bits
};
 
static unsigned char select_parity[] = {
ASIM_Parity_none, // No parity
ASIM_Parity_even, // Even parity
ASIM_Parity_odd, // Odd parity
0xFF, // Mark parity
ASIM_Parity_space, // Space parity
};
 
static struct v850_baud {
unsigned int count;
unsigned int divisor;
} select_baud[] = {
// Baud rate values, using defined system clock
#define BAUDCOUNT(X) ((CYGHWR_HAL_V85X_CPU_FREQ/2)/(X))
{0, 0}, // Unused
{0, 0}, // 50
{0, 0}, // 75
{0, 0}, // 110
{0, 0}, // 134.5
{0, 0}, // 150
{0, 0}, // 200
{0, 0}, // 300
{0, 0}, // 600
{BAUDCOUNT(1200), 1}, // 1200
{0, 0}, // 1800
{BAUDCOUNT(2400), 1}, // 2400
{0, 0}, // 3600
{BAUDCOUNT(4800), 1}, // 4800
{0, 0}, // 7200
{BAUDCOUNT(9600), 1}, // 9600
{0, 0}, // 14400
{BAUDCOUNT(19200), 1}, // 19200
{BAUDCOUNT(38400), 1}, // 38400
{0, 0}, // 57600
{0, 0}, // 115200
{0, 0}, // 230400
};
 
#endif // CYGONCE_V85X_V850_SERIAL_H
 
// EOF v85x_v850_serial.h
/v850/v2_0/src/v85x_v850_serial.c
0,0 → 1,360
//==========================================================================
//
// io/serial/v85x/v85x_v850_serial.c
//
// NEC V850 Serial I/O Interface Module (interrupt driven)
//
//==========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos 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 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//==========================================================================
//#####DESCRIPTIONBEGIN####
//
// Author(s): gthomas
// Contributors: gthomas,jlarmour
// Date: 2001-03-21
// Purpose: V850 Serial I/O module (interrupt driven version)
// Description:
//
//####DESCRIPTIONEND####
//
//==========================================================================
 
#include <pkgconf/system.h>
#include <pkgconf/io_serial.h>
#include <pkgconf/io.h>
#ifdef CYGPKG_KERNEL
#include <pkgconf/kernel.h>
#endif
#include CYGBLD_HAL_TARGET_H
 
#include <cyg/io/io.h>
#include <cyg/hal/hal_intr.h>
#include <cyg/io/devtab.h>
#include <cyg/io/serial.h>
#include <cyg/infra/diag.h>
 
#ifdef CYGVAR_KERNEL_COUNTERS_CLOCK
#include <cyg/kernel/kapi.h>
#endif
 
#ifdef CYGPKG_IO_SERIAL_V85X_V850
 
#include "v85x_v850_serial.h"
 
typedef struct v850_serial_info {
CYG_ADDRWORD base;
CYG_WORD int_num;
cyg_interrupt serial_interrupt[3];
cyg_handle_t serial_interrupt_handle[3];
cyg_bool tx_busy;
#ifdef CYGVAR_KERNEL_COUNTERS_CLOCK
cyg_alarm tx_timeout;
cyg_handle_t tx_timeout_handle;
#endif
} v850_serial_info;
 
static bool v850_serial_init(struct cyg_devtab_entry *tab);
static bool v850_serial_putc(serial_channel *chan, unsigned char c);
static Cyg_ErrNo v850_serial_lookup(struct cyg_devtab_entry **tab,
struct cyg_devtab_entry *sub_tab,
const char *name);
static unsigned char v850_serial_getc(serial_channel *chan);
static Cyg_ErrNo v850_serial_set_config(serial_channel *chan, cyg_uint32 key,
const void *xbuf, cyg_uint32 *len);
static void v850_serial_start_xmit(serial_channel *chan);
static void v850_serial_stop_xmit(serial_channel *chan);
 
static cyg_uint32 v850_serial_ISR(cyg_vector_t vector, cyg_addrword_t data);
static void v850_serial_DSR(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data);
 
static SERIAL_FUNS(v850_serial_funs,
v850_serial_putc,
v850_serial_getc,
v850_serial_set_config,
v850_serial_start_xmit,
v850_serial_stop_xmit
);
 
#ifdef CYGPKG_IO_SERIAL_V85X_V850_SERIAL0
static v850_serial_info v850_serial_info0 = {V850_REG_ASIM0,
CYGNUM_HAL_VECTOR_INTSER0};
#if CYGNUM_IO_SERIAL_V85X_V850_SERIAL0_BUFSIZE > 0
static unsigned char v850_serial_out_buf0[CYGNUM_IO_SERIAL_V85X_V850_SERIAL0_BUFSIZE];
static unsigned char v850_serial_in_buf0[CYGNUM_IO_SERIAL_V85X_V850_SERIAL0_BUFSIZE];
 
static SERIAL_CHANNEL_USING_INTERRUPTS(v850_serial_channel0,
v850_serial_funs,
v850_serial_info0,
CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_V85X_V850_SERIAL0_BAUD),
CYG_SERIAL_STOP_DEFAULT,
CYG_SERIAL_PARITY_DEFAULT,
CYG_SERIAL_WORD_LENGTH_DEFAULT,
CYG_SERIAL_FLAGS_DEFAULT,
&v850_serial_out_buf0[0], sizeof(v850_serial_out_buf0),
&v850_serial_in_buf0[0], sizeof(v850_serial_in_buf0)
);
#else
static SERIAL_CHANNEL(v850_serial_channel0,
v850_serial_funs,
v850_serial_info0,
CYG_SERIAL_BAUD_RATE(CYGNUM_IO_SERIAL_V85X_V850_SERIAL0_BAUD),
CYG_SERIAL_STOP_DEFAULT,
CYG_SERIAL_PARITY_DEFAULT,
CYG_SERIAL_WORD_LENGTH_DEFAULT,
CYG_SERIAL_FLAGS_DEFAULT
);
#endif
 
DEVTAB_ENTRY(v850_serial_io0,
CYGDAT_IO_SERIAL_V85X_V850_SERIAL0_NAME,
0, // Does not depend on a lower level interface
&cyg_io_serial_devio,
v850_serial_init,
v850_serial_lookup, // Serial driver may need initializing
&v850_serial_channel0
);
#endif // CYGPKG_IO_SERIAL_V85X_V850_SERIAL0
 
// Internal function to actually configure the hardware to desired baud rate, etc.
static bool
v850_serial_config_port(serial_channel *chan, cyg_serial_info_t *new_config, bool init)
{
v850_serial_info *v850_chan = (v850_serial_info *)chan->dev_priv;
volatile struct serial_port *port = (volatile struct serial_port *)v850_chan->base;
unsigned char parity = select_parity[new_config->parity];
unsigned char word_length = select_word_length[new_config->word_length-CYGNUM_SERIAL_WORD_LENGTH_5];
unsigned char stop_bits = select_stop_bits[new_config->stop];
int divisor, count;
 
if ((select_baud[new_config->baud].count == 0) ||
(word_length == 0xFF) ||
(parity == 0xFF) ||
(stop_bits == 0xFF)) {
return false; // Unsupported configuration
}
port->asim = ASIM_TxRx_Tx | ASIM_TxRx_Rx | parity | word_length | stop_bits;
count = select_baud[new_config->baud].count;
divisor = select_baud[new_config->baud].divisor;
 
while (count > 0xFF) {
count >>= 1;
divisor++;
}
 
port->brgc = count;
port->brgm = divisor & 0x07;
#if CYGINT_HAL_V850_VARIANT_SB1
port->brgm1 = divisor >> 3;
#endif
 
if (new_config != &chan->config) {
chan->config = *new_config;
}
return true;
}
 
#ifdef CYGVAR_KERNEL_COUNTERS_CLOCK
//
// The serial ports on the V850 are incredibly stupid. There is no
// interface status register which can tell you if it is possible to
// read or write a character! The only way to discern this is by using
// interrupts [or at least an interrupt register and polling it]. Thus
// the serial transmit code has a problem in that it will be required by
// upper layers to "send until full". The only way to decide "not full" is
// that an interrupt has happened. If the serial driver is being mixed
// with diagnostic I/O, then serial transmit interrupts will possibly be
// lost.
//
// This code attempts to compenstate by using a kernel alarm to reset the
// "device is busy" flag after some timeout. The timeout period will be
// sufficiently long so as to not interfere with normal interrupt handling.
//
static void
v850_serial_tx_timeout(cyg_handle_t alarm, cyg_addrword_t p)
{
v850_serial_info *v850_chan = (v850_serial_info *)p;
v850_chan->tx_busy = false;
}
#endif
 
// Function to initialize the device. Called at bootstrap time.
static bool
v850_serial_init(struct cyg_devtab_entry *tab)
{
int i;
serial_channel *chan = (serial_channel *)tab->priv;
v850_serial_info *v850_chan = (v850_serial_info *)chan->dev_priv;
#ifdef CYGVAR_KERNEL_COUNTERS_CLOCK
cyg_handle_t h;
#endif
#ifdef CYGDBG_IO_INIT
diag_printf("V850 SERIAL init - dev: %x.%d\n", v850_chan->base, v850_chan->int_num);
#endif
(chan->callbacks->serial_init)(chan); // Really only required for interrupt driven devices
if (chan->out_cbuf.len != 0) {
for (i = 0; i < 3; i++) {
cyg_drv_interrupt_create(v850_chan->int_num+i,
99, // Priority - unused
(cyg_addrword_t)chan, // Data item passed to interrupt handler
v850_serial_ISR,
v850_serial_DSR,
&v850_chan->serial_interrupt_handle[i],
&v850_chan->serial_interrupt[i]);
cyg_drv_interrupt_attach(v850_chan->serial_interrupt_handle[i]);
cyg_drv_interrupt_unmask(v850_chan->int_num+i);
#ifdef CYGVAR_KERNEL_COUNTERS_CLOCK
cyg_clock_to_counter(cyg_real_time_clock(), &h);
cyg_alarm_create(h, v850_serial_tx_timeout, (cyg_addrword_t)v850_chan,
&v850_chan->tx_timeout_handle, &v850_chan->tx_timeout);
#endif
}
}
v850_chan->tx_busy = false;
return v850_serial_config_port(chan, &chan->config, true);
}
 
// This routine is called when the device is "looked" up (i.e. attached)
static Cyg_ErrNo
v850_serial_lookup(struct cyg_devtab_entry **tab,
struct cyg_devtab_entry *sub_tab,
const char *name)
{
serial_channel *chan = (serial_channel *)(*tab)->priv;
(chan->callbacks->serial_init)(chan); // Really only required for interrupt driven devices
return ENOERR;
}
 
// Send a character to the device output buffer.
// Return 'true' if character is sent to device
static bool
v850_serial_putc(serial_channel *chan, unsigned char c)
{
v850_serial_info *v850_chan = (v850_serial_info *)chan->dev_priv;
volatile struct serial_port *port = (volatile struct serial_port *)v850_chan->base;
if (!v850_chan->tx_busy) {
v850_chan->tx_busy = true;
port->txs = c;
#ifdef CYGVAR_KERNEL_COUNTERS_CLOCK
cyg_alarm_initialize(v850_chan->tx_timeout_handle, cyg_current_time()+10, 0);
#endif
return true;
} else {
return false; // Couldn't send, tx was busy
}
}
 
// Fetch a character from the device input buffer, waiting if necessary
static unsigned char
v850_serial_getc(serial_channel *chan)
{
v850_serial_info *v850_chan = (v850_serial_info *)chan->dev_priv;
volatile struct serial_port *port = (volatile struct serial_port *)v850_chan->base;
return port->rxs;
}
 
// Set up the device characteristics; baud rate, etc.
static Cyg_ErrNo
v850_serial_set_config(serial_channel *chan, cyg_uint32 key,
const void *xbuf, cyg_uint32 *len)
{
switch (key) {
case CYG_IO_SET_CONFIG_SERIAL_INFO:
{
cyg_serial_info_t *config = (cyg_serial_info_t *)xbuf;
if ( *len < sizeof(cyg_serial_info_t) ) {
return -EINVAL;
}
*len = sizeof(cyg_serial_info_t);
if ( true != v850_serial_config_port(chan, config, false) )
return -EINVAL;
}
break;
default:
return -EINVAL;
}
return ENOERR;
}
 
// Enable the transmitter on the device
static void
v850_serial_start_xmit(serial_channel *chan)
{
v850_serial_info *v850_chan = (v850_serial_info *)chan->dev_priv;
(chan->callbacks->xmt_char)(chan); // Kick transmitter (if necessary)
cyg_drv_interrupt_unmask(v850_chan->int_num+INT_Tx); // Enable Tx interrupt
}
 
// Disable the transmitter on the device
static void
v850_serial_stop_xmit(serial_channel *chan)
{
v850_serial_info *v850_chan = (v850_serial_info *)chan->dev_priv;
cyg_drv_interrupt_mask(v850_chan->int_num+INT_Tx); // Disable Tx interrupt
}
 
// Serial I/O - low level interrupt handler (ISR)
static cyg_uint32
v850_serial_ISR(cyg_vector_t vector, cyg_addrword_t data)
{
cyg_drv_interrupt_mask(vector);
cyg_drv_interrupt_acknowledge(vector);
return CYG_ISR_CALL_DSR; // Cause DSR to be run
}
 
// Serial I/O - high level interrupt handler (DSR)
static void
v850_serial_DSR(cyg_vector_t vector, cyg_ucount32 count, cyg_addrword_t data)
{
serial_channel *chan = (serial_channel *)data;
v850_serial_info *v850_chan = (v850_serial_info *)chan->dev_priv;
volatile struct serial_port *port = (volatile struct serial_port *)v850_chan->base;
switch (vector-(v850_chan->int_num)) {
case INT_ERR:
case INT_Rx:
(chan->callbacks->rcv_char)(chan, port->rxs);
break;
case INT_Tx:
v850_chan->tx_busy = false;
#ifdef CYGVAR_KERNEL_COUNTERS_CLOCK
cyg_alarm_initialize(v850_chan->tx_timeout_handle, 0, 0);
#endif
(chan->callbacks->xmt_char)(chan);
break;
}
cyg_drv_interrupt_unmask(vector);
}
#endif
 
// EOF v85x_v850_serial.c
/v850/v2_0/ChangeLog
0,0 → 1,94
2003-02-24 Jonathan Larmour <jifl@eCosCentric.com>
 
* cdl/ser_v85x_v850.cdl: Remove irrelevant doc link.
 
2001-03-21 Jonathan Larmour <jlarmour@redhat.com>
 
* cdl/ser_v85x_v850.cdl: Default driver on if CYGPKG_IO_SERIAL_DEVICES
enabled - like other drivers.
Descriptions should not be specific to SA1.
 
* src/v85x_v850_serial.h: Generate baud table dependent on CPU
frequency always.
* src/v85x_v850_serial.c (v850_serial_config_port): Normalize
baud settings from above table before setting.
(v850_serial_putc): Silence warning.
 
2000-10-12 Jesper Skov <jskov@redhat.com>
 
* cdl/ser_v85x_v850.cdl: Moved testing parameters here.
 
2000-10-09 Gary Thomas <gthomas@redhat.com>
 
* src/v85x_v850_serial.c (v850_serial_config_port): Fix baud clock
setup.
 
2000-10-04 Gary Thomas <gthomas@redhat.com>
 
* src/v85x_v850_serial.c (v850_serial_tx_timeout): Correct arguments.
 
2000-09-06 Gary Thomas <gthomas@redhat.com>
 
* src/v85x_v850_serial.h:
* src/v85x_v850_serial.c: Better handling of V850 variants (SA1,SB1)
 
2000-08-31 Gary Thomas <gthomas@redhat.com>
 
* src/v85x_v850_serial.c (v850_serial_config_port): Better handling
of cpu xtal frequency for baud rate calculations.
 
2000-08-01 Jonathan Larmour <jlarmour@redhat.co.uk>
 
* src/v85x_v850_serial.c (v850_serial_set_config): Now use keys to make
more flexible.
 
2000-07-19 Gary Thomas <gthomas@redhat.com>
 
* src/v85x_v850_serial.h: Base baud rate calculations on CPU frequency.
 
2000-06-22 Hugo Tyson <hmt@cygnus.co.uk>
 
* cdl/<yournamehere>.cdl: Remove the comment on the empty
include_files directive; the tools now support this correctly.
This keeps internal include files internal.
 
2000-05-28 Gary Thomas <gthomas@redhat.com>
 
* src/v85x_v850_serial.h:
* src/v85x_v850_serial.c:
* cdl/ser_v85x_v850.cdl: New file(s).
 
//===========================================================================
//####ECOSGPLCOPYRIGHTBEGIN####
// -------------------------------------------
// This file is part of eCos, the Embedded Configurable Operating System.
// Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc.
//
// eCos 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 or (at your option) any later version.
//
// eCos is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
// for more details.
//
// You should have received a copy of the GNU General Public License along
// with eCos; if not, write to the Free Software Foundation, Inc.,
// 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
//
// As a special exception, if other files instantiate templates or use macros
// or inline functions from this file, or you compile this file and link it
// with other works to produce a work based on this file, this file does not
// by itself cause the resulting work to be covered by the GNU General Public
// License. However the source code for this file must still be made available
// in accordance with section (3) of the GNU General Public License.
//
// This exception does not invalidate any other reasons why a work based on
// this file might be covered by the GNU General Public License.
//
// Alternative licenses for eCos may be arranged by contacting Red Hat, Inc.
// at http://sources.redhat.com/ecos/ecos-license/
// -------------------------------------------
//####ECOSGPLCOPYRIGHTEND####
//===========================================================================

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.