|
1. 上層と下層の接続 前回の講義では、IARがCC2430プログラムを開発する基本的なプロセスを、シンプルなLED点滅実験を通じて紹介しました。 ナイフは研いでいます(私の砥石は良くありませんが)、これから:)虫の駆除を始めます。 次に、CC2430のいくつかの基本的な実験を学びましょう。 各小規模実験は「実験導入」「プログラムフローチャート」「実験的ソースコードと解析」の3つのパートに分かれています。 この記事では外部からの中断について説明します。 2. 外部の中断(1) 実験への導入割り込みは、マイクロコントローラが内部または外部のイベントをリアルタイムで処理するための内部メカニズムです。 内部または外部のイベントが発生すると、マイクロコントローラの割り込みシステムはCPUに実行中のプログラムを一時停止させ、割り込みイベントを処理させます。 割り込みは外部割り込みと内部割り込みに分けられ、CC2430には合計18の割り込み源が含まれています(割り込みベクターの具体的な説明や定義については、CC2430中国語マニュアル》)。 では、この開発ボードの回路図を見てみましょう。
S1ボタンは開発ボード上のP0.1に接続されており、この実験の効果はS1ボタンを通じてP0.1の割り込みをトリガーし、割り込みサービスサブプログラムでLED1のオン/オフを制御することです。 (2) 実験原理とフローチャート実験的なフローチャートは以下の通りです。
(3) 実験的ソースコード//头文件
#include
//延时子函数
#defineLED1 P1_0
#defineLED2 P1_1
#defineLED3 P1_2
#defineLED4 P1_3
虚無遅延(署名なしn)
{
署名なしtt;
に対して(tt =0; tt<n; tt++);
に対して(tt =0; tt<n; tt++);
に対して(tt =0; tt<n; tt++);
に対して(tt =0; tt<n; tt++);
に対して(tt =0; tt<n; tt++);
}
//32M晶振初始化
虚無xtal_init(虚無)
{ 眠り &= ~0x04; //都上电
ただし(! (眠りと0x40)); //晶体振荡器开启且稳定 CLKCON &= ~0x47; //32MHzのクリスタルオシレーターを選びましょう 眠り |=0x04;
}
//LED灯初始化
虚無led_init(虚無)
{ P1SEL =0x00; P1は通常のI/Oポートです P1DIR |=0x0F; P1.0 P1.1 P1.2 P1.3 出力
led1 = 0; led2 = 0; led3 = 0; led4 = 0;
}
//io及外部中断初始化
虚無io_init(虚無)
{ P0INP &= ~0X02; //P0.1有上拉、下拉
EA =1; //总中断使能
P0IE =1; //P0中断使能
PICTL |= 0X09; //P0.1口中断使能,下降沿触发
P0IFG &= ~0x02; //P0.1中断标志清0 };
//主函数
虚無メイン(虚無)
{ xtal_init(); led_init(); io_init();
ただし(1); //等待中断
}
//中断服务子程序
#pragma ベクトル = P0INT_VECTOR
__interrupt 虚無P0_ISR(虚無)
{ EA =0; 門が遮られた
遅延(10000); 遅延(10000); 遅延(10000); 遅延(10000); 遅延(10000);
もし((P0IFG &0x02) >0) //按键中断 { P0IFG &= ~0x02; //P0.1中断标志清0 led1 = !led1; } P0IF =0; //P0中断标志清0
EA =1; //开中断
}
まず、システムクロックを初期化します。32MHzのクリスタルオシレーターを選択します。 次にLEDを初期化します:P1を一般的なI/Oポートに設定し、P1.0 ~ P1.3方向を出力に設定し、4つのLEDライトを消します。 次に、外部割り込み用の関連するSFRレジスタを設定し、3つのSFRを含むすべてのレベルで割り込みを有効にします。EA、IEN1、ピクトル(各SFRの詳細については、CC2430中国語マニュアル》): EA- トータル割り込み可能; IEN1.5- P0割り込み有効化; PICTL.3—— P0.1ポート割り込み有効; PICTL.0—— P0.1ポート入力ドロップエッジを設定して割り込みトリガーを発生させます。 その後、メイン関数でwhile(1)を使い、割り込みを待ちます。 CC2430のヒント(1) ビット割り当て構文の要約 多くの場合、ハードウェアデバイスを正確に制御するために、SFRの1バイトにビット(0または1)を割り当てる必要があります。 SFRがありますサポートビットアドレッシング例えば、TCON、P0などでは、対点の割り当ては非常に簡単で、ioCC2430.hヘッダーファイルのSFRビットアクセスセクションのビット定義をクエリするだけです。 P0_0 = 0;// P0の最初の桁に0を割り当てる P0_0 = 1;// P0の最初の数字に値1を割り当てます
しかし、一部のSFRは存在しませんビットアドレッシングはサポートされていません、この実験の通りピクトルここで、そのうちの1つに値を割り当てたい場合、構文は以下の通りです: PICTL &= ~0x01; 最初の数字に0の値を割り当てます PICTL |= 0x01; 最初の数字に値1を割り当てます
覚えていればいい&= ~,|=これら2つは一般的に使われるビット割り当て構文です。 (2) 中断実現の要約 割り込みがプログラムに関与している場合、割り込みがトリガーされる前に割り込みが有効化されなければなりません。 C51割り込み有効システムの階層は非常に明白です: Interrupt Boss: EAボスが責任者だ全般割り込み有効化: EA = 1;
各分隊長が中断した: 次はそれぞれのものについてです機能的部品(例えばP0、タイマー1など)、これらのSFRは一般的にビットアドレス指定可能であり、名前には一般的にIE(割り込み有効)が含まれます。 P0IE = 1;
各チームメンバーが中断された: Squad しかし、各特徴には複数の割り込みも含まれているため、最後のレベルはこれに関するものだあらゆる中断このタイプのSFRは一般的にビットレスでアドレス指定ができず、通常は名前にIE(割り込み有効化)またはIM(割り込みマスク)が含まれています。 PICTL |=0x01;
割り込みを繰り返し練習する必要はなく、階層を理解してからマニュアルやヘッダーファイルを調べる時間を取りましょう。 (3) プログラムの書き込みを中断する プログラムにおける割り込みの使用は一般的に2つの部分から成り立ちます。割り込みサービスサブプログラムの書き込みと割り込み有効化の開放です。 割り込み関数は上記で紹介されており、以下は割り込みサービスサブプログラムの作成に関する簡単な紹介です。 まず指定してくださいブレイクベクトルioCC2430.hヘッダーファイルの割り込みベクターセクションで以下の構文でクエリ可能です。 #pragma ベクトル = 割り込みベクトル
その後、すぐに割り込みハンドラを書きます。構造は以下の通りです: __interrupt void 関数名 (void) { //开中断 //中断处理 //中断标志清0 //关中断 }
3. 結論本記事ではCC2430に基づく単純な外部割り込みの実装方法を紹介し、割り込みの基礎の後、もう一つの非常に重要なモジュールであるタイマーを紹介します。 CC2430には合計4つのタイマーがあり、タイマー1、タイマー2、タイマー3/4(3と4は基本的に同じ用途です)の3つのカテゴリーに分けられます。 </n; tt++); </n; tt++); </n; tt++); </n; tt++); </n; tt++);
|