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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
0 \6 J; {3 ]* e#define AD7606_PAR_BUSY_GPIO_BANK        5) v: n) H( T* d2 ]3 Y, G
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
( U. q2 l4 k% N4 i' E0 ]  [: s  r9 Q" P, \- u
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11/ |3 _) H# w* v* O1 @# h1 R
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
9 E5 p' e- }) S$ F; k#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
& m* |3 n- i! U#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
) r( g: n; G2 w3 k% }5 m
. [" n# V* ?# c( m6 J! Q) y5 v#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
+ u$ N4 i  r/ W/ |( O#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)% `- ]6 j0 z0 b! o+ h
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)) J8 J4 |+ e: Y0 d% S: T  n

/ q% O) |3 [0 @. O1 h" Q4 j) A0 R: H$ L1 c

' K3 h2 a# K( Jstatic void ad7606_irq_setup(ad7606 *ad) {5 p, h+ S. l( n
        Hwi_Params hwiParams;5 ]3 |" S/ ]* L& ^+ o
        Hwi_Handle myHwi;
/ d0 E3 m4 |$ L( K. L        Error_Block eb;
) h) b: \0 X( y3 Q" Y# ~
7 Y8 [" f/ _  p) l* e        Error_init(&eb);
$ ?" c6 o+ ~6 m7 Y9 a        Hwi_Params_init(&hwiParams);7 [+ f4 H/ @( w6 R2 d( O  j
        hwiParams.arg = (unsigned int)ad;
0 B6 W& @4 u" T/ _( n; G: H( {        hwiParams.enableInt = FALSE;2 E3 h7 ]( u0 U2 S5 @* K& l
        hwiParams.eventId = SYS_INT_GPIO_B5INT;9 W  v- Q* K4 r
        hwiParams.priority = 4;, p! @. }( h* B& h
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数+ J& E) s* y- q$ f; D8 u
        if (myHwi == NULL) , P4 o1 _- [  L  X( S
        LOG_FATAL("failed to create hwi");- O, q6 f# ^) N) }6 Q) w( I/ ?

& ]2 Q; _$ y3 K% }" Q        /* enable both interrupts */
# v' M( I, G5 N1 \5 J; T        Hwi_enableInterrupt(ad->irq_event);
! c  O! B; Q" h/ x3 \}; ?! c% m! R' a0 q* u

/ Z* j* O( y9 [% q
! [7 w/ w4 d) y/ V9 Rstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {
9 I" {' l) |4 q2 s& I4 L1 L) _# O        volatile unsigned int savePinMux = 0;
- m0 C8 x3 D0 V# d8 y( l9 w        //初始化5.11、5.9 、 5.5为GPIO口' f. T0 @/ w8 o+ b% K
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));: V# E$ G& k% V0 N1 C% V, n# b

) q% @) s% q, ]" p0 M        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
' f- u# d. v$ v9 H8 V
6 z/ E: `! n% @2 p        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));
5 l" {! V: c2 F0 K- A7 ~* _9 k! c
% [- R8 q6 d% \' {7 _# f* I        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);! l# f( r! B0 E

; n' J& Y" Y/ p3 E}
1 S  d8 g: V" Q& x4 L9 E' x- f/ b% o1 Z* F

/ j5 m, x+ y$ ~1 I; h) l5 fstatic void ad7606_gpio_setup(ad7606 *ad) {  ^" ]( C: M5 x$ W
        /*Set the AD7606_PAR_BUSY to the input mode*/% g, e/ a* L! ?5 @' J: j2 F% H
        //初始化5.11、5.9 、 5.5为中断口
' z; h4 W1 d* R- M  ?5 f. A; R+ z( I- n        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
* t4 n, E7 W. P9 Q        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);# a  Y" i7 Y& w) K
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);2 d8 Q7 E% q, }9 V% F
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);. Y# \4 b8 J8 a$ f6 K, B, D
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/# g9 E1 o  ?$ M/ b" l$ l
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
9 G% |! J5 V$ T$ E) O5 W- m3 |        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
7 v; W8 @4 H0 f' `; y- ]8 n! [        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);5 u% _; X+ c* W* K" F2 A3 N
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
% U3 L  }1 L4 X1 c9 `- n        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/# w! {) f$ s; {; G  K+ L
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
+ {# o. A3 k/ c2 w0 a! D3 n, S0 A! o# f, w( l
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
- ^/ z& }$ E7 O, N4 k        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
" I$ o: H- r  V  m        Task_sleep(1000);
8 D) c4 a! H: z7 V        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
6 v: ]& C, Z  ~' ~4 s6 C$ b7 |        Task_sleep(1000);. F' i$ |9 V; J" o3 D+ A

: ]' @/ G( w5 _        /*Set the AD7606_PAR_CONVST to output mode*/
# ]5 ^- l' @- i& ^        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);. }8 B3 b1 R: y: y) n# x
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
, K2 @) C8 H, r; N$ Q3 k+ k# b" u' V; F5 X$ e" A, [7 G! i/ ^
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
( h' \1 o5 Y" m  m# B        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);' @! M( i+ z. a1 V0 S9 d, J

) d" }( Y8 E& k1 |9 E4 O}
) n+ k' l, a( \; A! h; }8 m! H7 S" V  S2 u( E+ C

$ q0 S( }4 Q/ ~' R4 G7 [- Bstatic void ad7606_busy_hwi(UArg ad_addr) {2 d3 Q* @0 `+ C! ?7 h6 d! d5 d

  Z2 N, X0 a/ f+ ^/ w8 ^, ~1 X! [! C+ z% `: o' [6 e- s
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
4 O' m) z3 O% ^$ Q        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
1 K( }/ P9 S; i6 r
1 T; S1 x/ s" B. {& f5 ?( `        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)  a, v) `! K" e+ {' H# R3 U
        {
4 s, T' B2 [$ W  G/ k                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。, Y$ i/ [$ x' F1 B# n
                cs_addr = SOC_EMIFA_CS5_ADDR ;1 e9 \7 Y' I" @8 ]0 w# |
                internal = 0 ;
& [. n; K$ V  L9 F                int_flag[0] = 1 ;& C) q9 O  n! `- X. X8 a0 S
        }
2 B2 v0 _2 t; l. ?9 @" t8 o/ u        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
& V$ H. w; V1 N& t        {
5 k9 b& D6 b! b/ V, C$ A                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
& ]/ Y6 C' S# w, p8 o$ x                cs_addr = SOC_EMIFA_CS4_ADDR ;
6 z* ], ^8 g/ T. `3 o6 b$ _# u8 G                internal = 6 ;3 m: _5 m* u8 A+ j
                int_flag[1] = 1 ;
5 Y3 G/ u/ m, L, M        }
2 t- q" M( R2 t5 \' M" ?& G        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
& Z, V, I/ u; d4 z8 x( v        {
' L2 Y2 j9 {$ F                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。! s3 n' A0 i! w' t8 H6 I* D0 ?
                cs_addr = SOC_EMIFA_CS2_ADDR ;
, k7 i! T# f3 r7 [1 e( V5 E                internal = 12 ;
3 C% _! U8 w5 j9 o  l                int_flag[2] = 1 ;9 k, ^; j" y$ @6 X' e
        }. L8 k' P2 T$ T6 x6 f
  4 d4 K0 Z' P' O4 E8 Y
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);; p  _) K6 L' _  z9 L  P  g
       8 C9 [, j: n& D" p. G8 H8 F9 @
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
4 ~# M- F4 c5 I8 B, O}
+ w8 Y8 p9 |; h' b9 V; n
" Q9 E1 H! E/ u4 Q: P2 m
) a; `. q0 o7 w/ D1 L, `
- p3 B5 t. ~. @8 t2 X6 y, m0 ~7 W% E! D$ `" |" Y' F8 G/ J

本帖子中包含更多资源

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

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-6-17 16:13 , Processed in 0.037834 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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