嵌入式开发者社区

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

作者: bit0rain    时间: 2015-7-1 16:20
标题: OMAPL138中断问题
我现在有8个按键,分别在GPIOBANK0,6,8,现在我想将这几个bank中断映射到INT6,7,8,可以这么做吗?还是只能映射到中断4或者5?我现在实现代码如下:
, h7 K) E7 v; {7 J. S+ r% F        //kEY GPIO set2 u; G4 Z2 i5 w! A( [& }& D
        GPIOBank0Pin1PinMuxSetup();$ M, Y" r% x" b2 t9 p
        GPIOBank0Pin2PinMuxSetup();
- w0 v0 z- t8 |3 z5 K        GPIOBank6Pin8PinMuxSetup();- F! i9 h) ]) V3 ^) H2 p0 d
        GPIOBank6Pin9PinMuxSetup();
5 V' W4 C! z. B! x* \' K        GPIOBank6Pin10PinMuxSetup();; E4 F/ G) G$ n6 u% c! K7 G) e) B
        GPIOBank6Pin11PinMuxSetup();
# X$ a$ n" h) a, ~# r/ R5 @        GPIOBank8Pin12PinMuxSetup();
* |5 t/ l& m* r        GPIOBank8Pin14PinMuxSetup();/ P$ H( f- |+ [: F1 a3 O
        GPIOBank8Pin15PinMuxSetup();" c" N" q' I0 B  r+ z# |5 Q* I7 x
- s7 k5 C& G4 @' \$ S7 O- Q7 G5 m8 b
    GPIODirModeSet(SOC_GPIO_0_REGS, 2, GPIO_DIR_INPUT);. U. M2 x1 w5 s$ F( Q
    GPIODirModeSet(SOC_GPIO_0_REGS, 3, GPIO_DIR_INPUT);; ]* L, W4 K: e
    GPIODirModeSet(SOC_GPIO_0_REGS, 105, GPIO_DIR_INPUT);9 _6 t# y; A+ s5 ?; w1 E" @, x
    GPIODirModeSet(SOC_GPIO_0_REGS, 106, GPIO_DIR_INPUT);8 j& a5 N5 z$ x' r( n
    GPIODirModeSet(SOC_GPIO_0_REGS, 107, GPIO_DIR_INPUT);+ l. J0 n& L1 I7 E) c
    GPIODirModeSet(SOC_GPIO_0_REGS, 108, GPIO_DIR_INPUT);# }' M7 C8 Z/ G) p+ i* ^, P
    GPIODirModeSet(SOC_GPIO_0_REGS, 141, GPIO_DIR_INPUT);# L) ?/ u8 g' |0 R2 l
    GPIODirModeSet(SOC_GPIO_0_REGS, 143, GPIO_DIR_INPUT);# N+ L( o' W' ~; J
    GPIODirModeSet(SOC_GPIO_0_REGS, 144, GPIO_DIR_INPUT);
& x! I# @! k- c7 k- @/ c7 Y7 z+ H9 g4 A
3 T. j2 {6 M" M' L, m
        // 底板按键中断0 d7 |: u6 T$ \* @- ]0 M' s! r+ B
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 2, GPIO_INT_TYPE_FALLEDGE);//key none
& F  [4 i# n; J3 U& U/ f$ R    GPIOIntTypeSet(SOC_GPIO_0_REGS, 3, GPIO_INT_TYPE_FALLEDGE);//key none4 e, }: u  n3 z1 x3 I- R: u$ x. e
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 105, GPIO_INT_TYPE_FALLEDGE);//key left4 R2 S6 v( t. F$ H2 j% |" x* Y$ @4 t
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 106, GPIO_INT_TYPE_FALLEDGE);//key ok" |5 ?0 l  v6 @; x0 y
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 107, GPIO_INT_TYPE_FALLEDGE);//key down' T, W1 @+ s% U/ w
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 108, GPIO_INT_TYPE_FALLEDGE);//key right. f( O8 `1 A  A: @  L
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 141, GPIO_INT_TYPE_FALLEDGE);//key up) S( l. m2 D8 X, R
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 143, GPIO_INT_TYPE_FALLEDGE);//key cancel! V3 h/ J. ]: {. t7 n; |
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 144, GPIO_INT_TYPE_FALLEDGE);//key confirm  g7 I, [7 E6 `9 S- t$ \$ R
, u1 e8 q) Z2 i% I- ^& c
    // 使能 GPIO BANK 中断7 x1 |" n$ c  r: w% b$ I( q
    GPIOBankIntEnable(SOC_GPIO_0_REGS, 0);                  //GPIO0
/ @& A" @  C1 i& c    GPIOBankIntEnable(SOC_GPIO_0_REGS, 6);                  //GPIO6/ m2 {" S2 \7 k/ b
    GPIOBankIntEnable(SOC_GPIO_0_REGS, 8);                  //GPIO8
5 H* ]# G3 d2 B+ {# c3 p3 N6 P1 y- k5 b& x+ S2 c
        // 注册中断服务函数$ @. U3 `8 |9 r: d% q! o
        IntRegister(C674X_MASK_INT6, USER0KEYIsr);
$ F  ^4 n" T+ o3 n        IntEventMap(C674X_MASK_INT6, SYS_INT_GPIO_B0INT);
) B6 c8 j' A( B, @        IntEnable(C674X_MASK_INT6);
/ q7 N0 X# d9 f- L7 K' u( L6 r' D* X. y( ~+ A  b( z
        IntRegister(C674X_MASK_INT7, USER1KEYIsr);
4 n/ M( R' q$ t# C2 `  e        IntEventMap(C674X_MASK_INT7, SYS_INT_GPIO_B6INT);
: S: z+ D! K( b( J2 w8 e( h        IntEnable(C674X_MASK_INT7);* O& H3 t/ F' ?4 L2 _: W8 t

' [0 V  A: M  o6 I% N" ]/ L, \        IntRegister(C674X_MASK_INT8, USER2KEYIsr);
- m, u( p4 ^! q6 x/ [8 Z        IntEventMap(C674X_MASK_INT8, SYS_INT_GPIO_B8INT);
) F1 Z7 |; b4 t. n& m6 @) Y        IntEnable(C674X_MASK_INT8);# D9 N1 S9 N  T6 d- k$ B8 F
但是现在收不到中断,请问问题出在那里?谢谢
2 Y$ a  s' p" g2 T
作者: 希望缄默    时间: 2015-7-1 19:42
从你贴出来的代码看 应该是没有问题的
作者: bit0rain    时间: 2015-7-1 21:10
希望缄默 发表于 2015-7-1 19:42& N9 _. I# ^- W  i/ L- j
从你贴出来的代码看 应该是没有问题的

$ L. D3 }* ^( l( f9 J还有其他要配置的地方吗?比如pll什么的
作者: bit0rain    时间: 2015-7-1 21:44
搞定了,把初始化这部分函数忘调用了……
作者: bit0rain    时间: 2015-7-2 01:24
希望缄默 发表于 2015-7-1 19:420 b( m/ }" E* j" H- t. q/ Y& n5 l
从你贴出来的代码看 应该是没有问题的

. H7 ^5 I5 |4 D: E4 l6 |* B, J追加一个问题:我先在的中断分配如下:. ]$ ~3 v$ n( F( I6 H
4:VPIF
6 t6 I2 j$ U# L1 w5:LCD0 O, B4 ?# _7 l7 o7 V
6:GPIO Bank0, X2 h7 l9 x# A. p7 @0 H6 _
7:GPIO Bank68 Q0 k2 O+ p7 i* Q
8:GPIO Bank8
/ X* p6 `6 u0 d2 R* ~5 Y9:timer
/ H2 ?) A& u% X7 m+ l, Z  F) B: T发现运行后,要么VPIF的中断有效,要么GPIO的中断有效,不知道是什么原因?
作者: 希望缄默    时间: 2015-7-2 10:44
bit0rain 发表于 2015-7-2 01:24; P5 s+ C; J  f! D2 o, s6 {% T
追加一个问题:我先在的中断分配如下:" [7 Q" u- h9 {) B9 }/ @2 c; X( o
4:VPIF
( T7 g  j% c: O% c/ ~# }5:LCD

% v7 ?0 N$ m( w9 W不使用操作系统可屏蔽中断不能嵌套 当前中断服务函数执行时其它中断是不能响应的 检查下你的 ISR 函数是不是执行时间太长了
作者: bit0rain    时间: 2015-7-3 12:31
希望缄默 发表于 2015-7-2 10:44
9 k% r3 j. q0 F2 M2 r( U不使用操作系统可屏蔽中断不能嵌套 当前中断服务函数执行时其它中断是不能响应的 检查下你的 ISR 函数是 ...
& p" Q6 ^  R1 i' q
恩,找到问题了,调试的时候把GPIO和VPIF的中断号设置成一样的了,而且没有设置combine,修改了以后,就好了,谢谢




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