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

📄 timer_exp.c

📁 FIR IIR 实验的源代码
💻 C
字号:
#include <cdefBF561.h>
#include <ccblkfn.h>
#include <sys/exception.h>

#include "Exp_Config.h"
#include "sys_func.h"

int led = (1<<0);

EX_INTERRUPT_HANDLER(timer_irq) 
{ 
	*pTMRS8_STATUS = (1<<0);//清定时器中断
	
	led<<=1;				//调整LED状态
    if(led>=(1<<8))
	{
		led = (1<<0);
	}
	SetLED(led);
} 

/********************************************************
*
*	函数名        : CaculatePeriod
*	函数功能      : 计算定时器周期
*	函数输入参数  : 定时器周期,单位秒
*	函数输出      : 定时器周期,以系统频率计算
*	说明          :
*
********************************************************/
unsigned int CaculatePeriod(double fMulti)
{
    unsigned int nsclk=GetSCLK();
    
    return (unsigned int)(nsclk*fMulti);
}

void Init_Timer0_Interrupt(void)
{
	*pSICB_IAR4 = (*pSICB_IAR4)&0xffff0fff|(3<<12);
	register_handler(ik_ivg10, timer_irq);//注册中断处理程序,GPT的默认中断优先级为10
	*pSICB_IMASK1|=(1<<3);	//在系统中断控制器打开定时器中断
}

void Disable_Timer0(void)
{
	*pTMRS8_DISABLE=(1<<0);//关闭定时器0,开始配置
	ssync();
}

void Enable_Timer0(void)
{
	*pTMRS8_ENABLE=(1<<0);	//打开定时器0
	ssync();    
}

void Init_Timer0(void)
{
	unsigned int nPeriod;

    *pTIMER0_CONFIG=0x0019;	//配置Timer0成PWM模式,不对外输出,每个周期完成产生一次中断
	nPeriod=CaculatePeriod(0.3);
	*pTIMER0_PERIOD		= nPeriod;
	*pTIMER0_WIDTH		= nPeriod>>1;
}

void Timer_Exp(void)
{
	led=(1<<0);
    SetLED(led);

	Disable_Timer0();
	Init_Timer0_Interrupt();
	Init_Timer0();
	Enable_Timer0();			
	
    while (1)
    {
    	;    
    }    
}

⌨️ 快捷键说明

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