返回列表 发帖

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

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

华邦9100-4timermcuos.com$ j- K% R, E0 d* Y) j$ r/ Y- F7 q
此函数负责timer的初始化:mcuos.com% ~8 r, W# r2 C* J8 c
static void w90x900_timer_setup (void)2 A& Z5 n; z: G7 @, `
{mcuos.com, F( u. b6 a4 @, U  B* E

/ l# N3 h% ?: ]4 [/*----- disable timer -----*/

/ w6 J: _; e, ~; e7 J2 t$ z嵌入式开发联盟
- ~% O3 c" \3 B: B9 M, h3 `本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。__raw_writel(0, W90X900_TCSR0);/
/timer
的控制和状态寄存器,主要是为了清除[ce][ie]位的。Couter 使能和interrupt使能。
) Z; d+ Z! g1 @8 O) ^

, _& n1 D7 \% E/ r  M' M8 j( Z__raw_writel(0, W90X900_TCSR1);
# y: h; O: B' q# l/ K

* F/ E6 I! o1 }( ]0 t本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。__raw_writel(0, W90X900_TCSR2);

  t, b6 o8 J; \0 y8 }mcuos.com- 嵌入式底层驱动开发技术学习网站! {, a* [* Q8 s/ W
__raw_writel(0, W90X900_TCSR3);

" ^. o0 G8 v* N. l, n+ E5 q' W
  M  Y# b$ x0 `mcuos.com__raw_writel(0, W90X900_TCSR4);
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。% |; `3 U. t- U: T
      
! N; I) v2 w% H嵌入式开发联盟
- H& o3 W2 |" ?# ]0 Pmcuos.com/*----- clear interrupt flag bit -----*/

  x2 S5 e4 n# \  J嵌入式开发联盟
% u3 d/ I0 W1 _6 F+ u- G. A, p& p9 |- 嵌入式底层驱动开发技术学习网站__raw_writel(0x1F, W90X900_TISR); /
/
中断状态寄存器,这个寄存器是只读的但是可以通过写一清除。
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习# A7 J4 ~: V, s6 e
   本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。% ^6 @: Y/ _' N9 l
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习! H5 L8 i# p( g4 ~) a
/*----- timer 0 : periodic mode, 100 tick/sec" F  A$ H1 H4 I* ?2 I- v
-----*/

6 K6 F! ]7 ^+ ~/ f嵌入式开发联盟
$ u3 Z7 I/ A. S- 嵌入式底层驱动开发技术学习网站__raw_writel(sysclk/(100 * 100), W90X900_TICR0);

' P4 l& {1 F5 v, I0 ]9 N& v9 h嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习
' }8 a7 w  W5 c4 X嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习// Sysclk=150000000
W90X900_TICR0timer初始化控制寄存器。填写counter的值。
mcuos.com9 U! M7 y5 i+ @# b- T+ N
嵌入式开发联盟" S. v1 F- L% }' P7 ]; g- L
__raw_writel(0x68000063, W90X900_TCSR0);
//
设置周期模式,使能timer,使能中断。填写
PRESCALEmcuos.com9 {' K2 u1 e3 s* [
   - 嵌入式底层驱动开发技术学习网站( V* J. [! E6 e
}嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习% H3 [6 S& v$ R4 Q/ y
w90x900_timer_interrupt()
$ O, F5 g) `0 ymcuos.com{
* f( u9 B) ^5 U/ V" a5 J__raw_writel(0x01, W90X900_TISR); //当开启timer和中断后,在中断处理函数里面要清除中断状态寄存器。否则中断不会来了。" k# ?' m0 a, o' m/ e
}
7 n/ k) q6 i) ?! [9 s嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习内核之定时器与时间管理
6 i9 y0 @1 \  k# P( Z本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。认识两个概念:
* p/ W! K' B# p: a$ R$ R- 嵌入式底层驱动开发技术学习网站HZ:本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。; Y- n+ A7 `, c! i: Q* c
一秒内时钟中断产生的次数,这里是100次。
6 e7 F( ~& E. i" t; {嵌入式开发联盟jiffes:- 嵌入式底层驱动开发技术学习网站5 w. a: c  h9 R% I7 @% x
系统启动以来,时钟中断产生的次数,一秒内增加HZ.
* l% q# K) T4 U  I$ f因为jiffes可能发生回饶,系统提供了几个接口:
5 g  U+ F  z. F9 S- otime_after(a,b), ab的后面 a>b ,小的永远是当前值
1 A* [3 z' [8 p" hmcuos.comtime_before(a,b) ab的前面 a<b 大的永远是要延时的值- 嵌入式底层驱动开发技术学习网站8 a, p9 I. b, Q
time_after_eq(a,b)
- C) ]4 f$ @: u8 ttime_before_eq(a,b) 嵌入式开发联盟+ N5 G2 S* [2 o7 v
例子:
* g; @; k( V4 y/ G4 s1 _: @mcuos.comunsigned long delay =jiffies+2*HZ    // 2嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习8 ]: I" _) M* ?) i  H2 B3 V; }
while (!(time_before(jiffies,delay)));
, c9 C+ K. p. d( P6 r& `- 嵌入式底层驱动开发技术学习网站执行时不要禁止中断mcuos.com$ K  z# X( e5 ~7 f- l  E

5 g, E3 n$ Q0 m' P2 X$ K- 嵌入式底层驱动开发技术学习网站短延迟:0 ?" W5 o4 |& `: d1 U9 K4 k
ndelay():纳秒
* x  B! G$ T, }+ l, y  `- L- 嵌入式底层驱动开发技术学习网站10e -9

( d2 b/ j$ p- E嵌入式开发联盟udelay():微秒+ n( i2 E4 {0 c* g  ?/ i3 \9 ^
10e -6

% P( f% [' r2 b) V. Z/ F嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习mdelay():毫秒 10e -3
: C$ J' w% p4 t# S% w$ r 嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习. ~6 p8 H1 {- W, l( }
内核定时器接口:- 嵌入式底层驱动开发技术学习网站. Z" n  Y$ b8 q  w% ^
定义:嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习  g& D. ~$ V: f; b9 s
struct timer_list my_timer;- 嵌入式底层驱动开发技术学习网站& [( _  }  U2 j: K% g
初始化 timer_list 内部结构:init_timer(&my_timer);- 嵌入式底层驱动开发技术学习网站, ^, t% j6 o6 K& v
填充用户值:
+ V: Y. U- n8 g) Q嵌入式开发联盟my_timer.expires=jiffies+delay;//jiffies单位; h7 h, h' |: g
my_timer.data=arg_data;//调用定时器处理函数传入的值( S1 v# q3 H2 b- h. e
my_timer.function=my_timer_function//到期处理程序
% J( O' C6 j. g- X; r- 嵌入式底层驱动开发技术学习网站添加/激活它:add_timer(&my_timer);//添加并且激活定时器mcuos.com( E  P$ a# o- n9 _) j
修改/删除:- 嵌入式底层驱动开发技术学习网站  z9 G& K- q8 @9 J! N# H" X
mod_timer(&my_timer,jiffies+new_delay);- f) k  P6 b6 Z. Z
del_timer((&my_timer)//不等待其他CPU(如果在运行这个定时)完成.
& D, D. P, A' A3 v; e嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习del_timer_sync((&my_timer)//等待其他CPU(如果在运行这个定时器)完成.
+ p) X! k, g' `' W$ t4 ?4 j嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习通过软中断实现的
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

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