mirror of
https://github.com/arduino/Arduino.git
synced 2024-11-30 11:24:12 +01:00
b26db209cd
Before, HardwareSerial1+.cpp were a copy of HardwareSerial1.cpp with all 0's replaced by the corresponding number. This would mean that e.g. the Serial1 object would use the UBRRL register instead of UBRR1L when it was defined, or the USART_RX_vect instead of USART1_RX_vect. In practice, this would neve actually cause problems, since: - No avr chip currently has both the non-numbered registers as well as numbered registers. - HardwareSerial.h would only define HAVE_HWSERIALx when the corresponding numbered register is defined (except for HAVE_HWSERIAL0, which is also defined when the unnumbered registers are present). Furthermore, before both the UARTx_xx_vect and USART_x_xx_vect was used. Looking at the include files, only UART1_xx_vect is actually used (by iom161.h), the others use USARTx_xx_vect. For this reason, HardwareSerial1.cpp keeps the preprocessor conditional to select either UART or USART and the other files use USART unconditionally. While we're here, also fix the compiler error message when no valid ISR name was found (it previously said "for the first UART" in all cases).
80 lines
2.5 KiB
C++
80 lines
2.5 KiB
C++
/*
|
|
HardwareSerial0.cpp - Hardware serial library for Wiring
|
|
Copyright (c) 2006 Nicholas Zambetti. All right reserved.
|
|
|
|
This library is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU Lesser General Public
|
|
License as published by the Free Software Foundation; either
|
|
version 2.1 of the License, or (at your option) any later version.
|
|
|
|
This library 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
|
|
Lesser General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Lesser General Public
|
|
License along with this library; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
|
|
|
Modified 23 November 2006 by David A. Mellis
|
|
Modified 28 September 2010 by Mark Sproul
|
|
Modified 14 August 2012 by Alarus
|
|
Modified 3 December 2013 by Matthijs Kooijman
|
|
*/
|
|
|
|
#include "Arduino.h"
|
|
#include "HardwareSerial.h"
|
|
#include "HardwareSerial_private.h"
|
|
|
|
// Each HardwareSerial is defined in its own file, sine the linker pulls
|
|
// in the entire file when any element inside is used. --gc-sections can
|
|
// additionally cause unused symbols to be dropped, but ISRs have the
|
|
// "used" attribute so are never dropped and they keep the
|
|
// HardwareSerial instance in as well. Putting each instance in its own
|
|
// file prevents the linker from pulling in any unused instances in the
|
|
// first place.
|
|
|
|
#if defined(HAVE_HWSERIAL0)
|
|
|
|
#if defined(USART_RX_vect)
|
|
ISR(USART_RX_vect)
|
|
#elif defined(USART0_RX_vect)
|
|
ISR(USART0_RX_vect)
|
|
#elif defined(USART_RXC_vect)
|
|
ISR(USART_RXC_vect) // ATmega8
|
|
#else
|
|
#error "Don't know what the Data Received vector is called for Serial"
|
|
#endif
|
|
{
|
|
Serial._rx_complete_irq();
|
|
}
|
|
|
|
#if defined(UART0_UDRE_vect)
|
|
ISR(UART0_UDRE_vect)
|
|
#elif defined(UART_UDRE_vect)
|
|
ISR(UART_UDRE_vect)
|
|
#elif defined(USART0_UDRE_vect)
|
|
ISR(USART0_UDRE_vect)
|
|
#elif defined(USART_UDRE_vect)
|
|
ISR(USART_UDRE_vect)
|
|
#else
|
|
#error "Don't know what the Data Register Empty vector is called for Serial"
|
|
#endif
|
|
{
|
|
Serial._tx_udr_empty_irq();
|
|
}
|
|
|
|
#if defined(UBRRH) && defined(UBRRL)
|
|
HardwareSerial Serial(&UBRRH, &UBRRL, &UCSRA, &UCSRB, &UCSRC, &UDR);
|
|
#else
|
|
HardwareSerial Serial(&UBRR0H, &UBRR0L, &UCSR0A, &UCSR0B, &UCSR0C, &UDR0);
|
|
#endif
|
|
|
|
// Function that can be weakly referenced by serialEventRun to prevent
|
|
// pulling in this file if it's not otherwise used.
|
|
bool Serial0_available() {
|
|
return Serial.available();
|
|
}
|
|
|
|
#endif // HAVE_HWSERIAL0
|