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