📄 timer.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 + -