返回列表 发帖

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

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

华邦9100-4timer- 嵌入式底层驱动开发技术学习网站+ m  z3 r( b& G) ^) V# D
此函数负责timer的初始化:
% z' h" s5 |% O- ]# [- 嵌入式底层驱动开发技术学习网站static void w90x900_timer_setup (void)本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。2 Q, i- L6 V6 G. J; M
{
: q; u7 D  [- rmcuos.com
2 v+ I6 n: G/ I% {9 e4 jmcuos.com/*----- disable timer -----*/

5 B& D* K) \! Y本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。0 E* k5 {- K' _9 B( [% K
__raw_writel(0, W90X900_TCSR0);/
/timer
的控制和状态寄存器,主要是为了清除[ce][ie]位的。Couter 使能和interrupt使能。
mcuos.com4 i5 w* V' |9 s" L2 ?. z' P4 e

) o$ X: k7 y9 P; C5 P! R嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习__raw_writel(0, W90X900_TCSR1);
嵌入式开发联盟. {8 k. C: W9 _- k. v; H1 t4 n
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习5 C  ^$ K: ]; F2 M! M
__raw_writel(0, W90X900_TCSR2);

, ]2 t. X  D/ X6 G/ h) n- 嵌入式底层驱动开发技术学习网站
) e0 n5 ^6 U+ y! [' z9 `: ?2 K嵌入式开发联盟__raw_writel(0, W90X900_TCSR3);

; `5 S* A# Z& f2 x# h: Jmcuos.com
' Y) ~3 _0 B+ B' @mcuos.com__raw_writel(0, W90X900_TCSR4);

0 o. E% t9 F% }7 Q" U3 @      
% Q' E( @* m. b0 y8 H9 R0 d- 嵌入式底层驱动开发技术学习网站
, K! g8 ]8 j- z& p7 C! \" ~% b' {$ a/*----- clear interrupt flag bit -----*/
mcuos.com$ E  f  e' V1 a& V

0 w% M. Z. R, p, O5 z嵌入式开发联盟__raw_writel(0x1F, W90X900_TISR); /
/
中断状态寄存器,这个寄存器是只读的但是可以通过写一清除。

/ `! `3 v7 i( [. J* s- 嵌入式底层驱动开发技术学习网站   
" ]# b$ j7 Q6 p5 g& Y$ t嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习
$ J* u! f9 ]7 y0 M% a/*----- timer 0 : periodic mode, 100 tick/sec
4 i2 W5 o3 H" y, D( H" n; w-----*/

9 I" i; }5 Y& ?6 r* ~+ z( c嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习mcuos.com& R; z) z+ @8 e0 Z
__raw_writel(sysclk/(100 * 100), W90X900_TICR0);
嵌入式开发联盟( ^+ T6 |5 {0 q/ l" s
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。2 H) ]$ H, ~9 N
// Sysclk=150000000
W90X900_TICR0timer初始化控制寄存器。填写counter的值。

: ^% {- ]3 H$ O" R( t( R嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习) a( D/ @$ F2 W4 @8 h5 Q
__raw_writel(0x68000063, W90X900_TCSR0);
//
设置周期模式,使能timer,使能中断。填写
PRESCALE
+ ^4 J$ b7 d! x6 u/ c. M/ j; K嵌入式开发联盟   
; {, m1 T0 X* ~* h本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。}
( p% D6 [( A3 c2 zw90x900_timer_interrupt()
2 x% v4 ^9 G) ]2 z{本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。$ M( P# P* V' `; L1 g
__raw_writel(0x01, W90X900_TISR); //当开启timer和中断后,在中断处理函数里面要清除中断状态寄存器。否则中断不会来了。
0 t  l# S0 g+ O本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。}- 嵌入式底层驱动开发技术学习网站9 b# H; W, u! q+ z; m
内核之定时器与时间管理- 嵌入式底层驱动开发技术学习网站; m& ]: W, v1 o9 X( ?- K
认识两个概念:- 嵌入式底层驱动开发技术学习网站' V( o5 y* y3 J$ n8 s, h  |% M
HZ:mcuos.com1 X6 b( ^4 S7 R6 d, v
一秒内时钟中断产生的次数,这里是100次。
- O; W( M0 F9 J# U" t/ W9 _' K1 A本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。jiffes:
+ K* F2 a& Q  w  a( G. M: E) a- l' Smcuos.com系统启动以来,时钟中断产生的次数,一秒内增加HZ.嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习6 W% b$ ~3 p7 r8 L4 u$ e
因为jiffes可能发生回饶,系统提供了几个接口:
4 I8 [2 _9 G$ [4 `嵌入式开发联盟time_after(a,b), ab的后面 a>b ,小的永远是当前值
0 H  Z, s) [) m; ^1 D嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习time_before(a,b) ab的前面 a<b 大的永远是要延时的值
: W1 B0 ?5 j( S% _嵌入式开发联盟time_after_eq(a,b)- 嵌入式底层驱动开发技术学习网站7 F, @3 J' l6 O9 O2 T# R& \- J
time_before_eq(a,b) 嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习; W/ M) }  p. V) m7 I
例子:mcuos.com5 C; u2 ?* F6 t& ^1 K2 P
unsigned long delay =jiffies+2*HZ    // 2嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习) E0 R$ W- t+ R! F0 e" i# Z/ C5 }
while (!(time_before(jiffies,delay)));
0 p/ p: Z$ B2 I; S" r嵌入式开发联盟执行时不要禁止中断
8 M$ L- Z7 F$ z+ ]7 H. V本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。 + u8 m$ c, {5 \+ ~8 x
短延迟:mcuos.com7 y2 P, p; j+ _4 R
ndelay():纳秒本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。( d" t% N$ h, o
10e -9
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习5 c" M, N7 _* C; a5 S; W8 g$ E
udelay():微秒嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习: _2 @' ?% H7 e% O( B3 P
10e -6

3 O" ]2 ^$ p% _7 o1 o7 O$ t/ m% @' `mdelay():毫秒 10e -3本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。/ s! Q; H" \& B7 b0 W+ O6 O8 @
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习" r. M# H' S8 R% V2 A( ]
内核定时器接口:嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习) d* F! k8 o& R$ G" k: N5 U
定义:嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习' K) S/ o" @+ O; J! H4 @# `
struct timer_list my_timer;嵌入式开发联盟6 W$ m* ]! z! O
初始化 timer_list 内部结构:init_timer(&my_timer);mcuos.com% }5 e8 m; d( V
填充用户值:
# y2 @& S. i. i- u5 A) H; l0 e* wmcuos.commy_timer.expires=jiffies+delay;//jiffies单位嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习( I: {1 [& M7 `; p6 x. ?5 r- s! ]
my_timer.data=arg_data;//调用定时器处理函数传入的值
2 O, |2 ~. E/ x嵌入式开发联盟my_timer.function=my_timer_function//到期处理程序
( n, r! v# e, F* Nmcuos.com添加/激活它:add_timer(&my_timer);//添加并且激活定时器嵌入式开发联盟/ x; T, g8 j# Q% I5 @
修改/删除:mcuos.com/ ]% H) j1 r" K! A& j4 w
mod_timer(&my_timer,jiffies+new_delay);% {  |) z; d; I+ s. Q/ Y
del_timer((&my_timer)//不等待其他CPU(如果在运行这个定时)完成.
  p% |7 A6 w! E9 ~+ w0 ~" Q( N% |嵌入式开发联盟del_timer_sync((&my_timer)//等待其他CPU(如果在运行这个定时器)完成.
, [& w- [/ I. G0 l嵌入式开发联盟通过软中断实现的
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

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