* tools/build/.cvsignore, tools/build/ChangeLog,

tools/build/Makefile.am, tools/build/README, tools/build/binpatch.c,
	tools/build/cklength.c, tools/build/config.h.in,
	tools/build/configure.ac, tools/build/cvsignore-add.sh,
	tools/build/doxy-filter, tools/build/eolstrip.c,
	tools/build/install-if-change.in, tools/build/multigen,
	tools/build/packhex.c, tools/build/rtems-bin2c.c,
	tools/build/search-id.sh, tools/build/unhex.c, tools/cpu/.cvsignore,
	tools/cpu/ChangeLog, tools/cpu/Makefile.am, tools/cpu/configure.ac,
	tools/cpu/generic/.cvsignore, tools/cpu/generic/ChangeLog,
	tools/cpu/generic/Makefile.am, tools/cpu/generic/configure.ac,
	tools/cpu/generic/size_rtems.in, tools/cpu/nios2/.cvsignore,
	tools/cpu/nios2/ChangeLog, tools/cpu/nios2/Makefile.am,
	tools/cpu/nios2/README, tools/cpu/nios2/bridges.c,
	tools/cpu/nios2/bridges.h, tools/cpu/nios2/clocks.c,
	tools/cpu/nios2/clocks.h, tools/cpu/nios2/configure.ac,
	tools/cpu/nios2/devices.c, tools/cpu/nios2/devices.h,
	tools/cpu/nios2/linkcmds.c, tools/cpu/nios2/linkcmds.h,
	tools/cpu/nios2/memory.c, tools/cpu/nios2/memory.h,
	tools/cpu/nios2/nios2gen.c, tools/cpu/nios2/output.c,
	tools/cpu/nios2/output.h, tools/cpu/nios2/ptf.c,
	tools/cpu/nios2/ptf.h, tools/cpu/nios2/sample.ptf,
	tools/cpu/sh/.cvsignore, tools/cpu/sh/AUTHORS, tools/cpu/sh/COPYING,
	tools/cpu/sh/ChangeLog, tools/cpu/sh/Makefile.am, tools/cpu/sh/TODO,
	tools/cpu/sh/configure.ac, tools/cpu/sh/sci.c, tools/cpu/sh/sci.h,
	tools/cpu/sh/shgen.c: New files.
This commit is contained in:
Joel Sherrill
2011-05-17 20:39:40 +00:00
parent d305d75c7e
commit d751cecbb1
58 changed files with 7659 additions and 0 deletions
+14
View File
@@ -0,0 +1,14 @@
aclocal.m4
autom4te*.cache
config.cache
config.guess
config.log
config.status
config.sub
configure
depcomp
install-sh
Makefile
Makefile.in
missing
mkinstalldirs
+3
View File
@@ -0,0 +1,3 @@
Ralf Corsepius (corsepiu@faw.uni-ulm.de)
* Initial implementation
* generator for sci bitrate table
File diff suppressed because it is too large Load Diff
+86
View File
@@ -0,0 +1,86 @@
2011-02-02 Ralf Corsépius <ralf.corsepius@rtems.org>
* configure.ac: Require autoconf-2.68, automake-1.11.1.
2006-12-02 Ralf Corsépius <ralf.corsepius@rtems.org>
* configure.ac: New BUG-REPORT address.
2006-10-17 Ralf Corsépius <ralf.corsepius@rtems.org>
* configure.ac: Require autoconf-2.60. Require automake-1.10.
2006-01-31 Ralf Corsepius <ralf.corsepius@rtems.org>
* shgen.c: include <stdlib.h>.
2004-09-24 Ralf Corsepius <ralf_corsepius@rtems.org>
* configure.ac: Require automake > 1.9.
2004-01-06 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* Makefile.am: Let shgen.1 depend on shgen$(EXEEXT).
2003-12-12 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* configure.ac: Require automake >= 1.8, autoconf >= 2.59.
2003-08-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* configure.ac: Use rtems-bugs@rtems.com as bug report email address.
2003-03-06 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* configure.ac: Remove AC_CONFIG_AUX_DIR.
2003-02-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* configure.ac: AM_INIT_AUTOMAKE([1.7.2]).
2003-02-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* configure.ac: AC_PREREQ(2.57).
2002-10-21 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* .cvsignore: Reformat.
Add autom4te*cache.
Remove autom4te.cache.
2002-04-01 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* configure.ac: Remove AC_EXEEXT (obsolete).
2002-03-27 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* configure.ac:
AC_INIT(package,_RTEMS_VERSION,_RTEMS_BUGS).
AM_INIT_AUTOMAKE([no-define foreign 1.6]).
* Makefile.am: Remove AUTOMAKE_OPTIONS.
2001-10-11 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* .cvsignore: Add autom4te.cache for autoconf > 2.52.
* configure.in: Remove.
* configure.ac: New file, generated from configure.in by autoupdate.
2000-11-13 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* shgen.c: Set default Phi to 20MHz (BUG-FIX).
2000l-11-09 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* Makefile.am: Use ... instead of RTEMS_TOPdir in ACLOCAL_AMFLAGS.
2000-11-02 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* Makefile.am: Switch to ACLOCAL_AMFLAGS = -I $(RTEMS_TOPdir)/aclocal.
2000-10-30 Ralf Corsepius <corsepiu@faw.uni-ulm.de>
* Makefile.am: Switch to GNU-canonicalized autoconf macros.
2000-08-10 Joel Sherrill <joel@OARcorp.com>
* ChangeLog: New file.
+18
View File
@@ -0,0 +1,18 @@
##
## $Id$
##
ACLOCAL_AMFLAGS = -I ../../../aclocal
noinst_PROGRAMS = shgen
shgen_SOURCES = sci.h sci.c shgen.c
if HELP2MAN
man_MANS = shgen.1
shgen.1: shgen$(EXEEXT)
$(HELP2MAN) -N ./shgen >$@
endif
include $(top_srcdir)/../../../automake/host.am
+13
View File
@@ -0,0 +1,13 @@
* Add support for more drivers to shgen !!!!
* shgen relies on having a gnu-compatible getopt, which should be
available on all hosts using gcc/egcs/binutils.
Using other getopt-variants may produce faulty results or shgen may also
refuse to compile. Probably the easiest solution to this problem would be
to integrate libiberty into rtems.
* shgen uses floating point mathematics. Therefore Makefile.in contains a
reference to libm. In case the host doesn't have its floating point
support in libm, shgen will fail to compile. If we should ever meet such
a host, checks for floating point libraries have to be added to rtems'
autoconf support.
+25
View File
@@ -0,0 +1,25 @@
## Process this file with autoconf to produce a configure script.
##
## $Id$
AC_PREREQ([2.68])
AC_INIT([rtems-tools-cpu-sh],[_RTEMS_VERSION],[http://www.rtems.org/bugzilla])
AC_CONFIG_SRCDIR([shgen.c])
RTEMS_TOP(../../..)
RTEMS_CANONICAL_TARGET_CPU
AM_INIT_AUTOMAKE([foreign 1.11.1])
AM_MAINTAINER_MODE
AC_PROG_CC
AC_CHECK_LIB(m,fabs)
AC_CHECK_FUNCS(getopt_long)
AC_CHECK_PROGS(HELP2MAN,help2man)
AM_CONDITIONAL(HELP2MAN,test -n "$HELP2MAN" )
RTEMS_TOOLPATHS
# Explicitly list all Makefiles here
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
+165
View File
@@ -0,0 +1,165 @@
/*
* Copyright (c) 1998 Ralf Corsepius (corsepiu@faw.uni-ulm.de)
*
* See the file COPYING for copyright notice.
*/
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include "sci.h"
/*
n .. baudrate generator source 0,1,2,3
N .. BRR setting (0..255)
Phi .. processor baud rate
B .. bitrate
*/
typedef struct sci_tab {
unsigned int B ;
unsigned int n ;
int N ;
double err ;
} sci_tab_t ;
static unsigned int bitrate [] = {
50,
75,
110,
134,
150,
200,
300,
600,
1200,
1800,
2400,
4800,
9600,
19200,
38400,
57600,
115200,
230400,
460800
};
static sci_tab_t test_array[4] ;
static void Compute(
unsigned int n,
unsigned int B,
double Phi,
struct sci_tab *entry )
{
int a = ( 32 << ( 2 * n ) ) * B ;
entry->n = n ;
entry->B = B ;
entry->N = rint( ( Phi / a ) - 1.0 ) ;
if ( ( entry->N > 0 ) && ( entry->N < 256 ) )
entry->err =
( ( Phi / ( (entry->N + 1) * a ) - 1.0 ) * 100.0 );
else
{
entry->err = 100.0 ;
entry->n = 255 ;
entry->N = 0 ;
}
}
static sci_tab_t *SelectN(
unsigned int B,
double Phi )
{
unsigned int i ;
struct sci_tab* best = NULL ;
for ( i = 0 ; i < 4 ; i++ )
{
double err ;
Compute( i, B, Phi, &test_array[i] );
err = fabs( test_array[i].err );
if ( best )
{
if ( err < fabs( best->err ) )
best = &test_array[i] ;
}
else
best = &test_array[i] ;
}
return best ;
}
int shgen_gensci(
FILE *file,
double Phi ) /* Processor frequency [Hz] */
{
unsigned int i ;
fprintf( file,
"/*\n * Bitrate table for the serial devices (sci) of the SH at %.3f MHz\n"
" */\n\n", Phi / 1000000.0 );
fprintf( file,
"/*\n"
" * n .. SMR bits 0,1 : baud rate generator clock source\n"
" * N .. BRR bits 0..7: setting for baud rate generator\n"
" * error .. percentual error to nominal bitrate\n"
" * Hitachi's HW manual recommends bitrates with an error less than 1%%\n"
" * We experienced values less than 2%% to be stable\n"
" */\n\n" );
fprintf( file, "#include <termios.h>\n\n" );
fprintf( file,
"static struct sci_bitrate_t {\n"
" unsigned char n ;\n"
" unsigned char N ;\n"
"} _sci_bitrates[] = {\n"
"/* n N error */\n" );
for ( i = 0 ; i < sizeof(bitrate)/sizeof(int) ; i++ )
{
struct sci_tab* best = SelectN( bitrate[i], Phi );
if ( i > 0 )
fprintf( file, ",\n" );
fprintf( file, " { %1d, %3d } /* %+7.2f%% ; B%d ",
best->n,
best->N,
best->err,
best->B );
if ( best->n > 3 )
fprintf( file, "(unusable) " );
fprintf( file, "*/" );
}
fprintf( file, "\n};\n\n" );
fprintf( file,
"int _sci_get_brparms( \n"
" tcflag_t cflag,\n"
" unsigned char *smr,\n"
" unsigned char *brr )\n"
"{\n"
" unsigned int offset ;\n\n"
" offset = ( cflag & ( CBAUD & ~CBAUDEX ) )\n"
" + ( ( cflag & CBAUDEX ) ? B38400 : 0 );\n"
" if ( offset == 0 ) return -1 ;\n"
" offset-- ;\n\n"
" if ( _sci_bitrates[offset].n > 3 ) return -1;\n\n"
" *smr &= ~0x03;\n"
" *smr |= _sci_bitrates[offset].n;\n"
" *brr = _sci_bitrates[offset].N;\n\n"
" return 0;\n"
"}\n" );
return 0 ;
}
+11
View File
@@ -0,0 +1,11 @@
#ifndef _shgen_sci_h
#define _shgen_sci_h
#include <stdio.h>
extern int shgen_gensci(
FILE *file,
double Phi /* Processor frequency [Hz] */
);
#endif
+114
View File
@@ -0,0 +1,114 @@
/*
* Copyright (c) 1998,1999,2000, 2006 Ralf Corsepius, Ulm Germany.
*
* See the file COPYING for copyright notice.
*/
#include <stdio.h>
#include <string.h> /* strcmp, strerror */
#include <stdlib.h> /* exit */
#include <errno.h>
#include <getopt.h>
#include "sci.h"
static void usage( FILE* ofile, char *prog )
{
fprintf( ofile, "Usage: %s [options] driver\n", prog );
fprintf( ofile, "\nOptions:\n" );
fprintf( ofile, "Processor frequency (default 20MHz):\n") ;
fprintf( ofile, "\t-M Phi .. processor frequency [MHz]\n" );
fprintf( ofile, "\t-K Phi .. processor frequency [KHz]\n" );
fprintf( ofile, "\t-H Phi .. processor frequency [Hz]\n" );
fprintf( ofile, "Driver:\n" );
fprintf( ofile, "\tsci .. bitrate table for sci\n" );
fprintf( ofile, "\nWritten by Ralf Corsepius <corsepiu@faw.uni-ulm.de>\n" );
fprintf( ofile, "\nCopyright (c) 1998,1999,2000\tRalf Corsepius\n" );
}
#if HAVE_GETOPT_LONG
#define NOARG 0
#define HASARG 1
#define OPTARG 2
static struct option long_options[] =
{
{ "version", NOARG, NULL, 'v' },
{ "help", NOARG, NULL, 'h' },
{ "mega-hertz", HASARG, NULL, 'M' },
{ "kilo-hertz", HASARG, NULL, 'K' },
{ "hertz", HASARG, NULL, 'H' },
{ 0, 0, 0, 0 }
};
#endif
static void shgen_header( FILE *file )
{
fprintf( file,
"/*\n * DO NOT EDIT - this file is automatically generated by shgen %s\n",
VERSION );
fprintf( file,
" * Copyright (c) 1998,1999,2000 Ralf Corsepius (corsepiu@faw.uni-ulm.de)\n */\n" );
fprintf( file,
"\n/* This file is not copyrighted */\n\n" );
}
int main( int argc, char *argv[] )
{
double Phi = 20000000.0 ;
#if HAVE_GETOPT_LONG
int option_index = 0 ;
while( ( optopt = getopt_long( argc, argv, "M:K:H:hv",
long_options, &option_index ) ) > 0 )
#else
while ( ( optopt = getopt( argc, argv, "M:K:H:hv" ) ) > 0 )
#endif
{
switch ( optopt )
{
case 'M' :
sscanf( optarg, "%lf", &Phi );
Phi = Phi * 1000000.0;
break ;
case 'K' :
sscanf( optarg, "%lf", &Phi );
Phi = Phi * 1000.0;
break ;
case 'H' :
sscanf( optarg, "%lf", &Phi );
break ;
case 'h' :
usage( stdout, argv[0] );
exit(0);
case 'v' :
fprintf( stdout, "%s version %s\n", argv[0], VERSION );
exit(0);
default :
usage( stderr, argv[0] );
exit(1);
break ;
}
}
if ( argc - optind != 1 )
{
fprintf( stderr, "%s: Missing argument: driver\n", argv[0] );
exit(1);
}
shgen_header( stdout );
if ( strcmp( argv[optind], "sci" ) == 0 )
{
shgen_gensci( stdout, Phi );
}
else
{
fprintf( stderr, "%s: Invalid argument: driver\n", argv[0] );
exit(1);
}
return 0 ;
}