返回列表 发帖

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

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

华邦9100-4timer嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习3 _$ R7 G8 e3 T1 I& |0 w' W
此函数负责timer的初始化:
- H  P" m5 l$ C( l7 x嵌入式开发联盟static void w90x900_timer_setup (void)嵌入式开发联盟' n5 v5 _, u( R0 W- G
{嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习. M4 W; ]6 P; `! I

: L8 E1 j- \7 `7 a' Dmcuos.com/*----- disable timer -----*/

7 U* b& H9 N+ bmcuos.com本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。& R* q! r$ g" O- t
__raw_writel(0, W90X900_TCSR0);/
/timer
的控制和状态寄存器,主要是为了清除[ce][ie]位的。Couter 使能和interrupt使能。

4 s/ e/ _! ]- G# z9 z" @# l6 Z- 嵌入式底层驱动开发技术学习网站
( t+ ^9 e) a! u  l' c本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。__raw_writel(0, W90X900_TCSR1);
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。; K( y# U7 X& j1 M5 w' k

* o$ }1 d4 _* h$ r; n嵌入式开发联盟__raw_writel(0, W90X900_TCSR2);

- r+ H5 [" _# C( G+ s7 t嵌入式开发联盟9 ~  ?4 r# _2 s/ |0 W6 s; m
__raw_writel(0, W90X900_TCSR3);

7 y+ t! I4 ^* S8 U. Qmcuos.com本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。9 y) M! M' b7 X' K1 u  e, S* b
__raw_writel(0, W90X900_TCSR4);
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习8 i- r& M+ i* v: V' P: T! A9 }
       * ~# e3 _0 q* n% W1 J/ Y$ }
- 嵌入式底层驱动开发技术学习网站  g+ B) C; x  p+ H5 h
/*----- clear interrupt flag bit -----*/
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。/ _7 e9 o6 d( I7 ]3 E" p. v
' X, e. L8 n+ Y  l* }
__raw_writel(0x1F, W90X900_TISR); /
/
中断状态寄存器,这个寄存器是只读的但是可以通过写一清除。

* J9 Y5 c' u( s   
9 Q  G9 N) A2 z$ s本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
) h+ Z; w2 b- }) }) y0 n$ X9 u嵌入式开发联盟/*----- timer 0 : periodic mode, 100 tick/sec
* J, {6 R" f: W" t) }( [* K! |mcuos.com-----*/

1 n2 j* i% C1 _本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习4 L( t2 e  k8 v6 p  i/ o7 K1 s3 `2 y
__raw_writel(sysclk/(100 * 100), W90X900_TICR0);
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。; g9 U& O+ u4 Z5 Q) U

! ~* p7 p; Z+ |& X1 C) G嵌入式开发联盟// Sysclk=150000000
W90X900_TICR0timer初始化控制寄存器。填写counter的值。

7 i2 t+ g* d/ {( D, Z- 嵌入式底层驱动开发技术学习网站
5 d) P  B& N( c5 }# W9 i- 嵌入式底层驱动开发技术学习网站__raw_writel(0x68000063, W90X900_TCSR0);
//
设置周期模式,使能timer,使能中断。填写
PRESCALE
6 t0 \! i6 R0 E& c. {) U3 m' d, P嵌入式开发联盟   - 嵌入式底层驱动开发技术学习网站' P9 m: `" p0 q, v0 V& E& ?" L$ a
}mcuos.com/ B4 \. R& x5 f# k7 a
w90x900_timer_interrupt()
$ F, j( Z1 S; i. j9 e本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。{
3 F2 |+ j9 \" |$ V& Z9 Mmcuos.com__raw_writel(0x01, W90X900_TISR); //当开启timer和中断后,在中断处理函数里面要清除中断状态寄存器。否则中断不会来了。
( q2 J" o' B7 d: i  W嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习}
: N: q/ D  V, T7 \1 ], H5 G- p8 {mcuos.com内核之定时器与时间管理嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习% n4 `# R, Q: B% j! D
认识两个概念:
$ u0 d3 V, e$ L# V5 `mcuos.comHZ:mcuos.com% w  O/ J+ V  t. M- v
一秒内时钟中断产生的次数,这里是100次。
0 y- H* Q$ r0 A( K8 _) E" W本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。jiffes:- 嵌入式底层驱动开发技术学习网站$ K9 q' ]+ l+ x5 G7 d  R1 I
系统启动以来,时钟中断产生的次数,一秒内增加HZ.
/ f5 U2 c7 u' q3 k* E6 ^8 ], ^- 嵌入式底层驱动开发技术学习网站因为jiffes可能发生回饶,系统提供了几个接口:- 嵌入式底层驱动开发技术学习网站. J1 c0 S& t( P) W& b
time_after(a,b), ab的后面 a>b ,小的永远是当前值
4 C5 `* e6 b2 R# k) Y" e# Nmcuos.comtime_before(a,b) ab的前面 a<b 大的永远是要延时的值% o6 Z6 w5 Z" x1 F; r( h& ?& Z- Y
time_after_eq(a,b)
+ q5 w3 O5 L5 ~& E$ P% h: p1 {嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习time_before_eq(a,b)
% N4 A9 ]+ n4 V: D嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习例子:
- I; |, U6 l. E5 e本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。unsigned long delay =jiffies+2*HZ    // 2$ ^( w8 Q5 a8 [& T% z
while (!(time_before(jiffies,delay)));嵌入式开发联盟/ l+ e7 h. n, k/ y% r2 D2 x. \
执行时不要禁止中断嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习( r) v' }# D, U/ E) w1 g1 }4 O
7 E# n0 h( I- s0 f/ j
短延迟:嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习2 M4 i" b" g, h! j/ y
ndelay():纳秒
5 w) O% a3 w% ~* l- W; l6 E! [本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。10e -9
# t7 I! `5 `6 b$ O6 Q8 H0 h
udelay():微秒5 D! c8 a" |3 m) b: _0 w) U
10e -6
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。% b+ w3 d: I$ f- f$ ]; h
mdelay():毫秒 10e -3
8 ^& m2 }/ S" y* y嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习 - 嵌入式底层驱动开发技术学习网站# p: k$ V6 y: o; ]
内核定时器接口:
$ \" M4 H+ I3 m. T/ h3 J8 Umcuos.com定义:
) R# a; T2 \2 y5 W. T嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习struct timer_list my_timer;
% P" ~- H: F" H" xmcuos.com初始化 timer_list 内部结构:init_timer(&my_timer);
/ H+ a! Y8 g* V: s7 `' G  zmcuos.com填充用户值:嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习: I9 }2 a& C4 t2 ?
my_timer.expires=jiffies+delay;//jiffies单位
: U! Z* C. [" ^$ O6 E- 嵌入式底层驱动开发技术学习网站my_timer.data=arg_data;//调用定时器处理函数传入的值
& X$ ?6 t' L7 i5 ~8 b2 k: T嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习my_timer.function=my_timer_function//到期处理程序嵌入式开发联盟' y) O2 J! d2 b% _3 y1 m! }
添加/激活它:add_timer(&my_timer);//添加并且激活定时器
0 @  F5 \* a( \3 l$ c修改/删除:- 嵌入式底层驱动开发技术学习网站/ V; ]( G) H7 t$ G2 ?  ~8 d, h
mod_timer(&my_timer,jiffies+new_delay);
3 ~7 S. z: A# l' ]% j嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习del_timer((&my_timer)//不等待其他CPU(如果在运行这个定时)完成.
$ I& H1 h! ?6 \% b7 b- L本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。del_timer_sync((&my_timer)//等待其他CPU(如果在运行这个定时器)完成.嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习9 `6 n" u6 i5 {. H4 w1 Y7 Y
通过软中断实现的
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

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