parent
acd2fe37c8
commit
717b5aad25
@ -0,0 +1,66 @@ |
||||
#
|
||||
# (C) Copyright 2000
|
||||
# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
|
||||
#
|
||||
# See file CREDITS for list of people who contributed to this
|
||||
# project.
|
||||
#
|
||||
# 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 program 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 this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
|
||||
# MA 02111-1307 USA
|
||||
#
|
||||
|
||||
LOAD_ADDR = 0x40000
|
||||
|
||||
include $(TOPDIR)/config.mk |
||||
|
||||
SREC = hello_world.srec
|
||||
|
||||
# The following example is pretty 8xx specific...
|
||||
ifeq ($(CPU),mpc8xx) |
||||
SREC += timer.srec
|
||||
endif |
||||
|
||||
# Utility for resetting i82559 EEPROM
|
||||
ifeq ($(BOARD),oxc) |
||||
SREC += eepro100_eeprom.srec
|
||||
endif |
||||
|
||||
OBJS = $(SREC:.srec=.o)
|
||||
|
||||
LIB = libsyscall.a
|
||||
LIBAOBJS= syscall.o
|
||||
LIBCOBJS=
|
||||
LIBOBJS = $(LIBAOBJS) $(LIBCOBJS)
|
||||
|
||||
CPPFLAGS += -I..
|
||||
|
||||
all: .depend $(LIB) $(SREC) |
||||
|
||||
#########################################################################
|
||||
$(LIB): .depend $(LIBOBJS) |
||||
$(AR) crv $@ $(LIBOBJS)
|
||||
|
||||
%.srec: %.o $(LIB) |
||||
$(LD) -g -Ttext $(LOAD_ADDR) -o $(<:.o=) -e $(<:.o=) $< $(LIB)
|
||||
$(OBJCOPY) -O srec $(<:.o=) $@
|
||||
|
||||
#########################################################################
|
||||
|
||||
.depend: Makefile $(OBJS:.o=.c) $(LIBCOBJS:.o=.c) $(LIBAOBJS:.o=.S) |
||||
$(CC) -M $(CFLAGS) $(OBJS:.o=.c) $(LIBCOBJS:.o=.c) $(LIBAOBJS:.o=.S) > $@
|
||||
|
||||
sinclude .depend |
||||
|
||||
#########################################################################
|
@ -0,0 +1,112 @@ |
||||
/*
|
||||
* NS16550 Serial Port |
||||
* originally from linux source (arch/ppc/boot/ns16550.h) |
||||
* modified slightly to |
||||
* have addresses as offsets from CFG_ISA_BASE |
||||
* added a few more definitions |
||||
* added prototypes for ns16550.c |
||||
* reduced no of com ports to 2 |
||||
* modifications (c) Rob Taylor, Flying Pig Systems. 2000. |
||||
*/ |
||||
|
||||
#if (CFG_NS16550_REG_SIZE == 1) |
||||
struct NS16550 { |
||||
unsigned char rbr; /* 0 */ |
||||
unsigned char ier; /* 1 */ |
||||
unsigned char fcr; /* 2 */ |
||||
unsigned char lcr; /* 3 */ |
||||
unsigned char mcr; /* 4 */ |
||||
unsigned char lsr; /* 5 */ |
||||
unsigned char msr; /* 6 */ |
||||
unsigned char scr; /* 7 */ |
||||
} __attribute__ ((packed)); |
||||
#elif (CFG_NS16550_REG_SIZE == 2) |
||||
struct NS16550 { |
||||
unsigned short rbr; /* 0 */ |
||||
unsigned short ier; /* 1 */ |
||||
unsigned short fcr; /* 2 */ |
||||
unsigned short lcr; /* 3 */ |
||||
unsigned short mcr; /* 4 */ |
||||
unsigned short lsr; /* 5 */ |
||||
unsigned short msr; /* 6 */ |
||||
unsigned short scr; /* 7 */ |
||||
} __attribute__ ((packed)); |
||||
#elif (CFG_NS16550_REG_SIZE == 4) |
||||
struct NS16550 { |
||||
unsigned long rbr; /* 0 */ |
||||
unsigned long ier; /* 1 */ |
||||
unsigned long fcr; /* 2 */ |
||||
unsigned long lcr; /* 3 */ |
||||
unsigned long mcr; /* 4 */ |
||||
unsigned long lsr; /* 5 */ |
||||
unsigned long msr; /* 6 */ |
||||
unsigned long scr; /* 7 */ |
||||
} __attribute__ ((packed)); |
||||
#elif (CFG_NS16550_REG_SIZE == -4) |
||||
struct NS16550 { |
||||
unsigned char rbr; /* 0 */ |
||||
int pad1:24; |
||||
unsigned char ier; /* 1 */ |
||||
int pad2:24; |
||||
unsigned char fcr; /* 2 */ |
||||
int pad3:24; |
||||
unsigned char lcr; /* 3 */ |
||||
int pad4:24; |
||||
unsigned char mcr; /* 4 */ |
||||
int pad5:24; |
||||
unsigned char lsr; /* 5 */ |
||||
int pad6:24; |
||||
unsigned char msr; /* 6 */ |
||||
int pad7:24; |
||||
unsigned char scr; /* 7 */ |
||||
int pad8:24; |
||||
} __attribute__ ((packed)); |
||||
#else |
||||
#error "Please define NS16550 registers size." |
||||
#endif |
||||
|
||||
#define thr rbr |
||||
#define iir fcr |
||||
#define dll rbr |
||||
#define dlm ier |
||||
|
||||
typedef volatile struct NS16550 *NS16550_t; |
||||
|
||||
#define FCR_FIFO_EN 0x01 /* Fifo enable */ |
||||
#define FCR_RXSR 0x02 /* Receiver soft reset */ |
||||
#define FCR_TXSR 0x04 /* Transmitter soft reset */ |
||||
|
||||
#define MCR_DTR 0x01 |
||||
#define MCR_RTS 0x02 |
||||
#define MCR_DMA_EN 0x04 |
||||
#define MCR_TX_DFR 0x08 |
||||
|
||||
#define LCR_WLS_MSK 0x03 /* character length slect mask */ |
||||
#define LCR_WLS_5 0x00 /* 5 bit character length */ |
||||
#define LCR_WLS_6 0x01 /* 6 bit character length */ |
||||
#define LCR_WLS_7 0x02 /* 7 bit character length */ |
||||
#define LCR_WLS_8 0x03 /* 8 bit character length */ |
||||
#define LCR_STB 0x04 /* Number of stop Bits, off = 1, on = 1.5 or 2) */ |
||||
#define LCR_PEN 0x08 /* Parity eneble */ |
||||
#define LCR_EPS 0x10 /* Even Parity Select */ |
||||
#define LCR_STKP 0x20 /* Stick Parity */ |
||||
#define LCR_SBRK 0x40 /* Set Break */ |
||||
#define LCR_BKSE 0x80 /* Bank select enable */ |
||||
|
||||
#define LSR_DR 0x01 /* Data ready */ |
||||
#define LSR_OE 0x02 /* Overrun */ |
||||
#define LSR_PE 0x04 /* Parity error */ |
||||
#define LSR_FE 0x08 /* Framing error */ |
||||
#define LSR_BI 0x10 /* Break */ |
||||
#define LSR_THRE 0x20 /* Xmit holding register empty */ |
||||
#define LSR_TEMT 0x40 /* Xmitter empty */ |
||||
#define LSR_ERR 0x80 /* Error */ |
||||
|
||||
/* useful defaults for LCR */ |
||||
#define LCR_8N1 0x03 |
||||
|
||||
void NS16550_init (NS16550_t com_port, int baud_divisor); |
||||
void NS16550_putc (NS16550_t com_port, char c); |
||||
char NS16550_getc (NS16550_t com_port); |
||||
int NS16550_tstc (NS16550_t com_port); |
||||
void NS16550_reinit (NS16550_t com_port, int baud_divisor); |
Loading…
Reference in new issue