00001 /*! \file uartsw2.h \brief Software Interrupt-driven UART Driver. */ 00002 //***************************************************************************** 00003 // 00004 // File Name : 'uartsw2.h' 00005 // Title : Software Interrupt-driven UART Driver 00006 // Author : Pascal Stang - Copyright (C) 2002-2003 00007 // Created : 7/20/2002 00008 // Revised : 4/27/2004 00009 // Version : 0.6 00010 // Target MCU : Atmel AVR Series (intended for the ATmega16 and ATmega32) 00011 // Editor Tabs : 4 00012 // 00013 /// \ingroup driver_sw 00014 /// \defgroup uartsw2 Software Interrupt-driven UART Driver (uartsw2.c) 00015 /// \code #include "uartsw2.h" \endcode 00016 /// \par Overview 00017 /// This uart library emulates the operation of a UART (serial port) using 00018 /// the AVR's hardware timers, I/O pins, and some software. 00019 /// 00020 /// Specifically, this code uses: 00021 /// -Timer 2 Output Capture for transmit timing 00022 /// -Timer 0 Output Capture for receive timing 00023 /// -External Interrupt 2 for receive triggering 00024 /// 00025 /// The above resources cannot be used for other purposes while this software 00026 /// UART is enabled. The overflow interrupts from Timer0 and Timer2 can still 00027 /// be used for other timing, but the prescalers for these timers must not be 00028 /// changed. 00029 /// 00030 /// Serial output from this UART can be routed to any I/O pin. Serial input 00031 /// for this UART must come from the External Interrupt 2 (INT2) I/O pin. 00032 /// These options should be configured by editing your local copy of 00033 /// "uartsw2conf.h". 00034 // 00035 // This code is distributed under the GNU Public License 00036 // which can be found at http://www.gnu.org/licenses/gpl.txt 00037 // 00038 //***************************************************************************** 00039 00040 #ifndef UARTSW2_H 00041 #define UARTSW2_H 00042 00043 #include "global.h" 00044 #include "buffer.h" 00045 00046 // include configuration 00047 #include "uartsw2conf.h" 00048 00049 // constants/macros/typdefs 00050 00051 // functions 00052 00053 //! enable and initialize the software uart 00054 void uartswInit(void); 00055 //! create and initialize the uart buffers 00056 void uartswInitBuffers(void); 00057 //! turns off software UART 00058 void uartswOff(void); 00059 //! returns the receive buffer structure 00060 cBuffer* uartswGetRxBuffer(void); 00061 //! sets the uart baud rate 00062 void uartswSetBaudRate(u32 baudrate); 00063 //! sends a single byte over the uart 00064 void uartswSendByte(u08 data); 00065 00066 //! gets a single byte from the uart receive buffer 00067 // Function returns TRUE if data was available, FALSE if not. 00068 // Actual data is returned in variable pointed to by "data". 00069 // example usage: 00070 // char myReceivedByte; 00071 // uartswReceiveByte( &myReceivedByte ); 00072 u08 uartswReceiveByte(u08* rxData); 00073 00074 //! internal transmit bit handler 00075 void uartswTxBitService(void); 00076 //! internal receive bit handler 00077 void uartswRxBitService(void); 00078 00079 #endif