架构师_程序员_码农网

K Parolayı al
Kayıt Olun

QQ登录

Başlamak için sadece bir adım

Arama
架构师_程序员_码农网 "架构师 ' 管理专区&Yönetim Alanı ' Şikayetler ve Öneriler ' 回收站 ' 【转】Zigbee之旅(三):几个重要的CC2430基础实验- . - ...
Görüntüleme:4624|Yanıt: 0
打印 上一主题 下一主题

[转]Zigbee之旅(三):几个重要的CC2430基础实验--Harici Kesme

[Bağlantıyı kopyala]
D 跳转到指定楼层
bina sahibi
发表于 2014-10-30 23:16:46|只看该作者回帖奖励|TersGözat|Okuma Modu
I. Bir öncekinden bir sonrakine devam etmek

  Bir önceki derste, en basit LED yanıp sönmesi ile küçük bir deney yaparak IAR'da CC2430 programları geliştirmenin temel sürecine aşina olduk. Bıçak en azından bilendi (her ne kadar bu bileme taşında çok iyi olmasam da) ve şimdi böcekleri kesmeye başlama zamanı :). Sonra, birkaç temel CC2430 deneyini öğrenelim. Her küçük deney, açıklamanın "deneysel giriş", "program akış şeması", "deneysel kaynak kodu ve analizi" üç bölümüne ayrılmıştır.

  Bu makale harici kesmeyi açıklamaktadır.

İkinci olarak, harici kesme(1) Deneye giriş

  Kesme, dahili bir mekanizma olan dahili veya harici olaylarla başa çıkmak için gerçek zamanlı bir mikrodenetleyicidir. Bir tür dahili veya harici olay meydana geldiğinde, mikrodenetleyici kesme sistemi CPU'yu yürütülmekte olan programı duraklatmaya zorlar, ancak kesme olayı işlemeye gitmek için, kesme işlemi tamamlanır ve ardından program tarafından kesilmek üzere geri döner, yürütmeye devam eder.

  Kesmeler harici kesmelere ve dahili kesmelere ayrılır, CC2430 toplam 18 kesme kaynağı içerir (özel kesme açıklaması ve kesme vektör tanımı, " CC2430 Çince Kılavuzuna " başvurabilirsiniz).

  Şimdi bu geliştirme kartının devre şemasına bir göz atalım:

  Geliştirme kartı S1 düğmesine ve P0.1'e bağlanmıştır, bu deneyin elde etmek istediği etki, S1 tuşuna basarak P0.1'in kesilmesini tetiklemek ve ardından kesme hizmeti alt programında LED1 ışığını / çıkışını kontrol etmektir.

(2) Deneysel prensip ve akış şeması

  Deneyin akış şeması aşağıdaki gibidir:

2011021811430713.png
c













(
3) Deneysel kaynak kodu// başlık dosyası#include // gecikme alt fonksiyonu#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++); }//32M kristal başlatmavoid xtal_init( void ) { SLEEP &=~0x04; &
nbsp; //tüm güç açmawhile (!
(SLEEP & 0x40 )); //kristal osilatör açık ve kararlı CLKCON &=~0x47; &






nbsp; //Select 32MHz crystal oscillator SLEEP |=0x04; }//LED başlatmavoid led_init( void ) { P1SEL =0x00; &nbsp


; //P1 normal bir I/O portudur P1DIR |=0x0F; //P1.0 P1.1 P1.2 P1.3 Çıkış








led1 = 0; led2 = 0; led3 = 0; led4 = 0; }//io ve harici kesme başlatmavoid io_init( void ) { P0INP &=~0X02;



/ /P0.1'de pull-up ve pull-down vardır EA =1; //Toplam kesme etkinleştirme P0IE =1; &



nbsp; //P0 kesme etkinleştirme PICTL |=0X09; //P0.1 port kesme etkinleştirme, düşen kenar tetikleme P0IFG &=~0x02







; //P0.1 kesme bayrağı clear 0 };//ana fonksiyonvoid main ( void ) { xtal_init(); led_init();








io_init();while ( 1 ); //wait for interrupt }//interrupt service subroutine#pragma vector = P0INT_VECTOR__interrupt void P0_ISR( void ) { EA =0;

/ / kesme gecikmesini kapat





( 10000 ); Gecikme(10000 ); Gecikme(10000 ); Gecikme( 10000 ); Gecikme(10000 ); &

nbsp; if ((P0IFG & 0x02 ) >0 ) //anahtar kesmesi { P0IFG &=~0x02; &


nbsp; //P0.1 kesme bayrağı clear 0 led1 = !led1; } P0IF =0; &

nbsp; //P0 kesme bayrağı temiz 0 EA =1; &
nbsp; // kesmeyi aç }

  Önce Birlik Saatini başlatın: 32MHz kristal osilatör seçin.

  Ardından LED'leri başlatın: P1'i genel amaçlı I/O portu olarak ayarlayın, P1.0 ~ P1.3 yönünü çıkış olarak ayarlayın ve ardından 4 LED'i kapatın.

  Daha sonra harici kesmeler için ilgili SFR kayıtlarını yapılandırın ve 3 SFR içeren tüm seviyelerde kesme etkinliğini açın: EA, IEN1, PICTL (her SFR'nin ayrıntılı açıklaması için lütfen " CC2430 Çince Kılavuzuna " bakın):

     EA -- toplam kesme etkinleştirme;

     IEN1.5 -- P0 kesme etkinleştirme;

     PICTL.3 -- P0.1 port kesme etkinleştirme;

     PICTL.0 -- P0.1 port girişinin düşen kenarını kesme tetiklemesine neden olacak şekilde ayarlayın.

  Daha sonra ana fonksiyonda while(1) kullanarak kesmeyi bekleyin.

CC2430 İpuçları
(1) Bit Atama Sözdizimi Özeti
Çoğu zaman, bir donanım aygıtını tam olarak kontrol etmek için tek baytlık bir SFR'deki bir bite bir değer (0 veya 1) atamamız gerekir.
  

T
CON, P0, vb. gibi bazı SFR'ler bit adreslemeyi destekler, şu anda bitin atanması çok basittir, sadece SFR'deki ioCC2430.h başlık dosyasını sorgulayın Bit tanımının Bit Erişimi kısmı şöyle olabilir:
P0_0 = 0; // P0 0 değerinin atanmasının ilk
biti
P0_0 = 1; / / / P0 1 değerinin atanmasının ilk
biti
Ancak,
ilk bitin ilk
bitinin
ilk
bitinin
ilk
bitinin
değerinin atanmasının ilk
biti durumunda
olduğu
gibi,
bit
adreslemeyi desteklemeyen
SFR'ler vardır
.
ikinci
bitin ilk bitinin ilk bitinin
.
Ancak,
bu deneydeki PICTL gibi
bazı SFR'ler
bit adreslemeyi desteklemez, bunlardan birine bir değer atamak istediğinizde sözdizimi aşağıdaki gibidir:
PICTL
&= ~0x01; //ilk bite 0 değeri
atayın
PICTL |= 0x01; //ilk bite 1 değeri atayın
&
amp;= ~, |= ~, |=
P0_0
=
1; //P0'ın ilk bitine 1 değeri atayın
. amp;= ~, |= bu iki yaygın bit atama sözdizimi.
(2) Kesme Etkinleştirme Özeti
Bir kesme bir programa dahil olduğunda, kesme tetiklenmeden önce etkinleştirilmelidir.
  

C
51 kesme etkinleştirme sistemi, hiyerarşik yapısı çok açıktır:
kesme patronu: EA patrondur, toplamkesme etkinliğinden sorumludur:
EA = 1;
kesme ayırma kaptanı
:
sonraki her işlevsel bileşen içindir (P0, zamanlayıcı 1, vb.) kontrolü etkinleştirir, bu tür SFR genellikle bit adreslenebilir, adlandırma genellikle IE (Kesme Etkinleştirme) içerir:
P0IE = 1;
kesme ekibi
üyeleri: ayırma
,
ancak
programınkesintiye
uğraması
nedeniyle
, kesme
tetiklenmeden önce
kesme
etkinleştirilmelidir.

h
er bir kesme ekibi üyeleri: ekip ancak her bir işlevsel bileşen aynı zamanda birden fazla kesme içerdiğinden, son seviye her bir kesme etkinleştirme kontrolü içindir, bu tür SFR genellikle bit adreslenebilir değildir, adı genellikle IE (Kesme Etkinleştirme) veya IM (Kesme Maskesi) içerir:
PICTL | = 0x01;
kesme SFR'lerini ezberlemeye gerek
yoktur Hiyerarşiyi anladığınız sürece kesme SFR'lerini ezberlemenize gerek yoktur ve bunları kullandığınızda kılavuza veya başlık dosyalarına başvurun.
(3) Kesme Programlarının Yazılması
Bir programda kesme kullanımı genellikle iki bölümden oluşur: kesme servis alt programının yazılması ve kesme etkinliğinin açılması.

K
esme etkinleştirme yukarıda tanıtılmıştır, aşağıda kesme hizmet alt rutininin hazırlanmasına kısa bir giriş yapılmıştır:
Öncelikle
,
kesme
vektörünü
belirtin, sorgunun Kesme Vektörleri bölümünde ioCC2430.h başlık dosyasında olabilir, sözdizimi aşağıdaki gibidir:
# pragma vector =
Kesme
Vektörleri
ve ardından kesme işleyicisinin hazırlanması, yapı
aşağıdaki
gibidir
:
___
interrupt void İşlev Adı (___)


i
nterrupt void function name(void)
{
//on
interrupt //interrupt handling
//interrupt flag clear 0
//off
interrupt
}

III. Sonuç

  Bu makale, CC2430'a dayalı basit bir harici kesme uygulama yöntemini, kesme temelinde tanıtıyor, ardından çok önemli bir modül olan zamanlayıcıyı tanıtıyoruz. CC2430, üç kategoriye ayrılabilen toplam dört zamanlayıcıya sahiptir: zamanlayıcı 1, zamanlayıcı 2, zamanlayıcı 3/4 (aynı temelin kullanımının 3 ve 4'ü). aynı).


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




Önceki: [Re-]Zigbee Yolculuğu (II): ilk CC2430 programı - LED yanıp sönme deneyi
Sonraki: [Re-]Zigbee Yolculuğu (4): Birkaç önemli CC2430 temel denemesi - zamanlayıcı kesmeleri
Çiftçi ağı kodu, sadece uygulama sürecinde yayınlandı, teknik zorluklarla karşılaştı, başkalarını yanıltmayın.
Geri gönderi yapabilmeniz için giriş yapmanız gerekmektedir Giriş Yap | Kayıt Ol

İntegral kurallarının bu versiyonu


YASAL UYARI: Code Farmer tarafından yayınlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amacıyla kullanılmak üzere sınırlandırılmıştır; yukarıdaki içerikler ticari veya yasadışı amaçlarla kullanılamaz, aksi takdirde tüm sonuçlar kullanıcıların kendileri tarafından karşılanacaktır. Bu site bilgileri ağdan alınmıştır, telif hakkı anlaşmazlığının bu site ile hiçbir ilgisi yoktur. Yukarıdaki içeriği indirdikten sonraki 24 saat içinde bilgisayarınızdan tamamen kaldırmalısınız. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kaydı satın alın ve daha iyi orijinal hizmet alın. Herhangi bir ihlal varsa, bununla ilgilenmek için lütfen bizimle e-posta yoluyla iletişime geçin.

Posta To:help@itsvse.com

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

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

Hızlı YanıtBaşadön Listeye dön