Категории
|
Здравствуйте, гость ( Вход | Регистрация )
|
Категории
Последние записи
Обновление макросов для компилятора С30 Самодиагностика PIC'ов Перевод описания на С30 Перевод PIC24FJ128GA010 Макросы работы с компиляторм С30 Блок питания для программатора USB Раздел 9.4 выбор выводов для периферии семейства PIC24FJ64GA004 Режим энергосбережения в PIC24FJ128GA010 Family Глава 6. Контроллер прерываний PIC24FJ128GA010 Family Клон ИСД2 Последние комментарии
DL36 в Самодиагностика PIC'ов
urry в Самодиагностика PIC'ов DL36 в Макросы работы с компиляторм С30 Гость Alex B. в Макросы работы с компиляторм С30 rubel в Перевод PIC24FJ128GA010 DL36 в Перевод PIC24FJ128GA010 rubel в Перевод PIC24FJ128GA010 DL36 в Макросы работы с компиляторм С30 DL36 в Макросы работы с компиляторм С30 Гость в Макросы работы с компиляторм С30 Дополнительные ссылки
|
Добавлены макросы для работы с внешними прерываниями и изменениями состояния Код EDGE_INT(Pin1) = 1; - Позволяет установить фронт срабатывания F_INT(Pin1) = 0; - Позволяет проверить или сбросить флаг P_INT(Pin1,pri); - установить приоритет обозначенного вывода INTInterrupt(Pin1) - сделать подстановку в функции обработчика прерывания CH_EN(Pin1) = 1; - Разрешить контроль изменения состояния CH_PU(Pin1) = 1; - Включить подтягивающие резисторы Обновление на 24 марта 2010.
В продолжение разговора о макросах для работы с портами начатого здесь Выкладываю откорректированный файл макросов для работы с портами. Оригинал Для работы необходимо прочитать статью и скачать необходимый для работы файл bfa.h. Обновление на 24 марта 2010.
c30portmacros_1.0.36a_.rar ( 3.94 килобайт )
Кол-во скачиваний: 140Добавлены макросы для работы с внешними прерываниями и изменениями состояния Код Определив вывод для внешнего прерывания BIT_DATA A, 14, H Можно сделать EDGE_INT(Pin1) = 1; - Позволяет установить фронт срабатывания F_INT(Pin1) = 0; - Позволяет проверить или сбросить флаг P_INT(Pin1,pri); - установить приоритет обозначенного вывода INTInterrupt(Pin1) - сделать подстановку в функции обработчика прерывания Определив вывод для контроля изменения BIT_DATA B, 15, H Можно сделать CH_EN(Pin1) = 1; - Разрешить контроль изменения состояния CH_PU(Pin1) = 1; - Включить подтягивающие резисторы Обновление на 5 апреля 2009
c30portmacros.rar ( 1.42 килобайт )
Кол-во скачиваний: 227Добавил настройку УАРТов выглядит это так Описываем скорость и номкр порта Код #define BRGUART2 9600, 2 До использования задаем частоту генератора Код #define FREQ 8000000 // Частота генератора в герцах Макрос так выглядит. Код #define TST_BRGH(uartN) BFA(BFA_RD, U##uartN##MODE, BRGH) #define _setBrg(valBrg,uartN) if(TST_BRGH(uartN)) \ U##uartN##BRG=(FREQ)/2/4/(valBrg)-1;\ else \ U##uartN##BRG=(FREQ)/2/16/(valBrg) -1; #define SET_BRGH(x) _setBrg(x) Применяем так Код SET_BRGH(BRGUART2); Добавил макрос для инструкции DISI Код #define DISI(n) \ asm volatile ("disi #%0" \ : /* no outputs */ \ : "i" (n)) С учетом версии 1.0.24 (от 4 марта 2009) файла bfa.h который надо включить в проект для возможности обоюдного использования макросов.
c30portmacros1024.rar ( 1.17 килобайт )
Кол-во скачиваний: 423Исправил по состоянию на 03 03 2009 с учетом атомарной работы.
c30portmacros.rar ( 1.17 килобайт )
Кол-во скачиваний: 204Макрос позволяет однажды определив вывод Код #define LED0 A, 10, L #define LED1 A, 7, L #define LED2 A, 8, L производить с ним следующие действия Код OFF(LED0); //Погасить светодиод OFF(LED1); //Погасить светодиод OFF(LED2); //Погасить светодиод if(SIGNAL(KN0)) //проверить кнопку { ............. } 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); // Возвращает номер бита Дя работы с аналоговыми входами надо добавить #include "adc.h" Для работы с TNKernel привязывая системные тики к миллисекундам удобно пользоваться таким макросом Код #define FREQ 8000000 // Системная частота в Герцах #define OS_TMR_TICK 5000 // Количество тактов процессора в одном системном тике /* Количество системных тиков в миллисекундах */ static inline unsigned OS_MS(unsigned var) { return FREQ / 2 / 1000 * (var) / OS_TMR_TICK; } И например так ret = tn_task_sleep(OS_MS(100)); используя можно надеяться, что время через которое может быть вызвана задача будет около 100 мСек. Тоже только для jacOs и PICC18 будет выглядеть так Код #define FREQ 8000000 // Системная частота в Герцах
#define OS_TMR_TICK 5000 // Количество тактов процессора в одном системном тике /* Количество системных тиков в миллисекундах */ static inline unsigned OS_MS(unsigned var) { return FREQ / 4 / 1000 * (var) / OS_TMR_TICK; } |