返回列表 发帖

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

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

华邦9100-4timer
7 S; T0 ^$ i- q4 W- T1 U" K- 嵌入式底层驱动开发技术学习网站此函数负责timer的初始化:本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。# A6 j- y2 A, ?% J( [; z
static void w90x900_timer_setup (void)嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习  }) M+ U1 d1 d+ @3 o5 E3 B, h
{
- C7 H- V. I! u( @0 k1 O9 _% O- 嵌入式底层驱动开发技术学习网站本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。% L! Y  R+ a) W; Q  ]4 p
/*----- disable timer -----*/

3 \7 Q  [  ^+ F3 ~7 V: \' P) E% D8 q" `本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。$ m4 X$ g+ ~* C
__raw_writel(0, W90X900_TCSR0);/
/timer
的控制和状态寄存器,主要是为了清除[ce][ie]位的。Couter 使能和interrupt使能。

; ^) @: s6 F5 r) ]- {" l( {嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。: g  }6 Y+ Q" p
__raw_writel(0, W90X900_TCSR1);
- 嵌入式底层驱动开发技术学习网站! x) X- j: e- w. F1 G

7 j: G) \4 V, V& O* n; v  Q__raw_writel(0, W90X900_TCSR2);

$ T4 y5 u+ o* o. F嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习. g* Q/ O  P# t. K* c# v" D& M
__raw_writel(0, W90X900_TCSR3);
8 T( r* N- B1 ^9 J, g2 y

. g& S0 S3 w; o, w2 T3 S% _6 t嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习__raw_writel(0, W90X900_TCSR4);

+ x. A  d4 N; `" G嵌入式开发联盟      
6 U7 Q+ W( I% ?6 ~0 V嵌入式开发联盟- 嵌入式底层驱动开发技术学习网站+ E) p7 U5 ~* v8 D) C0 ^2 K
/*----- clear interrupt flag bit -----*/
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。# K' j) v- P& w3 ]( q
嵌入式开发联盟+ T! ?% X" N' j; E1 X
__raw_writel(0x1F, W90X900_TISR); /
/
中断状态寄存器,这个寄存器是只读的但是可以通过写一清除。

+ m/ p; S4 c$ ]( _* c0 P2 f2 X9 i- 嵌入式底层驱动开发技术学习网站   嵌入式开发联盟8 Z9 K3 v# B7 o/ h6 i

/ f+ M: E9 k8 H8 c# U+ T) [嵌入式开发联盟/*----- timer 0 : periodic mode, 100 tick/sec本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。+ O$ ], B. C, l. J. Y2 B; d
-----*/

/ l- g) Z4 w. D& ]' m本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
+ d* m/ l: N! C- w/ j" c5 }" e# q3 C) B- 嵌入式底层驱动开发技术学习网站__raw_writel(sysclk/(100 * 100), W90X900_TICR0);

8 ^! E" m2 w! B. |6 |嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习
, x- L6 S% g6 A嵌入式开发联盟// Sysclk=150000000
W90X900_TICR0timer初始化控制寄存器。填写counter的值。
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习. @# f' ~+ L/ R! X
2 e: ]' q% G" u2 L7 `* H
__raw_writel(0x68000063, W90X900_TCSR0);
//
设置周期模式,使能timer,使能中断。填写
PRESCALE
  q1 Q- j# h. M/ i9 H. n# I; e7 p本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。   
# l3 z; a3 N) W}
% n8 [) I* p% ?1 o! ?8 H  g本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。w90x900_timer_interrupt()嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习6 f6 v$ R# n" N* F* m0 P
{本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。) S/ E* b4 x9 b+ D; y; M
__raw_writel(0x01, W90X900_TISR); //当开启timer和中断后,在中断处理函数里面要清除中断状态寄存器。否则中断不会来了。嵌入式开发联盟6 }- M. n. y( D0 l
}嵌入式开发联盟# z7 G# b  ~  @0 J) J/ M
内核之定时器与时间管理
; p' M3 ]! D- I2 G- 嵌入式底层驱动开发技术学习网站认识两个概念:本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。  Y4 e5 P- g, f- A* A7 e; n; E
HZ:4 t+ r, L* c. `4 d1 H
一秒内时钟中断产生的次数,这里是100次。- 嵌入式底层驱动开发技术学习网站! W8 m  |* W2 c/ @
jiffes:嵌入式开发联盟4 e, t8 C/ v1 G* o
系统启动以来,时钟中断产生的次数,一秒内增加HZ.
/ @& K/ n; F; \3 x" x- 嵌入式底层驱动开发技术学习网站因为jiffes可能发生回饶,系统提供了几个接口:
3 z2 J9 g" H/ F2 i5 H' Vmcuos.comtime_after(a,b), ab的后面 a>b ,小的永远是当前值本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。' _2 W% l) O- K& U
time_before(a,b) ab的前面 a<b 大的永远是要延时的值嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习6 ?+ b* ]4 A5 f: k# L2 j& h1 K+ T+ H
time_after_eq(a,b)嵌入式开发联盟2 q, a) ^# q5 `8 W9 n+ o
time_before_eq(a,b)
; V0 t# Y4 u+ B例子:
" _0 n6 `/ ~6 \6 Q; E嵌入式开发联盟unsigned long delay =jiffies+2*HZ    // 2
; n2 l. h7 q# K- z% T& J嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习while (!(time_before(jiffies,delay)));本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。; y% q5 a& ~# x
执行时不要禁止中断嵌入式开发联盟! Y" b; _. K2 h( }, ~% x6 `
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习. t# g/ g8 N7 {$ _: Q8 W) v
短延迟:
' z- ]. k8 V0 ~- X- z嵌入式开发联盟ndelay():纳秒本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。; F5 v+ {- d5 j, o; R
10e -9
嵌入式开发联盟1 h' o0 G. {  d6 z" S0 D
udelay():微秒mcuos.com( O( e. ~4 g/ g& K$ V3 V
10e -6

+ g: F0 O7 N& X  R8 a* ^; p/ v嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习mdelay():毫秒 10e -3
5 ?2 |- V8 }" M$ a! ` 嵌入式开发联盟2 L5 g* S+ O* j7 \
内核定时器接口:嵌入式开发联盟" ~- u0 v+ L9 ?, i
定义:
1 F# p4 s; n' N+ p) q3 y% F+ B本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。struct timer_list my_timer;
4 T9 x8 Z* {& K) J本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。初始化 timer_list 内部结构:init_timer(&my_timer);
/ F9 ?" U9 ?3 y: j% u嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习填充用户值:1 ^1 k- k8 o; I
my_timer.expires=jiffies+delay;//jiffies单位
5 J) O* F/ _; r/ b嵌入式开发联盟my_timer.data=arg_data;//调用定时器处理函数传入的值' u2 p5 r% q" F0 K5 z5 N
my_timer.function=my_timer_function//到期处理程序嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习: O: I, z$ A% Y& Q1 x9 @7 x! R# m
添加/激活它:add_timer(&my_timer);//添加并且激活定时器- 嵌入式底层驱动开发技术学习网站8 K( _; J$ e. w7 X) g9 X1 f
修改/删除:
+ u: k, q" P8 G% ~- w6 t& g' F嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习mod_timer(&my_timer,jiffies+new_delay);) o9 ~0 s1 ]. v5 ~* v
del_timer((&my_timer)//不等待其他CPU(如果在运行这个定时)完成.mcuos.com4 @! H- A# o$ J7 ~- n# j: c3 A
del_timer_sync((&my_timer)//等待其他CPU(如果在运行这个定时器)完成.
6 b" }# F& w/ h嵌入式开发联盟通过软中断实现的
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

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