📄 console.c
字号:
/* Copyright (C) 1994 Free Software Foundation, Inc. Contributed by Joel Sherrill (jsherril@redstone-emh2.army.mil), On-Line Applications Research Corporation. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/ormodify it under the terms of the GNU Library General Public License aspublished by the Free Software Foundation; either version 2 of theLicense, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNULibrary General Public License for more details. You should have received a copy of the GNU Library General PublicLicense along with the GNU C Library; see the file COPYING.LIB. Ifnot, write to the Free Software Foundation, Inc., 675 Mass Ave,Cambridge, MA 02139, USA. */#include <ansidecl.h>#include <standalone.h>#include "__m68020.h"/* Console IO routines for a Motorola MVME135/MVME136 board. They currently use the B port. It should be possible touse the A port by filling in the reset of the chip structure,adding an ifdef for PORTA/PORTB, and switching the addresses,and maybe the macroes based on the macro. *//* M68681 DUART chip register structures and constants */typedef struct { volatile unsigned char fill1[ 5 ]; /* channel A regs ( not used ) */ volatile unsigned char isr; /* interrupt status reg */ volatile unsigned char fill2[ 2 ]; /* counter regs (not used) */ volatile unsigned char mr1mr2b; /* MR1B and MR2B regs */ volatile unsigned char srb; /* status reg channel B */ volatile unsigned char fill3; /* do not access */ volatile unsigned char rbb; /* receive buffer channel B */ volatile unsigned char ivr; /* interrupt vector register */} r_m681_info;typedef struct { volatile unsigned char fill1[ 4 ]; /* channel A regs (not used) */ volatile unsigned char acr; /* auxillary control reg */ volatile unsigned char imr; /* interrupt mask reg */ volatile unsigned char fill2[ 2 ]; /* counter regs (not used) */ volatile unsigned char mr1mr2b; /* MR1B and MR2B regs */ volatile unsigned char csrb; /* clock select reg */ volatile unsigned char crb; /* command reg */ volatile unsigned char tbb; /* transmit buffer channel B */ volatile unsigned char ivr; /* interrupt vector register */} w_m681_info;#define RD_M68681 ((r_m681_info *)0xfffb0040) /* ptr to the M68681 */#define WR_M68681 ((w_m681_info *)0xfffb0040) /* ptr to the M68681 */#define RXRDYB 0x01 /* status reg recv ready mask */#define TXRDYB 0x04 /* status reg trans ready mask *//* _Console_PutcThis routine transmits a character out the M68681. It supportsXON/XOFF flow control. */#define XON 0x11 /* control-Q */#define XOFF 0x13 /* control-S */intDEFUN( _Console_Putc, (ch), char ch ){ while ( ! (RD_M68681->srb & TXRDYB) ) ; while ( RD_M68681->srb & RXRDYB ) /* must be an XOFF */ if ( RD_M68681->rbb == XOFF ) do { while ( ! (RD_M68681->srb & RXRDYB) ) ; } while ( RD_M68681->rbb != XON ); WR_M68681->tbb = ch; return( 0 );}/* _Console_GetcThis routine reads a character from the UART and returns it. */intDEFUN( _Console_Getc, (poll), int poll ){ if ( poll ) { if ( !(RD_M68681->srb & RXRDYB) ) return -1; else return RD_M68681->rbb; } else { while ( !(RD_M68681->srb & RXRDYB) ); return RD_M68681->rbb; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -