嵌入式开发者社区

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

作者: bit0rain    时间: 2015-7-1 16:20
标题: OMAPL138中断问题
我现在有8个按键,分别在GPIOBANK0,6,8,现在我想将这几个bank中断映射到INT6,7,8,可以这么做吗?还是只能映射到中断4或者5?我现在实现代码如下:
9 [' o2 l. R& N! J' v* ~# }, I        //kEY GPIO set/ C: G( |3 j/ p1 R
        GPIOBank0Pin1PinMuxSetup();# F2 ~" w. x5 s
        GPIOBank0Pin2PinMuxSetup();
- m2 m. M' S7 J( h0 P* L! U        GPIOBank6Pin8PinMuxSetup();
4 t# |* {7 |# _' P6 P' ^/ M        GPIOBank6Pin9PinMuxSetup();
8 q8 o+ ^0 {6 q: q) {, r        GPIOBank6Pin10PinMuxSetup();7 o$ V, F- o3 R' \4 F
        GPIOBank6Pin11PinMuxSetup();, P+ x# Z! A0 A' `* x! m2 Z! z
        GPIOBank8Pin12PinMuxSetup();0 U5 V' i* n. O5 j& L1 l
        GPIOBank8Pin14PinMuxSetup();( r- j. }' B' e/ H
        GPIOBank8Pin15PinMuxSetup();
# g9 C7 l! }7 g- d6 T; d9 h8 D! K: \4 H% c& s# E' Q" Z
    GPIODirModeSet(SOC_GPIO_0_REGS, 2, GPIO_DIR_INPUT);! K- g' f( s" A! f9 p: I( L
    GPIODirModeSet(SOC_GPIO_0_REGS, 3, GPIO_DIR_INPUT);" i2 a5 N) ^0 m0 h5 O7 s
    GPIODirModeSet(SOC_GPIO_0_REGS, 105, GPIO_DIR_INPUT);
5 F  U  K' v% w) V4 |/ C/ z    GPIODirModeSet(SOC_GPIO_0_REGS, 106, GPIO_DIR_INPUT);+ }: i8 f3 F. X/ `4 W( t* }' p3 T) l
    GPIODirModeSet(SOC_GPIO_0_REGS, 107, GPIO_DIR_INPUT);" K% d5 y+ i" R( s. K6 o  c4 t
    GPIODirModeSet(SOC_GPIO_0_REGS, 108, GPIO_DIR_INPUT);
# |7 ?0 K9 L! G  K' Y% G    GPIODirModeSet(SOC_GPIO_0_REGS, 141, GPIO_DIR_INPUT);: o$ E$ q" j! ^. [
    GPIODirModeSet(SOC_GPIO_0_REGS, 143, GPIO_DIR_INPUT);  w) {5 V4 F/ I
    GPIODirModeSet(SOC_GPIO_0_REGS, 144, GPIO_DIR_INPUT);0 ~6 h' J, Q" r  K- x- u# S# ^4 @

+ [. y6 E; e$ b' _; m2 \7 n. f0 |8 L4 F  S! |
        // 底板按键中断% A9 q, f4 |& |
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 2, GPIO_INT_TYPE_FALLEDGE);//key none7 T! P# t6 |- a; K  ?* Y
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 3, GPIO_INT_TYPE_FALLEDGE);//key none
8 Y$ Y* R6 Y6 m    GPIOIntTypeSet(SOC_GPIO_0_REGS, 105, GPIO_INT_TYPE_FALLEDGE);//key left
' o- N6 V" B& |7 c  J! l    GPIOIntTypeSet(SOC_GPIO_0_REGS, 106, GPIO_INT_TYPE_FALLEDGE);//key ok
& ]8 w% o2 w3 B% y' _% W5 _    GPIOIntTypeSet(SOC_GPIO_0_REGS, 107, GPIO_INT_TYPE_FALLEDGE);//key down! T& y0 M) a- O. [7 {
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 108, GPIO_INT_TYPE_FALLEDGE);//key right
9 V% P8 u( _; a& s4 W    GPIOIntTypeSet(SOC_GPIO_0_REGS, 141, GPIO_INT_TYPE_FALLEDGE);//key up+ m$ r% i! G  ?# n
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 143, GPIO_INT_TYPE_FALLEDGE);//key cancel" j( V1 j& g4 I, F2 N6 `' |8 M
    GPIOIntTypeSet(SOC_GPIO_0_REGS, 144, GPIO_INT_TYPE_FALLEDGE);//key confirm
! {& ?/ ~, f4 w; X: @4 V! S2 d! [8 A6 G( r7 d
    // 使能 GPIO BANK 中断/ O& }) O5 ~1 [$ ~! _( u( c/ I
    GPIOBankIntEnable(SOC_GPIO_0_REGS, 0);                  //GPIO0" [# A/ V9 f* g& `8 @" r+ w
    GPIOBankIntEnable(SOC_GPIO_0_REGS, 6);                  //GPIO6
6 G) v% A# F. o( i7 w8 y    GPIOBankIntEnable(SOC_GPIO_0_REGS, 8);                  //GPIO8
$ j" t/ |2 i; {) q: x) |" {
% l4 j$ `" y5 _# K* D6 S- w        // 注册中断服务函数
# b6 f3 |  z& [* \        IntRegister(C674X_MASK_INT6, USER0KEYIsr);8 U+ {' g( x& b9 m4 ~
        IntEventMap(C674X_MASK_INT6, SYS_INT_GPIO_B0INT);! n" o' q0 i; R4 S9 |6 E
        IntEnable(C674X_MASK_INT6);. s8 g  m) d% I: k

! y) Y/ ?# W! t& i8 d% W        IntRegister(C674X_MASK_INT7, USER1KEYIsr);; I0 n9 _' y% f$ d+ Y+ o8 h
        IntEventMap(C674X_MASK_INT7, SYS_INT_GPIO_B6INT);
# m% Q; r' _# }        IntEnable(C674X_MASK_INT7);
' X' Y! j7 Z# f+ a; a/ \: U2 k/ ~0 W8 S% R( K0 F$ W
        IntRegister(C674X_MASK_INT8, USER2KEYIsr);0 r7 ?& y$ ]! Z4 i' b
        IntEventMap(C674X_MASK_INT8, SYS_INT_GPIO_B8INT);
" i; i$ k1 d5 y1 Q, I/ q6 S        IntEnable(C674X_MASK_INT8);/ s1 R; ?1 e% n- v
但是现在收不到中断,请问问题出在那里?谢谢! C9 a" z5 X* P2 p

作者: 希望缄默    时间: 2015-7-1 19:42
从你贴出来的代码看 应该是没有问题的
作者: bit0rain    时间: 2015-7-1 21:10
希望缄默 发表于 2015-7-1 19:420 g( B' M4 D4 Y  M2 y2 _
从你贴出来的代码看 应该是没有问题的
7 ~: |& E" P! S0 T) k* L' g
还有其他要配置的地方吗?比如pll什么的
作者: bit0rain    时间: 2015-7-1 21:44
搞定了,把初始化这部分函数忘调用了……
作者: bit0rain    时间: 2015-7-2 01:24
希望缄默 发表于 2015-7-1 19:42- [: H3 S4 }: A+ D* `
从你贴出来的代码看 应该是没有问题的

' T" \$ _& P) H# |3 X追加一个问题:我先在的中断分配如下:
$ l- f; h. X$ N* w9 s' H' I4:VPIF$ H! `) {! R9 d/ Y$ ?7 Q
5:LCD
$ k/ R3 T- g+ V# q; z8 F. L6:GPIO Bank0$ e9 @# B7 a" \6 c, K# L$ _
7:GPIO Bank6- B; u( N* L4 w$ c* j
8:GPIO Bank8
1 q% |  m; a# M' R/ W! }9:timer
* k2 `! F0 @4 a" i( n发现运行后,要么VPIF的中断有效,要么GPIO的中断有效,不知道是什么原因?
作者: 希望缄默    时间: 2015-7-2 10:44
bit0rain 发表于 2015-7-2 01:24* h9 s8 l$ O# \9 K0 ]! t) O, ^, \
追加一个问题:我先在的中断分配如下:
( F$ R" W: U+ S2 T0 T4:VPIF) G" C  e* r8 d; L5 Q, m& w1 G/ l% R
5:LCD
7 g% b3 z0 r" Q% C0 r
不使用操作系统可屏蔽中断不能嵌套 当前中断服务函数执行时其它中断是不能响应的 检查下你的 ISR 函数是不是执行时间太长了
作者: bit0rain    时间: 2015-7-3 12:31
希望缄默 发表于 2015-7-2 10:44$ S% d7 _" x- d  g# I
不使用操作系统可屏蔽中断不能嵌套 当前中断服务函数执行时其它中断是不能响应的 检查下你的 ISR 函数是 ...

+ ~6 l8 s, [! r- ~! Q恩,找到问题了,调试的时候把GPIO和VPIF的中断号设置成一样的了,而且没有设置combine,修改了以后,就好了,谢谢




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