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

📄 timer.c

📁 该工程源码是基于EasyARM2200开发平台开发的嵌入式TCP/IP协议栈
💻 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 + -