Man Linux: Main Page and Category List

NAME

       <avr/sfr_defs.h>: Special function registers -

   Modules
       Additional notes from <avr/sfr_defs.h>

   Bit manipulation
       #define _BV(bit)   (1 << (bit))

   IO register bit manipulation
       #define bit_is_set(sfr, bit)   (_SFR_BYTE(sfr) & _BV(bit))
       #define bit_is_clear(sfr, bit)   (!(_SFR_BYTE(sfr) & _BV(bit)))
       #define loop_until_bit_is_set(sfr, bit)   do { } while
           (bit_is_clear(sfr, bit))
       #define loop_until_bit_is_clear(sfr, bit)   do { } while
           (bit_is_set(sfr, bit))

Detailed Description

       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 memory-mapped IO, 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:

          PORTA = 0x33;
           unsigned char foo = PINA;

       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 Why do some 16-bit timer registers
       sometimes get trashed?.

       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));

Define Documentation

   #define _BV(bit)   (1 << (bit)) .PP
        #include <avr/io.h>

       Converts a bit number into a byte value.

       Note:
           The bit shift is performed by the compiler which then inserts the
           result into the code. Thus, there is no run-time overhead when
           using _BV().

   #define bit_is_clear(sfr, bit)   (!(_SFR_BYTE(sfr) & _BV(bit))) .PP
        #include <avr/io.h>

       Test whether bit bit in IO register sfr is clear. This will return non-
       zero if the bit is clear, and a 0 if the bit is set.

   #define bit_is_set(sfr, bit)   (_SFR_BYTE(sfr) & _BV(bit)) .PP
        #include <avr/io.h>

       Test whether bit bit in IO register sfr is set. This will return a 0 if
       the bit is clear, and non-zero if the bit is set.

   #define loop_until_bit_is_clear(sfr, bit)   do { } while (bit_is_set(sfr,
       bit)) .PP
        #include <avr/io.h>

       Wait until bit bit in IO register sfr is clear.

   #define loop_until_bit_is_set(sfr, bit)   do { } while (bit_is_clear(sfr,
       bit)) .PP
        #include <avr/io.h>

       Wait until bit bit in IO register sfr is set.

Author

       Generated automatically by Doxygen for avr-libc from the source code.

Version 1.6.8                  <avr/sfr_defs.h>: Special function registers(3)