📄 timer.c
字号:
/*
*********************************************************************************************************
* ModbusTCP
* programmable human machine interface
*
* (c) Copyright 2007, 浙大中自集成控制股份有限公司开发二部
* All Rights Reserved
*
* File : LcdDriver.c
* By : lb
*********************************************************************************************************
*/
/************************************************************************************
定时器。他的主要功能是激发了ucos的Timedly功能,timedly又由lwip调用了它的一个参数:当前任务的系统时间,
由这个时间,我们可以作出任何的超时计时机制。
************************************************************************************/
#include "LPC2294.h"
#include "timer.h"
#include "config.h"
volatile unsigned short Count1msInc;
volatile unsigned short Count1ms,Count10ms,Count1s;
volatile unsigned char TimeSecond,TimeMinute;
volatile unsigned short count1=0;
volatile unsigned short count2=0;
extern void Tmr0_TickISR(void);
extern void Tmr1_TickISR(void);
extern void Undef_ISR(void);
void Timer0_ISR(void) //1ms
{
Count1msInc++;
if(Count1ms) Count1ms--;
if(Count10ms) Count10ms--;
else
{
Count10ms=10; //10ms
if(Count1s) Count1s--;
else
{
Count1s=100; //1s
TimeSecond++;
if (TimeSecond>=60)
{
TimeSecond=0; //1min
TimeMinute++;
if(TimeMinute==60) TimeMinute=0;
}
}
}
T0IR = 0x01; // 清除中断标志
VICVectAddr = 0x00; // 通知VIC中断处理结束
}
void Timer0_Init(void)
{
//定时器0初始化,IRQ0
VICVectCntl0 = 0x24;
VICVectAddr0 =(unsigned int)Tmr0_TickISR;
VICIntEnable = 0x00000010;
T0PR = 99; // 设置定时器分频为100分频,得110592Hz
T0MCR = 0x03; // 匹配通道0匹配中断并复位T0TC
T0MR0 = (Fpclk/100)/1000; // 比较值 =>1ms
T0TCR = 0x03; // 复位T0TC
T0TCR = 0x01; // 启动T0TC
}
void Timer1_ISR(void)
{
Count1msInc++;
if(Count10ms) Count10ms--;
else
{
//Count10ms=10; //10ms
if(Count1s) Count1s--;
else
{
Count1s=100; //1s
TimeSecond++;
if (TimeSecond>=60)
{
TimeSecond=0; //1min
TimeMinute++;
if(TimeMinute==60) TimeMinute=0;
}
}
}
T1IR = 0x01; // 清除中断标志
VICVectAddr = 0x00; // 通知VIC中断处理结束
}
void Timer1_Init(void)
{
//定时器1初始化,IRQ2
VICVectCntl2 = 0x25;
VICVectAddr2 = (unsigned int)Tmr1_TickISR;
VICIntEnable = 0x00000020;
T1PR = 99; // 设置定时器分频为100分频,得110592Hz
T1MCR = 0x03; // 匹配通道0匹配中断并复位T1TC
T1MR0 = (Fpclk/100)/20; // 比较值 =>25ms
T1TCR = 0x03; // 复位T1TC
T1TCR = 0x01; // 启动T1TC
}
void Delay10ms(unsigned short T)
{
Count10ms = T;
while(Count10ms);
}
void Undefine_Init(void)
{
VICDefVectAddr = (unsigned int)Undef_ISR;
}
/*void Delay1ms(unsigned short T)
{
Count1ms = T;
while(Count1ms--);
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -