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

📄 timer.c

📁 DSP LF2407的定时器用例
💻 C
字号:

//循环接收

#include "c2407A.h"
 
unsigned int uWork,nCount;

void Initial()		
{
	asm(" setc INTM") ;		//INTM = 1 , 禁止中断
	asm(" setc SXM") ;		//SXM 	= 1 , 符号扩展位使能 
	asm(" clrc OVM") ;		//OVM 	= 0 , 累加器中结果正常溢出
	asm(" clrc CNF") ;		//CNF 	= 0 , 双口RAM区B0被映射到数据存储空间
	*IMR=0x0002 ;		    //INT2中断允许
	*IFR=0xFFFF ;			//清除所有的INTFlag
 	*SCSR1=0x81EF;			//CLIKN=10M, CLKOUT=40M            
	*WDCR=0xE8;				//看门狗
}

void timer1init()
{
	*EVAIMRA=*EVAIMRA|0x0080;//7位置1,其他位清零:通用定时器1周期中断使能
	*EVAIFRA=*EVAIFRA&0x0080;//7位为1时将其复位,为0时不管
	*GPTCONA = 0x0000;
	*T1CON=0x160C;           //连续增计数,64分频,使用北部时钟
	*T1PR=0x0271;            //计数周期为1Ms,40000000/64=625000,0x271=625
	*T1CNT=0x00;			 //计数器清零
}

void inline disable()  //中断子程序
{
     asm(" setc INTM ");     
}


void inline enable()   //使能中断子程序
{
    asm(" clrc INTM") ;
}

//假中断程序
void interrupt nothing()
{
   return;
}

void interrupt timer1a()
{
	unsigned int flag;
	flag=*PIVR;
	switch(flag)
	{
		case 0x27:
		{
			(*EVAIFRA)=0x80;//7位为1时将其复位,为0时不管
			nCount++;
			if(nCount>=200)
			{
				uWork=*PBDATDIR;
				uWork^=0x0080;
				*PBDATDIR=uWork;
				nCount=0;	
			}
			break;
		}
	}
}


void main()
{  
 	Initial();
 	timer1init();
 	nCount=0;
	uWork=*MCRA;
	uWork&=0x00FF;
	*MCRA=uWork;					//IOPB配置为普通IO
	uWork=*PBDATDIR;
	uWork|=0x8000;
	*PBDATDIR=uWork;				//IOPB7配置为输出
	enable();

	*T1CON=*T1CON|0x0040;			//启动Timer1

	while(1){}	  
}    
   
   

⌨️ 快捷键说明

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