#define TIMER3_BASE 0x48042000 // 定时器基地址
#define CM_PER 0x44E00000 // clock management
#define CM_DPLL 0x44E00500 // 锁相环,用于倍频
#define CM_WKUP 0x44E0_0400 // Clock Module Wakeup Registers
volatile unsigned long * IRQWAKEEN = NULL;
volatile unsigned long * IRQENABLE_SET = NULL;
volatile unsigned long * IRQENABLE_CLR = NULL;
volatile unsigned long * IRQSTATUS = NULL;
volatile unsigned long * CM_PER_TIMER3_CLKCTRL = NULL;
volatile unsigned long * CLKSEL_TIMER3_CLK = NULL;
volatile unsigned long * TIMET3_TLDR = NULL;
volatile unsigned long * TIMER3_TCLR = NULL;
// timer3 936 开启时钟模式
// 1、允许我们去访问寄存器 ,// CM_PER_TIMER3_CLKCTRL
val = 0x02;
writel(val, CM_PER_TIMER3_CLKCTRL);
printk("%s,%d\n",__FUNCTION__,__LINE__);
// 2、关闭定时器
val = 0x00;
writel(val, TIMER3_TCLR);
printk("%s,%d\n",__FUNCTION__,__LINE__);
// 3、选择、设置、时钟,选择为 32 KHz, // 1035,
val = 0x02;
writel(val, CLKSEL_TIMER3_CLK);
printk("%s,%d\n",__FUNCTION__,__LINE__);
// 4、装载初值 4104,也就是说,周期是 31.25 微秒
// 32 KHz == 0.03125 * 10(-3) 毫秒, 那么 200 us -->> 200 / 31.25= 6.4
// 4104 ,故意设置为 1 S,6.4 X = 1 000 000 ,X->> 32 000
// 这个步骤要不要,貌似应该不用装载了吧,
writel(32000, TIMET3_TLDR); // timer load register,完成数值的加载,
printk("%s,%d\n",__FUNCTION__,__LINE__);
// 4100,中断唤醒使能,
val = 0;
val |= ((1<<2) | (1<<1) | (1<<0));
writel(val, IRQWAKEEN);
printk("%s,%d\n",__FUNCTION__,__LINE__);
// 中断使能 4098
val = 0;
val |= (1<<1); //((1<<2) | (1<<1) | (1<<0));
writel(val, IRQENABLE_SET);
printk("%s,%d\n",__FUNCTION__,__LINE__);
// 5、定时器开始, 4101
val = 0x03;
writel(val, TIMER3_TCLR);
printk("%s,%d\n",__FUNCTION__,__LINE__);
// 注册中断,213
ret=request_irq(TIMER3_IRQ_3358,timer_interrupt,IRQF_SHARED,TIMER_NAME,(void*)&key_event);
if(ret<0)
{
printk("IRQ %d can not request,ret = %d \n",TIMER3_IRQ_3358,ret);
return ret;
}
printk("%s,%d\n",__FUNCTION__,__LINE__);
return 0;