当前位置:编程学习 > 网站相关 >>

S3C6410裸机定时器

定时器我主要用来延时和获取程序运行时间.

 


/*************************************************************************************************************

 * 文件名: timer.c
 * 功能: S3C6410 timer底层驱动函数
 * 作者:   * 创建时间: 2012年9月17日20:32
 * 最后修改时间:2012年9月17日
 * 详细: 定时器的初始化以及中断服务程序
 * 20120917:增加定时器0和定时器1的中断服务程序
*************************************************************************************************************/
#include "system.h"
#include "timer.h"


//定时器0中断处理程序
void (*Timer0_Isr)(void) = NULL;


//定时器0中断处理程序
void (*Timer1_Isr)(void) = NULL;

 


//定时器2中断处理程序
void (*Timer2_Isr)(void) = NULL;


/*************************************************************************************************************************
*函数        : static void __irq Isr_Timer0(void)
*功能        : 定时器0中断服务程序
*参数        : 无
*返回        : 无
*依赖 : 底层宏定义
*作者        *时间     : 20120520
*最后修改时间: 20120917
*说明        :由中断服务程序调用用户自定义的中断处理程序
*************************************************************************************************************************/
static void __irq Isr_Timer0(void)
{
rTINT_CSTAT |= BIT5;//清除中断标志
if(Timer0_Isr != NULL)//注册过中断服务程序
{
Timer0_Isr(); //调用中断处理程序
}
VICInterruptEnd();//中断结束
}

 


/*************************************************************************************************************************
*函数        : void Timer0_Init(u32 RTime,FunctionalState EnInt,void (*TimerIsr)(void))
*功能        : 定时器0初始化函数
*参数        : 无
*返回        : 无
*依赖     : 底层宏定义
*作者        *时间      : 20120520
*最后修改时间: 20120520
*说明        : 定时器0和定时器1共用预分频器
*************************************************************************************************************************/
void Timer0_Init(u32 RTime,FunctionalState EnInt,void (*TimerIsr)(void))
{
rTCFG0 &= (~0xff);//清除设置
rTCFG0 |= 65; //定时器0预分频65+1,由PCLK=66提供时钟,66分频产生1MHz的定时器时钟
rTCON &= (~0xff);//清除设置
rTCON |= BIT3;//定时器0自动更新使能
rTCNTB0 = RTime;//重装值
rTINT_CSTAT |= BIT5;//清除中断标志
rTINT_CSTAT |= (EnInt == ENABLE) ? BIT0 : 0;//使能定时器0中断
Timer0_Isr = TimerIsr;//注册中断服务程序
Set_IsrAddr(INT_TIMER0,(u32)Isr_Timer0);//设置中断矢量入口
Set_IntEnable(INT_TIMER0,EnInt);//使能定时器0全局中断
//以下操作启动定时器0
rTCON |= BIT1;//手动更新
rTCON &= ~BIT1;//结束手动更新
rTCON |= BIT0;//启动定时器0
}

 

 

 


/*************************************************************************************************************************
*函数        : static void __irq Isr_Timer1(void)
*功能        : 定时器1中断服务程序
*参数        : 无
*返回        : 无
*依赖 : 底层宏定义
*作者        : *时间     : 20120917
*最后修改时间: 20120917
*说明        :由中断服务程序调用用户自定义的中断处理程序
*************************************************************************************************************************/
static void __irq Isr_Timer1(void)
{
rTINT_CSTAT |= BIT6;//清除中断标志
if(Timer1_Isr != NULL)//注册过中断服务程序
{
Timer1_Isr(); //调用中断处理程序
}
VICInterruptEnd();//中断结束
}

 


/*************************************************************************************************************************
*函数        : void Timer1_Init(u32 RTime,FunctionalState EnInt,void (*TimerIsr)(void))
*功能        : 定时器1初始化函数
*参数        : 无
*返回        : 无
*依赖     : 底层宏定义
*作者        *时间     : 20120520
*最后修改时间: 20120520
*说明        : 定时器0和定时器1共用预分频器
*************************************************************************************************************************/
void Timer1_Init(u32 RTime,FunctionalState EnInt,void (*TimerIsr)(void))
{
rTCFG0 &= (~0xff);//清除设置
rTCFG0 |= 65; //定时器0预分频65+1,由PCLK=66提供时钟,66分频产生1MHz的定时器时钟,
rTCON &= (~0xff00);//清除设置
rTCON |= BIT11;//定时器1自动更新使能
rTCNTB1 = RTime;//重装值
rTINT_CSTAT |= BIT6;//清除中断标志
rTINT_CSTAT |= (EnInt == ENABLE) ? BIT1 : 0;//使能定时器0中断
Timer1_Isr = TimerIsr;//注册中断服务程序
Set_IsrAddr(INT_TIMER1,(u32)Isr_Timer1);//设置中断矢量入口
Set_IntEnable(INT_TIMER1,EnInt);//使能定时器1全局中断
//以下操作启动定时器0
rTCON |= BIT9;//手动更新
rTCON &= ~BIT9;//结束手动更新
rTCON |= BIT8;//启动定时器0
}

 

 


/*************************************************************************************************************************
*函数         : static void __irq Isr_Timer2(void)
*功能         : 定时器2中断服务程序
*参数         : 无
*返回         : 无
*依赖 : 底层宏定义
*作者          *时间     : 20130107
*最后修改时间 : 20130107
*说明         : 由中断服务程序调用用户自定义的中断处理程序
*************************************************************************************************************************/
static void __irq Isr_Timer2(void)
{
rTINT_CSTAT |= BIT7;//清除中断标志
if(Timer2_Isr != NULL)//注册过中断服务程序
{
Timer2_Isr(); //调用中断处理程序
}
VICInterruptEnd();//中断结束
}

 

 


/*************************************************************************************************************************
*函数         : void Timer2_Init(u32 RTime,FunctionalState EnInt,void (*TimerIsr)(void))
*功能         : 定时器2初始化函数
*参数         : 无
*返回         : 无
*依赖     : 底层宏定义
*作者        *时间     : 201301

补充:综合编程 , 其他综合 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,