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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:- [1 G7 Z+ g0 W' T2 E5 ?' o
#define AD7606_PAR_BUSY_GPIO_BANK        5% t: a0 |4 Z5 h2 R0 @) E9 S$ G; N8 _
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
% U3 K2 I( m8 ^$ S' `/ _$ u* V& T
# k& ?4 ~$ x+ j" g#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11% R  Q9 T; W5 v4 N* G
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.99 o( [5 ]7 c5 e3 |
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
3 r2 r3 f6 `) B7 j" o* t#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
' h6 k1 p7 I1 _) n' L. G1 D$ t' ?. a7 f! {! Y
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
7 W* B! f. y% E* f; h4 S  M#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)0 R2 U' \# l; {& K
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
2 ]: D7 m5 i& O9 ~3 o+ U
; g( i& m' D  A
1 K3 p2 s2 T! Y. p& q/ X1 y: F$ ?9 p. z) f0 H0 L" R
static void ad7606_irq_setup(ad7606 *ad) {
* H. m& }( k8 i0 M) P* b8 b1 d2 f        Hwi_Params hwiParams;
8 G# U6 y* h2 |0 z        Hwi_Handle myHwi;
& ?+ N9 o2 M) M7 u4 I  \8 Q        Error_Block eb;5 W; B/ j  R3 z

" _& E( V. w' ]2 `  [- ?' w. B        Error_init(&eb);
1 J( H2 w$ E6 G7 S# B4 B: y+ Y        Hwi_Params_init(&hwiParams);$ q% n$ w# B- L4 y5 `, t# h8 r+ _# s3 ]
        hwiParams.arg = (unsigned int)ad;
6 X  T$ d9 w. f' j  U        hwiParams.enableInt = FALSE;
  R. O5 }. C6 I; f! M/ f7 l$ @% r+ ^5 [        hwiParams.eventId = SYS_INT_GPIO_B5INT;2 M3 d1 O# L9 r6 _# G# b( n' p$ P6 R
        hwiParams.priority = 4;
! b9 M& y, b* C1 l        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
+ e$ f; o0 m- l# s        if (myHwi == NULL)
7 q0 Q7 A+ k. C5 d6 E, M        LOG_FATAL("failed to create hwi");' |- C/ S" P9 k, N; e' P8 B) l
: [, O2 K6 S/ F8 S
        /* enable both interrupts */
7 L+ Y; }# z, b* Z        Hwi_enableInterrupt(ad->irq_event);
( ^! ?8 P+ R. L, Z5 w, l}( A" s# B0 [( y* J) z" B
) m" k& h" U# p* Y  ^

$ T- l0 t0 j. Q  _2 o6 s0 ?0 zstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {
7 d8 G& Q' |. [/ V$ n5 l% `. z        volatile unsigned int savePinMux = 0;
) D& h, G2 @8 _* H$ t6 \5 Q        //初始化5.11、5.9 、 5.5为GPIO口
/ J$ k" x) ^5 H8 y4 J) d2 c        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));, ?" C8 \5 x8 o, `2 @# L, a

* V& a9 Q3 t  n9 u% s3 m! z! y        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
5 \) d/ Z# Q, Y$ ]+ z! {
" n" B, b4 L* V# n) w/ F        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));
: u1 N/ J  \. h9 _, x& @
+ m+ I' H  n: @        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
1 I4 c# D) G/ j; C7 r$ P6 L1 v% A* }& ?
}
- b/ ^) X; \/ [3 W& d% A; L, i" {8 Z$ J
4 Z, R1 S( Z( |# u( [
static void ad7606_gpio_setup(ad7606 *ad) {# }: f( S  f" w  ?* S; \. _
        /*Set the AD7606_PAR_BUSY to the input mode*/9 E* X0 A& g% [' r* N1 J% u# {0 \! j
        //初始化5.11、5.9 、 5.5为中断口+ L6 n# A/ o7 B3 S. Q. w. O. _
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
( q* V! a  [3 l7 [  B        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);! S# h+ |+ x9 X7 N5 T
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
4 b8 g" m4 u2 \' U6 V        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
  f" l: }' u! N5 }        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/; f! a; |, H" v% n, y
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);$ r/ \6 ^* m+ m% H& I9 G. u" A
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
& p% y9 U4 k/ x4 X        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);5 Q. b6 J! H. B
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
# q  w) y! E5 S1 W+ r5 ]* a        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
3 d2 v0 K6 t9 \7 y  z4 W# p        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);0 P9 v6 X0 U2 r4 @% V" U

6 o! z7 t" M2 J0 X        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
; g, T1 |( ^" N% S0 h, @, \        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);; r, g) @$ l# A
        Task_sleep(1000);
; v, d' T) B' b        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);& K  \5 W; u9 I7 r6 N
        Task_sleep(1000);1 ^5 t7 x! n8 \* W! J+ G" b

5 a+ y1 `( `9 a, _) [        /*Set the AD7606_PAR_CONVST to output mode*/
2 D4 L; T0 a- E2 {2 h8 C        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);; C! M8 x0 d; B* p0 L6 I% r8 V5 a
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);( d' U3 n4 D# R5 Z; k
' K& {  s* Z! e5 t
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
0 y9 n7 U" g) O2 d9 Q! z4 N        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);( |4 U7 y- f: C0 s
" r. L9 C+ i' o! |
}/ m5 Q; C3 a, L8 R& X1 h0 F

  e+ N3 `( i8 M6 `
  l; x7 {. O  s7 H9 z. c5 Q" z8 Ustatic void ad7606_busy_hwi(UArg ad_addr) {5 K9 q8 j! P% H  M5 Y7 I& h7 D, Z8 B

5 |% e' K4 W% Z3 U6 O  L9 g! X3 h7 [8 M! Z
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/  L; v; B7 v- y0 W' V2 M
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。' X' Y* }$ Q/ r5 M1 G6 k

4 [: g2 P! I- b2 }( \& l        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
8 g4 w8 ^- o% x7 E        {
) F2 t2 K3 C+ K- i6 c                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
( r- {' y- g! N3 u5 Q                cs_addr = SOC_EMIFA_CS5_ADDR ;
# M0 b( a- v- s) [                internal = 0 ;
% Z! r6 J, C1 }& r( u0 ~                int_flag[0] = 1 ;) z1 n4 C, y: }+ G1 m( n
        }
/ }5 l' E: S: H; j- e        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)# s6 R; y& z8 F0 C% y
        {% d8 y% Q( q# c/ D5 p6 z# l* m
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。6 j0 j  Q' T4 l; f
                cs_addr = SOC_EMIFA_CS4_ADDR ;+ `  y$ j4 c% }; w( [
                internal = 6 ;
- u& y  h$ K+ J& Z                int_flag[1] = 1 ;4 V, m/ ]3 e% p! o
        }
2 @: V9 N4 Y% H        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)2 _) Y& W# W! \
        {' h( V/ [. }7 ?% s& B1 v& G
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。. T7 ~7 w' R" t0 @$ T
                cs_addr = SOC_EMIFA_CS2_ADDR ;
& B* [% D: s' i9 H: k8 [: E                internal = 12 ;) D2 h6 j! u/ p' @, ^' {) N% A3 b' S% \
                int_flag[2] = 1 ;
( X- H1 p; }$ @0 T        }- j$ v' V; f- i) K# P& O
  - `2 R  N' n9 R9 m  k6 w9 t; t
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);6 i2 P( r1 L6 P
       0 _- c) Q! O! R3 k  E5 w% h( Y& P
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);+ z5 [7 j9 o5 C( p
}2 k3 `+ O2 i# `7 I. H% c/ ?$ N
7 G: c4 C7 R: q
- }4 D2 _& C0 h: B) S" B: D- S6 g+ Y

7 T/ F1 d- \9 r( d. f& N4 m+ ^- u( r2 w0 s4 S. T9 Z

本帖子中包含更多资源

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

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-4-30 20:12 , Processed in 0.040659 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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