sysbios hwi 端口识别问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4360|回复: 1
打印 上一主题 下一主题

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:/ W+ i8 v% b/ B! N' `
#define AD7606_PAR_BUSY_GPIO_BANK        5
5 \' a0 b# F% O#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
1 S& V8 ?/ D, H6 b! ]5 ~! P$ d2 n6 C* U) l) u7 Y4 d: X9 Z
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
0 `' C6 r% t0 l; O0 r0 Z: ?* @/ j#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9* ~% G" N* s) \; l& ?' h  ^! B
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.54 S1 w  p2 f' _7 A) z
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
8 k. k7 N: L* ?5 W+ `; c8 L: d# ^+ F
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)4 Q3 [# H9 N( T; x# |* Y
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
9 y: N9 o( {9 [& y! w! Y#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0). S( D6 D3 w; v: A

4 C/ `+ A6 X+ b! B9 `7 ?  B9 U# F# Z3 q  p2 X" D/ V3 b
4 p3 t: R. U. _7 B* ?( Q
static void ad7606_irq_setup(ad7606 *ad) {
9 `* o6 d+ `- f3 u        Hwi_Params hwiParams;. r0 r, X; W6 w0 |) S
        Hwi_Handle myHwi;
% S& F& Q" J# g' l: U' D: H) t        Error_Block eb;# u* |) _! [4 O5 _1 n0 R* V* B
' }/ t1 x0 h) }& J! l( Y
        Error_init(&eb);
* @/ j8 I2 P, d  \- U6 \0 s        Hwi_Params_init(&hwiParams);
! ]3 S5 J+ f' O/ N: W, X        hwiParams.arg = (unsigned int)ad;5 O  u# u( \/ t; O
        hwiParams.enableInt = FALSE;4 C( f7 u% |8 B$ a  m# Y
        hwiParams.eventId = SYS_INT_GPIO_B5INT;1 z0 q2 k( c: A, `9 m4 w& q
        hwiParams.priority = 4;
& f. Z; P; W% }' o0 [: D1 H        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
5 a0 u8 w3 I4 ~% K  N. C4 f        if (myHwi == NULL)
5 l6 R" e& o& ^2 h' k) [* {        LOG_FATAL("failed to create hwi");
. ?* K1 v. K+ |# [& }1 |4 c: b7 P3 t/ e0 S5 G( y( V
        /* enable both interrupts */! I$ [# M& V* Y# x3 S& R" a
        Hwi_enableInterrupt(ad->irq_event);
' H8 v) j2 C" x4 b$ i$ @' s}/ m+ r8 ~+ R, L8 F
4 G4 E  n/ d* D* w( O4 a

" m+ a; R, r% }5 istatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {8 G% s! S" i' b' o. ?
        volatile unsigned int savePinMux = 0;! g: D. Z4 A+ M. [. K, a% C
        //初始化5.11、5.9 、 5.5为GPIO口
: f% ^/ Y2 c9 _9 @' {        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
9 Z! z& Y: f4 W  ]0 b0 ^) C- h: @) u+ X, G
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);! `0 H8 c) u/ N% A  p' h- E2 R! ]
! X  _' z/ a) _/ Z/ ]
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) & (~(SYSCFG_PINMUX12_PINMUX12_31_28 | SYSCFG_PINMUX12_PINMUX12_27_24 | SYSCFG_PINMUX12_PINMUX12_23_20 | SYSCFG_PINMUX12_PINMUX12_11_8));) ?: F/ h( M- I# i- N% V
4 B, |9 P, c5 U6 i( x
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
+ D& q/ s* L) Y8 i* Z
+ l/ U+ p6 w4 R9 F8 D/ j* }0 `}
" }/ c9 y9 R  i' l3 V2 W$ M  v* _" k$ W& h# H% w3 G/ D7 e4 P
' M& r6 m! I2 Y8 A$ E
static void ad7606_gpio_setup(ad7606 *ad) {
8 L( v; ?8 M4 V. z" U        /*Set the AD7606_PAR_BUSY to the input mode*/
: m# s. m; ~9 J        //初始化5.11、5.9 、 5.5为中断口
: l! r/ W  J+ r( L        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
5 Y2 c# L& L% k5 [6 e* w. m        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
5 P' Z  j) J' o( \1 i6 H        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);! Q" T# y& T- F
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
' L- y' b! H7 F; X        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/- B' _6 y: Y% `5 ~& z' h
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);8 g! J& [4 `7 f0 _9 [; [% q: z
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);5 B7 @: j( G& N- q4 a" V  T$ y: ~
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);( B3 d: g- C  p0 l
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);/ C- V9 Z0 u# {5 x  f9 Q) s5 }) Y
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
/ ]5 N5 k: W; e/ k5 H) \. X. P1 g        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
& s- C6 e' E' Q0 Z
) E( A3 ^! p4 \- ~  h        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);9 c. j9 e' c' S5 E  x
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);% b- q1 o8 H$ |- Y( a6 Q4 M# F
        Task_sleep(1000);5 o7 G* ?" w+ J3 ~9 x7 g: R. K% O
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
& V! X# s& F2 |& ~8 J/ u        Task_sleep(1000);2 x- M; a) P) H' N- |; w
3 D6 A' f5 n+ w0 A, ?
        /*Set the AD7606_PAR_CONVST to output mode*/8 R4 Z& E: z% c: ?
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
2 P- k; q' \( @' ?5 @) k; I        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);  Y/ i% w. \9 U) {2 z$ I* F% L. Y! b4 Z

* W0 v5 x5 }1 _        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
, k% R. J5 k/ F2 g, _1 e) u        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);) z% @) D1 H2 @) Q7 A

' g  h/ j7 ^, s9 E}( |( Z8 W7 r/ F, c0 _: C$ J
) u& i' d( l$ c6 n4 X

, i) t8 V8 a  Q7 a' K# O! H' N# ?static void ad7606_busy_hwi(UArg ad_addr) {
2 L3 ^8 R: Q7 K% O# r( F8 O2 m  z+ ~+ [1 @
0 d/ I) |2 Q! d1 T$ _
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/) U5 h% r2 C0 F- ~4 E0 E
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。, b$ u' s. B: A' v( J4 G0 g) x; w

- O; e5 v2 T( m- p1 t        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
- F1 V' o% f1 i) ^2 N6 s        {
% c# E6 Z/ c( Z( O. Q                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
$ b0 [4 }) B1 @, M9 C9 z, f. T                cs_addr = SOC_EMIFA_CS5_ADDR ;( L# C+ |. a9 n. Q% {0 ]; Q
                internal = 0 ;; ]3 d0 ^: Z1 c0 d
                int_flag[0] = 1 ;
* }1 l" G8 ?' G* K6 x  ?        }$ A+ V9 e. w7 c7 s/ Y4 Z
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
; _3 b+ F) g) M6 D/ f9 t        {" f2 \% \; m: Z- d6 H
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。) L3 R- ~. ~( |  L3 O
                cs_addr = SOC_EMIFA_CS4_ADDR ;
: z4 {" @  a- |* q* S                internal = 6 ;7 i: y9 f, F6 P) e# S
                int_flag[1] = 1 ;
: n4 E* ?. M8 T) w        }
' B* {8 W! n! X3 i: G" ~        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)3 l6 J% T" l% x6 b) i0 O* e' s7 O
        {& [5 _. b! O8 V
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。6 o! P; u9 |4 ]# o/ ~% x2 U3 _' D: s
                cs_addr = SOC_EMIFA_CS2_ADDR ;
% b+ _; F$ `9 p5 [2 l( W3 j' B                internal = 12 ;2 D2 y# x, |7 w
                int_flag[2] = 1 ;* j. t1 F: u4 X* }; k; p# U5 x! C! `; k6 c
        }, O1 ~1 m7 h) K% P5 A$ y
  
# O+ {$ [: Y4 D        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);2 C$ y! d! n, k. i
      
; ^5 M4 h5 L: ]3 a9 V/ A5 g$ {        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
- s/ E% o3 z0 b& I; }$ m5 W}
. b" Z! r6 O! L0 Q. @# F5 S; I3 _/ h' \. O' ^6 u1 G9 Z+ s, @

7 H: M; B5 G2 z
8 N2 |7 l3 |/ `4 r# Z5 i  e6 R3 d+ Y1 U" H

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-9-18 19:35:35 | 只看该作者
你用单步调试,step into看看相应的函数值是否发生了变化
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-12-16 03:46 , Processed in 0.046160 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表