架构师_程序员_码农网

Ім'я користувача Отримати пароль
Зареєструватися

QQ登录

Лише один крок, щоб почати

Пошук
架构师_程序员_码农网 " 架构师 ' 管理专区 & Область управління ' Скарги та пропозиції ' 回收站 ' 【转】Zigbee之旅(三):几个重要的CC2430基础实验- . - ...
Перегляд:4624|Відповідь: 0
打印 上一主题 下一主题

[转]Zigbee之旅(三):几个重要的CC2430基础实验--Зовнішнє переривання

[Скопіювати посилання]
Підніміться прямо до 跳转到指定楼层
власника будівлі
发表于 2014-10-30 23:16:46|只看该作者回帖奖励 | Зворотнийперегляд|Режим читання
I. Перехід від попереднього до наступного

  У попередній лекції ми ознайомилися з основним процесом розробки програм для CC2430 в IAR на прикладі невеликого експерименту з найпростішим миготінням світлодіодів. Ніж, принаймні, наточили (хоча я не дуже добре володію цим точильним каменем), і тепер настав час приступити до вбивства помилок :). Далі, давайте вивчимо кілька основних експериментів з CC2430. Кожен невеликий експеримент, розділений на "експериментальний вступ", "блок-схема програми", "експериментальний вихідний код і аналіз" трьома частинами опису.

  У цій статті пояснюється зовнішнє переривання.

По-друге, зовнішнє переривання(1) Вступ до експерименту

  Переривання - це внутрішній механізм мікроконтролера реального часу для обробки внутрішніх або зовнішніх подій. Коли відбувається якась внутрішня або зовнішня подія, система переривань мікроконтролера змусить процесор призупинити виконувану програму, але перейти до обробки події переривання, завершити обробку переривання, а потім повернутися до перерваної програми, продовжити виконання.

  Переривання поділяються на зовнішні та внутрішні, CC2430 містить загалом 18 джерел переривань (конкретний опис переривання та визначення вектора переривання ви можете знайти в " Китайському посібнику CC2430 ").

  Тепер давайте подивимось на принципову електричну схему цієї плати:

  Плата була підключена до кнопки S1 і P0.1, ефект, якого хоче досягти цей експеримент, полягає в тому, щоб викликати переривання P0.1 натисканням кнопки S1, а потім керувати вмиканням/вимиканням світлодіода LED1 в підпрограмі обслуговування переривань.

(2) Принцип експерименту та блок-схема

  Блок-схема експерименту виглядає наступним чином:

2011021811430713.png
c













(
3) Експериментальний код// заголовний файл#include // підфункція delay#define led1 P1_0#define led2 P1_1#define led3 P1_2#define led4 P1_3void Delay( unsigned n) { & &



nbsp; unsigned tt;for (tt = 0;tt<n;tt++);for (tt = 0;tt<n;tt++);for (tt = 0;tt<n;tt++); &






nbsp; for (tt = 0;tt<n;tt++);for (tt = 0;tt<n;tt++); }//Ініціалізація 32М кристалуvoid xtal_init( void ) { SLEEP &=~0x04; &
nbsp; //включити живленняwhile (!
(SLEEP & 0x40 )); //генератор кристалу увімкнено та стабільно працює CLKCON &=~0x47; &






nbsp; //Вибираємо 32МГц кварцовий генератор SLEEP |=0x04; }//Ініціалізація світлодіодівvoid led_init( void ) { P1SEL =0x00; &nbsp


; //P1 - звичайний порт вводу/виводу P1DIR |=0x0F; //P1.0 P1.1 P1.2 P1.3 Вихід








led1 = 0; led2 = 0; led3 = 0; led4 = 0; }//ініціалізація іо та зовнішнього перериванняvoid io_init( void ) { P0INP &=~0X02;



/ /P0.1 має pull-up та pull-down EA =1; //Загальний дозвіл переривання P0IE =1; &



nbsp; //Дозвіл переривання P 0 PICTL |=0X09; //Дозвіл переривання порту P0.1, тригер по спадаючому фронту P0IFG &=~0x02







; //Прапор переривання P0.1 очистити 0 };//головна функціяvoid main( void ) { xtal_init(); led_init();








io_init();while ( 1 ); //очікуємо переривання }//підпрограма обслуговування переривання#pragma vector = P0INT_VECTOR__interrupt void P0_ISR( void ) { EA =0;

/ / вимкнути затримку переривання Delay





( 10000 ); Delay(10000 ); Delay(10000 ); Delay(10000 ); Delay(10000); Delay(10000 ); &

nbsp; if ((P0IFG & 0x02 ) >0 ) //переривання за клавішею { P0IFG &=~0x02; &


nbsp; //прапор переривання P0.1 очистити 0 led1 = !led1; } P0IF =0; &

nbsp; //прапор переривання P0 очистити від 0 EA =1; &
nbsp; // вмикаємо переривання }

  Спочатку ініціалізуйте Unity Clock: виберіть кварцовий генератор з частотою 32 МГц.

  Потім ініціалізуйте світлодіоди: встановіть P1 як порт вводу/виводу загального призначення, встановіть напрямок P1.0 ~ P1.3 як вихід, а потім вимкніть 4 світлодіоди.

  Потім налаштуйте відповідні регістри SFR для зовнішніх переривань і увімкніть дозвіл переривань на всіх рівнях, задіявши 3 SFR: EA, IEN1, PICTL (для детального опису кожного SFR, будь ласка, зверніться до " Посібника з експлуатації CC2430 китайською мовою "):

     EA - загальний дозвіл на переривання;

     IEN1.5 -- дозвіл переривання P0;

     PICTL.3 -- дозвіл переривання порту P0.1;

     PICTL.0 -- встановити спадний фронт сигналу на вході P0.1 порту, щоб викликати тригер переривання.

  Потім використовуйте функцію while(1) в головній функції для очікування переривання.

Поради CC2430
(1) Короткий опис синтаксису призначення бітів
Дуже часто нам потрібно призначити значення (0 або 1) біту в однобайтовому SFR для точного керування апаратним пристроєм.
  

Деякі SFR
підтримують бітову адресацію, такі як TCON, P0 і т.д., в цей час призначення біта дуже просте, достатньо зробити запит в заголовному файлі ioCC2430.h в частині SFR Bit Access визначення біта може бути таким:
P0_0 = 0; // P0 перший біт присвоєння значення 0
P0_0 = 1; / / / P0 перший біт присвоєння значення 1
Однак, є SFR, які не
підтримують бітову адресацію, як у випадку з
першим бітом присвоєння значення
0
.
Однак, деякі SFR
не підтримують бітову адресацію, наприклад, PICTL у цьому експерименті, коли потрібно присвоїти значення одному з них, синтаксис наступний:
PICTL &= ~0x01; //присвоїти першому біту значення 0
PICTL |= 0x01; //присвоїти першому біту значення 1
Пам'ятайте, що &
amp;= ~, |= ~, |= ~,
|=
~,
|= P0_0
=
1; //присвоїти першому біту P0 значення 1
. amp;= ~, |= ці два загальних синтаксиси присвоєння бітів.
(2) Короткий опис дозволу переривання
Коли переривання використовується у програмі, воно повинно бути дозволене до того, як воно буде викликане.
  

C
51 система дозволу переривань, її ієрархічна структура дуже очевидна:
бос переривання: EA є босом, відповідальним за загальний дозвіл переривання:
EA = 1;
капітан
переривання: наступний для кожного функціонального компонента (наприклад, P0, таймер 1 і т.д.) дозволити управління, такі SFR, як правило, біт адресований, іменування, як правило, містить IE (переривання дозволу):
P0IE = 1;
члени
команди переривання
: відділення, але через
перериванняпрограми
,
переривання
повинно бути включено до того, як переривання спрацьовує.

кожне переривання члени команди
: команда, але оскільки кожен функціональний компонент також містить декілька переривань, тому останній рівень для кожного переривання є контролем дозволу переривання, такі SFR, як правило, не є порозрядними, імена зазвичай містять IE (Interrupt Enable) або IM (Interrupt Mask):
PICTL | = 0x01;
не потрібно запам'ятовувати SFR переривань. Немає необхідності запам'ятовувати SFR переривань, якщо ви розумієте ієрархію, а потім звертаєтесь до посібника або заголовних файлів, коли ви їх використовуєте.
(3) Написання програм
обробки переривань Використання переривань у програмі зазвичай складається з двох частин: написання підпрограми обслуговування переривань і відкриття вікна дозволу переривань.

Активація переривання була представлена вище, нижче наведено короткий вступ до підготовки підпрограми обслуговування переривання:
Перш за все, необхідно вказати вектор переривання, він може бути в заголовному файлі ioCC2430.h в частині запиту Interrupt Vectors, синтаксис наступний:
# pragma vector = Interrupt Vectors
,
а потім слідує підготовка обробника переривання, структура наступна:
___ interrupt void Ім'я Функції (___)


i
nterrupt void function name(void)
{
//при виникненні переривання
//обробка переривання
//прапор переривання очистити 0
//виключити переривання
}

III. висновок

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


</n;tt++).
</n;tt++);.
</n;tt++).
</n;tt++); </n;tt++); </n;tt++); </n;tt++); </n;tt++).
</n;tt++).




Попереднє: [Re-]Zigbee Journey (II): перша програма CC2430 - експеримент з миготінням світлодіодів
Наступний: [Повторна] подорож Zigbee (4): кілька важливих базових експериментів з CC2430 - переривання таймера
Код фермерської мережі, опублікований лише в процесі практики, зіткнувся з технічними труднощами, не вводьте в оману інших.
Ви повинні увійти перед тим, як відповісти Увійдіть | Зареєструйтеся

Ця версія інтегральних правил Відповісти


ВІДМОВА ВІД ВІДПОВІДАЛЬНОСТІ: Все програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer, можуть використовуватися тільки в навчальних і дослідницьких цілях; вищевказаний вміст не повинен використовуватися в комерційних або незаконних цілях, в іншому випадку всі наслідки несуть самі користувачі. Інформація на цьому сайті взята з мережі, суперечки про авторські права не мають ніякого відношення до цього сайту. Ви повинні повністю видалити вищевказаний контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримайте справжнє програмне забезпечення, придбайте реєстрацію та отримайте кращий справжній сервіс. Якщо є якесь порушення, будь ласка, зв'яжіться з нами електронною поштою, щоб розібратися з ним.

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

QQ | ( 鲁ICP备14021824号-2)|Мапа сайту

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

Швидка відповідьПовернутися до початкуПовернутися до списку