Этот хедер файл содержит несколько элементов, которые были доступны в предыдущих версиях библиотеки, но в итоге через некоторое время осудились.
#include <compat/deprected.h>
Эти элементы включены в хедер файл только для совместимости со старыми исходниками, для того чтобы исходники, которые были написаны для предыдущих библиотечных версий, могли быть поддержаны до конца жизни. Использовать любой из этих элементов в новом коде не следует.
Разрешение определенных прерываний всей системы |
|
В дополнение к глобальному разрешению прерываний нужно отдельно разрешить прерывание каждого устройства, если прерывания для этого устройства желательны. В то время как некоторые устройства поддержаны, их прерывания допускают биту в наборе регистра устройства, внешнем, и прерывания по таймеру имеют регистраторов конфигурации всей системы. Пример: // Enable timer 1 overflow interrupts. timer_enable_int(_BV(TOIE1));
// некоторый программный код...
// Отключение всех прерываний по таймеру. timer_enable_int(0); Примечание: Будьте внимательным, когда используете эти функции. Если вы уже допустили другое прерывание, Вы могли бы inadvertantly отключать их, допуская другое прерывание. |
|
static __inline__ void |
timer_enable_int (unsigned char ints) |
#define |
enable_external_int(mask) (__EICR = mask) |
#define |
INTERRUPT(signame) |
__INTR_ATTRS used |
|
Устаревшее макроопределения IO |
|
В то время, когда AVR-GCC и avr-libc не могли обработать доступ порта ввода/вывода в прямой форме назначения, поскольку они обработаны теперь, весь доступ порта ввода/вывода должен был быть сделан через определенное макроопределение, которое в конечном счете привело к командам встроенного ассемблерного кода, выполняющим желательное действие. Макроопределение стало устаревшим, как чтение и запись портов ввода/вывода, могут быть сделаны, просто используя имя порта ввода/вывода в выражении, и вся разрядная манипуляция (включая те на портах ввода/вывода) может быть сделана, используя универсальные C разрядные операторы манипуляции. Макроопределение в этой группе моделирует историческое поведение. В то время как они, как предполагается, будут применены к портам ввода/вывода, эмуляция фактически использует стандартные методы C, так что они могли быть также применены к произвольным местоположениям памяти. |
|
#define |
inp(port) (port) |
#define |
outp(val,
port) (port) = (val) |
#define |
inb(port) (port) |
#define |
outb(port,
val) (port) = (val) |
#define |
sbi(port,
bit) (port) |= (1 << (bit)) |
#define |
cbi(port,
bit) (port) &= ~(1 << (bit)) |
cbi(регистр,
бит); //(сбросить
бит).
Эта
макрокоманда
дает доступ к
GIMSK регистру
(или EIMSK регистриру
при
использовании
устройств AtMega или
GICR регистр
для других).
Хотя эта
макрокоманда
по существу
та же самая
как
назначение
на регистр,
это
действительно
приспосабливается
к немногим
типам
используемых
устройств.
Эта макрокоманда
недоступна,
если ни один
из вышеупомянутых
регистраторов
не определен.
inb(регистр); // для
чтения
значения из
регистра
Чтение
значениея
из порта
ввода /
вывода.
Значение:
void signame (void) __attribute__ ((interrupt,__INTR_ATTRS)); \
void signame (void)
Вводит функцию обработки прерывания, которая выполняется с первоначально глобально разрешёнными прерываниями. Это позволяет программам обработки прерывания быть прерванным.
Поскольку
эта макрокоманда
использовалась
слишком многими
неподозревающими
людьми, в
прошлом это осудилось,
и будет
удалено в
будущей
версии
библиотеки.
Пользователи,
которые
хотят вновь
разрешить
возможность
прерываний,
настолько быстро
насколько
возможно,
могут
объявить их
обработчики,
как описано выше.
outb(регистр,
значение); // запись
байта в
регистр
Запись
val в порт
IO port
.
sbi(регистр,
бит); //(установить
бит)
Эта функция изменяет регистр timsk. Значение проходящее через ints является определенным устройством.