Раньше вроде выкладывал здесь но найти не смог.
Опираясь на
статью об атомарном доступе я приспособил общеизвестные макросы под С30.
Один раз определив вывод
#define DATA A, 10, H с ним можно делать
Код
OPEND_DRAIN_ON(OUT0); // Установить открытый сток
SET_DIR(OUT0,Out); // Настроить на вывод
AD1PCFG = ENABLE_ALL_DIG_0_15;
ANALOG_INPUT_ON(1); // Подключить аналоговый вход
ANALOG_INPUT_OFF(1); // Отключить аналоговый вход
if (SIGNAL(IMPUT0)) // На входе уровень активный?
ON(OUT0); // Установить активный уровень
OFF(OUT0); // Сбросить активный уровень
HIGH(OUT0); // Установить высокий уровень
LOW(OUT0); // Установить низкий уровень
TOGGLE(OUT0); // Инвертировать выход
if (LATCH(OUT0)) // Уровень активный?
if (DIR_IS_OUT(OUT0)) // Направление на вывод?
if (DIR_IS_IN(OUT0)) // Направление на вход?
Tmp = BITNUM(OUT0); // Возвращает номер бита
Сейчас добавил работу с внешними прерываниями и контролем за изменением состояния Код
EDGE_INT(BIT_DATA) = 1; - Позволяет установить фронт срабатывания
F_INT(BIT_DATA) = 0; - Позволяет проверить или сбросить флаг
P_INT(BIT_DATA,pri); - установить приоритет обозначенного вывода
INTInterrupt(BIT_DATA) - сделать подстановку в функции обработчика
Обработчик прерывания, к примеру, для вывода (BIT_DATA A, 14, H) будет выглядеть так
Код
void __attribute__((interrupt, no_auto_psv)) INTInterrupt(BIT_DATA) (void)
Преобразуется к виду
void __attribute__((interrupt, no_auto_psv)) _INT3Interrupt (void)
Для контроля изменения состояния.
Код
CH_EN(BIT_DATA) = 1; - Разрешить контроль изменения состояния
CH_PU(BIT_DATA) = 1; - Включить подтягивающие резисторы