返回列表 发帖

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

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

华邦9100-4timer
4 X! ^3 X' O" u; M* ^; a2 H, ]嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习此函数负责timer的初始化:- 嵌入式底层驱动开发技术学习网站" R  B1 V& w4 N. _7 J0 X2 c) ]+ I
static void w90x900_timer_setup (void)
' ^" r- Y" n" H. a" }- e本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。{
- I. C0 X1 Z' K' f本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
+ x5 b# C8 G: _嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习/*----- disable timer -----*/
嵌入式开发联盟# o/ B4 C- ^, R: |+ X$ W
嵌入式开发联盟; R7 p3 m3 P: O# H
__raw_writel(0, W90X900_TCSR0);/
/timer
的控制和状态寄存器,主要是为了清除[ce][ie]位的。Couter 使能和interrupt使能。

4 u. w) f& o% v本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。. x$ W) M" j# \# D; F
__raw_writel(0, W90X900_TCSR1);
; G3 e+ y: k# a: l) U
嵌入式开发联盟& r1 a' }( t2 L9 b/ u. `
__raw_writel(0, W90X900_TCSR2);

9 G8 n& P. ?$ D& T3 v3 ?" ~嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习
0 m0 v8 W; {0 L/ Gmcuos.com__raw_writel(0, W90X900_TCSR3);

$ c4 ~, z! @# ?- ]* ~7 f嵌入式开发联盟& p3 x; I7 X  a
__raw_writel(0, W90X900_TCSR4);

* v2 l  _- `! B- J, B9 M3 m8 |# p- 嵌入式底层驱动开发技术学习网站      
+ F+ p7 T3 d. @7 J- x嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习
, m2 v# z3 k- {2 W" d/ `, H本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。/*----- clear interrupt flag bit -----*/
- 嵌入式底层驱动开发技术学习网站% ^7 I/ J. {0 T" I
+ H, o2 g+ ]. T' y6 h3 k4 K
__raw_writel(0x1F, W90X900_TISR); /
/
中断状态寄存器,这个寄存器是只读的但是可以通过写一清除。
- 嵌入式底层驱动开发技术学习网站% j4 F7 ^  S( W5 z' L8 K' o$ q" U! t& f9 W
   
' ]  _# `; w: y* s% _# e本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习& U/ ]2 a: X% z$ N+ f* p
/*----- timer 0 : periodic mode, 100 tick/sec
: O& x! Q+ C2 }mcuos.com-----*/
嵌入式开发联盟; k2 j1 k( s5 N) w
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。( m9 Z7 j6 |" b, l
__raw_writel(sysclk/(100 * 100), W90X900_TICR0);

# U: j1 n. g  S8 N( Umcuos.com ( X, U! R5 \5 M  B. i# c
// Sysclk=150000000
W90X900_TICR0timer初始化控制寄存器。填写counter的值。

1 ~8 W9 |/ s; W' p+ T: \9 Wmcuos.com本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。  c% u. k$ i9 |# V: O
__raw_writel(0x68000063, W90X900_TCSR0);
//
设置周期模式,使能timer,使能中断。填写
PRESCALE本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。" l; L0 w+ g/ w, Y( D9 Z1 [$ s
   本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。) o! l" V4 E1 ^
}  b; w- M/ i/ _* H0 M
w90x900_timer_interrupt()
+ `4 M* C7 i- |6 k; u& U: ]mcuos.com{
9 @' ]% L1 n1 M7 m# u: ^" c% W) r9 U__raw_writel(0x01, W90X900_TISR); //当开启timer和中断后,在中断处理函数里面要清除中断状态寄存器。否则中断不会来了。
" ?. Y: j8 W2 T1 V, @! Y# ?, \嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习}- 嵌入式底层驱动开发技术学习网站3 X" {2 v# T/ W4 S8 X* D3 Z
内核之定时器与时间管理
! U1 s( _% i" T; A. I嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习认识两个概念:* F5 k* H, g" d  G8 E& j1 @2 A
HZ:嵌入式开发联盟- N5 R( M( F" E
一秒内时钟中断产生的次数,这里是100次。5 |. D$ m4 o3 q& c  A: H. B6 y
jiffes:
6 G/ z$ r/ e5 \* h嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习系统启动以来,时钟中断产生的次数,一秒内增加HZ.mcuos.com7 @# R0 P+ U0 j% U. S* s1 ~
因为jiffes可能发生回饶,系统提供了几个接口:
6 z- o8 j& I* z/ [+ V嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习time_after(a,b), ab的后面 a>b ,小的永远是当前值
0 F6 F( g/ m. U* E+ D" emcuos.comtime_before(a,b) ab的前面 a<b 大的永远是要延时的值嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习% t* H; j2 v9 e" m( O: k
time_after_eq(a,b)mcuos.com% v% F3 S  n$ `- D4 K0 C
time_before_eq(a,b)
" z1 N  h' z' g2 ~8 a5 ]嵌入式开发联盟例子:
6 w1 u: G) }$ F2 x9 `本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。unsigned long delay =jiffies+2*HZ    // 2嵌入式开发联盟* v; X! J/ b  u5 N5 Q
while (!(time_before(jiffies,delay)));
* \2 K" U: C. b/ U执行时不要禁止中断mcuos.com9 S+ R0 ^$ f1 V4 l+ L8 Q

/ F4 g0 i/ ^1 Y2 g( f& m嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习短延迟:
4 S" k, j" E- }ndelay():纳秒嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习3 g- n1 a6 C! Y: m" g
10e -9

: _1 D$ h* F, L2 ^( sudelay():微秒
$ G0 v9 f3 E; ?: Zmcuos.com10e -6

! r  w+ m! ^+ i9 n+ qmcuos.commdelay():毫秒 10e -3
$ S/ g7 f/ H9 B6 C! w: ^- 嵌入式底层驱动开发技术学习网站 嵌入式开发联盟5 m5 {3 z) {) {
内核定时器接口:嵌入式开发联盟6 J' {' U) B8 z2 v/ i
定义:% G5 n" D$ k( {
struct timer_list my_timer;- 嵌入式底层驱动开发技术学习网站! `2 q( E  B! ~' U! L3 s
初始化 timer_list 内部结构:init_timer(&my_timer);
0 [; K+ ^7 u" d* X: e" C本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。填充用户值:mcuos.com; p2 y4 U' g  S! t- k
my_timer.expires=jiffies+delay;//jiffies单位本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。0 n: S4 g4 e6 W7 d7 c2 L' H# Q* |
my_timer.data=arg_data;//调用定时器处理函数传入的值嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习9 l0 [! |- w( a; C
my_timer.function=my_timer_function//到期处理程序
0 g! n! w4 r: w, i& qmcuos.com添加/激活它:add_timer(&my_timer);//添加并且激活定时器
; D: {* {( M$ a0 K本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。修改/删除:mcuos.com8 d/ I  L' L! Z* m; I* x, A
mod_timer(&my_timer,jiffies+new_delay);
" B5 N( z8 x1 r( k/ [. R* G- @5 O+ h2 ^嵌入式开发联盟del_timer((&my_timer)//不等待其他CPU(如果在运行这个定时)完成.mcuos.com. B/ P% m4 U9 D: D4 E, ?
del_timer_sync((&my_timer)//等待其他CPU(如果在运行这个定时器)完成.
2 O3 J5 }0 x7 w  D" ^( b5 c嵌入式开发联盟通过软中断实现的
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

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