嵌入式开发者社区

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

作者: bit0rain    时间: 2015-7-1 16:20
标题: OMAPL138中断问题
我现在有8个按键,分别在GPIOBANK0,6,8,现在我想将这几个bank中断映射到INT6,7,8,可以这么做吗?还是只能映射到中断4或者5?我现在实现代码如下:3 @4 F( m# R3 V( l1 y
        //kEY GPIO set
% E( y0 a2 v! v9 e( {' e        GPIOBank0Pin1PinMuxSetup();+ U: u0 P! b: E. N4 x9 ^4 T) z2 a8 [
        GPIOBank0Pin2PinMuxSetup();1 t* I5 N/ O2 }) H$ a1 A" G  P
        GPIOBank6Pin8PinMuxSetup();
! m5 J8 b* F' g  y1 Q) @& g: ]( ~& d        GPIOBank6Pin9PinMuxSetup();  P7 V" U) F' V1 ]; ~
        GPIOBank6Pin10PinMuxSetup();7 K% O, e# l+ H" T# S
        GPIOBank6Pin11PinMuxSetup();% A/ t! k+ u9 x9 ?
        GPIOBank8Pin12PinMuxSetup();
% o" m' U9 o! Z3 F* K# B( B        GPIOBank8Pin14PinMuxSetup();0 o  m5 r/ H. [/ S& c+ }* s
        GPIOBank8Pin15PinMuxSetup();
& I& F6 B  @, z1 {8 s6 w6 ?
% F* E7 ^7 b3 r0 u9 U1 m: r# H/ G$ c    GPIODirModeSet(SOC_GPIO_0_REGS, 2, GPIO_DIR_INPUT);' e! s* {* h) s; N; }
    GPIODirModeSet(SOC_GPIO_0_REGS, 3, GPIO_DIR_INPUT);
; r$ X% i0 L' G& `. v    GPIODirModeSet(SOC_GPIO_0_REGS, 105, GPIO_DIR_INPUT);
9 L; N! m4 m" K9 i# t    GPIODirModeSet(SOC_GPIO_0_REGS, 106, GPIO_DIR_INPUT);) K! Q* |* w! q9 j4 S/ p
    GPIODirModeSet(SOC_GPIO_0_REGS, 107, GPIO_DIR_INPUT);, `, [, n' O6 z4 J7 C
    GPIODirModeSet(SOC_GPIO_0_REGS, 108, GPIO_DIR_INPUT);5 `# Y; b( P6 R/ X
    GPIODirModeSet(SOC_GPIO_0_REGS, 141, GPIO_DIR_INPUT);
7 ~6 U+ ^1 |# T2 O    GPIODirModeSet(SOC_GPIO_0_REGS, 143, GPIO_DIR_INPUT);
9 j) a7 S, G7 H+ g* u    GPIODirModeSet(SOC_GPIO_0_REGS, 144, GPIO_DIR_INPUT);4 G9 p' J/ Z8 k- S8 R7 @/ B) U
% j* G, S- ?- `0 ~9 E2 x
5 t1 k' ?5 O, N8 J3 H* b
        // 底板按键中断
; Y! |6 T- {( J. f! s. k    GPIOIntTypeSet(SOC_GPIO_0_REGS, 2, GPIO_INT_TYPE_FALLEDGE);//key none6 E  |" ~7 m' }- z, X
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 3, GPIO_INT_TYPE_FALLEDGE);//key none/ X: Q' f6 Z  n9 p6 Z6 k8 w
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 105, GPIO_INT_TYPE_FALLEDGE);//key left: d. V/ x+ x. d3 h
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 106, GPIO_INT_TYPE_FALLEDGE);//key ok0 Y6 g5 O/ o  b- Z; z. F
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 107, GPIO_INT_TYPE_FALLEDGE);//key down9 r. U- R7 _. k! _1 B# e
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 108, GPIO_INT_TYPE_FALLEDGE);//key right. r4 ?( V: B9 H" P6 B
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 141, GPIO_INT_TYPE_FALLEDGE);//key up: n# [  l, J2 F# j8 G1 c
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 143, GPIO_INT_TYPE_FALLEDGE);//key cancel. w( S8 ^) @& S, A  P
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 144, GPIO_INT_TYPE_FALLEDGE);//key confirm
% l" D5 D9 J: h" g( i
. a% v! b5 b- Y# M( z4 ^    // 使能 GPIO BANK 中断: e5 z9 p1 j' c: [! U
    GPIOBankIntEnable(SOC_GPIO_0_REGS, 0);                  //GPIO0
: W7 r% p2 N0 I' M    GPIOBankIntEnable(SOC_GPIO_0_REGS, 6);                  //GPIO6
# x- r- s% m, f* `    GPIOBankIntEnable(SOC_GPIO_0_REGS, 8);                  //GPIO8# q" N7 _6 x% y6 n
7 k- u7 C8 F8 B. H/ d
        // 注册中断服务函数
, M6 N% e2 y, X        IntRegister(C674X_MASK_INT6, USER0KEYIsr);
' a! [2 b( w2 j% X4 N5 N% k* C        IntEventMap(C674X_MASK_INT6, SYS_INT_GPIO_B0INT);
& O6 s% k& @- k4 B0 @' l+ t; d        IntEnable(C674X_MASK_INT6);0 }* s% b( V1 V; X
$ Y, m9 \5 J+ X. `$ w* U( V
        IntRegister(C674X_MASK_INT7, USER1KEYIsr);
& b' p4 d+ `: b7 ]4 J, z        IntEventMap(C674X_MASK_INT7, SYS_INT_GPIO_B6INT);
5 U' s# J9 x. l$ x7 v  v  I        IntEnable(C674X_MASK_INT7);
; Y3 a8 O  P! p6 Q6 j; w
  ^- X+ |! C( n6 r        IntRegister(C674X_MASK_INT8, USER2KEYIsr);
( f- q2 y# [- O7 \# u        IntEventMap(C674X_MASK_INT8, SYS_INT_GPIO_B8INT);, H8 G8 m8 y. Y6 }8 O
        IntEnable(C674X_MASK_INT8);2 }, W, |4 {/ d( @, b; C; s5 d; }
但是现在收不到中断,请问问题出在那里?谢谢8 ^0 i$ X4 U+ ?( h" y" \5 K/ e

作者: 希望缄默    时间: 2015-7-1 19:42
从你贴出来的代码看 应该是没有问题的
作者: bit0rain    时间: 2015-7-1 21:10
希望缄默 发表于 2015-7-1 19:42
) J) d) s0 W- l- u9 h从你贴出来的代码看 应该是没有问题的

; _& x( Q) d# T- K; _* C7 k还有其他要配置的地方吗?比如pll什么的
作者: bit0rain    时间: 2015-7-1 21:44
搞定了,把初始化这部分函数忘调用了……
作者: bit0rain    时间: 2015-7-2 01:24
希望缄默 发表于 2015-7-1 19:42- R7 R7 q( B# _% B' w2 p
从你贴出来的代码看 应该是没有问题的

- [/ ?$ I' ]/ e% f追加一个问题:我先在的中断分配如下:
: ]* |9 k4 b( q2 k  G4:VPIF
& @- C( J7 z3 e+ I  c5:LCD0 E# w8 k' v9 b( C! i, e) `
6:GPIO Bank0" ~9 Y: [+ U. m4 b  W% S$ Y, X
7:GPIO Bank6. U5 g7 \; g: _) ~3 s0 `' q
8:GPIO Bank8
7 b" W: p* O- i  s( @- f9:timer' I' U4 m1 R) w6 P
发现运行后,要么VPIF的中断有效,要么GPIO的中断有效,不知道是什么原因?
作者: 希望缄默    时间: 2015-7-2 10:44
bit0rain 发表于 2015-7-2 01:24
+ ^' q* r2 ^% g' }6 u( X追加一个问题:我先在的中断分配如下:) @' ^8 T# T" Z0 L; m
4:VPIF- |+ r: g4 b6 b4 F
5:LCD
; A& b8 D7 R9 V- |9 n& d
不使用操作系统可屏蔽中断不能嵌套 当前中断服务函数执行时其它中断是不能响应的 检查下你的 ISR 函数是不是执行时间太长了
作者: bit0rain    时间: 2015-7-3 12:31
希望缄默 发表于 2015-7-2 10:44# w  U* B/ j* E
不使用操作系统可屏蔽中断不能嵌套 当前中断服务函数执行时其它中断是不能响应的 检查下你的 ISR 函数是 ...

: o9 Z% ?  z5 V; k. p( x恩,找到问题了,调试的时候把GPIO和VPIF的中断号设置成一样的了,而且没有设置combine,修改了以后,就好了,谢谢




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