嵌入式开发者社区

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

作者: bit0rain    时间: 2015-7-1 16:20
标题: OMAPL138中断问题
我现在有8个按键,分别在GPIOBANK0,6,8,现在我想将这几个bank中断映射到INT6,7,8,可以这么做吗?还是只能映射到中断4或者5?我现在实现代码如下:% H4 m* W( e  u
        //kEY GPIO set
) l2 Z+ N; P8 {& @2 z        GPIOBank0Pin1PinMuxSetup();0 t1 }( A( f" \8 [  i; A6 C: U6 f
        GPIOBank0Pin2PinMuxSetup();
9 t. b, }! G" T. L        GPIOBank6Pin8PinMuxSetup();
) ?7 C+ A3 K# J( Q" C% y; l: L6 u        GPIOBank6Pin9PinMuxSetup();6 U# e. u+ I) c- ^5 d" H
        GPIOBank6Pin10PinMuxSetup();
: l4 A. {! ^- o        GPIOBank6Pin11PinMuxSetup();; i- J4 ]& R! y  s* C- Y5 i
        GPIOBank8Pin12PinMuxSetup();
( j. g( U8 Y/ p& w* K( k- Q        GPIOBank8Pin14PinMuxSetup();1 m3 E% j$ D* z( q5 Z+ o+ E9 F
        GPIOBank8Pin15PinMuxSetup();
7 m" f& @6 K% @' \$ Q8 L, J9 G5 J# ]7 I
3 ?: w; L# R/ m5 ]9 w$ O) M% g    GPIODirModeSet(SOC_GPIO_0_REGS, 2, GPIO_DIR_INPUT);  @, E! {" u1 |- u( ]6 Q3 g
    GPIODirModeSet(SOC_GPIO_0_REGS, 3, GPIO_DIR_INPUT);0 t; ~" V8 A2 w: \
    GPIODirModeSet(SOC_GPIO_0_REGS, 105, GPIO_DIR_INPUT);6 ?; i2 k6 u7 ?; Z' J# `+ \
    GPIODirModeSet(SOC_GPIO_0_REGS, 106, GPIO_DIR_INPUT);
* i: s( t" R+ n1 s  \    GPIODirModeSet(SOC_GPIO_0_REGS, 107, GPIO_DIR_INPUT);: S8 l4 F( |0 {2 o( S$ ]
    GPIODirModeSet(SOC_GPIO_0_REGS, 108, GPIO_DIR_INPUT);, y+ m$ Y( X* B1 E9 m; v
    GPIODirModeSet(SOC_GPIO_0_REGS, 141, GPIO_DIR_INPUT);4 w7 F) E8 T: @
    GPIODirModeSet(SOC_GPIO_0_REGS, 143, GPIO_DIR_INPUT);4 ]# q  m1 v4 q2 f9 e! n# P" l
    GPIODirModeSet(SOC_GPIO_0_REGS, 144, GPIO_DIR_INPUT);2 t8 h, }& S. n

$ u, Y; k8 ?+ @+ B) l  I3 X- p
7 n2 }' Z9 g4 X) W, J9 O- i        // 底板按键中断7 W/ ^: ?& V4 I3 r
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 2, GPIO_INT_TYPE_FALLEDGE);//key none
7 j9 L' H3 I) v    GPIOIntTypeSet(SOC_GPIO_0_REGS, 3, GPIO_INT_TYPE_FALLEDGE);//key none
+ k) A7 l5 _. H& V' S3 {7 _    GPIOIntTypeSet(SOC_GPIO_0_REGS, 105, GPIO_INT_TYPE_FALLEDGE);//key left
$ T, o3 g' Z( e: W% w    GPIOIntTypeSet(SOC_GPIO_0_REGS, 106, GPIO_INT_TYPE_FALLEDGE);//key ok
: G! s7 `5 f. v) a9 b8 `4 M    GPIOIntTypeSet(SOC_GPIO_0_REGS, 107, GPIO_INT_TYPE_FALLEDGE);//key down
7 _% f. p0 F( b2 @    GPIOIntTypeSet(SOC_GPIO_0_REGS, 108, GPIO_INT_TYPE_FALLEDGE);//key right4 ]8 v' ?) X8 _! s: ]* ~# F
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 141, GPIO_INT_TYPE_FALLEDGE);//key up
( J8 o/ _9 t- }8 a5 {    GPIOIntTypeSet(SOC_GPIO_0_REGS, 143, GPIO_INT_TYPE_FALLEDGE);//key cancel  B# @6 [2 v! N0 V; m: H( ^
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 144, GPIO_INT_TYPE_FALLEDGE);//key confirm
" B+ E2 Z5 j! h+ d9 o4 a
( c0 q" S9 r4 I, @8 U    // 使能 GPIO BANK 中断
  \6 o. ?3 v, ~    GPIOBankIntEnable(SOC_GPIO_0_REGS, 0);                  //GPIO0
. ~( W/ f" L) b2 K9 @& P- |    GPIOBankIntEnable(SOC_GPIO_0_REGS, 6);                  //GPIO6
7 H# d$ T/ e% d, _' ~    GPIOBankIntEnable(SOC_GPIO_0_REGS, 8);                  //GPIO8
- Z7 R2 n' |5 l  s- j5 c, c  j! ~& e7 L0 }0 R* G7 s
        // 注册中断服务函数: q; ]7 c7 v+ [! S
        IntRegister(C674X_MASK_INT6, USER0KEYIsr);" {2 f4 i: e' t
        IntEventMap(C674X_MASK_INT6, SYS_INT_GPIO_B0INT);
) {  r% U; ^" A, ~        IntEnable(C674X_MASK_INT6);
& a* I4 z5 a! @/ h* q! v: ?. B6 x; w; |. r9 E* \
        IntRegister(C674X_MASK_INT7, USER1KEYIsr);! [! k1 K, J& W5 `8 H! L: m6 q; p
        IntEventMap(C674X_MASK_INT7, SYS_INT_GPIO_B6INT);
2 z, g7 @: Q5 v4 }/ s, n$ K        IntEnable(C674X_MASK_INT7);
" F! f; V  T9 Z  m8 Y2 n" b/ ~
( u0 Q% V4 v9 H+ \' R: o        IntRegister(C674X_MASK_INT8, USER2KEYIsr);
' {0 C! f3 y& G" O5 ~* L! ~        IntEventMap(C674X_MASK_INT8, SYS_INT_GPIO_B8INT);
/ |5 ~, E6 K9 T$ G* D4 a: |! o2 `        IntEnable(C674X_MASK_INT8);, Y/ P% V6 H- _' P
但是现在收不到中断,请问问题出在那里?谢谢
% x& x7 S( J% t% H3 W5 p
作者: 希望缄默    时间: 2015-7-1 19:42
从你贴出来的代码看 应该是没有问题的
作者: bit0rain    时间: 2015-7-1 21:10
希望缄默 发表于 2015-7-1 19:420 p  A8 k0 J  d; L
从你贴出来的代码看 应该是没有问题的

$ B5 I( ]! F! Y" a1 b还有其他要配置的地方吗?比如pll什么的
作者: bit0rain    时间: 2015-7-1 21:44
搞定了,把初始化这部分函数忘调用了……
作者: bit0rain    时间: 2015-7-2 01:24
希望缄默 发表于 2015-7-1 19:42
5 \" _: Q& a/ g2 L; w: ]! ?' u从你贴出来的代码看 应该是没有问题的

, _% x+ z/ k6 V% @) y追加一个问题:我先在的中断分配如下:% k: }! U  @  V( I1 r
4:VPIF, X- C, i3 d8 L
5:LCD' J- B6 L) W/ O4 W" j. O
6:GPIO Bank0! u$ G7 B' F0 r4 L2 p; L
7:GPIO Bank63 n9 F9 d9 s# L/ K2 N5 G/ v
8:GPIO Bank8. l3 A: c2 I6 U4 _7 U
9:timer
7 A' n: M, h) L$ H1 O# d发现运行后,要么VPIF的中断有效,要么GPIO的中断有效,不知道是什么原因?
作者: 希望缄默    时间: 2015-7-2 10:44
bit0rain 发表于 2015-7-2 01:247 q; I$ y; @4 x% o0 H# ]
追加一个问题:我先在的中断分配如下:3 A; f, ~( K3 O
4:VPIF
7 x/ C- S1 A! Q! ^7 k6 @5:LCD

9 Z! w$ q/ @* b( n  M. R- R! |不使用操作系统可屏蔽中断不能嵌套 当前中断服务函数执行时其它中断是不能响应的 检查下你的 ISR 函数是不是执行时间太长了
作者: bit0rain    时间: 2015-7-3 12:31
希望缄默 发表于 2015-7-2 10:441 Y3 l' U! A* \
不使用操作系统可屏蔽中断不能嵌套 当前中断服务函数执行时其它中断是不能响应的 检查下你的 ISR 函数是 ...
  T7 A, \1 M+ s
恩,找到问题了,调试的时候把GPIO和VPIF的中断号设置成一样的了,而且没有设置combine,修改了以后,就好了,谢谢




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