架构师_程序员_码农网

Потребителско име Извличане на парола
Регистрация

QQ登录

Само една стъпка, за да започнете

Търсене
Преглед:5109|Отговор: 0
打印 上一主题 下一主题

[Превод] Zigbee Journey (IV): Няколко важни основни експеримента с CC2430 - прекъсване на таймера

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

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

  Тъй като авторът също едва се докосва до CC2430, опитът в проекта, включващ таймер, е на практика нулев, затова не възнамерявам (и не мога да помогна) за задълбочен анализ на таймера. Тази статия се отнася само за използването на прекъсване на брояча на таймера 1, за да се направи просто експериментално изследване, тъй като неговата функция за улавяне на вход/изход за сравнение/PWM е пропусната. Таймер 2 и таймер 3/4 също са представени само накратко. Чакаме силата на автора да достигне определено ниво на огъня, след което да застане на височината на бойния опит на Zigbee, за да подобри това есе.

Таймер 1

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

  Таймерът има много важна концепция: режим на работа.

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

  По-долу е представено въвеждането на трите режима от китайското ръководство на CC2430:



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

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

  В модулния режим на таймера интервалът на мигане на светодиода се контролира точно да бъде 1s, т.е.: светло 0,5s → тъмно 0,5s → светло 0,5s → тъмно 0,5s ...... → светло 0,5s → тъмно 0,5s (т.е. моментът на преминаване от тъмно към светло е 1s). Превключването на светло/тъмно се реализира чрез прекъсване на преливането.

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

(3) Свързани изчисления

  Както беше споменато по-горе, състоянието на светодиода е: светло 0,5s → тъмно 0,5s → светло 0,5s → тъмно 0,5s ...... → светло 0,5s → тъмно 0,5s, и трябва да се постигне с прекъсване на препълването, така че е необходимо периодът на препълване на таймера да бъде 0,5s. За тази цел трябва да се изчисли съответната стойност на препълване (временно зададена на N).

  Тактовата честота на системата е избрана като 32 MHz, а тактовата честота, предоставяна на таймера, е 16 MHz по подразбиране (и двете се конфигурират чрез специалния функционален регистър 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; //изберете 32MHz кристален осцилатор 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; }/*Инициализация на T1---------------------------



- ---------------------------*/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; //изчаква прекъсване за препълване }/* Подпрограма за обслужване на терминал Т1-------------------------------------------------------*/#pragma vector=T1_VECTOR__interrupt



v oid T1_ISR( void ) {EA=0; //изключване на прекъсването led1 = !


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

; T1CTL &=~0x10; // изчистване на флага за прекъсване }

  Добре, компилирайте програмата и онлайн отстраняване на грешки, развойната платка на LED1 мига, както се очаква, усещате интервала на мигане от около 1 s. Но това не е достатъчно, за да докажете успеха на експеримента, ако можете стриктно да определите интервала от 1s, ще бъде перфектно ~ така че отворих часовника на WIN 7 (кликнете върху дясната страна на лентата на задачите, времето може да бъде). Докато наблюдавах втората стрелка, с ъгълчето на окото си погледнах мигащия светодиод1. Резултатът е следният: за две минути темпото на двете е почти идентично (тази точност може да се толерира ~). В този момент може да се каже, че експериментът е в общи линии завършен, хехехе ~

Трето, таймер 2

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

Таймер 3/4

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

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

  В този раздел научихме метода за отчитане на прекъсването на препълването на таймер 1 и постигнахме прецизно управление на интервала на мигане на светодиода от 1 s. Ще се спрем само на другите таймери, а по-късно ще се върнем да ги добавим. В следващия раздел ще се запознаем с комуникацията през серийния порт на CC2430.






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

Тази версия на интегралните правила


ОТКАЗ ОТ ПОЛЗВАНЕ: Целият софтуер, материали за програмиране или статии, публикувани от Code Farmer, са ограничени за използване само за учебни и изследователски цели; горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай всички последици ще бъдат понесени от самите потребители. Този сайт информация от мрежата, спор за авторски права няма нищо общо с този сайт. Трябва напълно да премахнете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето му. Ако програмата ви харесва, моля, подкрепете оригиналния софтуер, купете регистрацията и получете по-добро оригинално обслужване. Ако има някакво нарушение, моля, свържете се с нас по имейл, за да се справим с него.

Поща To:help@itsvse.com

QQ| ( 鲁ICP备14021824号-2)|Карта на сайта

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

Бърз отговорВърнете се в началотоВърнете се в списъка