voidHardwareSerial::begin(unsignedlongbaud,byteconfig){// Try u2x mode first
uint16_tbaud_setting=(F_CPU/4/baud-1)/2;*_ucsra=1<<U2X0;// hardcoded exception for 57600 for compatibility with the bootloader
// shipped with the Duemilanove and previous boards and the firmware
// on the 8U2 on the Uno and Mega 2560. Also, The baud_setting cannot
// be > 4095, so switch back to non-u2x mode if the baud rate is too
// low.
if(((F_CPU==16000000UL)&&(baud==57600))||(baud_setting>4095)){*_ucsra=0;baud_setting=(F_CPU/8/baud-1)/2;}// assign the baud_setting, a.k.a. ubrr (USART Baud Rate Register)
*_ubrrh=baud_setting>>8;*_ubrrl=baud_setting;_written=false;//set the data bits, parity, and stop bits
*_ucsrc=config;sbi(*_ucsrb,RXEN0);sbi(*_ucsrb,TXEN0);sbi(*_ucsrb,RXCIE0);cbi(*_ucsrb,UDRIE0);}
// hardcoded exception for 57600 for compatibility with the bootloader
// shipped with the Duemilanove and previous boards and the firmware
// on the 8U2 on the Uno and Mega 2560. Also, The baud_setting cannot
// be > 4095, so switch back to non-u2x mode if the baud rate is too
// low.
if(((F_CPU==16000000UL)&&(baud==57600))||(baud_setting>4095)){*_ucsra=0;baud_setting=(F_CPU/8/baud-1)/2;}
/*
Copyright (c) 2016 garretlab.
Added source code explanation by garretlab.
*//*
HardwareSerial.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
*/