返回列表 发帖

[原创经验] w90x900驱动之一TIMER设定

[原创经验] w90x900驱动之一TIMER设定

华邦9100-4timer
. U0 s; v. k2 l: I$ y- 嵌入式底层驱动开发技术学习网站此函数负责timer的初始化:
5 f; a3 E  ^9 ]; ~) m5 e7 O嵌入式开发联盟static void w90x900_timer_setup (void)mcuos.com- _& P% o% Q' o# O( E' k, k; n
{
" O' {& e9 u" W1 J- 嵌入式底层驱动开发技术学习网站
1 U3 {& H3 W1 {! R  e本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。/*----- disable timer -----*/

5 ?/ U0 p- K# o/ X6 o7 u嵌入式开发联盟
$ H0 w( V' ]$ t/ d* ___raw_writel(0, W90X900_TCSR0);/
/timer
的控制和状态寄存器,主要是为了清除[ce][ie]位的。Couter 使能和interrupt使能。
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习8 g# W5 }2 d0 f- o" E

1 R3 {* j8 O& {5 ~. H# _" c+ M- `& p本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。__raw_writel(0, W90X900_TCSR1);

- i) c) `3 Q- r9 c" G5 ?( {- 嵌入式底层驱动开发技术学习网站嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习7 [3 N) e3 T0 o8 l
__raw_writel(0, W90X900_TCSR2);

8 `4 y: U5 n& [  A4 h- v% N嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习嵌入式开发联盟- i! t4 ]# u2 X1 d0 M! \
__raw_writel(0, W90X900_TCSR3);
/ J4 X6 _% y+ t6 u
嵌入式开发联盟# E+ J- i9 ~7 N4 Y
__raw_writel(0, W90X900_TCSR4);
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。2 @; `8 |9 c0 Q1 @: F: k! B
      
2 p8 E5 J$ L* f3 n4 t/ S; A嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。8 p5 F4 Z1 G, d/ @  u3 K% g1 G3 r
/*----- clear interrupt flag bit -----*/

2 N# ^+ P# _  b' J' [! e6 y* y, w, G嵌入式开发联盟
! a1 h: i& m/ ^- P2 O6 Omcuos.com__raw_writel(0x1F, W90X900_TISR); /
/
中断状态寄存器,这个寄存器是只读的但是可以通过写一清除。
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习. ?. c$ e7 |) g5 |8 x/ G( y0 d7 v
   
  V( o+ W0 M$ J: W7 g+ _% O嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。0 s& I' H9 R  n( h  r
/*----- timer 0 : periodic mode, 100 tick/sec
1 U" l4 _; ?6 q嵌入式开发联盟-----*/

* }9 v% [: p2 J  e" J嵌入式开发联盟- 嵌入式底层驱动开发技术学习网站0 F! J5 K  h  ~2 ]3 p
__raw_writel(sysclk/(100 * 100), W90X900_TICR0);
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习' V9 L, l$ @6 w: V8 F' J  Z

. v* t: |! u: x* m5 M( o0 T2 }本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。// Sysclk=150000000
W90X900_TICR0timer初始化控制寄存器。填写counter的值。
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。8 F  i2 e. y0 {) l* u

' Q9 c$ _( B0 g2 k6 w+ l8 {__raw_writel(0x68000063, W90X900_TCSR0);
//
设置周期模式,使能timer,使能中断。填写
PRESCALE嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习- m& |& t6 u  @
   本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。1 S& u: Z- J% I% ~9 X
}
" ^% G9 g9 Q5 P( U5 b; W本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。w90x900_timer_interrupt()
2 b' U& H3 r1 L; r0 l嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习{本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。) a$ P7 B# W% Y7 a# J* R* ?: |9 N5 j
__raw_writel(0x01, W90X900_TISR); //当开启timer和中断后,在中断处理函数里面要清除中断状态寄存器。否则中断不会来了。嵌入式开发联盟$ }1 V1 N- v: X5 w
}
9 P  I( s" B6 S' D! k3 N, t- 嵌入式底层驱动开发技术学习网站内核之定时器与时间管理
' B9 ~2 ^7 p" \7 b) z: Z; k6 u- F" `本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。认识两个概念:
- {. [8 E% ^6 P1 q/ U, q3 Z8 @HZ:mcuos.com* l' Z! s: Y: F6 q
一秒内时钟中断产生的次数,这里是100次。嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习; D+ ]/ k% x5 Y
jiffes:
$ m7 ]$ z* B- }8 I  G+ K, S0 H; ^系统启动以来,时钟中断产生的次数,一秒内增加HZ.- 嵌入式底层驱动开发技术学习网站1 o9 j. Z" g4 f) W2 W+ {- g, `3 W
因为jiffes可能发生回饶,系统提供了几个接口:嵌入式开发联盟. V5 J! _! V6 G. k" V: d/ X
time_after(a,b), ab的后面 a>b ,小的永远是当前值本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。! b5 x' M$ e4 F% _
time_before(a,b) ab的前面 a<b 大的永远是要延时的值mcuos.com+ Q5 a  g7 M4 ]' u5 B* w7 x- j9 f
time_after_eq(a,b)
4 }; T3 S  f' h+ W- vmcuos.comtime_before_eq(a,b)
. R9 K5 B0 w9 [3 w嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习例子:
$ ]5 Z- @4 a7 {嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习unsigned long delay =jiffies+2*HZ    // 2嵌入式开发联盟# D+ ^2 z( `! L* L' T; E0 s9 E+ {
while (!(time_before(jiffies,delay)));嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习/ X3 ?: t: `0 d5 q2 B5 e$ v
执行时不要禁止中断嵌入式开发联盟& A* U* r$ N. n6 t0 ^# x

9 H. o( t9 d4 R嵌入式开发联盟短延迟:
; M6 y; M" r+ ~( S& y嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习ndelay():纳秒
' D6 }/ K0 }+ z' _# `' A+ z' ~5 d' |10e -9

9 o# e2 d  y; F4 c1 S$ Rudelay():微秒
$ s$ W* {& h" k+ ]1 ^& N8 H& M6 O嵌入式开发联盟10e -6

  E: n( l- R, `/ ~; L1 j嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习mdelay():毫秒 10e -3- 嵌入式底层驱动开发技术学习网站9 y5 Y# ~8 s3 G! ^

# J$ `7 a+ \/ A+ ?嵌入式开发联盟内核定时器接口:
; @9 v4 z, X- z本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。定义:本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。. W0 {$ [' y0 ], ~- V3 v" _
struct timer_list my_timer;嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习; C4 x% i. p& t+ _) g! \7 \. ]
初始化 timer_list 内部结构:init_timer(&my_timer);- 嵌入式底层驱动开发技术学习网站4 R" V: a  d) j! ~
填充用户值:
. ?0 z$ Y. v! N# v0 w8 e, K嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习my_timer.expires=jiffies+delay;//jiffies单位mcuos.com' [/ [$ y5 h& G/ q, {& }
my_timer.data=arg_data;//调用定时器处理函数传入的值mcuos.com8 \' A+ ^; O  O9 _, `$ s
my_timer.function=my_timer_function//到期处理程序- 嵌入式底层驱动开发技术学习网站5 j+ G' h; l+ `& A3 J6 o
添加/激活它:add_timer(&my_timer);//添加并且激活定时器嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习7 D" b4 R& X. c
修改/删除:
' n' A6 u# i0 x* u( O) w5 g- 嵌入式底层驱动开发技术学习网站mod_timer(&my_timer,jiffies+new_delay);
1 u( x' g9 z. `mcuos.comdel_timer((&my_timer)//不等待其他CPU(如果在运行这个定时)完成.! p  |6 U* a2 f/ i( t1 W
del_timer_sync((&my_timer)//等待其他CPU(如果在运行这个定时器)完成.
/ m4 ~, @% X# u7 C: P* j通过软中断实现的
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

返回列表
网页右侧QQ悬浮滚动在线客服
网页右侧QQ悬浮滚动在线客服