嵌入式开发者社区

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

作者: bit0rain    时间: 2015-7-1 16:20
标题: OMAPL138中断问题
我现在有8个按键,分别在GPIOBANK0,6,8,现在我想将这几个bank中断映射到INT6,7,8,可以这么做吗?还是只能映射到中断4或者5?我现在实现代码如下:
3 t: U1 L- i$ [) q1 h; C- F        //kEY GPIO set
+ L$ i5 n$ c, o. J/ Z        GPIOBank0Pin1PinMuxSetup();
/ t7 @% k. Q. I; q& }6 I        GPIOBank0Pin2PinMuxSetup();
+ C  [! `" ^# J$ W- A        GPIOBank6Pin8PinMuxSetup();
& v: P% y0 R4 {7 q% @% l# e( U$ ~$ ]        GPIOBank6Pin9PinMuxSetup();
& c3 e) I% V% g, f3 W        GPIOBank6Pin10PinMuxSetup();9 {6 A/ o2 j: `
        GPIOBank6Pin11PinMuxSetup();5 \( w7 u7 [" v9 J
        GPIOBank8Pin12PinMuxSetup();
% L, y' R. G- X6 p' O* R. e, F, E( i        GPIOBank8Pin14PinMuxSetup();
8 {! B# M* i) x' ~1 n2 i1 X+ s        GPIOBank8Pin15PinMuxSetup();
! N# ]- o  {; ~" b3 t: F8 {+ I, y: R
' T; R# ~! c# o% g    GPIODirModeSet(SOC_GPIO_0_REGS, 2, GPIO_DIR_INPUT);% Q+ W0 H7 h0 S! k* E
    GPIODirModeSet(SOC_GPIO_0_REGS, 3, GPIO_DIR_INPUT);  q7 G# X  T  N1 p% c
    GPIODirModeSet(SOC_GPIO_0_REGS, 105, GPIO_DIR_INPUT);  }8 x1 m' g' `1 T$ G. w* a
    GPIODirModeSet(SOC_GPIO_0_REGS, 106, GPIO_DIR_INPUT);5 Q9 L4 ]: M' i" L8 ^
    GPIODirModeSet(SOC_GPIO_0_REGS, 107, GPIO_DIR_INPUT);4 [. O( X# s1 C0 a
    GPIODirModeSet(SOC_GPIO_0_REGS, 108, GPIO_DIR_INPUT);/ U; L4 W7 R# }/ u
    GPIODirModeSet(SOC_GPIO_0_REGS, 141, GPIO_DIR_INPUT);6 b0 T( a, `1 m8 V0 Q7 Q
    GPIODirModeSet(SOC_GPIO_0_REGS, 143, GPIO_DIR_INPUT);( f* E2 W/ K; \8 x
    GPIODirModeSet(SOC_GPIO_0_REGS, 144, GPIO_DIR_INPUT);
0 F) E3 s, Z6 C7 f9 F1 G3 O. n
+ l( O8 y! }6 t' `, @" ^( t4 l+ Q' U$ V- ]! ^# \! x4 O: F/ |
        // 底板按键中断
# x  k7 }( R& [, o; {    GPIOIntTypeSet(SOC_GPIO_0_REGS, 2, GPIO_INT_TYPE_FALLEDGE);//key none1 u, J, m% Z  t5 |- {+ F
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 3, GPIO_INT_TYPE_FALLEDGE);//key none
# Y! `, h  C. D# P# I    GPIOIntTypeSet(SOC_GPIO_0_REGS, 105, GPIO_INT_TYPE_FALLEDGE);//key left
( W2 W: P+ G& E    GPIOIntTypeSet(SOC_GPIO_0_REGS, 106, GPIO_INT_TYPE_FALLEDGE);//key ok3 i9 `- ~& D) ]# O( P
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 107, GPIO_INT_TYPE_FALLEDGE);//key down
& v4 J$ A) G) @, Q, J1 L7 x: ?    GPIOIntTypeSet(SOC_GPIO_0_REGS, 108, GPIO_INT_TYPE_FALLEDGE);//key right- H7 _2 P7 K! l( P; |
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 141, GPIO_INT_TYPE_FALLEDGE);//key up/ ^- d: ]; _3 i
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 143, GPIO_INT_TYPE_FALLEDGE);//key cancel" s3 Y0 e( |" b  W" O( {
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 144, GPIO_INT_TYPE_FALLEDGE);//key confirm7 p- ], [0 |; a; v5 k$ U
' L/ f# V  f  J! l4 P
    // 使能 GPIO BANK 中断
# h+ x- H+ W' Y' Z" E: M    GPIOBankIntEnable(SOC_GPIO_0_REGS, 0);                  //GPIO09 h/ O4 g$ n& `3 j7 T5 t
    GPIOBankIntEnable(SOC_GPIO_0_REGS, 6);                  //GPIO69 u1 |0 T  b7 l8 \- Q' E
    GPIOBankIntEnable(SOC_GPIO_0_REGS, 8);                  //GPIO8
: m' [; W( `2 s9 Q0 v2 Q6 Z: c
* {, M' l7 M  x7 B% x        // 注册中断服务函数  x; R* h" f" N
        IntRegister(C674X_MASK_INT6, USER0KEYIsr);
. V( O4 n7 `4 ?4 T$ w7 x        IntEventMap(C674X_MASK_INT6, SYS_INT_GPIO_B0INT);$ r! y' x& \: N4 K# A/ e
        IntEnable(C674X_MASK_INT6);
; a& y. o* f# ^' J, K" g1 H$ `/ D
        IntRegister(C674X_MASK_INT7, USER1KEYIsr);
) T9 Z4 z, C  R. m: B: p        IntEventMap(C674X_MASK_INT7, SYS_INT_GPIO_B6INT);4 a0 N$ l0 V  H; T3 J
        IntEnable(C674X_MASK_INT7);# m, |8 U" |4 q9 l* T; D$ D

9 F+ V: O0 @0 U' X        IntRegister(C674X_MASK_INT8, USER2KEYIsr);' ?; b3 o( O* S
        IntEventMap(C674X_MASK_INT8, SYS_INT_GPIO_B8INT);
7 f. O2 c  X$ z3 F; [* b! c        IntEnable(C674X_MASK_INT8);# I; b# H8 L: J, T8 H
但是现在收不到中断,请问问题出在那里?谢谢
7 I9 ]4 j* }. W# M+ w. h
作者: 希望缄默    时间: 2015-7-1 19:42
从你贴出来的代码看 应该是没有问题的
作者: bit0rain    时间: 2015-7-1 21:10
希望缄默 发表于 2015-7-1 19:42$ N+ C- Q( }5 e  U1 T$ X0 I
从你贴出来的代码看 应该是没有问题的

& l3 \) b: ?' X" H) w- U5 K还有其他要配置的地方吗?比如pll什么的
作者: bit0rain    时间: 2015-7-1 21:44
搞定了,把初始化这部分函数忘调用了……
作者: bit0rain    时间: 2015-7-2 01:24
希望缄默 发表于 2015-7-1 19:42+ R1 y, p8 f' [  J
从你贴出来的代码看 应该是没有问题的

- j2 X- `. M' K1 B' h0 a追加一个问题:我先在的中断分配如下:" N+ m  I9 j/ o8 B; @) Y
4:VPIF7 d: f  b& e$ r
5:LCD& ]; Y$ z/ o$ |9 V. O
6:GPIO Bank04 l$ W* M# Z( v# n; ~) p0 d. ?
7:GPIO Bank6
3 S: H( I- B* G2 E! E8:GPIO Bank8
5 j: s- z4 x& z& [. N( M: r9:timer6 e7 x3 q! Z( Y1 f
发现运行后,要么VPIF的中断有效,要么GPIO的中断有效,不知道是什么原因?
作者: 希望缄默    时间: 2015-7-2 10:44
bit0rain 发表于 2015-7-2 01:24! a  _, b# Q6 {+ |# D$ |1 s5 F# p
追加一个问题:我先在的中断分配如下:; c/ c( d5 H6 s% I: h8 E( j/ f; u
4:VPIF$ Y( @  }; Z& n; T1 ]
5:LCD

; g0 C" a. x7 B3 @% q9 V不使用操作系统可屏蔽中断不能嵌套 当前中断服务函数执行时其它中断是不能响应的 检查下你的 ISR 函数是不是执行时间太长了
作者: bit0rain    时间: 2015-7-3 12:31
希望缄默 发表于 2015-7-2 10:44, J, I( s; Y+ Z# M$ S
不使用操作系统可屏蔽中断不能嵌套 当前中断服务函数执行时其它中断是不能响应的 检查下你的 ISR 函数是 ...
6 S. G, ^* b& Q( B  K
恩,找到问题了,调试的时候把GPIO和VPIF的中断号设置成一样的了,而且没有设置combine,修改了以后,就好了,谢谢




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