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

📄 timer0.c

📁 Rabbit 32Bit RTOS源代码
💻 C
字号:
/*********************************************************************
*                   Copyright (c) 2011-2012,李士伟
*                     All rights reserved.
*文 件 名:timer0.c
*描    述:timer0驱动源文件
*当前版本:V1.00
*作    者:李士伟
*创建日期:2011.09.30
**********************************************************************/
#include <drivers\lpc2103\target.h>
#include <drivers\lpc2103\timer0.h>
#include <drivers\lpc2103\LPC2103.h>
#include <drivers\lpc2103\vic.h>
#include <kernel\asm.h>
#include <kernel\time.h>
#include <kernel\flag.h>

/*********************************************************************
*函 数 名:Timer0_Init
*描    述:初始化timer0,并注册VIC中断,中断优先级为0(最高IRQ优先级)
*输入参数:无
*输出参数:无
*返 回 值:无
*注    意:timer0为系统时钟中断源,不能作其它用途
*          《中断周期计算》
*
*          T0PC计数频率:
           F_t0pc = Fpclk  (Hz)
*
*          T0TC计数频率:
*                    F_t0pc
*          F_t0tc = ---------  (Hz)
*                   T0PR + 1
*
*          当T0TC == T0MR0 时产生中断
*                      T0MR0
*          中断周期 = -------  (s)
*                      F_t0tc
*
*         《硬件动作伪代码》
*         每个APB时钟 T0PC++;
*         if (T0PC == (T0PR + 1))
*         {
*             下个APB时钟复位T0PC;
*             T0TC++;
*             if (T0TC == T0MR0) 这个步骤需设置T0MCR[1:0] = 3
*             {
*                 复位T0TC;
*                 产生中断标志;--
*             }                  |
*         }                      |
*         下个APB时钟<-----------
**********************************************************************/
void Timer0_Init(void)
{
    T0IR = 0xff;   /* 清除中断标志 */
    T0PR = 0;      /* 预分频计数器为0,则定时分辨率为1 */
    T0PC = 0;      /* 清零预分频计数器 */
    T0TC = 0;      /* 清零定时计数器 */
    T0MCR = 0x03;  /* T0TC == T0MR0 时产生中断,并复位T0TC */

    /* 中断周期 = 1/OS_TICKS_PER_SECOND (s)*/
    T0MR0 = (Fpclk/(T0PR + 1))/(OS_TICKS_PER_SECOND);

    /* 注册Timer0中断服务例程*/
    VIC_RegisterIRQ(Timer0_Handler, TIMER0_INTR_NUM, TIMER0_INTR_PRIO);
    T0TCR = 0x01;  /* 使能计数 */
}

/*********************************************************************
*函 数 名:Timer0_ISR
*描    述:timer0中断服务程序
*输入参数:无
*输出参数:无
*返 回 值:无
*注    意:
**********************************************************************/
void Timer0_ISR(void)
{
    T0IR = 0x01;  /* 清除中断标志 */
    VICVectAddr = 0x00;  /* 通知VIC中断处理结束 */
    OS_TimeTick();

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -