返回列表 发帖

[原创经验] w90x900驱动之三IRQ的编写

[原创经验] w90x900驱动之三IRQ的编写

void __init w90x900_init_irq(void)2 }; N! s/ r; g# e% ?/ g
{: G  K' {3 h4 a
- 嵌入式底层驱动开发技术学习网站0 @7 G( r; \3 ?) w' X. u
unsigned long pend;

7 O  ^1 m- Q4 t% ^' B1 Vmcuos.com嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习6 I1 s4 E! \, x# Z) `& B
unsigned long last;
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习/ T6 R# N' U+ `! j' \; k

6 {9 ^$ Z3 }4 g+ @7 N- 嵌入式底层驱动开发技术学习网站int irqno;
嵌入式开发联盟- f+ p: l  w) k" o

5 ?0 ?5 C' d6 t9 H" J6 ?; D嵌入式开发联盟int i;

; g" _1 D1 D+ f: R+ k* ~" u mcuos.com# I. m# x9 q- a) z6 H! e/ T

  k5 L2 K! a. D# `5 ?9 e: w) ], I8 L/ U__raw_writel(0xFFFFFFFE, W90X900_AIC_MDCR); /* disable all interrupts */
mcuos.com4 |' t8 Z( I1 T" h1 o
      
) K3 ~* S7 g; D! Q嵌入式开发联盟
5 L7 l* W' S; |3 T6 c3 ^( I. G4 e本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。/* register the main interrupts */

1 I- O9 u6 C5 Y
, Z+ L: `  M5 B1 b' L! fmcuos.com嵌入式开发联盟, W: H( l2 N# s- U8 t2 `
irqdbf("w90x900_init_irq: registering w90x900 interrupt handlers\n");
- 嵌入式底层驱动开发技术学习网站% x/ U4 v/ g6 a# ~- _

4 H9 U% Q9 ^! R% O. W+ K- 嵌入式底层驱动开发技术学习网站嵌入式开发联盟! y* P0 z7 L  C# m. \
for (irqno = IRQ_WDT; irqno <= IRQ_ADC; irqno++) {

# {4 E2 P5 P" H5 j- d( z' C' c
' f6 K& ]* z5 l1 b, v& D3 ?/* set all the w90x900 internal irqs */

& ^+ D! l7 |" B. f嵌入式开发联盟 嵌入式开发联盟, X$ g: x4 J6 p
嵌入式开发联盟" H& \1 T$ R" t8 f+ d
switch (irqno) {
/ |/ p% t+ ~+ y8 Z( ~

/ C/ d  `6 `  u/ J# f( Z本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。/* deal with the special IRQs (cascaded) */

$ |( I4 F4 c, z3 J) G嵌入式开发联盟
2 B! y* b; O1 g, x* r1 p! Y- Q, n- 嵌入式底层驱动开发技术学习网站& l) N& ?: b* i& F1 S4 i
case IRQ_UART0:

" p, _7 e2 v' {8 e# D4 _* N' fmcuos.com
+ o0 |9 C8 I3 N% xmcuos.comcase IRQ_TIMER0:
mcuos.com! f: }. ?. d0 W6 T; f) d1 W! ?5 H
mcuos.com& u0 u9 ?) G+ G* i: c+ C5 \
set_irq_chip(irqno, &
w90x900_irq_chip);
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习: H6 u; M+ k6 s( m$ _0 r& [

0 ~  i. B- d4 S4 t6 B$ u8 R0 wmcuos.comset_irq_handler(irqno, do_level_IRQ);

2 c2 z' w8 k3 S8 P' R嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习嵌入式开发联盟: \+ V$ Z7 \" Z+ e7 f9 [) E' [. x
set_irq_flags(irqno, IRQF_VALID);
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习. j/ g6 y! b- g9 h% \
嵌入式开发联盟: v; r! S6 V( Z5 M0 x6 w6 C) P
break;

) s/ T8 _/ h; c! F0 U - 嵌入式底层驱动开发技术学习网站* y& }* p4 {! p% m
, j8 C# l8 R6 W) z! r
default:

8 w/ D% b* |; ]; l! E; v0 F- 嵌入式底层驱动开发技术学习网站本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。, M. O0 X" i6 v
//irqdbf("registering irq %d (w90p irq)\n", irqno);
mcuos.com+ O" ?% @: V- V# Y' L' g0 ?  l* G# W

8 K! }" M; Q% I- [" E6 d) w- 嵌入式底层驱动开发技术学习网站set_irq_chip(irqno, &w90x900_irq_chip);
0 Q0 z7 w. V& H, w* q
  o5 v$ K& O: R8 W6 T
set_irq_handler(irqno, do_level_IRQ);

8 Y  D" Q- A  {, g. y& M嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习嵌入式开发联盟9 A0 T0 W' c( ]5 V, n2 Z& P5 S7 B
set_irq_flags(irqno, IRQF_VALID);

/ R+ \! b" i+ r+ g嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习
5 v4 O( Q5 u, D) t) @1 g$ {嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习}

' A. X5 \2 C) W! i) R3 O; G: S本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
3 t8 m& Z% S2 w$ m% |( k本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。}

$ H* _4 l# p, r3 \嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习 嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习8 d' k+ h% `- T8 t; b

/ {) x+ E4 s: O3 j' G) i* lirqdbf("w90x900: registered interrupt handlers\n");
mcuos.com4 h8 f) v( T+ X; k' M1 J6 q
}
7 }3 ]$ \( H5 Z8 {4 x5 t4 dmcuos.com
' T5 E' S2 d0 c# T) ]mcuos.comstatic struct irqchip w90x900_irq_chip = {
" S  J8 B8 A( i2 R5 m# i8 z嵌入式开发联盟本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。( G1 g3 z/ ~, e9 O) |& |4 |' w
.ack
( Z9 h, T) J6 wmcuos.com嵌入式开发联盟6 v6 K8 P2 H" b* B
=
w90x900_irq_ack,
  c' h2 s9 j6 c8 |) Z

# S$ T- W3 K* t2 e2 I/ }/ ~本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。.mask嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习4 w9 `  k5 ]1 r; a6 o

2 X" _. ~" G( L* w= w90x900_irq_mask,
mcuos.com& T+ ?3 {3 F, h
嵌入式开发联盟) ~" m. W8 J# B+ I- m  |
.unmask
6 P1 `  h) q" }2 X. ^" ]. Y嵌入式开发联盟
  G. V* I* G" M1 d/ a1 f= w90x900_irq_unmask,

2 l$ |+ l1 I& W5 h2 b: G嵌入式开发联盟
( T+ r% W/ N9 z, n# o+ \0 z* fmcuos.com.set_wake
7 M+ o! @# D* v
6 S: ?. K1 Q& C7 y3 d/ Z6 Mmcuos.com= NULL
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习0 f0 A- `0 Z% ]- U& x7 U
};
* Y# s2 j5 [  Q# H) F  E! w5 F嵌入式开发联盟
- b2 `: a' Z, l: F嵌入式开发联盟9 c- [5 Q1 y; M; c3 l+ j
.macro嵌入式开发联盟' r$ l" y2 @; T6 V  n
get_irqnr_and_base, irqnr, irqstat, base, tmp

  Y2 ?% V8 K% `8 q- 嵌入式底层驱动开发技术学习网站 mcuos.com" G8 G6 |, s7 m, |2 v0 }

, h) |/ \0 w" A6 c) |$ {' J& [嵌入式开发联盟mov嵌入式开发联盟  V2 e3 ?: w& U* `% r
\base, #W90X900_VA_IRQ

" A# ~6 T7 w9 ?2 m8 u0 J9 a- 嵌入式底层驱动开发技术学习网站
" I7 k9 o# ^& U嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习
0 @1 _  @$ u4 w: e本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。ldr
, I5 \: f0 Y4 n7 Z8 f- 嵌入式底层驱动开发技术学习网站\irqnr, [ \base, #
AIC_IPER]//
采用iper来识别中断号,该中断是优先级最高的激活中断。它需要w90x900_irq_ack中的__raw_writel(0x01, W90X900_AIC_EOSCR);来清除中断状态。

$ R9 n2 E9 i- ]! U: fmcuos.com
% `& ?6 C6 B5 u+ t1 O- 嵌入式底层驱动开发技术学习网站ldr嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习1 q. `# m2 j! `% G5 P
\irqnr, [ \base, #AIC_ISNR]
mcuos.com; B- E' b( r  S) i" j$ R

3 `. B+ C+ p% @本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。cmp
8 ?) U# y9 A9 R  U# l2 l嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习\irqnr, #0嵌入式开发联盟) c+ Q- \$ g& Z8 T

0 t' u& g* D1 D0 K0 b: U! R本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。              
4 N  S" r. g& L  x
& [% C! H" V" ^5 ]" j+ {7 z- 嵌入式底层驱动开发技术学习网站.endm
- 嵌入式底层驱动开发技术学习网站6 f' J8 s) ^# L; Q/ O; `' I

3 z7 X. S+ K5 D  W) X- U嵌入式开发联盟- 嵌入式底层驱动开发技术学习网站& V# ?. e: y9 ~' A9 D
/* currently don't need an disable_fiq macro */
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。1 F/ B% P7 r9 C( `5 U0 D
- 嵌入式底层驱动开发技术学习网站1 o' H7 a) f. I2 D. J

5 a( @8 }( F, U7 s4 M嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习.macro嵌入式开发联盟$ m& m6 J! E) M8 K4 ~. J
disable_fiq

( k4 I# l( Z* f. O8 Q4 h# N$ Pmcuos.com
; n4 }, g1 K: ]7 `! n1 D8 z.endm
嵌入式开发联盟5 X; q& X" b) f! k- G7 `
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

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