linux硬件定时器

TIMER简介

GSC3290 芯片包含一个 TIMER 定时器模块,TIMER 定时器模块包含 TIMER0~TIMER3 共 4个相对独立的定时器。每个定时器内部包含一个 32bit 计数器。每一个定时器都有自己独立的时钟源,均支持循环定时模式和单次定时模式两种工作模式,每个定时器都有各自的中断,TIMER定时器模块将4个中断合并为一个中断输出给中断控制器。

TIMER 定时器模块的时钟与复位信号均由系统控制模块 SYSCTL 提供,TIMER0~TIMER3均有各自的时钟与复位信号,时钟可由SYSCTL系统控制模块分别配置

 

图1:硬件定时器的框图

 

TIMER 定时器包含的 4 个定时器 TIMER0~TIMER3 可分别使能和禁止。4 个定时器均有各自的设置寄存器 TIMERn_TCR(n 表示 TIMER0、TIMER1、TIMER2 或 TIMER3,下同),可通过TIMERn_TCR.bit0 来使能和禁止相应的 TIMER,置 1 为使能,置 0 为禁止。当 TIMER 使能后,计数器载入值寄存器(TIMERn_TLC)中的值载入计数器,计数器开始在之后的每个工作时钟信号上升沿递减计数。TIMER 的计数器宽度为 32bit。当某个定时器状态由开启变为关闭时,此定时器停止计数,同时包括计数器在内的所有寄存器被异步复位。

混杂设备的结构体定义:

   static struct miscdevice gsc3290_timer_miscdev = {

MISC_DYNAMIC_MINOR,

"timer",

&gsc3290_timer_ops,};

 

操作函数:

static const struct file_operations gsc3290_timer_ops = {

.owner = THIS_MODULE,

.unlocked_ioctl = gsc3290_timer_ioctl

};

 

Ioctl函数完成交互:

static long gsc3290_timer_ioctl( struct file *file, unsigned int cmd, unsigned long arg)

{

struct timer_data* data=(struct timer_data*)arg;

 

timer_debug("\n%s\n",__func__);

 

switch(cmd){

case TIMER_CONFIG:

timer_init(data->index,data->arg);

timer_config(data->index,data->mode,data->period_us);

break;

case TIMER_START:

timer_start(data->index);

break;

case TIMER_STOP:

timer_stop(data->index);

break;

case TIMER_CLOSE:

timer_close(data->index);

break;

default:

printk(KERN_INFO"in ioctl default!\n");

break;

}

return 0;

}

 

TIMER_CONFIG:配置函数的分析:

主要配置的参数内容:io复用的配置,中断函数的注册,单次/循环定时模式的配置,中断使能,重载计数值写入寄存器(配置都是用户空间传入,用户自主控制定时器)

/*配置参数*/

data.index=0;

data.period_us=8000000;

data.mode=CYCLE;

data.arg=(void*)timer_handler;

 

总结:硬件定时器就是简单的混杂设备器件,主要功能就是借助用户的配置完成

      设定定时的操作。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值