\hypertarget{group__avr__boot}{}\doxysubsection{$<$avr/boot.h$>$\+: Bootloader Support Utilities}
\label{group__avr__boot}\index{$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}}
\doxysubsubsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \mbox{\hyperlink{group__avr__boot_ga8a60eb0985d40ff71c42bb18f0f5789e}{B\+O\+O\+T\+L\+O\+A\+D\+E\+R\+\_\+\+S\+E\+C\+T\+I\+ON}}~\mbox{\hyperlink{group__avr__watchdog_gadaa6dd28b5d08df35e49b1248d7e5fb0}{\+\_\+\+\_\+attribute\+\_\+\+\_\+}} ((section (\char`\"{}.bootloader\char`\"{})))
\item 
\#define \mbox{\hyperlink{group__avr__boot_ga072040fce54f112355cb9ebf9ce41dd7}{boot\+\_\+spm\+\_\+interrupt\+\_\+enable}}()~(\+\_\+\+\_\+\+S\+P\+M\+\_\+\+R\+EG $\vert$= (\mbox{\hyperlink{group__avr__stdint_gaba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}})\mbox{\hyperlink{group__avr__sfr_ga11643f271076024c395a93800b3d9546}{\+\_\+\+BV}}(S\+P\+M\+IE))
\item 
\#define \mbox{\hyperlink{group__avr__boot_gaf1e01d09c839793a6c0c990b1c5ae8b3}{boot\+\_\+spm\+\_\+interrupt\+\_\+disable}}()~(\+\_\+\+\_\+\+S\+P\+M\+\_\+\+R\+EG \&= (\mbox{\hyperlink{group__avr__stdint_gaba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}})$\sim$\mbox{\hyperlink{group__avr__sfr_ga11643f271076024c395a93800b3d9546}{\+\_\+\+BV}}(S\+P\+M\+IE))
\item 
\#define \mbox{\hyperlink{group__avr__boot_gacd6843d51a4fa7d68f3c4bc5aa393a3e}{boot\+\_\+is\+\_\+spm\+\_\+interrupt}}()~(\+\_\+\+\_\+\+S\+P\+M\+\_\+\+R\+EG \& (\mbox{\hyperlink{group__avr__stdint_gaba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}})\mbox{\hyperlink{group__avr__sfr_ga11643f271076024c395a93800b3d9546}{\+\_\+\+BV}}(S\+P\+M\+IE))
\item 
\#define \mbox{\hyperlink{group__avr__boot_gaaba5a29359af671a37bccaa6a77bca7c}{boot\+\_\+rww\+\_\+busy}}()~(\+\_\+\+\_\+\+S\+P\+M\+\_\+\+R\+EG \& (\mbox{\hyperlink{group__avr__stdint_gaba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}})\mbox{\hyperlink{group__avr__sfr_ga11643f271076024c395a93800b3d9546}{\+\_\+\+BV}}(\+\_\+\+\_\+\+C\+O\+M\+M\+O\+N\+\_\+\+A\+SB))
\item 
\#define \mbox{\hyperlink{group__avr__boot_gae50dc01180110f30093a92fe64fe1565}{boot\+\_\+spm\+\_\+busy}}()~(\+\_\+\+\_\+\+S\+P\+M\+\_\+\+R\+EG \& (\mbox{\hyperlink{group__avr__stdint_gaba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}})\mbox{\hyperlink{group__avr__sfr_ga11643f271076024c395a93800b3d9546}{\+\_\+\+BV}}(\+\_\+\+\_\+\+S\+P\+M\+\_\+\+E\+N\+A\+B\+LE))
\item 
\#define \mbox{\hyperlink{group__avr__boot_ga24900c15109e8b419736d4b81b093fb8}{boot\+\_\+spm\+\_\+busy\+\_\+wait}}()~do\{\}while(\mbox{\hyperlink{group__avr__boot_gae50dc01180110f30093a92fe64fe1565}{boot\+\_\+spm\+\_\+busy}}())
\item 
\#define \mbox{\hyperlink{group__avr__boot_gac68c37ecf2354ba2af6e08379d65899f}{G\+E\+T\+\_\+\+L\+O\+W\+\_\+\+F\+U\+S\+E\+\_\+\+B\+I\+TS}}~(0x0000)
\item 
\#define \mbox{\hyperlink{group__avr__boot_gae12d288a22cfbfa9d0cde12b1a779bfe}{G\+E\+T\+\_\+\+L\+O\+C\+K\+\_\+\+B\+I\+TS}}~(0x0001)
\item 
\#define \mbox{\hyperlink{group__avr__boot_gaf08aabaebbd69da659357f402d4d28ce}{G\+E\+T\+\_\+\+E\+X\+T\+E\+N\+D\+E\+D\+\_\+\+F\+U\+S\+E\+\_\+\+B\+I\+TS}}~(0x0002)
\item 
\#define \mbox{\hyperlink{group__avr__boot_ga44e70c9662e7ac06484144c15bc69aea}{G\+E\+T\+\_\+\+H\+I\+G\+H\+\_\+\+F\+U\+S\+E\+\_\+\+B\+I\+TS}}~(0x0003)
\item 
\#define \mbox{\hyperlink{group__avr__boot_gad2cbdea59ffec2e77ee2e63106459797}{boot\+\_\+lock\+\_\+fuse\+\_\+bits\+\_\+get}}(address)
\item 
\#define \mbox{\hyperlink{group__avr__boot_gaf375d2543ba38dc56697b4f4bc37a717}{boot\+\_\+signature\+\_\+byte\+\_\+get}}(addr)
\item 
\#define \mbox{\hyperlink{group__avr__boot_ga61add108c778273ff68233d044c3acca}{boot\+\_\+page\+\_\+fill}}(address,  data)~\+\_\+\+\_\+boot\+\_\+page\+\_\+fill\+\_\+normal(address, data)
\item 
\#define \mbox{\hyperlink{group__avr__boot_ga7249d12e06789cd306583abf7def8176}{boot\+\_\+page\+\_\+erase}}(address)~\+\_\+\+\_\+boot\+\_\+page\+\_\+erase\+\_\+normal(address)
\item 
\#define \mbox{\hyperlink{group__avr__boot_ga013d6d8c679ebdbc0e5fac179c38c9aa}{boot\+\_\+page\+\_\+write}}(address)~\+\_\+\+\_\+boot\+\_\+page\+\_\+write\+\_\+normal(address)
\item 
\#define \mbox{\hyperlink{group__avr__boot_ga8d2baaca2991318e0b06fdf9a5264923}{boot\+\_\+rww\+\_\+enable}}()~\+\_\+\+\_\+boot\+\_\+rww\+\_\+enable()
\item 
\#define \mbox{\hyperlink{group__avr__boot_gadaa352690ac1c82c535da9d8faf77590}{boot\+\_\+lock\+\_\+bits\+\_\+set}}(lock\+\_\+bits)~\+\_\+\+\_\+boot\+\_\+lock\+\_\+bits\+\_\+set(lock\+\_\+bits)
\item 
\#define \mbox{\hyperlink{group__avr__boot_ga3f549e2ef9ca0f119a7070064c4dc372}{boot\+\_\+page\+\_\+fill\+\_\+safe}}(address,  data)
\item 
\#define \mbox{\hyperlink{group__avr__boot_ga5c345350a2fb349619b859dcf0dc0466}{boot\+\_\+page\+\_\+erase\+\_\+safe}}(address)
\item 
\#define \mbox{\hyperlink{group__avr__boot_ga107ad4c789e5c498062947d394ed98d5}{boot\+\_\+page\+\_\+write\+\_\+safe}}(address)
\item 
\#define \mbox{\hyperlink{group__avr__boot_gaeb0dba1dd9d338516a94c0bd8a8db78a}{boot\+\_\+rww\+\_\+enable\+\_\+safe}}()
\item 
\#define \mbox{\hyperlink{group__avr__boot_gac80bd4f863ff7645204adb0eda3556ea}{boot\+\_\+lock\+\_\+bits\+\_\+set\+\_\+safe}}(lock\+\_\+bits)
\end{DoxyCompactItemize}


\doxysubsubsection{Detailed Description}

\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{preprocessor}{\#include <\mbox{\hyperlink{io_8h}{avr/io.h}}>}}
\DoxyCodeLine{\textcolor{preprocessor}{\#include <\mbox{\hyperlink{boot_8h}{avr/boot.h}}>}}
\end{DoxyCode}


The macros in this module provide a C language interface to the bootloader support functionality of certain A\+VR processors. These macros are designed to work with all sizes of flash memory.

Global interrupts are not automatically disabled for these macros. It is left up to the programmer to do this. See the code example below. Also see the processor datasheet for caveats on having global interrupts enabled during writing of the Flash.

\begin{DoxyNote}{Note}
Not all A\+VR processors provide bootloader support. See your processor datasheet to see if it provides bootloader support.
\end{DoxyNote}
\begin{DoxyRefDesc}{Todo}
\item[\mbox{\hyperlink{todo__todo000001}{Todo}}]From email with Marek\+: On smaller devices (all except A\+Tmega64/128), \+\_\+\+\_\+\+S\+P\+M\+\_\+\+R\+EG is in the I/O space, accessible with the shorter \char`\"{}in\char`\"{} and \char`\"{}out\char`\"{} instructions -\/ since the boot loader has a limited size, this could be an important optimization.\end{DoxyRefDesc}


\begin{DoxyParagraph}{A\+PI Usage Example}
The following code shows typical usage of the boot A\+PI.
\end{DoxyParagraph}

\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{preprocessor}{\#include <\mbox{\hyperlink{inttypes_8h}{inttypes.h}}>}}
\DoxyCodeLine{\textcolor{preprocessor}{\#include <\mbox{\hyperlink{interrupt_8h}{avr/interrupt.h}}>}}
\DoxyCodeLine{\textcolor{preprocessor}{\#include <\mbox{\hyperlink{pgmspace_8h}{avr/pgmspace.h}}>}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keywordtype}{void} boot\_program\_page (\mbox{\hyperlink{group__avr__stdint_ga33594304e786b158f3fb30289278f5af}{uint32\_t}} page, \mbox{\hyperlink{group__avr__stdint_gaba7bc1797add20fe3efdf37ced1182c5}{uint8\_t}} *buf)}
\DoxyCodeLine{\{}
\DoxyCodeLine{    \mbox{\hyperlink{group__avr__stdint_ga1f1825b69244eb3ad2c7165ddc99c956}{uint16\_t}} i;}
\DoxyCodeLine{    \mbox{\hyperlink{group__avr__stdint_gaba7bc1797add20fe3efdf37ced1182c5}{uint8\_t}} sreg;}
\DoxyCodeLine{}
\DoxyCodeLine{    \textcolor{comment}{// Disable interrupts.}}
\DoxyCodeLine{}
\DoxyCodeLine{    sreg = SREG;}
\DoxyCodeLine{    \mbox{\hyperlink{group__avr__interrupts_ga68c330e94fe121eba993e5a5973c3162}{cli}}();}
\DoxyCodeLine{}
\DoxyCodeLine{    \mbox{\hyperlink{group__avr__eeprom_ga44c64ebb425fcb34b8d4dc19c4079869}{eeprom\_busy\_wait}} ();}
\DoxyCodeLine{}
\DoxyCodeLine{    \mbox{\hyperlink{group__avr__boot_ga7249d12e06789cd306583abf7def8176}{boot\_page\_erase}} (page);}
\DoxyCodeLine{    \mbox{\hyperlink{group__avr__boot_ga24900c15109e8b419736d4b81b093fb8}{boot\_spm\_busy\_wait}} ();      \textcolor{comment}{// Wait until the memory is erased.}}
\DoxyCodeLine{}
\DoxyCodeLine{    \textcolor{keywordflow}{for} (i=0; i<SPM\_PAGESIZE; i+=2)}
\DoxyCodeLine{    \{}
\DoxyCodeLine{        \textcolor{comment}{// Set up little-\/endian word.}}
\DoxyCodeLine{}
\DoxyCodeLine{        \mbox{\hyperlink{group__avr__stdint_ga1f1825b69244eb3ad2c7165ddc99c956}{uint16\_t}} w = *buf++;}
\DoxyCodeLine{        w += (*buf++) << 8;}
\DoxyCodeLine{    }
\DoxyCodeLine{        \mbox{\hyperlink{group__avr__boot_ga61add108c778273ff68233d044c3acca}{boot\_page\_fill}} (page + i, w);}
\DoxyCodeLine{    \}}
\DoxyCodeLine{}
\DoxyCodeLine{    \mbox{\hyperlink{group__avr__boot_ga013d6d8c679ebdbc0e5fac179c38c9aa}{boot\_page\_write}} (page);     \textcolor{comment}{// Store buffer in flash page.}}
\DoxyCodeLine{    \mbox{\hyperlink{group__avr__boot_ga24900c15109e8b419736d4b81b093fb8}{boot\_spm\_busy\_wait}}();       \textcolor{comment}{// Wait until the memory is written.}}
\DoxyCodeLine{}
\DoxyCodeLine{    \textcolor{comment}{// Reenable RWW-\/section again. We need this if we want to jump back}}
\DoxyCodeLine{    \textcolor{comment}{// to the application after bootloading.}}
\DoxyCodeLine{}
\DoxyCodeLine{    \mbox{\hyperlink{group__avr__boot_ga8d2baaca2991318e0b06fdf9a5264923}{boot\_rww\_enable}} ();}
\DoxyCodeLine{}
\DoxyCodeLine{    \textcolor{comment}{// Re-\/enable interrupts (if they were ever enabled).}}
\DoxyCodeLine{}
\DoxyCodeLine{    SREG = sreg;}
\DoxyCodeLine{\}}
\end{DoxyCode}
 

\doxysubsubsection{Macro Definition Documentation}
\mbox{\Hypertarget{group__avr__boot_gacd6843d51a4fa7d68f3c4bc5aa393a3e}\label{group__avr__boot_gacd6843d51a4fa7d68f3c4bc5aa393a3e}} 
\index{$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}!boot\_is\_spm\_interrupt@{boot\_is\_spm\_interrupt}}
\index{boot\_is\_spm\_interrupt@{boot\_is\_spm\_interrupt}!$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}}
\doxyparagraph{\texorpdfstring{boot\_is\_spm\_interrupt}{boot\_is\_spm\_interrupt}}
{\footnotesize\ttfamily \#define boot\+\_\+is\+\_\+spm\+\_\+interrupt(\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})~(\+\_\+\+\_\+\+S\+P\+M\+\_\+\+R\+EG \& (\mbox{\hyperlink{group__avr__stdint_gaba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}})\mbox{\hyperlink{group__avr__sfr_ga11643f271076024c395a93800b3d9546}{\+\_\+\+BV}}(S\+P\+M\+IE))}

Check if the S\+PM interrupt is enabled. \mbox{\Hypertarget{group__avr__boot_gadaa352690ac1c82c535da9d8faf77590}\label{group__avr__boot_gadaa352690ac1c82c535da9d8faf77590}} 
\index{$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}!boot\_lock\_bits\_set@{boot\_lock\_bits\_set}}
\index{boot\_lock\_bits\_set@{boot\_lock\_bits\_set}!$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}}
\doxyparagraph{\texorpdfstring{boot\_lock\_bits\_set}{boot\_lock\_bits\_set}}
{\footnotesize\ttfamily \#define boot\+\_\+lock\+\_\+bits\+\_\+set(\begin{DoxyParamCaption}\item[{}]{lock\+\_\+bits }\end{DoxyParamCaption})~\+\_\+\+\_\+boot\+\_\+lock\+\_\+bits\+\_\+set(lock\+\_\+bits)}

Set the bootloader lock bits.


\begin{DoxyParams}{Parameters}
{\em lock\+\_\+bits} & A mask of which Boot Loader Lock Bits to set.\\
\hline
\end{DoxyParams}
\begin{DoxyNote}{Note}
In this context, a \textquotesingle{}set bit\textquotesingle{} will be written to a zero value. Note also that only B\+L\+Bxx bits can be programmed by this command.
\end{DoxyNote}
For example, to disallow the S\+PM instruction from writing to the Boot Loader memory section of flash, you would use this macro as such\+:


\begin{DoxyCode}{0}
\DoxyCodeLine{\mbox{\hyperlink{group__avr__boot_gadaa352690ac1c82c535da9d8faf77590}{boot\_lock\_bits\_set}} (\mbox{\hyperlink{group__avr__sfr_ga11643f271076024c395a93800b3d9546}{\_BV}} (BLB11));}
\end{DoxyCode}


\begin{DoxyNote}{Note}
Like any lock bits, the Boot Loader Lock Bits, once set, cannot be cleared again except by a chip erase which will in turn also erase the boot loader itself. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__boot_gac80bd4f863ff7645204adb0eda3556ea}\label{group__avr__boot_gac80bd4f863ff7645204adb0eda3556ea}} 
\index{$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}!boot\_lock\_bits\_set\_safe@{boot\_lock\_bits\_set\_safe}}
\index{boot\_lock\_bits\_set\_safe@{boot\_lock\_bits\_set\_safe}!$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}}
\doxyparagraph{\texorpdfstring{boot\_lock\_bits\_set\_safe}{boot\_lock\_bits\_set\_safe}}
{\footnotesize\ttfamily \#define boot\+\_\+lock\+\_\+bits\+\_\+set\+\_\+safe(\begin{DoxyParamCaption}\item[{}]{lock\+\_\+bits }\end{DoxyParamCaption})}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{keywordflow}{do} \{ \(\backslash\)}
\DoxyCodeLine{    boot\_spm\_busy\_wait();                       \(\backslash\)}
\DoxyCodeLine{    eeprom\_busy\_wait();                         \(\backslash\)}
\DoxyCodeLine{    boot\_lock\_bits\_set (lock\_bits);             \(\backslash\)}
\DoxyCodeLine{\} \textcolor{keywordflow}{while} (0)}

\end{DoxyCode}
Same as \mbox{\hyperlink{group__avr__boot_gadaa352690ac1c82c535da9d8faf77590}{boot\+\_\+lock\+\_\+bits\+\_\+set()}} except waits for eeprom and spm operations to complete before setting the lock bits. \mbox{\Hypertarget{group__avr__boot_gad2cbdea59ffec2e77ee2e63106459797}\label{group__avr__boot_gad2cbdea59ffec2e77ee2e63106459797}} 
\index{$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}!boot\_lock\_fuse\_bits\_get@{boot\_lock\_fuse\_bits\_get}}
\index{boot\_lock\_fuse\_bits\_get@{boot\_lock\_fuse\_bits\_get}!$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}}
\doxyparagraph{\texorpdfstring{boot\_lock\_fuse\_bits\_get}{boot\_lock\_fuse\_bits\_get}}
{\footnotesize\ttfamily \#define boot\+\_\+lock\+\_\+fuse\+\_\+bits\+\_\+get(\begin{DoxyParamCaption}\item[{}]{address }\end{DoxyParamCaption})}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{(\_\_extension\_\_(\{                                           \(\backslash\)}
\DoxyCodeLine{    uint8\_t \_\_result;                                      \(\backslash\)}
\DoxyCodeLine{    \_\_asm\_\_ \_\_volatile\_\_                                   \(\backslash\)}
\DoxyCodeLine{    (                                                      \(\backslash\)}
\DoxyCodeLine{        \textcolor{stringliteral}{"sts \%1, \%2\(\backslash\)n\(\backslash\)t"}                                   \(\backslash\)}
\DoxyCodeLine{        \textcolor{stringliteral}{"lpm \%0, Z\(\backslash\)n\(\backslash\)t"}                                    \(\backslash\)}
\DoxyCodeLine{        : \textcolor{stringliteral}{"=r"} (\_\_result)                                  \(\backslash\)}
\DoxyCodeLine{        : \textcolor{stringliteral}{"i"} (\_SFR\_MEM\_ADDR(\_\_SPM\_REG)),                  \(\backslash\)}
\DoxyCodeLine{          \textcolor{stringliteral}{"r"} ((\mbox{\hyperlink{group__avr__stdint_gaba7bc1797add20fe3efdf37ced1182c5}{uint8\_t}})(\_\_BOOT\_LOCK\_BITS\_SET)),           \(\backslash\)}
\DoxyCodeLine{          \textcolor{stringliteral}{"z"} ((\mbox{\hyperlink{group__avr__stdint_ga1f1825b69244eb3ad2c7165ddc99c956}{uint16\_t}})(address))                        \(\backslash\)}
\DoxyCodeLine{    );                                                     \(\backslash\)}
\DoxyCodeLine{    \_\_result;                                              \(\backslash\)}
\DoxyCodeLine{\}))}

\end{DoxyCode}
Read the lock or fuse bits at {\ttfamily address}.

Parameter {\ttfamily address} can be any of G\+E\+T\+\_\+\+L\+O\+W\+\_\+\+F\+U\+S\+E\+\_\+\+B\+I\+TS, G\+E\+T\+\_\+\+L\+O\+C\+K\+\_\+\+B\+I\+TS, G\+E\+T\+\_\+\+E\+X\+T\+E\+N\+D\+E\+D\+\_\+\+F\+U\+S\+E\+\_\+\+B\+I\+TS, or G\+E\+T\+\_\+\+H\+I\+G\+H\+\_\+\+F\+U\+S\+E\+\_\+\+B\+I\+TS.

\begin{DoxyNote}{Note}
The lock and fuse bits returned are the physical values, i.\+e. a bit returned as 0 means the corresponding fuse or lock bit is programmed. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__boot_ga7249d12e06789cd306583abf7def8176}\label{group__avr__boot_ga7249d12e06789cd306583abf7def8176}} 
\index{$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}!boot\_page\_erase@{boot\_page\_erase}}
\index{boot\_page\_erase@{boot\_page\_erase}!$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}}
\doxyparagraph{\texorpdfstring{boot\_page\_erase}{boot\_page\_erase}}
{\footnotesize\ttfamily \#define boot\+\_\+page\+\_\+erase(\begin{DoxyParamCaption}\item[{}]{address }\end{DoxyParamCaption})~\+\_\+\+\_\+boot\+\_\+page\+\_\+erase\+\_\+normal(address)}

Erase the flash page that contains address.

\begin{DoxyNote}{Note}
address is a byte address in flash, not a word address. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__boot_ga5c345350a2fb349619b859dcf0dc0466}\label{group__avr__boot_ga5c345350a2fb349619b859dcf0dc0466}} 
\index{$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}!boot\_page\_erase\_safe@{boot\_page\_erase\_safe}}
\index{boot\_page\_erase\_safe@{boot\_page\_erase\_safe}!$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}}
\doxyparagraph{\texorpdfstring{boot\_page\_erase\_safe}{boot\_page\_erase\_safe}}
{\footnotesize\ttfamily \#define boot\+\_\+page\+\_\+erase\+\_\+safe(\begin{DoxyParamCaption}\item[{}]{address }\end{DoxyParamCaption})}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{keywordflow}{do} \{ \(\backslash\)}
\DoxyCodeLine{    boot\_spm\_busy\_wait();                       \(\backslash\)}
\DoxyCodeLine{    eeprom\_busy\_wait();                         \(\backslash\)}
\DoxyCodeLine{    boot\_page\_erase (address);                  \(\backslash\)}
\DoxyCodeLine{\} \textcolor{keywordflow}{while} (0)}

\end{DoxyCode}
Same as \mbox{\hyperlink{group__avr__boot_ga7249d12e06789cd306583abf7def8176}{boot\+\_\+page\+\_\+erase()}} except it waits for eeprom and spm operations to complete before erasing the page. \mbox{\Hypertarget{group__avr__boot_ga61add108c778273ff68233d044c3acca}\label{group__avr__boot_ga61add108c778273ff68233d044c3acca}} 
\index{$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}!boot\_page\_fill@{boot\_page\_fill}}
\index{boot\_page\_fill@{boot\_page\_fill}!$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}}
\doxyparagraph{\texorpdfstring{boot\_page\_fill}{boot\_page\_fill}}
{\footnotesize\ttfamily \#define boot\+\_\+page\+\_\+fill(\begin{DoxyParamCaption}\item[{}]{address,  }\item[{}]{data }\end{DoxyParamCaption})~\+\_\+\+\_\+boot\+\_\+page\+\_\+fill\+\_\+normal(address, data)}

Fill the bootloader temporary page buffer for flash address with data word.

\begin{DoxyNote}{Note}
The address is a byte address. The data is a word. The A\+VR writes data to the buffer a word at a time, but addresses the buffer per byte! So, increment your address by 2 between calls, and send 2 data bytes in a word format! The L\+SB of the data is written to the lower address; the M\+SB of the data is written to the higher address. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__boot_ga3f549e2ef9ca0f119a7070064c4dc372}\label{group__avr__boot_ga3f549e2ef9ca0f119a7070064c4dc372}} 
\index{$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}!boot\_page\_fill\_safe@{boot\_page\_fill\_safe}}
\index{boot\_page\_fill\_safe@{boot\_page\_fill\_safe}!$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}}
\doxyparagraph{\texorpdfstring{boot\_page\_fill\_safe}{boot\_page\_fill\_safe}}
{\footnotesize\ttfamily \#define boot\+\_\+page\+\_\+fill\+\_\+safe(\begin{DoxyParamCaption}\item[{}]{address,  }\item[{}]{data }\end{DoxyParamCaption})}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{keywordflow}{do} \{ \(\backslash\)}
\DoxyCodeLine{    boot\_spm\_busy\_wait();                       \(\backslash\)}
\DoxyCodeLine{    eeprom\_busy\_wait();                         \(\backslash\)}
\DoxyCodeLine{    boot\_page\_fill(address, data);              \(\backslash\)}
\DoxyCodeLine{\} \textcolor{keywordflow}{while} (0)}

\end{DoxyCode}
Same as \mbox{\hyperlink{group__avr__boot_ga61add108c778273ff68233d044c3acca}{boot\+\_\+page\+\_\+fill()}} except it waits for eeprom and spm operations to complete before filling the page. \mbox{\Hypertarget{group__avr__boot_ga013d6d8c679ebdbc0e5fac179c38c9aa}\label{group__avr__boot_ga013d6d8c679ebdbc0e5fac179c38c9aa}} 
\index{$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}!boot\_page\_write@{boot\_page\_write}}
\index{boot\_page\_write@{boot\_page\_write}!$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}}
\doxyparagraph{\texorpdfstring{boot\_page\_write}{boot\_page\_write}}
{\footnotesize\ttfamily \#define boot\+\_\+page\+\_\+write(\begin{DoxyParamCaption}\item[{}]{address }\end{DoxyParamCaption})~\+\_\+\+\_\+boot\+\_\+page\+\_\+write\+\_\+normal(address)}

Write the bootloader temporary page buffer to flash page that contains address.

\begin{DoxyNote}{Note}
address is a byte address in flash, not a word address. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__boot_ga107ad4c789e5c498062947d394ed98d5}\label{group__avr__boot_ga107ad4c789e5c498062947d394ed98d5}} 
\index{$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}!boot\_page\_write\_safe@{boot\_page\_write\_safe}}
\index{boot\_page\_write\_safe@{boot\_page\_write\_safe}!$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}}
\doxyparagraph{\texorpdfstring{boot\_page\_write\_safe}{boot\_page\_write\_safe}}
{\footnotesize\ttfamily \#define boot\+\_\+page\+\_\+write\+\_\+safe(\begin{DoxyParamCaption}\item[{}]{address }\end{DoxyParamCaption})}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{keywordflow}{do} \{ \(\backslash\)}
\DoxyCodeLine{    boot\_spm\_busy\_wait();                       \(\backslash\)}
\DoxyCodeLine{    eeprom\_busy\_wait();                         \(\backslash\)}
\DoxyCodeLine{    boot\_page\_write (address);                  \(\backslash\)}
\DoxyCodeLine{\} \textcolor{keywordflow}{while} (0)}

\end{DoxyCode}
Same as \mbox{\hyperlink{group__avr__boot_ga013d6d8c679ebdbc0e5fac179c38c9aa}{boot\+\_\+page\+\_\+write()}} except it waits for eeprom and spm operations to complete before writing the page. \mbox{\Hypertarget{group__avr__boot_gaaba5a29359af671a37bccaa6a77bca7c}\label{group__avr__boot_gaaba5a29359af671a37bccaa6a77bca7c}} 
\index{$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}!boot\_rww\_busy@{boot\_rww\_busy}}
\index{boot\_rww\_busy@{boot\_rww\_busy}!$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}}
\doxyparagraph{\texorpdfstring{boot\_rww\_busy}{boot\_rww\_busy}}
{\footnotesize\ttfamily \#define boot\+\_\+rww\+\_\+busy(\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})~(\+\_\+\+\_\+\+S\+P\+M\+\_\+\+R\+EG \& (\mbox{\hyperlink{group__avr__stdint_gaba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}})\mbox{\hyperlink{group__avr__sfr_ga11643f271076024c395a93800b3d9546}{\+\_\+\+BV}}(\+\_\+\+\_\+\+C\+O\+M\+M\+O\+N\+\_\+\+A\+SB))}

Check if the R\+WW section is busy. \mbox{\Hypertarget{group__avr__boot_ga8d2baaca2991318e0b06fdf9a5264923}\label{group__avr__boot_ga8d2baaca2991318e0b06fdf9a5264923}} 
\index{$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}!boot\_rww\_enable@{boot\_rww\_enable}}
\index{boot\_rww\_enable@{boot\_rww\_enable}!$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}}
\doxyparagraph{\texorpdfstring{boot\_rww\_enable}{boot\_rww\_enable}}
{\footnotesize\ttfamily \#define boot\+\_\+rww\+\_\+enable(\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})~\+\_\+\+\_\+boot\+\_\+rww\+\_\+enable()}

Enable the Read-\/\+While-\/\+Write memory section. \mbox{\Hypertarget{group__avr__boot_gaeb0dba1dd9d338516a94c0bd8a8db78a}\label{group__avr__boot_gaeb0dba1dd9d338516a94c0bd8a8db78a}} 
\index{$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}!boot\_rww\_enable\_safe@{boot\_rww\_enable\_safe}}
\index{boot\_rww\_enable\_safe@{boot\_rww\_enable\_safe}!$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}}
\doxyparagraph{\texorpdfstring{boot\_rww\_enable\_safe}{boot\_rww\_enable\_safe}}
{\footnotesize\ttfamily \#define boot\+\_\+rww\+\_\+enable\+\_\+safe(\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{\textcolor{keywordflow}{do} \{ \(\backslash\)}
\DoxyCodeLine{    boot\_spm\_busy\_wait();                       \(\backslash\)}
\DoxyCodeLine{    eeprom\_busy\_wait();                         \(\backslash\)}
\DoxyCodeLine{    boot\_rww\_enable();                          \(\backslash\)}
\DoxyCodeLine{\} \textcolor{keywordflow}{while} (0)}

\end{DoxyCode}
Same as \mbox{\hyperlink{group__avr__boot_ga8d2baaca2991318e0b06fdf9a5264923}{boot\+\_\+rww\+\_\+enable()}} except waits for eeprom and spm operations to complete before enabling the R\+WW mameory. \mbox{\Hypertarget{group__avr__boot_gaf375d2543ba38dc56697b4f4bc37a717}\label{group__avr__boot_gaf375d2543ba38dc56697b4f4bc37a717}} 
\index{$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}!boot\_signature\_byte\_get@{boot\_signature\_byte\_get}}
\index{boot\_signature\_byte\_get@{boot\_signature\_byte\_get}!$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}}
\doxyparagraph{\texorpdfstring{boot\_signature\_byte\_get}{boot\_signature\_byte\_get}}
{\footnotesize\ttfamily \#define boot\+\_\+signature\+\_\+byte\+\_\+get(\begin{DoxyParamCaption}\item[{}]{addr }\end{DoxyParamCaption})}

{\bfseries Value\+:}
\begin{DoxyCode}{0}
\DoxyCodeLine{(\_\_extension\_\_(\{                      \(\backslash\)}
\DoxyCodeLine{      uint8\_t \_\_result;                         \(\backslash\)}
\DoxyCodeLine{      \_\_asm\_\_ \_\_volatile\_\_                      \(\backslash\)}
\DoxyCodeLine{      (                                         \(\backslash\)}
\DoxyCodeLine{        \textcolor{stringliteral}{"sts \%1, \%2\(\backslash\)n\(\backslash\)t"}                        \(\backslash\)}
\DoxyCodeLine{        \textcolor{stringliteral}{"lpm \%0, Z"} \textcolor{stringliteral}{"\(\backslash\)n\(\backslash\)t"}                      \(\backslash\)}
\DoxyCodeLine{        : \textcolor{stringliteral}{"=r"} (\_\_result)                       \(\backslash\)}
\DoxyCodeLine{        : \textcolor{stringliteral}{"i"} (\_SFR\_MEM\_ADDR(\_\_SPM\_REG)),       \(\backslash\)}
\DoxyCodeLine{          \textcolor{stringliteral}{"r"} ((\mbox{\hyperlink{group__avr__stdint_gaba7bc1797add20fe3efdf37ced1182c5}{uint8\_t}})(\_\_BOOT\_SIGROW\_READ)),  \(\backslash\)}
\DoxyCodeLine{          \textcolor{stringliteral}{"z"} ((\mbox{\hyperlink{group__avr__stdint_ga1f1825b69244eb3ad2c7165ddc99c956}{uint16\_t}})(addr))                \(\backslash\)}
\DoxyCodeLine{      );                                        \(\backslash\)}
\DoxyCodeLine{      \_\_result;                                 \(\backslash\)}
\DoxyCodeLine{\}))}

\end{DoxyCode}
Read the Signature Row byte at {\ttfamily address}. For some M\+CU types, this function can also retrieve the factory-\/stored oscillator calibration bytes.

Parameter {\ttfamily address} can be 0-\/0x1f as documented by the datasheet. \begin{DoxyNote}{Note}
The values are M\+CU type dependent. 
\end{DoxyNote}
\mbox{\Hypertarget{group__avr__boot_gae50dc01180110f30093a92fe64fe1565}\label{group__avr__boot_gae50dc01180110f30093a92fe64fe1565}} 
\index{$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}!boot\_spm\_busy@{boot\_spm\_busy}}
\index{boot\_spm\_busy@{boot\_spm\_busy}!$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}}
\doxyparagraph{\texorpdfstring{boot\_spm\_busy}{boot\_spm\_busy}}
{\footnotesize\ttfamily \#define boot\+\_\+spm\+\_\+busy(\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})~(\+\_\+\+\_\+\+S\+P\+M\+\_\+\+R\+EG \& (\mbox{\hyperlink{group__avr__stdint_gaba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}})\mbox{\hyperlink{group__avr__sfr_ga11643f271076024c395a93800b3d9546}{\+\_\+\+BV}}(\+\_\+\+\_\+\+S\+P\+M\+\_\+\+E\+N\+A\+B\+LE))}

Check if the S\+PM instruction is busy. \mbox{\Hypertarget{group__avr__boot_ga24900c15109e8b419736d4b81b093fb8}\label{group__avr__boot_ga24900c15109e8b419736d4b81b093fb8}} 
\index{$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}!boot\_spm\_busy\_wait@{boot\_spm\_busy\_wait}}
\index{boot\_spm\_busy\_wait@{boot\_spm\_busy\_wait}!$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}}
\doxyparagraph{\texorpdfstring{boot\_spm\_busy\_wait}{boot\_spm\_busy\_wait}}
{\footnotesize\ttfamily \#define boot\+\_\+spm\+\_\+busy\+\_\+wait(\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})~do\{\}while(\mbox{\hyperlink{group__avr__boot_gae50dc01180110f30093a92fe64fe1565}{boot\+\_\+spm\+\_\+busy}}())}

Wait while the S\+PM instruction is busy. \mbox{\Hypertarget{group__avr__boot_gaf1e01d09c839793a6c0c990b1c5ae8b3}\label{group__avr__boot_gaf1e01d09c839793a6c0c990b1c5ae8b3}} 
\index{$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}!boot\_spm\_interrupt\_disable@{boot\_spm\_interrupt\_disable}}
\index{boot\_spm\_interrupt\_disable@{boot\_spm\_interrupt\_disable}!$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}}
\doxyparagraph{\texorpdfstring{boot\_spm\_interrupt\_disable}{boot\_spm\_interrupt\_disable}}
{\footnotesize\ttfamily \#define boot\+\_\+spm\+\_\+interrupt\+\_\+disable(\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})~(\+\_\+\+\_\+\+S\+P\+M\+\_\+\+R\+EG \&= (\mbox{\hyperlink{group__avr__stdint_gaba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}})$\sim$\mbox{\hyperlink{group__avr__sfr_ga11643f271076024c395a93800b3d9546}{\+\_\+\+BV}}(S\+P\+M\+IE))}

Disable the S\+PM interrupt. \mbox{\Hypertarget{group__avr__boot_ga072040fce54f112355cb9ebf9ce41dd7}\label{group__avr__boot_ga072040fce54f112355cb9ebf9ce41dd7}} 
\index{$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}!boot\_spm\_interrupt\_enable@{boot\_spm\_interrupt\_enable}}
\index{boot\_spm\_interrupt\_enable@{boot\_spm\_interrupt\_enable}!$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}}
\doxyparagraph{\texorpdfstring{boot\_spm\_interrupt\_enable}{boot\_spm\_interrupt\_enable}}
{\footnotesize\ttfamily \#define boot\+\_\+spm\+\_\+interrupt\+\_\+enable(\begin{DoxyParamCaption}{ }\end{DoxyParamCaption})~(\+\_\+\+\_\+\+S\+P\+M\+\_\+\+R\+EG $\vert$= (\mbox{\hyperlink{group__avr__stdint_gaba7bc1797add20fe3efdf37ced1182c5}{uint8\+\_\+t}})\mbox{\hyperlink{group__avr__sfr_ga11643f271076024c395a93800b3d9546}{\+\_\+\+BV}}(S\+P\+M\+IE))}

Enable the S\+PM interrupt. \mbox{\Hypertarget{group__avr__boot_ga8a60eb0985d40ff71c42bb18f0f5789e}\label{group__avr__boot_ga8a60eb0985d40ff71c42bb18f0f5789e}} 
\index{$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}!BOOTLOADER\_SECTION@{BOOTLOADER\_SECTION}}
\index{BOOTLOADER\_SECTION@{BOOTLOADER\_SECTION}!$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}}
\doxyparagraph{\texorpdfstring{BOOTLOADER\_SECTION}{BOOTLOADER\_SECTION}}
{\footnotesize\ttfamily \#define B\+O\+O\+T\+L\+O\+A\+D\+E\+R\+\_\+\+S\+E\+C\+T\+I\+ON~\mbox{\hyperlink{group__avr__watchdog_gadaa6dd28b5d08df35e49b1248d7e5fb0}{\+\_\+\+\_\+attribute\+\_\+\+\_\+}} ((section (\char`\"{}.bootloader\char`\"{})))}

Used to declare a function or variable to be placed into a new section called .bootloader. This section and its contents can then be relocated to any address (such as the bootloader N\+R\+WW area) at link-\/time. \mbox{\Hypertarget{group__avr__boot_gaf08aabaebbd69da659357f402d4d28ce}\label{group__avr__boot_gaf08aabaebbd69da659357f402d4d28ce}} 
\index{$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}!GET\_EXTENDED\_FUSE\_BITS@{GET\_EXTENDED\_FUSE\_BITS}}
\index{GET\_EXTENDED\_FUSE\_BITS@{GET\_EXTENDED\_FUSE\_BITS}!$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}}
\doxyparagraph{\texorpdfstring{GET\_EXTENDED\_FUSE\_BITS}{GET\_EXTENDED\_FUSE\_BITS}}
{\footnotesize\ttfamily \#define G\+E\+T\+\_\+\+E\+X\+T\+E\+N\+D\+E\+D\+\_\+\+F\+U\+S\+E\+\_\+\+B\+I\+TS~(0x0002)}

address to read the extended fuse bits, using boot\+\_\+lock\+\_\+fuse\+\_\+bits\+\_\+get \mbox{\Hypertarget{group__avr__boot_ga44e70c9662e7ac06484144c15bc69aea}\label{group__avr__boot_ga44e70c9662e7ac06484144c15bc69aea}} 
\index{$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}!GET\_HIGH\_FUSE\_BITS@{GET\_HIGH\_FUSE\_BITS}}
\index{GET\_HIGH\_FUSE\_BITS@{GET\_HIGH\_FUSE\_BITS}!$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}}
\doxyparagraph{\texorpdfstring{GET\_HIGH\_FUSE\_BITS}{GET\_HIGH\_FUSE\_BITS}}
{\footnotesize\ttfamily \#define G\+E\+T\+\_\+\+H\+I\+G\+H\+\_\+\+F\+U\+S\+E\+\_\+\+B\+I\+TS~(0x0003)}

address to read the high fuse bits, using boot\+\_\+lock\+\_\+fuse\+\_\+bits\+\_\+get \mbox{\Hypertarget{group__avr__boot_gae12d288a22cfbfa9d0cde12b1a779bfe}\label{group__avr__boot_gae12d288a22cfbfa9d0cde12b1a779bfe}} 
\index{$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}!GET\_LOCK\_BITS@{GET\_LOCK\_BITS}}
\index{GET\_LOCK\_BITS@{GET\_LOCK\_BITS}!$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}}
\doxyparagraph{\texorpdfstring{GET\_LOCK\_BITS}{GET\_LOCK\_BITS}}
{\footnotesize\ttfamily \#define G\+E\+T\+\_\+\+L\+O\+C\+K\+\_\+\+B\+I\+TS~(0x0001)}

address to read the lock bits, using boot\+\_\+lock\+\_\+fuse\+\_\+bits\+\_\+get \mbox{\Hypertarget{group__avr__boot_gac68c37ecf2354ba2af6e08379d65899f}\label{group__avr__boot_gac68c37ecf2354ba2af6e08379d65899f}} 
\index{$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}!GET\_LOW\_FUSE\_BITS@{GET\_LOW\_FUSE\_BITS}}
\index{GET\_LOW\_FUSE\_BITS@{GET\_LOW\_FUSE\_BITS}!$<$avr/boot.h$>$: Bootloader Support Utilities@{$<$avr/boot.h$>$: Bootloader Support Utilities}}
\doxyparagraph{\texorpdfstring{GET\_LOW\_FUSE\_BITS}{GET\_LOW\_FUSE\_BITS}}
{\footnotesize\ttfamily \#define G\+E\+T\+\_\+\+L\+O\+W\+\_\+\+F\+U\+S\+E\+\_\+\+B\+I\+TS~(0x0000)}

address to read the low fuse bits, using boot\+\_\+lock\+\_\+fuse\+\_\+bits\+\_\+get 