すべてのリンクのコースを見て:
4.9ウォッチドッグ実験
1. CC2530ウォッチドッグの仕事を学び、
システム2.学習ウォッチドッグ機能動作機構と
、それはソフトウェアプログラムの暴走の場合には、システムをリセットする重要な役割をしている、ウォッチドッグには見知らぬ人、およびシステムの信頼性の高い動作のためのウォッチドッグべきではないプロジェクトの開発リーダーで持っていた経験を持っていますプログラムは通常の動作を再開しますが、前提は、犬を養うために調節されていることを確認します。
CC2530のウォッチドッグ制御は機能表4-9に説明されたレジスタにのみWDCTLを含む、簡単です:
表4-9ウォッチドッグのレジスタ制御関連
システム電源モード制御レジスタPCON(0x87の) |
ビット[7:4]のカウンタ値をクリア |
|
4が連続0xAが内ウォッチドッグサイクルを書き込んだ場合ウォッチドッグ・モードでは、0x5は、WDTをクリアします。犬を養うために言及。 |
WDT動作モード選択レジスタのビット[3:2] |
00 |
IDLE |
|
01 |
IDLE(未使用) |
||
10 |
ウォッチドッグ・モード |
||
11 |
タイマーモード |
||
ウォッチドッグサイクルセレクトレジスタのビット[1:0] |
00 |
1秒 |
|
01 |
0.25秒 |
||
10 |
15.625ミリ秒 |
||
11 |
1.9ミリ |
次のようにメニューに関連するレジスタは、具体的に説明します。
Init_Watchdog:
WDCTL = 0x00が; //オープンIDLEにウォッチドッグを設定する必要があります
WDCTL | = 0x08の; // 1秒の時間間隔、ウォッチドッグ・モード
FeedDog:
WDCTL = 0xA0を、レジスタDOGによって//説明
WDCTL = 0x50を;
次のように具体的な手順は以下のとおりです。
#include <ioCC2530.h>
#define uint unsigned int
#define uchar unsigned char
//定义控制LED灯的端口
#define LED1 P1_0
#define LED2 P1_1
//函数声明
void Delayms(uint xms);//延时函数
void InitLed(void); //初始化P1口
/****************************
//延时函数
*****************************/
void Delayms(uint xms) //i=xms 即延时i毫秒
{
uint i,j;
for(i=xms;i>0;i--)
for(j=587;j>0;j--);
}
/****************************
//初始化程序
*****************************/
void InitLed(void)
{
P1DIR |= 0x03; //P1_0、P1_1定义为输出
LED1 = 1; //LED1灯熄灭
LED2 = 1; //LED2灯熄灭
}
void Init_Watchdog(void)
{
WDCTL = 0x00; //这是必须的,打开IDLE才能设置看门狗
WDCTL |= 0x08;
//时间间隔一秒,看门狗模式
}
void FeetDog(void)
{
WDCTL = 0xa0;
WDCTL = 0x50;
}
/***************************
//主函数
***************************/
void main(void)
{
InitLed(); //调用初始化函数
Init_Watchdog();
LED1=1;
while(1)
{
LED2=~LED2; //仅指示作用。
Delayms(300);
LED1=0;
//通过注释测试,观察LED1,系统在不停复位。
FeetDog();//防止程序跑飞
}
}
イヌのタイミング、D3上で動作するソフトウェア・プログラム(LED1)は受電長い明るい場合には、D4(LED2)は、遅延に従って点滅します。
DOGコメントプログラムは、ソフトウェア・プログラムはまた、犬の周波数で点滅し、それによってD3(LED1)を引き起こす、予め設定された周波数に応じて犬がリセットされ、プルーフシステムリセットを保ちます。