?? main.c
字號:
/****************************************Copyright (c)**************************************************
** Guangzou ZLG-MCU Development Co.,LTD.
** graduate school
** http://www.zlgmcu.com
**
**--------------File Info-------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2004-09-16
** Last Version: 1.0
** Descriptions: The main() function example template
**
**------------------------------------------------------------------------------------------------------
** Created by: Chenmingji
** Created date: 2004-09-16
** Version: 1.0
** Descriptions: The original version
**
**------------------------------------------------------------------------------------------------------
** Modified by: Chenxibing
** Modified date: 2005-01-19
** Version:
** Descriptions: 看門狗溢出復(fù)位演示實驗,在Flash中進行。
**
********************************************************************************************************/
#include "config.h"
#define LED1 1 << 18 // P0.18控制LED1
#define KEY1 1 << 16 // P0.16
#define KEY2 1 << 17 // P0.17
#define BEEP 1 << 7 // P0.7控制蜂鳴器
/*
********************************************************************************************************
** 函數(shù)名稱: main
** 功能描述: 打開看門狗,KEY1停止喂狗,KEY2清除看門狗溢出標志
*******************************************************************************************************
*/
int main(void)
{
uint32 i,j;
PINSEL0 = 0x00000000; // 管腳連接GPIO
PINSEL2 = PINSEL2 & (~0x08); // P1[25:16]連接GPIO
IO0DIR = BEEP; // 蜂鳴器控制口輸出
IO1DIR = LED1; // LED1控制口輸出
IO0SET = BEEP; // 關(guān)閉蜂鳴器
/* 如果曾經(jīng)發(fā)生過看門狗復(fù)位,則等待清除看門狗超時標志,在未清除之前蜂鳴器一直鳴叫 */
while(( WDMOD & 0x04 ) == 0x04) // 判斷看門狗超時標志
{
/* 看門狗超時標志未清除 */
for(j = 0; j < 0xFFFFF; j++); // 蜂鳴器鳴叫周期
if((IO0SET & BEEP) == 0)
{
IO0SET = BEEP; // 關(guān)閉蜂鳴器
if((IO0PIN & KEY2) == 0) // 等待按鍵KEY2
WDMOD = 0x00; // 如果KEY2按下,則軟件清零看門狗超時標志位
}
else IO0CLR = BEEP; // 蜂鳴器鳴叫
}
/* 如果沒有發(fā)生看門狗復(fù)位或者看門狗超時標志已經(jīng)清除,則初始化看門狗 */
WDTC = 0xff000; // 設(shè)置看門狗定時器參數(shù)
WDMOD = 0x03; // 設(shè)置看門狗模式:中斷且復(fù)位
WDFEED = 0xAA; // 第一次喂狗啟動WDT
WDFEED = 0x55;
/* 正常情況下,閃爍LED1 */
while(1)
{ /* 用按鍵模擬導(dǎo)致無法周期性喂狗的意外情況 */
while((IO0PIN & KEY1) == 0); // 如果按鍵1按下,就停止喂狗
for(j = 0; j < 0xFF; j++) // LED1閃爍周期
{
for(i = 0; i < 0x0FFF; i++); // 喂狗周期
WDFEED = 0xAA; // 喂狗時序
WDFEED = 0x55;
}
/* 閃爍LED1 */
if((IO1SET & LED1) == 0) IO1SET = LED1;
else IO1CLR = LED1;
}
return 0;
}
//add by zaken 增加測試計算(程序運行)時間的子函數(shù)
//看門狗計數(shù)開始值 單位(4*plck)
#define one_second 4*Fcclk //一秒的計數(shù)值
volatile uint32 wStartCnt=0;
volatile uint32 wEndCnt=0;
//啟動時間計數(shù)
void timer_start()
{
// WDMOD=0x03;//設(shè)置看門狗模式
WDTC=0xffffffff;//設(shè)置最大值
WDFEED=0xaa;
WDFEED=0x55;//喂狗
wStartCnt=WDTV;//讀出此時的計數(shù)值
}
//取得運行的時間
uint32 get_timer()
{
wEndCnt=WDTV;//讀出此時的計數(shù)值
WDFEED=0xaa;
WDFEED=0x55;//喂狗
return(uint32)(wEndCnt-wStartCnt);
}
/*********************************************************************************************************
** End Of File
********************************************************************************************************/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -