返回列表 发帖

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

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

华邦9100-4timer
% O' r1 @! u3 c- m( e嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习此函数负责timer的初始化:
1 {$ g6 Z! ~3 e8 T' |$ S! ~嵌入式开发联盟static void w90x900_timer_setup (void)0 I" V7 a) {' K% b/ T
{/ X$ o/ p; f8 z; R

3 V' Q7 m0 e; R" V1 N  T- 嵌入式底层驱动开发技术学习网站/*----- disable timer -----*/
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。5 P: o1 n: v& U% Z6 A0 `
- 嵌入式底层驱动开发技术学习网站5 K- t7 q1 |& J9 G, n, P# U9 C" c
__raw_writel(0, W90X900_TCSR0);/
/timer
的控制和状态寄存器,主要是为了清除[ce][ie]位的。Couter 使能和interrupt使能。

& c- ^5 j8 j" M4 e3 ?3 M4 x本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。嵌入式开发联盟, |. z4 K" P/ f# @# S2 z5 ]
__raw_writel(0, W90X900_TCSR1);
" d% l( F6 y; p, _; l. z8 s5 y) \. z
mcuos.com; ?: @, A* O0 ]) G6 L' w& l
__raw_writel(0, W90X900_TCSR2);
嵌入式开发联盟4 Q: N- E6 i5 R3 `, f/ [
8 V5 B( S) {3 e: {: q
__raw_writel(0, W90X900_TCSR3);
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习. N! W; G0 p4 F4 \( H% s; x
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。& V/ f2 k" L' R
__raw_writel(0, W90X900_TCSR4);

* l' D7 U7 |, s5 B) Z6 B- 嵌入式底层驱动开发技术学习网站       mcuos.com8 [8 v  Q1 n9 U) C$ B. }1 v

8 V; p* Y1 `, F4 O7 u  T, T, M嵌入式开发联盟/*----- clear interrupt flag bit -----*/

) |# a. r# C& }# t2 t# ^8 d- 嵌入式底层驱动开发技术学习网站mcuos.com& h* M8 k- ^' C& Y1 }& `; o0 f
__raw_writel(0x1F, W90X900_TISR); /
/
中断状态寄存器,这个寄存器是只读的但是可以通过写一清除。
嵌入式开发联盟2 Q5 L3 H. H% n+ k& ]" o" U
   0 K7 H8 }7 q$ q; v8 l+ T, d6 ]
mcuos.com+ C, D  y& ?; i4 }5 z2 m
/*----- timer 0 : periodic mode, 100 tick/sec嵌入式开发联盟# S4 x0 [9 o6 d
-----*/
- 嵌入式底层驱动开发技术学习网站  c# P; {& ^9 f4 F- ]2 C% z9 o
- 嵌入式底层驱动开发技术学习网站6 G3 [) A3 X2 _
__raw_writel(sysclk/(100 * 100), W90X900_TICR0);
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。- `1 E$ _- W/ ^2 }( J1 o1 n
嵌入式开发联盟8 Z( j4 u" J( [! W' u( y" G
// Sysclk=150000000
W90X900_TICR0timer初始化控制寄存器。填写counter的值。
- 嵌入式底层驱动开发技术学习网站2 {* r+ q  ]* f/ a, X5 g
# s, H. z5 A9 [& R% c( q
__raw_writel(0x68000063, W90X900_TCSR0);
//
设置周期模式,使能timer,使能中断。填写
PRESCALE
/ O: d" K) v! @. ^本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。   嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习4 `# }4 P% r$ t& ~" [+ H
}
* f# \* ~- V' kw90x900_timer_interrupt()mcuos.com  \0 g1 S% X+ c7 J% E3 ?- D
{嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习* B2 f; N: M% B! d8 z3 p. z  T" c
__raw_writel(0x01, W90X900_TISR); //当开启timer和中断后,在中断处理函数里面要清除中断状态寄存器。否则中断不会来了。
$ B' r: `" `" \- 嵌入式底层驱动开发技术学习网站}
4 H; I$ v( Z9 T  u本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。内核之定时器与时间管理
1 P( o& X2 |+ {# `5 T嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习认识两个概念:
7 b# F4 X# K7 }9 y3 Fmcuos.comHZ:
+ v) B! V5 T: n3 f8 b, l  d嵌入式开发联盟一秒内时钟中断产生的次数,这里是100次。mcuos.com7 L0 |# o2 Q  C8 M
jiffes:本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。/ c- S) a0 T: f" k& V; c1 K) |
系统启动以来,时钟中断产生的次数,一秒内增加HZ.mcuos.com2 ]9 R5 J/ C, g! i: X, H. j( S
因为jiffes可能发生回饶,系统提供了几个接口:
/ w" G! e( J) G% bmcuos.comtime_after(a,b), ab的后面 a>b ,小的永远是当前值
8 p! }6 {$ X5 K' P" w3 x$ }. X  ~mcuos.comtime_before(a,b) ab的前面 a<b 大的永远是要延时的值- 嵌入式底层驱动开发技术学习网站( ?; E' L) X" M' Q6 Z1 |* u$ l
time_after_eq(a,b)mcuos.com9 [) {% L) R8 E4 P7 K: q
time_before_eq(a,b)
% p) N% e- m& L. g, B& U1 c嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习例子:
7 u! I. E0 Z3 _' ]; ]mcuos.comunsigned long delay =jiffies+2*HZ    // 2
+ a# H, e, H5 Y$ L; {8 k/ M本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。while (!(time_before(jiffies,delay)));
" i6 @( [2 \, ]- p0 `* i+ G) F; d! B/ z嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习执行时不要禁止中断嵌入式开发联盟) A, r, Y) g' T! ~

: r8 q/ m" k1 w. `9 A- e嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习短延迟:
$ ]  ?6 p. W1 c+ U1 U嵌入式开发联盟ndelay():纳秒6 s8 F7 [! l, G# i' s  n( y! y
10e -9

7 d8 p0 C+ D. a$ X- 嵌入式底层驱动开发技术学习网站udelay():微秒
  ~: z4 i! q8 k% y$ H( L3 w" c% g0 ?嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习10e -6
mcuos.com  [' H0 l$ U: u. P! c' S4 }
mdelay():毫秒 10e -3
/ d# e" R2 ^7 Y! V. N+ l* Lmcuos.com
7 k& c2 `2 t* M+ b$ ~+ U嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习内核定时器接口:
0 F. [; n% c( u- o  W定义:
4 b  C- {7 }3 l2 L" _( q0 Z% D# D& h本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。struct timer_list my_timer;
% M) B( \7 e; e! D6 P初始化 timer_list 内部结构:init_timer(&my_timer);
/ c" m) g" ~- Q6 @. E. U填充用户值:
. |- d' s+ Q8 S- |$ Y嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习my_timer.expires=jiffies+delay;//jiffies单位
5 g- }2 [/ P, a1 n6 c0 Zmy_timer.data=arg_data;//调用定时器处理函数传入的值- 嵌入式底层驱动开发技术学习网站8 j; E& k" A' l9 s
my_timer.function=my_timer_function//到期处理程序mcuos.com2 z/ t. }- r" C1 ~
添加/激活它:add_timer(&my_timer);//添加并且激活定时器嵌入式开发联盟/ {3 X: y4 D& Q; Y* p
修改/删除:mcuos.com! l& K: u+ [; X& E( d+ Q. P
mod_timer(&my_timer,jiffies+new_delay);
7 l1 |( M+ Y: n" b$ Y- 嵌入式底层驱动开发技术学习网站del_timer((&my_timer)//不等待其他CPU(如果在运行这个定时)完成.嵌入式开发联盟& d  j1 z; C' V/ D$ H. Z0 ?
del_timer_sync((&my_timer)//等待其他CPU(如果在运行这个定时器)完成.本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。$ }. h+ p3 I) G/ K8 r. r& e' S6 x
通过软中断实现的
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

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