嵌入式开发者社区

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

作者: bit0rain    时间: 2015-7-1 16:20
标题: OMAPL138中断问题
我现在有8个按键,分别在GPIOBANK0,6,8,现在我想将这几个bank中断映射到INT6,7,8,可以这么做吗?还是只能映射到中断4或者5?我现在实现代码如下:
2 F" |7 K* Y. l/ n4 R+ U        //kEY GPIO set1 b! k+ S: n) G2 O7 i* l
        GPIOBank0Pin1PinMuxSetup();2 H2 O% {: B! z! G8 Z, V( H6 P* r
        GPIOBank0Pin2PinMuxSetup();
+ g; w. [4 `  z$ G        GPIOBank6Pin8PinMuxSetup();
+ n* I0 I. w0 l        GPIOBank6Pin9PinMuxSetup();
% I3 u& d1 C8 V) G( W+ m4 L- L8 Q3 h        GPIOBank6Pin10PinMuxSetup();
' w# m* J2 N) t  g# a+ g+ u        GPIOBank6Pin11PinMuxSetup();
* p- i" R6 N$ K" r. ^# ]        GPIOBank8Pin12PinMuxSetup();
# P% {6 I+ G( P; y4 j! h8 i2 s        GPIOBank8Pin14PinMuxSetup();
$ R6 [7 a( \; L& [, B+ f1 Y1 ]7 v        GPIOBank8Pin15PinMuxSetup();
. l: D& R; T3 W8 I1 v
4 z4 q, n# j; ~  C( V6 }5 L    GPIODirModeSet(SOC_GPIO_0_REGS, 2, GPIO_DIR_INPUT);
( ^+ ?1 w; N/ u5 ^* C  U: @    GPIODirModeSet(SOC_GPIO_0_REGS, 3, GPIO_DIR_INPUT);& K* g- W, j) P' w, |' R( e
    GPIODirModeSet(SOC_GPIO_0_REGS, 105, GPIO_DIR_INPUT);  C) F' G; v& _2 }
    GPIODirModeSet(SOC_GPIO_0_REGS, 106, GPIO_DIR_INPUT);
7 b7 m* s  X/ \) Q3 i) _) A. f7 w    GPIODirModeSet(SOC_GPIO_0_REGS, 107, GPIO_DIR_INPUT);
3 b0 S/ ^9 @. F; `    GPIODirModeSet(SOC_GPIO_0_REGS, 108, GPIO_DIR_INPUT);
) v# [* }/ F$ n3 B5 v    GPIODirModeSet(SOC_GPIO_0_REGS, 141, GPIO_DIR_INPUT);" G& I2 F8 h7 R: ?
    GPIODirModeSet(SOC_GPIO_0_REGS, 143, GPIO_DIR_INPUT);" E2 M; E/ X3 N% }* g  @
    GPIODirModeSet(SOC_GPIO_0_REGS, 144, GPIO_DIR_INPUT);8 z& \* A2 e  H/ R

3 o$ r8 F1 Z1 O8 B2 j
/ j6 K, I3 U9 n- I0 F        // 底板按键中断1 X. e8 }$ e# c. N
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 2, GPIO_INT_TYPE_FALLEDGE);//key none/ v1 y$ m, e1 ]
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 3, GPIO_INT_TYPE_FALLEDGE);//key none
1 i- S0 c0 g" J9 H& M- Z1 @1 n    GPIOIntTypeSet(SOC_GPIO_0_REGS, 105, GPIO_INT_TYPE_FALLEDGE);//key left3 l9 q7 w. Z/ e$ H4 w. B  t$ ^
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 106, GPIO_INT_TYPE_FALLEDGE);//key ok6 x9 b5 m+ Q) w2 i1 S
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 107, GPIO_INT_TYPE_FALLEDGE);//key down& f8 j) x# i0 m
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 108, GPIO_INT_TYPE_FALLEDGE);//key right9 n9 T$ r2 E  n4 D! l+ ?, s; s
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 141, GPIO_INT_TYPE_FALLEDGE);//key up
3 k, K& h+ C9 {5 z    GPIOIntTypeSet(SOC_GPIO_0_REGS, 143, GPIO_INT_TYPE_FALLEDGE);//key cancel- t0 t( q9 }2 e6 I
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 144, GPIO_INT_TYPE_FALLEDGE);//key confirm1 m8 ]& {+ @' }1 v5 ], Q. ~% b

9 `. ^. T1 c; X    // 使能 GPIO BANK 中断
% g% m1 V" y0 d7 B* k- u    GPIOBankIntEnable(SOC_GPIO_0_REGS, 0);                  //GPIO0; ^. B6 |1 O& Y3 l0 @- u9 Z; Z& o
    GPIOBankIntEnable(SOC_GPIO_0_REGS, 6);                  //GPIO6& d% X( b! B8 }3 R" b' u4 Q% P
    GPIOBankIntEnable(SOC_GPIO_0_REGS, 8);                  //GPIO8
& ^4 ?+ g# O3 v4 e: v* Q9 l# Z) c% J" {
        // 注册中断服务函数
( O) ]+ C4 Y9 u2 A        IntRegister(C674X_MASK_INT6, USER0KEYIsr);
  [% O7 q& a! B$ T- R        IntEventMap(C674X_MASK_INT6, SYS_INT_GPIO_B0INT);8 J0 x7 ^. {7 d6 Z: q( I
        IntEnable(C674X_MASK_INT6);
) n' p" l6 S  q% @
5 u! Q1 j$ }$ R        IntRegister(C674X_MASK_INT7, USER1KEYIsr);3 H9 m/ O, T$ y; }! \. T0 y
        IntEventMap(C674X_MASK_INT7, SYS_INT_GPIO_B6INT);5 W; E# i6 K* f' ]; O6 ^5 r
        IntEnable(C674X_MASK_INT7);. u' Y1 L& Z' T. k
. Q+ e: \4 h6 q3 q
        IntRegister(C674X_MASK_INT8, USER2KEYIsr);4 P, D4 Y( N" ^6 k
        IntEventMap(C674X_MASK_INT8, SYS_INT_GPIO_B8INT);
  g: l7 T, P" ]        IntEnable(C674X_MASK_INT8);! |# [# H1 G- O& w
但是现在收不到中断,请问问题出在那里?谢谢
4 h, ~) y! v  u( D/ u( p( x
作者: 希望缄默    时间: 2015-7-1 19:42
从你贴出来的代码看 应该是没有问题的
作者: bit0rain    时间: 2015-7-1 21:10
希望缄默 发表于 2015-7-1 19:425 w4 t8 T0 |" X. h+ b- V
从你贴出来的代码看 应该是没有问题的

6 o' @+ l8 M, j- a还有其他要配置的地方吗?比如pll什么的
作者: bit0rain    时间: 2015-7-1 21:44
搞定了,把初始化这部分函数忘调用了……
作者: bit0rain    时间: 2015-7-2 01:24
希望缄默 发表于 2015-7-1 19:424 y' @2 d+ {2 g- }
从你贴出来的代码看 应该是没有问题的
4 X: G* y* ]4 S" k' w
追加一个问题:我先在的中断分配如下:* l( h  q8 X2 F2 a; k& ^+ H
4:VPIF
9 Q5 A2 ^8 ~+ B8 @8 L- i5:LCD
% \" C* f: l3 d2 U6:GPIO Bank0% }6 m: ]% V1 }6 V# q; {/ _
7:GPIO Bank6( @5 M8 s1 ?. {
8:GPIO Bank8
+ E" |) c- f6 \- |: `! a4 Z( s9:timer8 ~* S2 w2 a9 |: o) d) c
发现运行后,要么VPIF的中断有效,要么GPIO的中断有效,不知道是什么原因?
作者: 希望缄默    时间: 2015-7-2 10:44
bit0rain 发表于 2015-7-2 01:24. b/ u+ S$ y" B0 s4 E/ p- w
追加一个问题:我先在的中断分配如下:
% _1 |1 K: j' s8 w4:VPIF- w/ S$ ]6 _" G! X/ f" A
5:LCD
; m# Q6 B. [5 u& E
不使用操作系统可屏蔽中断不能嵌套 当前中断服务函数执行时其它中断是不能响应的 检查下你的 ISR 函数是不是执行时间太长了
作者: bit0rain    时间: 2015-7-3 12:31
希望缄默 发表于 2015-7-2 10:443 v* u, m: t' q3 {0 Z6 ^
不使用操作系统可屏蔽中断不能嵌套 当前中断服务函数执行时其它中断是不能响应的 检查下你的 ISR 函数是 ...
# ]4 G9 P% e0 \3 w
恩,找到问题了,调试的时候把GPIO和VPIF的中断号设置成一样的了,而且没有设置combine,修改了以后,就好了,谢谢




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