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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
! }! W! o, {5 @2 u& ~#define AD7606_PAR_BUSY_GPIO_BANK        50 u  F: }2 z0 T  f
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
/ s+ a( `/ n; o  d$ c
% u6 c2 H* B( Z7 N/ j, r: V#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
5 R( r4 s& J3 r& J# X6 P* a; {#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9. ?2 }. t: S6 K, j9 y
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
8 c* g( I: p' k2 I9 _#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4): Q/ ]6 k- G5 e- @$ B0 T

1 f- g3 F" y" }( ~, H1 A9 L#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)5 Z5 F6 [7 X2 ~5 {' R8 R2 V$ W4 ]
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)6 J& k/ j( X% r. B2 b1 l' [5 R
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
5 H  `( L( u4 W9 E
: V* G% o. f" T& o; }
4 o* y) N/ m1 \% ?! A
; l. ~0 C0 r) o5 Q- t3 L# K" Estatic void ad7606_irq_setup(ad7606 *ad) {8 Z1 F: ^& R/ F  U
        Hwi_Params hwiParams;
4 m0 O* x* k4 o* y- z        Hwi_Handle myHwi;& D$ V9 T2 j, ]3 B/ e# K. P
        Error_Block eb;
; g6 u( \( }& [0 F$ d, I# B' `2 g
  Y$ ]. k* H: [! F        Error_init(&eb);6 j( ]  ?  B  b7 j( \
        Hwi_Params_init(&hwiParams);
) C; Z% @. n2 k        hwiParams.arg = (unsigned int)ad;5 g, r% I) [" a+ C! v
        hwiParams.enableInt = FALSE;
0 y. Z' W' N0 o8 J        hwiParams.eventId = SYS_INT_GPIO_B5INT;# P$ r" g) H) |3 s" [
        hwiParams.priority = 4;  |: ~5 h- G. Z& r- }
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
2 Y: ]2 n, u, }4 V7 `        if (myHwi == NULL)
$ d7 Y8 I4 m! f  g- B! S& H1 w        LOG_FATAL("failed to create hwi");" Q2 f7 Y+ a+ {3 \* V
1 Y& K5 O. g6 J9 a* P3 p
        /* enable both interrupts */
6 G: T8 H! O, K9 K- k        Hwi_enableInterrupt(ad->irq_event);# c. k! x+ J6 O2 O
}$ y- V3 S% m/ D. m9 z/ O  k
" y, R: c& Y% `3 u. @% c
; x+ a8 H8 I3 m, N
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {3 o( c8 }  P) D" J! O; z+ y  E. t5 A8 G/ s
        volatile unsigned int savePinMux = 0;0 K5 }: u. y9 B& T, Z( S
        //初始化5.11、5.9 、 5.5为GPIO口: U/ N% G" v5 _% E/ E/ m6 `1 `
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));, X+ J0 N5 S- B, W
  i( V& N# a' c7 {5 K
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
- L1 M3 _9 B1 R8 Z% v& E
) S( v8 J; [' U- E  B! V        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));1 s! u5 |# ]9 Q- r
" T: n9 X9 I& P, F' S
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);; B, j0 s' b5 ^+ U
. I/ d: T' z& x. s
}
) h* G1 _  A1 d% E7 \
$ }/ u3 T% S0 `) Q4 h9 _5 H
& j% q4 N, S( g0 g/ Q9 ystatic void ad7606_gpio_setup(ad7606 *ad) {0 R& P" R; V0 i' a
        /*Set the AD7606_PAR_BUSY to the input mode*/
# G: F7 S8 z& S+ J% Q) `. s- S6 Q+ _        //初始化5.11、5.9 、 5.5为中断口
8 q6 _+ w% I% `5 I9 Q        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
9 Z# h. i/ v% ?0 H! L7 U4 C- J        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
( o, m! \# U4 q        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
. Q1 N- Y6 {( T$ {4 I2 L) F! ~! O# h        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
# _/ {8 b4 T6 h7 F* ~- A3 |  {        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/9 {/ {7 E1 Y! T! d! Z* U
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);: q9 j7 F) k0 ^- u. H+ f, G0 ]
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
/ N" ]" t- ^& l) }. t' ~        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
: J5 K# B/ d5 A& r        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);/ X0 Y( @6 D/ m4 h
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/# y: R1 Q2 U$ r+ w0 Y# N
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);- J" ~5 q+ N7 P1 h' J

$ C' L1 J% X7 ?; k5 O5 o5 [2 {        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);+ f9 g8 F; @" A7 X! j0 A3 h
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);7 x+ F" c- x4 E9 @, E% e
        Task_sleep(1000);' Z2 B2 e( t1 m  S
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
( E% L$ V. m' B5 h& o3 `  O  V, C        Task_sleep(1000);
+ Y; Y& j2 N: ]/ f" Y. {; @* t/ w# K8 Z- l6 f) s7 J# J4 l& W$ K
        /*Set the AD7606_PAR_CONVST to output mode*/$ t( s& K+ A1 I2 w5 u
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);6 f; n9 y+ l! _$ @
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
4 p# c8 [, q! Y$ K0 z) I
. k0 e. c, c* C) _* z, c        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
& Z% l; u8 P9 Q: Z. p, x        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
6 F% S8 _3 t0 h1 K( O% B
, ^8 L9 T* F) ~$ D) ~  o/ _! A}
* W) L) D) ^2 ?5 L0 h' o* D+ a# W/ l6 Q! H
7 k" ]4 q8 P4 V" Y
static void ad7606_busy_hwi(UArg ad_addr) {+ B# ^1 d/ r3 i! K  |/ V0 ~

( @4 W1 f* \* Z/ J9 O9 m2 ]( X
1 g# ?% X% O: }' W$ ?4 p1 u' W        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/4 l* q; |. r, w; u5 e4 G8 `2 T
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。( V# \" a% s- a/ N
, E. }6 b* B  S, ]: S' j3 |* g- P
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND), ~9 B4 l. j$ A
        {$ {1 N' v2 F' j" I
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。# M+ q. B! e0 T# F2 G( B; Z$ ^
                cs_addr = SOC_EMIFA_CS5_ADDR ;: s6 h9 R. _' R: ^: q+ `8 y  W
                internal = 0 ;
8 p% Y+ P( t6 u1 ~" P                int_flag[0] = 1 ;3 ]2 I! j. l# e+ P  K% W
        }1 \2 Q, \9 ^5 j  w
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
# ^: v3 G) I0 d- C/ _! s  i        {7 d! m, n  f! `& G0 `7 x
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
# x: C8 T/ s1 \                cs_addr = SOC_EMIFA_CS4_ADDR ;
; j; l# v9 }9 @) @4 [! ?                internal = 6 ;
; I& H7 z; q7 l: z% a, S4 ?( s                int_flag[1] = 1 ;
8 h0 l) \" W# ]; z7 i$ g9 c        }
7 T  A/ s: r* W' m; V        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
4 z' f2 V! @$ I. N+ q( Q        {9 y$ p+ e# P! {' ?' N" \% F
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
( M6 E4 j. Y3 L6 G; ~                cs_addr = SOC_EMIFA_CS2_ADDR ;3 w7 l# o# w: j2 C
                internal = 12 ;/ y8 F0 c0 l! W; m- K& K
                int_flag[2] = 1 ;
5 n3 {$ \1 \2 B( B$ E$ r9 m        }
6 I  k5 I* k5 y6 {9 O& |! N  9 e  l; ]8 J4 W1 A1 P) S; ^
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);( R1 H# v  n: c( k& s/ `( z: a
       4 i# f# ?7 e& k( f) @" |  j+ r+ e
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);% ~5 _9 V) l$ B4 _/ {* n
}" v5 C. l8 F( Q+ @; o. F2 I

: M! I, w- Z6 y/ U9 c3 P
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图1 T' c$ u% Z; r
7 A! `+ d" i$ j1 J3 j: L+ ~

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-18 01:38 , Processed in 0.044071 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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