嵌入式开发者社区

标题: OMAPL138中断问题 [打印本页]

作者: bit0rain    时间: 2015-7-1 16:20
标题: OMAPL138中断问题
我现在有8个按键,分别在GPIOBANK0,6,8,现在我想将这几个bank中断映射到INT6,7,8,可以这么做吗?还是只能映射到中断4或者5?我现在实现代码如下:
7 o  h) U* c( K) |6 I* z  T        //kEY GPIO set
0 i7 ^. R9 [  g# O1 }# `! H6 l        GPIOBank0Pin1PinMuxSetup();* `3 x( ~  k% C
        GPIOBank0Pin2PinMuxSetup();
( y" a! a+ F0 A        GPIOBank6Pin8PinMuxSetup();
. f0 g! K; p( H$ Y1 }! \& S) e4 K        GPIOBank6Pin9PinMuxSetup();
9 h* M8 l8 [- k1 v% q6 O# Y        GPIOBank6Pin10PinMuxSetup();% n+ ?9 P3 L! o+ f' V5 x( u
        GPIOBank6Pin11PinMuxSetup();
4 m- v4 a( W/ |$ I5 V        GPIOBank8Pin12PinMuxSetup();( H2 Z; p/ Z8 [& b( d+ i3 X
        GPIOBank8Pin14PinMuxSetup();4 Y1 m) [. T, `5 Q) l5 k. X
        GPIOBank8Pin15PinMuxSetup();
0 ~# y1 h1 i% z& L
# M" j! _$ P6 x. r7 X    GPIODirModeSet(SOC_GPIO_0_REGS, 2, GPIO_DIR_INPUT);- w: {3 O9 A& S* F9 Z
    GPIODirModeSet(SOC_GPIO_0_REGS, 3, GPIO_DIR_INPUT);
, M  G6 i5 M- w4 x& t) z! j% m1 @! r    GPIODirModeSet(SOC_GPIO_0_REGS, 105, GPIO_DIR_INPUT);
% Q! }: j" z1 \# }- l( L    GPIODirModeSet(SOC_GPIO_0_REGS, 106, GPIO_DIR_INPUT);
" H2 w( x3 E9 v/ n3 ^" ?    GPIODirModeSet(SOC_GPIO_0_REGS, 107, GPIO_DIR_INPUT);
/ T& a9 L1 G  H/ S/ g9 y. ?    GPIODirModeSet(SOC_GPIO_0_REGS, 108, GPIO_DIR_INPUT);) W0 c& m+ ]6 l: ]# G
    GPIODirModeSet(SOC_GPIO_0_REGS, 141, GPIO_DIR_INPUT);: [$ R2 a, b) C
    GPIODirModeSet(SOC_GPIO_0_REGS, 143, GPIO_DIR_INPUT);
' e- M4 a# U6 N6 v8 ^+ g    GPIODirModeSet(SOC_GPIO_0_REGS, 144, GPIO_DIR_INPUT);
* Y4 i. I2 Q( `8 a5 p
8 d- s* z5 B* e1 e
& x& k% D/ d' x1 R4 c: s+ F+ V        // 底板按键中断
  N! \# @; N: j    GPIOIntTypeSet(SOC_GPIO_0_REGS, 2, GPIO_INT_TYPE_FALLEDGE);//key none
) D2 N, Q# K5 d1 k    GPIOIntTypeSet(SOC_GPIO_0_REGS, 3, GPIO_INT_TYPE_FALLEDGE);//key none, x0 r: ~9 P5 |2 p( F
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 105, GPIO_INT_TYPE_FALLEDGE);//key left
" ^; e" ^' Z' r: U    GPIOIntTypeSet(SOC_GPIO_0_REGS, 106, GPIO_INT_TYPE_FALLEDGE);//key ok" @) k: c  ]7 R  F
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 107, GPIO_INT_TYPE_FALLEDGE);//key down
) ], d% K3 @8 M8 d    GPIOIntTypeSet(SOC_GPIO_0_REGS, 108, GPIO_INT_TYPE_FALLEDGE);//key right
+ N) ]7 b- t: s    GPIOIntTypeSet(SOC_GPIO_0_REGS, 141, GPIO_INT_TYPE_FALLEDGE);//key up
1 i7 I1 }0 N' \& S5 s    GPIOIntTypeSet(SOC_GPIO_0_REGS, 143, GPIO_INT_TYPE_FALLEDGE);//key cancel
& o, ?- q. a) B; O* G    GPIOIntTypeSet(SOC_GPIO_0_REGS, 144, GPIO_INT_TYPE_FALLEDGE);//key confirm
$ R/ @4 q& V; R. {) f! v) n' d
5 k* `$ S; ?, |3 S2 y$ [2 X    // 使能 GPIO BANK 中断
; x3 _3 G* Z3 E& B2 N; r    GPIOBankIntEnable(SOC_GPIO_0_REGS, 0);                  //GPIO0  Q1 e6 ?1 l- S% I# f
    GPIOBankIntEnable(SOC_GPIO_0_REGS, 6);                  //GPIO6' s8 V4 O8 z, W$ M# R6 q0 T6 X/ a
    GPIOBankIntEnable(SOC_GPIO_0_REGS, 8);                  //GPIO87 M1 |" W( a  S
; k# _- F6 w* w: r. W$ B& r8 _  w
        // 注册中断服务函数
* B& C4 [( u% ?* o! a  `6 f& l0 |% p        IntRegister(C674X_MASK_INT6, USER0KEYIsr);
8 e& p  j( p% @9 n2 k+ }        IntEventMap(C674X_MASK_INT6, SYS_INT_GPIO_B0INT);( H) p7 E$ I/ D' p& F5 [  w- @) _
        IntEnable(C674X_MASK_INT6);6 \- N6 h. t! q! d' a3 ^  s+ L
# y( u! V$ c: X/ h7 K$ k" ]( n
        IntRegister(C674X_MASK_INT7, USER1KEYIsr);! \0 e  R, ?0 r: k! j
        IntEventMap(C674X_MASK_INT7, SYS_INT_GPIO_B6INT);
  l% q, N% z2 p! R  p' e7 |        IntEnable(C674X_MASK_INT7);
# u3 D- Z! x' u* `/ k8 N! G: S. a6 u/ D! a; k
        IntRegister(C674X_MASK_INT8, USER2KEYIsr);
4 j7 Z5 A: H* }+ h" J, {$ R        IntEventMap(C674X_MASK_INT8, SYS_INT_GPIO_B8INT);  O, N& s+ a& N7 M
        IntEnable(C674X_MASK_INT8);- D+ ^  Y6 `) G8 }
但是现在收不到中断,请问问题出在那里?谢谢
& I/ H7 n2 d/ x/ a
作者: 希望缄默    时间: 2015-7-1 19:42
从你贴出来的代码看 应该是没有问题的
作者: bit0rain    时间: 2015-7-1 21:10
希望缄默 发表于 2015-7-1 19:42
0 M" [2 U( D! z/ X7 l2 p: e8 {' }从你贴出来的代码看 应该是没有问题的
/ W5 }% W3 `# K1 }# d
还有其他要配置的地方吗?比如pll什么的
作者: bit0rain    时间: 2015-7-1 21:44
搞定了,把初始化这部分函数忘调用了……
作者: bit0rain    时间: 2015-7-2 01:24
希望缄默 发表于 2015-7-1 19:428 I# b4 f9 y; \3 N0 `
从你贴出来的代码看 应该是没有问题的

% f  J+ f' `8 i3 V追加一个问题:我先在的中断分配如下:
3 `! S. G! \/ D( d9 R* d. H3 A6 o) |4:VPIF, Y' H. d& z# w1 Y& A
5:LCD
3 c) ]' }* I* V( P4 ~, H) d6:GPIO Bank0! S5 t) l4 Q6 Z+ w/ h0 E/ B4 d+ }
7:GPIO Bank6
7 h. H0 h: v7 R& c1 y1 u/ Z8:GPIO Bank8* ]( ^6 q" `" y$ [- L) P7 b
9:timer/ L# s" \/ U# `) K5 T9 W: {, i
发现运行后,要么VPIF的中断有效,要么GPIO的中断有效,不知道是什么原因?
作者: 希望缄默    时间: 2015-7-2 10:44
bit0rain 发表于 2015-7-2 01:24" m( O. Z- @' g9 H! E" g
追加一个问题:我先在的中断分配如下:
- C/ y0 e4 B* D4:VPIF: S4 S4 |1 R7 r. }; X) f5 {  c
5:LCD

2 ^/ S: m9 ?; N3 w! l不使用操作系统可屏蔽中断不能嵌套 当前中断服务函数执行时其它中断是不能响应的 检查下你的 ISR 函数是不是执行时间太长了
作者: bit0rain    时间: 2015-7-3 12:31
希望缄默 发表于 2015-7-2 10:44+ w  o9 h) J. B. r9 B
不使用操作系统可屏蔽中断不能嵌套 当前中断服务函数执行时其它中断是不能响应的 检查下你的 ISR 函数是 ...

8 ~; Z8 p. v5 _6 B0 ]恩,找到问题了,调试的时候把GPIO和VPIF的中断号设置成一样的了,而且没有设置combine,修改了以后,就好了,谢谢




欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4