⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer.c

📁 这个是基于ARM7的相关驱动代码
💻 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 + -