Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 7780|Ответ: 0

Zigbee Journey (4): Несколько важных базовых экспериментов CC2430 — прерывание таймера

[Скопировать ссылку]
Опубликовано 30.10.2014 23:17:29 | | | |
1. Соединение верхнего и нижнего уровней

В предыдущей статье мы вместе изучали реализацию простых внешних прерываний. Теперь, когда у нас есть практический опыт работы с прерываниями, давайте поговорим о таймерных прерываниях в этом разделе. В CC2430 всего 4 таймеры, которые можно разделить на 3 категории: таймер 1, таймер 2, таймер 3/4 (использование 3 и 4 одинаково).

Поскольку автор тоже новичок в CC2430 и практически не имеет практического опыта работы с проектами с таймерами, я не собираюсь (и не могу ничего сделать) глубоко анализировать таймер. В этой статье приводится лишь краткое экспериментальное исследование использования таймера 1 в прерываниях переполнения счёта и не упоминается его функции сравнения входа/выхода/PWM. Таймер 2 и Таймер 3/4 — это лишь простые введения функций. Когда навыки автора достигнут определённого уровня, я окажусь на вершине практического опыта Зигби, чтобы улучшить это эссе.

2. Таймер 1

Таймер 1 — это 16-битный таймер с модуляцией таймер/счётчик/ширины импульса. У него есть 3 индивидуально программируемых канала сравнения входа/сравнения входов, каждый из которых может использоваться как PWM-выход или как edge time для захвата входного сигнала (для получения информации о сравнении входного захвата/выхода и о том, как реализовать PWM-выход, читатели могут обратиться к китайскому руководству CC2430).

Таймеры имеют очень важную концепцию:Режим работы

Режимы работы включают: режим свободной работы (Свободный бег), режим формы (Modulo) и режим положительного отсчёта/обратного отсчёта (Вверх-вниз)。

Ниже приведён отрывок из китайского руководства CC2430 по введению трёх режимов:



Сравнивая три режима, можно увидеть, что значение переполнения режима свободной работы 0xFFFF неизменно; Остальные два режима позволяют точно контролировать значение переполнения таймера, присваивая значение T1CC0. Этот эксперимент использует эту функцию для запуска прерывания каждые 1 секунды по таймеру через определённый T1CC0, чтобы точно контролировать интервал мигания светодиода до 1 секунд.

(1) Введение в эксперимент

В режиме по модулю таймера интервал мигания светодиодного света точно контролируется единицами, а именно: яркие 0,5 с → тёмные 0,5 с → яркие 0,5 с → тусклые 0,5 с ...... → Светлый 0,5 с → Тёмный 0,5 с (то есть интервал времени от тёмного к светлому равен 1 с). Инверсия светлой/тёмной системы достигается за счёт переполнения прерываний.

(2) Блок-схема программы

(3) Соответствующие расчёты

Как уже упоминалось, состояние светодиодного индикатора: яркий 0,5 с → тёмный 0,5 с → яркий 0,5 с → тусклый 0,5 с ...... → 0,5 с свет → 0,5 с тёмным, и это необходимо реализовать с переполнением, поэтому период переполнения таймера должен составлять 0,5 секунды. Для этого необходимо вычислить соответствующее значение переполнения (временно установить в N).

Тактовая частота системы выбирается как 32 МГц, а по умолчанию задана тактовая частота — 16 МГц (оба параметра определяются специальными регистрами функций).CLKCONДля подробностей ознакомьтесь с китайским руководством CC2430).

Для таймера 1 установите кроссовер часов на 128 дивизионов.

В итоге список выглядит следующим образом:

Чтобы найти N=62500, её шестнадцатеричное число равно 0xF424, то есть нужно установить T1CC0H=0xF4, T1CC0L=0x24 .

(4) Экспериментальный исходный код и анализ/*
    Описание эксперимента: Timer Timer1 эксперимент, переполнение количества таймеров, мигание LED1
*/

#include

#define led1 P1_0         
#define led2 P1_1         
#define led3 P1_2         
#define led4 P1_3         

/*系统时钟初始化
-------------------------------------------------------*/
пустотаxtal_init(пустота)
{
  SLEEP &= ~0x04;            //都上电
  в то время как(! (SLEEP &0x40));     //晶体振荡器开启且稳定
  CLKCON &= ~0x47;            Выберите кристаллический осциллятор на 32 МГц
  СОН |=0x04;
}

/*LED初始化
-------------------------------------------------------*/
пустотаled_init(пустота)
{
  P1SEL =0x00;            P1 — это обычный порт ввода-вывода
  P1DIR |=0x0F;            P1.0 P1.1 P1.2 P1.3 выход
  
  led1 =1;                  //关闭所有LED
  led2 =1;
  led3 =1;
  led4 =1;
}

/*T1初始化
-------------------------------------------------------*/
пустотаtimer1_init(пустота)
{
  EA=1;            //开总中断
  T1IE=1;           //开T1中断
  OVFIM =1;         //开T1溢出中断
  
  T1CC0L=0x24;      //溢出值低8位
  T1CC0H=0xF4;      //溢出值高8位
  
  T1CTL =0x0e;     128 кроссовер; по модулю (0x0000->T1CC0); Начинайте бегать;
  T1IF=0;           Очистите знак прерывания  
}

/*主函数
-------------------------------------------------------*/
пустотаОсновная(пустота)
{
  xtal_init();
  led_init();
  timer1_init();

  в то время как(1);            //等待溢出中断
}

/*T1终端服务子程序
-------------------------------------------------------*/
#pragma вектор=T1_VECTOR
__interruptпустотаT1_ISR(пустота)
{
  EA=0;               //关中断
  
  led1 = !led1;      //LED灯反转

  EA=1;               //开中断
  
  T1CTL &= ~0x10;     //清中断标志
}

Хорошо, скомпилирую программу и отладку онлайн, LED1 на плате разработки мигает по расписанию, и кажется, что интервал мигания составляет около 1 секунды. Но этого недостаточно, чтобы доказать успех эксперимента: если интервал можно строго определить как 1с, он будет идеальным~ Поэтому я включил часы WIN 7 (кликните на время справа на панели задач). Глядя на секундную стрелку, он краем глаза заметил мигающий LED1. В итоге: через две минуты темп двух игр практически одинаков (эта точность терпима~). На этом этапе можно сказать, что эксперимент практически завершён, хе-хе~

3. Таймер 2

Таймер 2 также называетсяТаймер MAC, специально разработан для поддержки протокола отслеживания событий в IEEE 802.15.4 MAC. Таймер имеет 8-значный счётчик переполнения, который можно использовать для записи количества произошедших циклов; Существует 16-битный регистр захвата, который записывает точное время начала приёма/отправки кадра или точное время завершения передачи. Также он содержит 16-битный выходной сравнительный регистр, который генерирует различные сигналы команд (начать принимать, отправлять и т.д.) на беспроводной модуль в определённый момент.

4. Таймер 3/4

Таймер 3/4 — это 8-битный таймер с функциями таймер/счётчик/ШИМ. T3/T4 имеет 2 канала сравнения выходов, каждый из которых может использоваться как PWM-выход.

5. Заключение

В этом разделе в основном изучается метод прерывания переполнения счёта таймера 1 и реализовано точное управление интервалом мигания светодиодного света в 1с. Ещё несколько таймеров — это просто инсульт, и я вернусь, чтобы добавить их позже. В следующем разделе мы представим связь с последовательным портом CC2430.






Предыдущий:Zigbee Journey (3): Несколько важных базовых экспериментов CC2430 — внешнее прерывание
Следующий:Zigbee Journey (5): Несколько важных базовых экспериментов CC2430 — последовательная связь
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com