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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:9 A7 Q' b1 w1 X. F+ ]1 |
#define AD7606_PAR_BUSY_GPIO_BANK        55 e& E3 l3 E% K, y% E
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
- K' e4 L. M9 F7 ?6 k! F/ k' b. I6 l# B& T% W  @" ]
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
+ @" a' x6 P' c% B1 P9 L: W7 h. I#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9# J2 K+ r" t3 O" _# f: J
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5; C1 `" p! S- P* f( G; A
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
5 |1 u# q6 ?6 o0 M& a
# \7 S8 [3 w; r' H5 V#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1): f7 z& f6 ]" d# \6 l
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
. F( ?. h/ l$ L6 Z* Y! r- S2 A: ^#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
( {  T0 L% T/ v1 b- {& q
& u- E. Y3 z0 M9 w' U$ W) K. k9 T+ n- f4 p$ t) \' V# `/ C( R
3 B$ i" f  m5 a$ c# W% Q( W
static void ad7606_irq_setup(ad7606 *ad) {8 ~1 ]" I' R* A2 u2 ~
        Hwi_Params hwiParams;
' X; \& d8 X! T        Hwi_Handle myHwi;3 Q1 o$ L. F$ i! h
        Error_Block eb;
4 q3 r$ N1 {: c7 r  ]; g9 n( d  K
        Error_init(&eb);# ?- B0 d& g/ E- |& Z7 ]5 {, J/ u
        Hwi_Params_init(&hwiParams);! D. a: C) R+ j) r' i: W/ f! ^; n2 S
        hwiParams.arg = (unsigned int)ad;
1 e+ W* \/ A$ z5 F6 t. O        hwiParams.enableInt = FALSE;7 [( a, y+ E# u3 U: G
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
" e; i+ i* e; O- Q( f0 B        hwiParams.priority = 4;, A' e2 \6 Y* v7 K
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
) e& q1 f3 X+ r! R# e2 R        if (myHwi == NULL)
* c3 I2 w* ?6 n        LOG_FATAL("failed to create hwi");
/ a& h2 \+ i& C* ]7 l3 ^# W2 r+ G
+ z  i9 @) W( M# q3 u8 G! k        /* enable both interrupts */+ B. i0 M( S) [' e7 E
        Hwi_enableInterrupt(ad->irq_event);
" p3 R8 g- s' E}: C3 y" S& k  D" H# X* z. q( z

" ^2 v2 H0 F6 g8 o/ F: O1 G3 U- F3 `
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {
# X+ N) _2 _7 i1 n        volatile unsigned int savePinMux = 0;. f  y2 |  L$ Y7 l" {; h; Z
        //初始化5.11、5.9 、 5.5为GPIO口
) g4 @/ F4 _, G; S2 {4 h9 T7 z        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));8 T% ^3 R/ B$ @: _# C

( ~2 b& U3 s& L5 n) {; h        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);6 T3 O; c/ F/ y8 {

" J& k7 [" 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));, i" i7 Z  S! c, H: v4 a

& X  P# S3 b, `* h        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
( x) F9 S7 g- A! A
: ]& N) X( P3 i- C$ T}2 N; K) R6 `% p9 M6 Y: Y' f, j

8 a: x$ u% C- B# z4 C
* r6 l2 M# Z7 astatic void ad7606_gpio_setup(ad7606 *ad) {9 ~- B4 _# e- ~) y  Q
        /*Set the AD7606_PAR_BUSY to the input mode*/
6 O- f5 j" [* I: G7 W( ^7 g% p        //初始化5.11、5.9 、 5.5为中断口0 E, d  w/ f5 ], s
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
/ J0 A& U) X# ^1 N1 _3 p        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);: ?. a$ c5 `; I' ^* G
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
+ E9 n+ D* N: k0 A        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
. V. i8 q8 n; g7 Y0 T4 ^9 J        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/( Y4 i- v/ u4 R4 i+ g
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
$ f- I% C6 w* S; r$ P$ K1 ]        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);/ I, _+ n: g2 k. M1 V+ s
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);1 _7 y- U/ l" M; f) s" A; v: F$ m
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);' p5 K$ P8 m. d3 s. [
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
1 J5 F9 r* F! g8 s2 z        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);: g% {; L3 }$ I- a) O

5 [* p. O; M4 S- a* j7 }( I# g2 i        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);! P" e6 O% n1 m- w9 v
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
; u" M! p- e1 b( ]3 U        Task_sleep(1000);: N% C" O% n! r2 Q/ M4 j
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);" W$ Y3 W1 Z6 @1 F! O" f5 i
        Task_sleep(1000);8 E7 D' I0 r8 Q1 D
0 @* [, U7 J( L9 r  R/ K: Q8 s! m% B
        /*Set the AD7606_PAR_CONVST to output mode*// f; h. D3 U& Y7 G
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
  u6 n$ j! f9 A  I. M, Y        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
0 M8 x; F1 Z) ^% T# c
5 {! v1 c$ M1 [! u        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);- ^* D0 \, Z1 g9 x4 P1 ~) N
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
) K) f6 c8 p& e) h7 I2 i$ j! u+ ]" ~) v' Q
}
/ ?# o+ P  o( R: o( R, ~" J1 p' q/ ~9 u0 g: G" k

# n  g  t' V: L6 K; n; @static void ad7606_busy_hwi(UArg ad_addr) {
8 K  f+ I" M+ ~' Y) A; L
$ O! Q( H" }& ]9 b7 v# N$ f/ @0 v. c- F' T, Q7 j& L
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/" f8 W2 l( b  W
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。$ ?- F) f* @* Z  j
7 ~6 a) M, V1 v9 ?7 `6 v3 ~  U
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND). r' {' Z8 l6 ^: Z- V: X) H
        {
) g6 z5 p) c/ b! T$ I                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。8 f' ~$ p; B# H1 R# k
                cs_addr = SOC_EMIFA_CS5_ADDR ;
0 ?- }, a' S7 ~; o+ U- a( J' [% V                internal = 0 ;/ t5 E3 i/ `3 h- {3 R+ O4 i0 V
                int_flag[0] = 1 ;- z9 j5 w" H* I: I
        }
1 y/ r8 C  g" V6 c, S        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)7 k$ |  C1 _0 ~$ a
        {: H% G5 s6 F$ u+ {( U
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。4 B- L. u7 R6 M/ d4 s% Y
                cs_addr = SOC_EMIFA_CS4_ADDR ;
) `4 n; l% z' |+ h" V                internal = 6 ;3 o0 b" ^  p2 \# S
                int_flag[1] = 1 ;
% T+ Q8 ]$ ?3 h3 {' E$ G! U        }2 F3 g+ ~2 ~9 r8 Y4 g- d
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
! {% @( y; j9 T. x        {) I" B5 r  }; H$ [3 @
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
" x( k! K; y( r; n7 p                cs_addr = SOC_EMIFA_CS2_ADDR ;
) p9 D- E8 d& U2 |                internal = 12 ;$ D0 a) t$ t- N/ A
                int_flag[2] = 1 ;
2 v$ G: l$ C0 U) [3 h        }
4 A8 k2 N7 p# K- X7 h  
! ~! Y  u4 u3 R! n+ }5 ]: I& o        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);, Y% Y$ n9 Q. @. r+ b+ c* E+ o
      
9 Y# ^/ B- p3 ^  V1 t; q6 `& A+ D        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);$ l" b+ I4 T% u3 C* {4 q1 q6 G
}
5 ~1 H) ~0 M& e' ?) |2 w
: Q6 q; n( t% v; a' T8 g
. @+ b% v0 g, Q- T2 Y8 h2 b  Z1 p: j- ~3 T6 g& z% m: o
+ P# Q- r2 {- _, n5 c" P

本帖子中包含更多资源

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

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 19:45 , Processed in 0.038170 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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