| /* Copyright (c) 2002, Joerg Wunsch |
| Copyright (c) 2008, Atmel Corporation |
| All rights reserved. |
| |
| Redistribution and use in source and binary forms, with or without |
| modification, are permitted provided that the following conditions are met: |
| |
| * Redistributions of source code must retain the above copyright |
| notice, this list of conditions and the following disclaimer. |
| |
| * Redistributions in binary form must reproduce the above copyright |
| notice, this list of conditions and the following disclaimer in |
| the documentation and/or other materials provided with the |
| distribution. |
| |
| * Neither the name of the copyright holders nor the names of |
| contributors may be used to endorse or promote products derived |
| from this software without specific prior written permission. |
| |
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
| AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
| IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
| ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE |
| LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
| CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
| SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
| INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
| CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
| POSSIBILITY OF SUCH DAMAGE. */ |
| |
| /* $Id: sfr.dox 1631 2008-03-17 17:59:10Z arcanum $ */ |
| |
| /** \defgroup avr_sfr <avr/sfr_defs.h>: Special function registers |
| |
| When working with microcontrollers, many tasks usually consist |
| of controlling internal peripherals, or external peripherals that are connected |
| to the device. The entire IO address space is made available as |
| <em>memory-mapped IO</em>, i.e. it can be accessed using all the MCU |
| instructions that are applicable to normal data memory. For most AVR devices, |
| the IO register space is mapped into the data memory address space with an |
| offset of 0x20 since the bottom of this space is reserved for direct access to |
| the MCU registers. (Actual SRAM is available only behind the IO register |
| area, starting at some specific address depending on the device.) |
| |
| For example the user can access memory-mapped IO registers as if they were |
| globally defined variables like this: |
| |
| \code |
| PORTA = 0x33; |
| unsigned char foo = PINA; |
| \endcode |
| |
| The compiler will choose the correct instruction sequence to generate based |
| on the address of the register being accessed. |
| |
| The advantage of using the memory-mapped registers in C programs is |
| that it makes the programs more portable to other C compilers for the |
| AVR platform. |
| |
| Note that special care must be taken when accessing some of the 16-bit |
| timer IO registers where access from both the main program and within |
| an interrupt context can happen. See \ref faq_16bitio. |
| |
| \par Porting programs that use the deprecated sbi/cbi macros |
| |
| Access to the AVR single bit set and clear instructions |
| are provided via the standard C bit manipulation commands. The sbi and cbi |
| macros are no longer directly supported. |
| sbi (sfr,bit) can be replaced by sfr |= _BV(bit) . |
| |
| i.e.: sbi(PORTB, PB1); is now PORTB |= _BV(PB1); |
| |
| This actually is more flexible than having sbi directly, as the optimizer |
| will use a hardware sbi if appropriate, or a read/or/write operation if not |
| appropriate. You do not need to keep track of which registers sbi/cbi will |
| operate on. |
| |
| Likewise, cbi (sfr,bit) is now sfr &= ~(_BV(bit)); |
| |
| */ |