📄 timer.c
字号:
/*
*******************************************************************************
* Copyright (c) 2005, Comba Telecom System
* All Rights Reserved
*
* Purpose : timer File
* File Name : timer.c
* Chip type : LPC22XX(ARM7TDMI)
* IDE : ADS1.2
* Revision history :
01a,2005/08/29,Lu jiangmin -- Creation(written),re. zlgmcu Chen mingji
* Description :
*******************************************************************************
*/
#define _DEFINE_VAR_TIMER
#include "config.h"
/*
*******************************************************************************
* 函数功能: 向量IRQ(定时器0)中断服务
* 说 明:
* 1. 输入:
无.
输出:
无.
* 2. 基本方法:
a)清零MR0中断标志;
b)调用OS节拍.
* 3. 注意:
a)通知中断控制器中断结束!
*******************************************************************************
*/
void Timer0_Exception (void)
{
T0IR = 0x01; //清零MR0中断标志
VICVectAddr = 0; //通知中断控制器中断结束
OSTimeTick();
}
/*
*******************************************************************************
* 函数功能: 初始化定时器0
* 说 明:
* 1. 输入:
无.
输出:
无.
* 2. 基本方法:
a)采用T0MR0匹配,T0TC由0开始计数,计到T0MR0时产生中断,并复位T0TC.
* 3. 注意:
a)用做系统节拍,(匹配)中断方式;
b)调整合理的计数器频率.
*******************************************************************************
*/
void Timer0Init (void)
{
T0IR = 0xffffffff;
T0TC = 0;
T0PR = 0; //计数器频率为Fpclk
T0MCR = 0x03;
T0MR0 = (Fpclk / OS_TICKS_PER_SEC);
T0TCR = 0x01;
}
/*
*******************************************************************************
* 函数功能: 初始化定时器1
* 说 明:
* 1. 输入:
无.
输出:
无.
* 2. 基本方法:
a)采用T1MR0匹配,T1TC由0开始计数,计到T1MR0时完成,停止TC和PC,并清定时
器1使能位.
* 3. 注意:
a)用做系统微秒级定时,(匹配)查询方式;
b)调整合理的计数器频率.
*******************************************************************************
*/
void Timer1Init (void)
{
T1IR = 0xffffffff;
T1TC = 0;
T1PR = 4; //计数器频率为Fpclk/5
T1MCR = 0x04;
T1TCR = 0x00;
}
/*
*******************************************************************************
* 函数功能: 微秒级定时函数
* 说 明:
* 1. 输入:
value--定时值(单位:1uS).
输出:
无.
* 2. 基本方法:
a)采用定时器1,装载合适的TC和MR0值后,启动计数.
* 3. 注意:
a)为了保证计算过程中不溢出,规定定时值不超过300uS;
b)必须进行临界区保护,防止不可重入.
*******************************************************************************
*/
void sysf_delay (INT32U value)
{
if (value > 300)
{
value = 300;
}
OS_ENTER_CRITICAL();
T1TC = 0; //复位TC!
T1MR0 = (Fpclk / 5) * value / 1000000;
T1TCR = 0x01;
while (T1TCR & 0x01);
OS_EXIT_CRITICAL();
}
/*
*******************************************************************************
* 函数功能: 初始化看门狗功能
* 说 明:
* 1. 输入:
runoverTime--看门狗溢出时间(单位:毫秒).
输出:
无.
* 2. 基本方法:
a)设置看门狗定时值;
b)启动看门狗功能.
* 3. 注意:
a)看门狗溢出直接复位,不用中断;
b)建议溢出时间为500mS左右.
*******************************************************************************
*/
void WDInit (INT32U runoverTime)
{
WDTC = runoverTime * (Fcclk / 1000) / 4;
WDMOD |= 0x03;
m_WDFeed;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -