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

📄 timer.c

📁 可以在ARM 架构下运行的的 DOS (和MS-DOS兼容),非常难得的一个源码
💻 C
字号:
/*************************************Seekfor Embedded DOS v1.0***************************************************
 ******                   ***          *****                                    ******     ****     ****** v1.0
**   **                    **         **  **                                     **  **   **  **   **   ** 
**   **                    **         **                                         **   ** **    **  **   ** 
**                         **         **                                         **   ** **    **  **      
 **       *****    *****   ** ****  *******   *****  ********            *****   **   ** **    **   **     
  ***    **   **  **   **  ** **      **     **   **   *** **           **   **  **   ** **    **    ***   
    **   *******  *******  ****       **     **   **   **               *******  **   ** **    **      **  
     **  **       **       *****      **     **   **   **               **       **   ** **    **       ** 
**   **  **       **       ** **      **     **   **   **               **       **   ** **    **  **   ** 
**   **  **   **  **   **  **  **     **     **   **   **               **   **  **  **   **  **   **   ** 
******    *****    *****  ********  ******    *****  ******              *****  ******     ****    ******  
<1)基本描述
	Seekfor Embedded DOS v1.0是嵌入式的一个类DOS操作系统,支持FAT16/FAT32.
<2)文件描述
	文件名:timer.c
	功能:5个Timer驱动(timer5用来做系统tick,因此只允许应用程序读和设置回调函数)
<3>如需更新版本软件,请联系:
	QQ:82054357
	Mail:Seek_for@163.com
	MSN:sfrad32@hotmail.com
**************************************************************************************************************/
#ifndef __TIMER_C__
#define __TIMER_C__
#include "dos.h"

#if(SUPPORT_TIMER0==1)
int TIMER0_Read(void*buff,int size)
{
	char*ptr=(char*)buff;
	while(size)
	{
		*ptr++=rTCNTO0&0xff;
		*ptr++=rTCNTO0>>8;
		if(size>=2) size-=2;
	}
	return 0;
}

int TIMER0_Write(void*buff,int size)
{
	int i;
	char*ptr=(char*)buff;
	while(size)
	{
		i=*ptr+(*(ptr+1)<<8);
		if(i==0x0000)/*写入0x0000表示停止Timer*/
		{
			rTCON&=~0x01;
			return 0;
		}
		rTCON&=~(1<<1);
		rTCNTB0=i;
		rTCMPB0=i;
		rTCON|=1<<1;
		rTCON&=~(1<<1);
		rTCON|=(1<<3)|(1<<0);
		ptr+=2;
		if(size>=2) size-=2;
	}
	return 0;
}

int TIMER0_Escape(int code,void*data)
{
	return -1;
}

#endif



#if(SUPPORT_TIMER1==1)
int TIMER1_Read(void*buff,int size)
{
	char*ptr=(char*)buff;
	while(size)
	{
		*ptr++=rTCNTO1&0xff;
		*ptr++=rTCNTO1>>8;
		if(size>=2) size-=2;
	}
	return 0;
}

int TIMER1_Write(void*buff,int size)
{
	int i;
	char*ptr=(char*)buff;
	while(size)
	{
		i=*ptr+(*(ptr+1)<<8);
		if(i==0x0000)/*写入0x0000表示停止Timer*/
		{
			rTCON&=~0x100;
			return 0;
		}
		rTCON&=~0x200;
		rTCNTB1=i;
		rTCMPB1=i;
		rTCON|=0x200;
		rTCON&=~0x200;
		rTCON|=0x100|(1<<11);
		ptr+=2;
		if(size>=2) size-=2;
	}
	return 0;
}

int TIMER1_Escape(int code,void*data)
{
	return -1;
}

#endif

#if(SUPPORT_TIMER2==1)
int TIMER2_Read(void*buff,int size)
{
	char*ptr=(char*)buff;
	while(size)
	{
		*ptr++=rTCNTO2&0xff;
		*ptr++=rTCNTO2>>8;
		if(size>=2) size-=2;
	}
	return 0;
}

int TIMER2_Write(void*buff,int size)
{
	int i;
	char*ptr=(char*)buff;
	while(size)
	{
		i=*ptr+(*(ptr+1)<<8);
		if(i==0x0000)/*写入0x0000表示停止Timer1*/
		{
			rTCON&=~(1<<12);
			return 0;
		}
		rTCON&=~(1<<13);
		rTCNTB2=i;
		rTCMPB2=i;
		rTCON|=1<<13;
		rTCON&=~(1<<13);
		rTCON|=(1<<15)|(1<<12);
		ptr+=2;
		if(size>=2) size-=2;
	}
	return 0;
}

int TIMER2_Escape(int code,void*data)
{
	return -1;
}

#endif



#if(SUPPORT_TIMER3==1)
int TIMER3_Read(void*buff,int size)
{
	char*ptr=(char*)buff;
	while(size)
	{
		*ptr++=rTCNTO3&0xff;
		*ptr++=rTCNTO3>>8;
		if(size>=2) size-=2;
	}
	return 0;
}

int TIMER3_Write(void*buff,int size)
{
	int i;
	char*ptr=(char*)buff;
	while(size)
	{
		i=*ptr+(*(ptr+1)<<8);
		if(i==0x0000)/*写入0x0000表示停止Timer*/
		{
			rTCON&=~(1<<16);
			return 0;
		}
		rTCON&=~(1<<17);
		rTCNTB3=i;
		rTCMPB3=i;
		rTCON|=1<<17;
		rTCON&=~(1<<17);
		rTCON|=(1<<19)|(1<<16);
		ptr+=2;
		if(size>=2) size-=2;
	}
	return 0;
}
int TIMER3_Escape(int code,void*data)
{
	return -1;
}

#endif


#if(SUPPORT_TIMER4==1)
int TIMER4_Read(void*buff,int size)
{
	char*ptr=(char*)buff;
	while(size)
	{
		*ptr++=rTCNTO4&0xff;
		*ptr++=rTCNTO4>>8;
		if(size>=2) size-=2;
	}
	return 0;
}
int TIMER4_Escape(int code,void*data)
{
	return -1;
}

#endif



#endif

⌨️ 快捷键说明

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