返回列表 发帖

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

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

华邦9100-4timer
/ W6 F3 k. \3 X# n& J+ K& x; {mcuos.com此函数负责timer的初始化:本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。% t" e7 U8 F8 B7 P2 S$ f* R
static void w90x900_timer_setup (void)嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习- K3 J( h7 h9 b; t* ?9 b/ v
{
% b1 ?' f. @: h# _5 w! n2 S  _
, M. T( L2 c7 h' Y7 o* |; C+ Emcuos.com/*----- disable timer -----*/
( F. {3 W1 _+ V& n, t* k, v# B! ?% U

" c" u8 M8 q1 P. M嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习__raw_writel(0, W90X900_TCSR0);/
/timer
的控制和状态寄存器,主要是为了清除[ce][ie]位的。Couter 使能和interrupt使能。

1 k. F0 w& I7 v3 D* x+ C8 T5 I& x/ |嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习6 f8 u2 P8 V7 G% O
__raw_writel(0, W90X900_TCSR1);
7 I7 ~. a# t1 ?- {
- 嵌入式底层驱动开发技术学习网站2 r2 N( r' ^# p8 }% a5 U$ S
__raw_writel(0, W90X900_TCSR2);
# v' Z* v: ~4 _# U4 E
嵌入式开发联盟0 m8 Y" j. z2 B; }
__raw_writel(0, W90X900_TCSR3);
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。1 C% p1 H# A$ `- r$ w! Q! i

: _) {. ^7 q# s* T/ T: s嵌入式开发联盟__raw_writel(0, W90X900_TCSR4);

6 c% i0 i/ d; Y: B9 A       - 嵌入式底层驱动开发技术学习网站2 X8 D4 D4 G% j" j  R
$ |) W8 O# R, H# N
/*----- clear interrupt flag bit -----*/

) F2 ^# j2 X- @2 E+ w+ emcuos.com
1 S5 G( l9 A/ E. y! g! n1 Z嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习__raw_writel(0x1F, W90X900_TISR); /
/
中断状态寄存器,这个寄存器是只读的但是可以通过写一清除。
嵌入式开发联盟  Q- T) G0 K7 x" w
   mcuos.com6 L7 l* H- r3 Z
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。; X6 E- u( Z$ W! t( x* H/ O: F4 m" F
/*----- timer 0 : periodic mode, 100 tick/secmcuos.com# `1 N9 w4 v( D
-----*/

7 }- j- V- [4 ?6 J  P; d) q嵌入式开发联盟' x9 S( V! ?3 [
__raw_writel(sysclk/(100 * 100), W90X900_TICR0);

) Q7 @" J7 Y# T7 e6 s$ \. m- 嵌入式底层驱动开发技术学习网站
8 [2 Z7 U- Z1 t3 N. A3 ]嵌入式开发联盟// Sysclk=150000000
W90X900_TICR0timer初始化控制寄存器。填写counter的值。
! ~- L7 g3 ~6 G

- {' e) u/ i1 e, p& ]$ S3 I0 J嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习__raw_writel(0x68000063, W90X900_TCSR0);
//
设置周期模式,使能timer,使能中断。填写
PRESCALE
- P/ j( [9 j4 P& a# A   
4 E+ T9 y1 B& }0 y1 d9 S}
5 d) K6 L0 H: ?6 S+ dmcuos.comw90x900_timer_interrupt()mcuos.com- ~+ S* |9 `- w% M. U: o
{嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习5 s/ S$ G  p* e- l: P: t& Q
__raw_writel(0x01, W90X900_TISR); //当开启timer和中断后,在中断处理函数里面要清除中断状态寄存器。否则中断不会来了。
5 [$ R& q3 s* y0 J* r$ i. k}
% O5 l9 ~& i% o嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习内核之定时器与时间管理
3 w" L+ ]0 ~3 [mcuos.com认识两个概念:
+ X3 V7 o5 a; x& r+ k! n7 ^8 K. r$ D本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。HZ:7 g0 I) s3 |) l: S9 T
一秒内时钟中断产生的次数,这里是100次。
% t3 k; V6 D- I8 U- 嵌入式底层驱动开发技术学习网站jiffes:
; p3 x& R) i) [% Y& x; I. a9 K本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。系统启动以来,时钟中断产生的次数,一秒内增加HZ.- 嵌入式底层驱动开发技术学习网站( n& Y% y% |2 a6 w: q
因为jiffes可能发生回饶,系统提供了几个接口:本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。4 c8 s8 ^  T5 [
time_after(a,b), ab的后面 a>b ,小的永远是当前值本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。; Z' f+ Y1 j1 a  v  Y! t' }
time_before(a,b) ab的前面 a<b 大的永远是要延时的值
6 S- w5 b, a' y! |7 [# Imcuos.comtime_after_eq(a,b)mcuos.com- M; b. i( ^6 H2 U
time_before_eq(a,b)
# V' H4 k# R* f. t! C+ q例子:mcuos.com) P7 C  u6 @4 J
unsigned long delay =jiffies+2*HZ    // 2mcuos.com1 N. ~% u. ]$ G# F' D0 Y
while (!(time_before(jiffies,delay)));mcuos.com5 d5 u% u. }+ x  E
执行时不要禁止中断
8 |  X0 A, N3 v: p嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习
! J& A6 v' _% Z! v8 v# p' v嵌入式开发联盟短延迟:
; z( f" P3 d( a% \本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。ndelay():纳秒mcuos.com. p( ]; Q5 E9 r7 O7 K# a
10e -9
嵌入式开发联盟, U( N* z7 k$ v# H% _9 j
udelay():微秒本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。5 T9 r+ X  V( O
10e -6
- 嵌入式底层驱动开发技术学习网站+ d, `/ v# I, s+ z/ {5 U- @
mdelay():毫秒 10e -3
8 P4 F1 x0 m$ o; B3 Z. i& }本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
9 V0 i' @' w) k2 O' |: E5 xmcuos.com内核定时器接口:
: ~$ a5 q6 g- ~( Z4 g定义:
2 M: ~8 y2 b$ k% T嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习struct timer_list my_timer;
) y2 u# b+ ?6 C6 I" Y% B- 嵌入式底层驱动开发技术学习网站初始化 timer_list 内部结构:init_timer(&my_timer);嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习' y# y7 U0 l0 D# e
填充用户值:
7 [# A, b+ Y; Z2 Nmcuos.commy_timer.expires=jiffies+delay;//jiffies单位
3 ?. ~; [: R# Z: _本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。my_timer.data=arg_data;//调用定时器处理函数传入的值
7 r8 I1 N, q! J2 k' s嵌入式开发联盟my_timer.function=my_timer_function//到期处理程序
! l# Q  m1 Q/ I  d7 G, u* Kmcuos.com添加/激活它:add_timer(&my_timer);//添加并且激活定时器mcuos.com; v& {! Z! M; Z* Q
修改/删除:嵌入式开发联盟- W+ y2 v4 j3 o% X2 l" d4 ?
mod_timer(&my_timer,jiffies+new_delay);
" m! ~, |3 h2 a2 R$ f' Qmcuos.comdel_timer((&my_timer)//不等待其他CPU(如果在运行这个定时)完成.
2 s5 O* A8 n$ X2 O7 q" Z& F1 bmcuos.comdel_timer_sync((&my_timer)//等待其他CPU(如果在运行这个定时器)完成.
( ~& L+ F! S+ ^. L通过软中断实现的
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

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