sysbios hwi 问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
4 _9 m; M0 K+ ^3 ]+ o3 Q; L+ Z7 U. y#define AD7606_PAR_BUSY_GPIO_BANK        5
. k+ F* Z, S+ K% i; x7 P#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT$ d) D! ^; r7 J& u

7 ?/ `- N$ f1 o2 }$ \#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11* q6 R& |( q" A( _( A
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
& J2 w6 u) r. O% v#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
/ G' L. s. v+ `9 n& n#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
  m4 J  G2 D0 T. O3 i" b1 b
- [: Y0 r+ S$ V% k. b* Y#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
& |5 `* t# G& q#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)+ ~. K' X! r, F: G! Z8 O
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
# G3 {  {1 _1 X/ ?0 V# ^' l
6 l1 j! B8 M* \0 z! Q' _' h6 [9 e

7 K$ p" g7 o. |4 A9 \; z+ gstatic void ad7606_irq_setup(ad7606 *ad) {
$ J" O7 e# R( d* Z% L+ [, \        Hwi_Params hwiParams;" r% V; b5 c8 U. f7 \9 [3 U) ]
        Hwi_Handle myHwi;& T5 ~" w' D9 r
        Error_Block eb;
" {1 Y/ g7 P! y+ t5 m: B( w
/ d5 ^4 z$ J, X- P- A9 _% u; D; c        Error_init(&eb);/ q# s6 K% A5 d* x
        Hwi_Params_init(&hwiParams);
8 B7 w5 R! |  q/ A% A! |        hwiParams.arg = (unsigned int)ad;$ n) ]5 F- R- |; j
        hwiParams.enableInt = FALSE;
# U5 m0 D1 [* E1 W7 C; T  f1 g        hwiParams.eventId = SYS_INT_GPIO_B5INT;
6 d3 Z1 }* L/ R' P$ X  I5 f8 X2 h        hwiParams.priority = 4;/ A5 y6 d6 q+ t6 {" O& Y
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数4 H$ s5 K; l2 s1 Y- V' u
        if (myHwi == NULL)
4 i; r4 a$ V9 R( _5 T        LOG_FATAL("failed to create hwi");
) R. ^- B, H+ z/ R# W( i
7 }: V8 A+ g: ^1 j. K2 _        /* enable both interrupts */
: k& c3 c- u# k7 b5 @, Z9 W        Hwi_enableInterrupt(ad->irq_event);- ^- X6 h. y( {4 a( T7 Z3 c
}
1 @1 T) _# F7 X( ^  Y: n1 l8 X" \( L4 R

' N# [* B- d# i! w9 G/ g$ Ustatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {  c* W, O2 [( T/ `" ]5 T! q2 _
        volatile unsigned int savePinMux = 0;
8 n. o& [0 _5 S/ F8 W- L0 K        //初始化5.11、5.9 、 5.5为GPIO口2 z1 [2 F0 }, R9 ]. Q9 P% y: C: R: ~
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
) c. ]+ W  c7 O& j2 E& @. k' P
9 W" s  o  X0 D& P! N9 J        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);( t- a' t  r2 L! r5 o
; B! r# f* J! }# V) Y
        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));8 H- X! j# R- `0 D7 z4 A
/ F( v+ }5 p/ \$ Y# x; [
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);, r- g  J( F' h0 P1 ^. D2 d: I
. P7 `3 S% d; h7 w% @3 p; |: t
}* w* v7 F/ ^9 t0 B* Y+ B3 D$ j3 F1 @0 U. c
& N0 [4 C' K( R
$ A$ I( {, H" e' I+ X- B
static void ad7606_gpio_setup(ad7606 *ad) {( S8 I5 k& y8 v1 `. x9 x1 \
        /*Set the AD7606_PAR_BUSY to the input mode*/
9 F2 e% R# L- x0 k7 p        //初始化5.11、5.9 、 5.5为中断口! n9 r/ l0 d3 M# i3 d2 _! ^
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
6 G, e+ O4 d7 a5 m, M. p        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);( |/ z6 \% x" |7 k+ Z
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
9 _) ]: U; P6 p% d        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
: F0 `+ w8 T7 B5 A& x4 D3 i        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/8 s1 b- c8 G, c) J- d$ m1 l
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
) D+ M0 Y4 D  I+ m+ _        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);' K2 z9 G& s$ l
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
0 {6 V3 o$ q! r) l4 [2 U0 @        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
9 R3 J- P% m$ J6 b7 r, y        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
$ k8 y# E: p4 [* k$ v( l        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
; Y3 q, J+ U3 N. ~* \
# p7 F; |0 z4 |& M4 v* {        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
3 q% O; ~% t6 ?/ b  y        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
) t, z' G& C7 i/ Z/ [2 d" D        Task_sleep(1000);
7 l+ G7 Z0 o% b. w        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
* X  i. m& Z6 q: q6 {' B0 P        Task_sleep(1000);1 e& B/ e& Z3 Y+ X

3 v8 s/ L( R. }+ d  J$ |        /*Set the AD7606_PAR_CONVST to output mode*// R3 L  m' P; E$ M: w1 @8 ?
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
  q8 E" @2 m5 ?6 l. U$ J        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);- T4 e. Q7 E$ z

4 D; Z: Z! ^) E        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
2 S' _7 s$ O) ?) W9 W4 X4 b1 \        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);, S$ B6 w' a8 Y# T% W1 U
. a- e5 S& i# [' h
}
  X1 ~9 y0 I  \; m! L8 o; f- U( @
/ S  v& d5 R- X
static void ad7606_busy_hwi(UArg ad_addr) {+ x) Z( y0 t8 K, v

/ o$ _- P* o3 y: Z5 Y) \7 z" ?. s0 b# T2 b5 u: g
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
# b# B( \' Q- D, M        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。0 i# c8 Z5 T1 Z

7 k0 |% R* e$ D2 }+ X" ?; [% ]        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
% [$ b/ _% U7 D9 _        {
, N( C4 h, ~- b/ U& t7 H  n% e                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
4 e6 \9 v3 k  h) Q2 m! `$ k6 `                cs_addr = SOC_EMIFA_CS5_ADDR ;7 Q1 H7 z/ C2 x7 d/ E- o
                internal = 0 ;* [. i/ A! H3 A+ j( d
                int_flag[0] = 1 ;% s0 K" M3 ]' G
        }
9 p, d% I' `8 H/ }1 g: z1 |4 z        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)$ w/ W% {$ F4 j- u& Q
        {
) ~4 o: C1 {0 G% d) ?                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
# ?) _7 M9 l/ }) P# e$ W                cs_addr = SOC_EMIFA_CS4_ADDR ;/ D' `7 c0 A) q- [$ T6 c, x# R
                internal = 6 ;
. @# s, ]) ?: O- q' O7 l                int_flag[1] = 1 ;4 H" D8 v! p# I7 x
        }
' ~, ^. D" |2 _: P2 x, D        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
; |. U8 n& _9 ?) a1 G; J        {  f2 `: x0 Z2 B9 Z5 J! h
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
! q" F/ W& F" r+ q                cs_addr = SOC_EMIFA_CS2_ADDR ;
- M6 o# ]3 W. f/ I! p- m# c" j                internal = 12 ;
: ]9 |6 Y0 T8 J1 E7 [                int_flag[2] = 1 ;! d. ?5 z* b: t6 S9 @0 |
        }
& j8 v! O& a9 J- w0 n/ D" y  8 Q( y  k% q. c! B+ f0 V% q+ R
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
" ?. l! `% C" R6 L, b      
2 d+ B1 [1 o1 i& x/ S9 P        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);) E% R$ S4 g3 X1 N# q/ n
}' {- G0 B  {* U+ u; _5 C; N
+ @: ?$ E' d0 s+ [8 ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图
5 D/ I% M5 j+ w. x- q6 Q' V, K9 {+ L6 U. ]1 }4 N6 I6 z. X- b$ Z$ m

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-1-31 04:52 , Processed in 0.041253 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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