架构师_程序员_码农网

Имя пользователя Получить пароль
Регистрация

QQ登录

Всего один шаг, чтобы начать

Поиск
架构师_程序员_码农网 "架构师 ' 管理专区&Management Area ' Complaints and Suggestions ' 回收站 ' 【转】Zigbee之旅(四):几个重要的CC2430基础实验- . - ...
Просмотр:5109|Ответ: 0
打印 上一主题 下一主题

[Перевод] Путешествие по Zigbee (IV): несколько важных базовых экспериментов CC2430 - прерывание по таймеру

[Копировать ссылку]
Подъемник прямо к 跳转到指定楼层
владельцу здания
发表于 2014-10-30 23:17:29|只看该作者回帖奖励|Просмотр в обратном направлении|Режим чтения
I. Продолжение предыдущей статьи

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

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

Таймер 1

  Timer1 - это 16-битный таймер с функциями таймера/счетчика/широтно-импульсной модуляции. Он имеет три индивидуально программируемых канала захвата/сопоставления входных сигналов, каждый из которых может использоваться как ШИМ-выход или для захвата фронта входного сигнала (за более подробной информацией о том, что такое захват/сопоставление входных сигналов и как реализовать ШИМ-выходы, читатели могут самостоятельно обратиться к китайскому руководству CC2430).

  У таймера есть очень важное понятие: режим работы.

  Режимы работы включают в себя: свободный ход, модулор и "вверх-вниз".

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



  Сравнивая три режима, можно заметить, что: значение переполнения в режиме свободного хода равно 0xFFFF, которое не может быть изменено; в то время как два других режима могут быть точно контролированы путем присвоения значения T1CC0, чтобы точно контролировать значение переполнения таймера. В данном эксперименте используется эта возможность, чтобы заставить таймер запускать прерывание каждые 1 с через определенное значение T1CC0, чтобы точно контролировать интервал мигания светодиода в 1 с.

(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 делений.

  Подводя итог, можно сказать, что формула выглядит следующим образом:

2011022120560133.jpg
c

  Выяснил N = 62500, его шестнадцатеричное значение 0xF424, то есть нужно установить T1CC0H = 0xF4, T1CC0L = 0x24 то есть .








(
4) экспериментальный исходный код и анализ/* Описание эксперимента: эксперимент с таймером 1, переполнение счета таймера, мигание светодиода LED1 */ #include #define led1 P1_0 # define led2 P1_1 #define led3 P1_0 #define led3 P1_1

1 #define led3 P1_2 #define led4 P1_3 &





n bsp; /* инициализация системных часов-------------------------------------------------------*/void xtal_init( void ) { SLEEP &=~0x04;&
nbsp; // оба питания включеныwhile (!
(SLEEP & 0x40 )); //кристаллический осциллятор включен и стабилен CLKCON &=~0x47; &







nbsp; //выбираем 32МГц кристаллический осциллятор SLEEP |=0x04; }/*Инициализация светодиодов-------------------------------------------------------*/void led_init( void ) { &
nbsp; P1SEL = 0x00; //P1 - обычный порт ввода/вывода P1DIR |=0x0F; &

nbsp; //P1.0 P1.1 P1.2 P1.3 выходы led1 =1; &






nbsp; //Выключить все светодиоды led2 =1; led3 =1; led4 =1; }/*Инициализация таймера 1---------------------------



- ---------------------------*/void timer1_init( void ) {EA=1; //включить общее прерывание &
nbsp; T1IE=1; // включение прерывания T1OVFIM=1; // включение переполнения T1



прерывание T1CC0L=0x24; //значение переполнения младшие 8 бит T1CC0H=0xF4; //значение переполнения старшие 8 бит &

nbsp; T1CTL =0x0e; //128 делений; модульный режим (0x0000->T1CC0); начать выполнение;T1IF=0; &




nbsp; //снимаем флаг прерывания }/* главная функция-------------------------------------------------------*/void main( void





) { xtal_init(); led_init(); timer1_init();while ( 1 ); &





nbsp; //ожидание прерывания по переполнению }/*Подпрограмма обслуживания терминала T1-------------------------------------------------------*/#pragma vector=T1_VECTOR __interrupt



v oid T1_ISR( void ) {EA=0; //выключение прерывания led1 = !


led1; //светодиоды переключеныEA=1; //прерывание &nbsp

; T1CTL &=~0x10; //снять флаг прерывания }

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

В-третьих, таймер 2

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

Таймер 3/4

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

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

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






Предыдущая: [Пере-]Путешествие Zigbee (III): несколько важных экспериментов с CC2430 - внешние прерывания
Next: [Перезаменено] Путешествие Zigbee (V): Несколько важных экспериментов с CC2430 - Последовательная связь
收藏转播分享Закладка РелеTaobao
Код фермерской сети, публикуется только в процессе практики, столкнувшись с техническими трудностями, не вводите в заблуждение других.
Вы должны войти в систему, прежде чем сможете отправлять сообщения назад Войти | Зарегистрироваться

Эта версия интегральных правил


DISCLAIMER: Все программное обеспечение, материалы по программированию или статьи, опубликованные Code Farmer, предназначены только для использования в учебных и исследовательских целях; вышеуказанное содержимое не должно использоваться в коммерческих или незаконных целях, в противном случае все последствия будут возложены на самих пользователей. Это сайт информации из сети, спор об авторских правах не имеет никакого отношения к этому сайту. Вы должны полностью удалить вышеуказанное содержимое со своего компьютера в течение 24 часов после загрузки. Если вам понравилась программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшее подлинное обслуживание. Если есть какие-либо нарушения, пожалуйста, свяжитесь с нами по электронной почте, чтобы разобраться с этим.

Почта To:help@itsvse.com

QQ| ( 鲁ICP备14021824号-2)|Sitemap

GMT+8, 2024-9-17 14:50

Быстрый ответНазад к началуНазад к списку