返回列表 发帖

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

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

void __init w90x900_init_irq(void)
5 w8 d( A6 }+ m6 x4 Q6 s) a0 |嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习{+ i+ Y: q6 H- c  o; s0 H
- 嵌入式底层驱动开发技术学习网站# W1 ]! P# y" c5 p' X' c* C; H
unsigned long pend;
mcuos.com8 [( h: l% G' e6 X
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。- D7 N& H* j; H9 J
unsigned long last;
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。6 s! }; R( Z& J4 ?/ S1 Y3 U

# c! R+ z3 `% h0 D& S& [5 Xint irqno;

2 R+ t5 [7 F+ q3 e本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习+ Q: i) z2 w# F& {
int i;
- 嵌入式底层驱动开发技术学习网站' ~8 C) ^# L  v. t4 `

( g0 p: j& V; i* N' ], C嵌入式开发联盟
* f- d' H2 B6 A7 ?, p* q  ~. S9 i__raw_writel(0xFFFFFFFE, W90X900_AIC_MDCR); /* disable all interrupts */

) y& C( _2 s( ]+ qmcuos.com       6 m8 M" {2 ]7 A9 {
mcuos.com. I" {; N0 Y4 H; O; Y! M& G4 L( J
/* register the main interrupts */

( J0 @$ ^, Q1 K  ?; c& [. g本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。 本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。- e# t* _3 _2 h9 [* \& V4 Q

0 ^. e- o* K# j, c9 |- 嵌入式底层驱动开发技术学习网站irqdbf("w90x900_init_irq: registering w90x900 interrupt handlers\n");
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。' z, E* h! R  G$ X

2 q: A9 N# m6 D$ V, T嵌入式开发联盟
- n, x2 q0 b+ Rmcuos.comfor (irqno = IRQ_WDT; irqno <= IRQ_ADC; irqno++) {
- 嵌入式底层驱动开发技术学习网站7 u; X3 S+ q8 O1 h3 \# [
嵌入式开发联盟1 o2 D" ?: {1 k; I6 \1 Y9 S
/* set all the w90x900 internal irqs */

1 \, W. w0 P0 o, o3 |' J7 lmcuos.com ) K" L5 Z4 ?9 a. c. k' g

# O& D" T& Y7 \; d( \1 Qmcuos.comswitch (irqno) {

# s4 }9 N* b6 x7 g5 N嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习mcuos.com9 o4 J+ F$ w. ]) p# J8 N% g5 V% m5 ~  C
/* deal with the special IRQs (cascaded) */

$ U* p& A+ B: ]: a- 嵌入式底层驱动开发技术学习网站
& U( m. l% D; D& ]mcuos.com嵌入式开发联盟" t: N' r& W$ A2 _  j
case IRQ_UART0:

1 `& k3 C  X3 p; Z, r/ l( A- 嵌入式底层驱动开发技术学习网站
( i& ?# }2 s9 b! [$ ]mcuos.comcase IRQ_TIMER0:
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习( r9 f8 A9 ^7 n: Z/ R

4 _; f* K8 M4 x- 嵌入式底层驱动开发技术学习网站set_irq_chip(irqno, &
w90x900_irq_chip);

1 d8 F! o# o, u9 R; y  I0 j本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。mcuos.com& K) V* T% Q- t( m- |5 @( a
set_irq_handler(irqno, do_level_IRQ);
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。: o9 X; j; Y2 n% F8 z+ x

( U! F& {- e3 |4 q) b  [- B8 i% M本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。set_irq_flags(irqno, IRQF_VALID);
/ B% a! [6 ~- L7 b5 [+ }! [7 l* C
mcuos.com+ e: @0 ?3 [2 b0 V
break;
mcuos.com1 {* n# F9 U# d* T- x8 s

4 F0 [) `, j* R, V嵌入式开发联盟
/ X" t, A+ J3 m( I& p" Zdefault:

" o8 ~4 x* W: f& k: @) X( c本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。0 b$ g# T0 D2 T) }# `
//irqdbf("registering irq %d (w90p irq)\n", irqno);
嵌入式开发联盟, g0 B3 `3 O0 W6 c
mcuos.com7 l) f7 ?+ d, W+ `
set_irq_chip(irqno, &w90x900_irq_chip);

( o4 g  ~5 F; R6 _2 ^" j/ v/ c6 `7 B7 T9 @) O$ _
set_irq_handler(irqno, do_level_IRQ);

) D2 ~6 B  f7 k0 |; B# g5 M: h+ K- 嵌入式底层驱动开发技术学习网站
: y" @1 p: m6 O4 W; G嵌入式开发联盟set_irq_flags(irqno, IRQF_VALID);

, j! {# D5 h/ [" Q3 I% {- 嵌入式底层驱动开发技术学习网站
  T% S0 }' A4 r4 ]mcuos.com}
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习% U; X: z+ |% C) A6 ]5 S

7 J7 J  A# L4 }+ H" ]嵌入式开发联盟}

# \4 d0 K- e$ U! N嵌入式开发联盟
; o, Z7 L' J2 u9 w9 ~
8 i3 _- ^, z1 N2 Y& c' e2 R嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习irqdbf("w90x900: registered interrupt handlers\n");

( X6 f) n9 ~. i' b' Nmcuos.com}- 嵌入式底层驱动开发技术学习网站, ^6 r5 P4 s+ w0 T! k9 T: a2 C0 g
嵌入式开发联盟2 d9 m, m5 W9 C
static struct irqchip w90x900_irq_chip = {- 嵌入式底层驱动开发技术学习网站* |+ v0 C0 U4 ]* S1 @# h+ b
- 嵌入式底层驱动开发技术学习网站" [4 U, Y1 ^  r% o% ?% j. q
.ack
4 ?) n) Y. ?) @: p  D嵌入式开发联盟嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习" e3 I4 g" r6 v4 n
=
w90x900_irq_ack,
' M; @& L' H) G; _0 q' b' W
- 嵌入式底层驱动开发技术学习网站. R# ~) m9 l+ D# u5 F) @
.mask
6 @/ g! f; E, o! V0 V( {! |* p" xmcuos.com- ?+ m- C% S+ |
= w90x900_irq_mask,
- 嵌入式底层驱动开发技术学习网站& H# l' O7 X6 w3 b: `
mcuos.com3 y$ r9 w) |- A# ]& G* b
.unmaskmcuos.com2 h  M0 H$ V+ K% I! \

3 j5 X8 S$ m& v= w90x900_irq_unmask,

# [( o, D4 O) ^5 amcuos.com
8 F0 n* c& n2 [4 _2 _  G5 l8 V嵌入式开发联盟.set_wake嵌入式开发联盟5 n; a) j6 G6 F+ z% D6 I; k

/ T. Q; U8 \2 F  C" `; A7 Kmcuos.com= NULL

4 {) J4 v. I* c9 i};
) a. l9 I3 U+ C9 g0 x + y5 q$ I1 F7 Z% E

, G" Z$ U5 I  O. Q- 嵌入式底层驱动开发技术学习网站.macro
3 b+ R+ v- F# h& R# g7 D/ lmcuos.com
get_irqnr_and_base, irqnr, irqstat, base, tmp
. V# b7 L- \2 l) Z; F6 D

0 |( D% y# Z4 P0 B! S; V9 r嵌入式开发联盟: [6 _5 }+ M: ?" i% V- |1 C1 d
mov本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。+ d1 x  v' X' O3 s, M6 h
\base, #W90X900_VA_IRQ

" j8 b9 T% |( u4 p6 k- B- 嵌入式底层驱动开发技术学习网站 本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。( l" ^" o+ Q+ W9 [9 Q
4 P9 ?2 P1 p0 r- E$ m( k% F
ldr
" k5 }3 z- g9 n) [! U7 v  r  _嵌入式开发联盟\irqnr, [ \base, #
AIC_IPER]//
采用iper来识别中断号,该中断是优先级最高的激活中断。它需要w90x900_irq_ack中的__raw_writel(0x01, W90X900_AIC_EOSCR);来清除中断状态。
本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。! o/ e  d" R* }6 Y

; ~& m- \0 Z2 K! E# O/ {嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习ldr
  ^9 X) ]3 U% z+ ^4 \嵌入式开发联盟\irqnr, [ \base, #AIC_ISNR]

& D+ ], B* L! q8 p2 x本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
' g& J! r" o% T6 \5 F嵌入式开发联盟cmp- 嵌入式底层驱动开发技术学习网站. T; C8 p- D- u. s1 m) q2 `
\irqnr, #0
$ o; H# W3 _  o* X本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。
mcuos.com8 R) E, W' ], w
              嵌入式开发联盟2 P6 P+ ]! u. D, m
- 嵌入式底层驱动开发技术学习网站, x( L2 P6 A5 H( V' ^
.endm
嵌入式, 嵌入式开发, Linux, arm, 驱动开发, 嵌入式学习- j* Z/ f- X: @. B2 J* E

: x3 _3 T# R3 e9 J; ]  x嵌入式开发联盟本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。/ c2 K; T7 ^+ G, @' T0 @/ T
/* currently don't need an disable_fiq macro */
! _4 \8 ?. D% T' j; |' S( |

& c7 t& Y; d5 f0 I
+ R2 Q; h+ f/ l! J- s, i本站提供嵌入式底层驱动开发详尽的学习资料,技术帖子,面向嵌入式开发行业初学者,提供有针对性的技术培训服务。.macro
% E2 c. v, E7 [( i+ s嵌入式开发联盟disable_fiq
- 嵌入式底层驱动开发技术学习网站+ f: b5 s# d, t0 g, j. {+ ]3 i

8 e  D; c! `$ h: Zmcuos.com.endm

/ E6 Z7 P1 T* t4 }# m1 m6 amcuos.com
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友

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