/* * File : serial.c * This file is part of RT-Thread RTOS * COPYRIGHT (C) 2006, RT-Thread Development Team * * The license and distribution terms for this file may be * found in the file LICENSE in this distribution or at * http://openlab.rt-thread.com/license/LICENSE * * Change Logs: * Date Author Notes * 2006-09-15 QiuYi the first version * 2006-10-10 Bernard use keyboard instead of serial */ #include #include #include extern char rt_keyboard_getc(void); /** * @addtogroup QEMU */ /*@{*/ /** * This function initializes serial */ void rt_serial_init(void) { outb(COM1+3,0x80); /* set DLAB of line control reg */ outb(COM1,0x0c); /* LS of divisor (48 -> 2400 bps */ outb(COM1+1,0x00); /* MS of divisor */ outb(COM1+3,0x03); /* reset DLAB */ outb(COM1+4,0x0b); /* set DTR,RTS, OUT_2 */ outb(COM1+1,0x0d); /* enable all intrs but writes */ inb(COM1); /* read data port to reset things (?) */ } /** * This function read a character from serial without interrupt enable mode * * @return the read char */ char rt_serial_getc(void) { return rt_keyboard_getc(); #if 0 while(!(inb(COM1+COMSTATUS) & COMDATA)); return inb(COM1+COMREAD); #endif } /** * This function will write a character to serial without interrupt enable mode * * @param c the char to write */ void rt_serial_putc(const char c) { int val; while(1) { if ((val = inb(COM1+COMSTATUS)) & THRE) break; } outb(COM1+COMWRITE, c&0xff); } /*@}*/