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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:/ n3 `# s+ P1 S. @
#define AD7606_PAR_BUSY_GPIO_BANK        5
5 o6 E( k1 I2 _& b5 X; c+ F" G#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT% H3 x9 J3 Q- g# O: A7 y

& {' D% ~; Y7 O) H#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
$ W6 C. [, `+ K/ L, N- ]#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9( D3 n; i* w4 C8 @$ v, `- t
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
. r; J5 g% R; \# y$ o7 d% t#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
) y. h5 y3 R4 N$ y$ J( b' e" q, \+ q, o9 U7 ^- E
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)0 P+ a' B" ]8 `5 o
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)$ q7 s4 N5 L& f/ W
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
. c# y' H* P) B* L' M! o! Y9 A- M1 q, b$ K- A9 \
7 z1 U0 `" G' G2 b3 l
! `+ O% k" A: @. K# W  ]
static void ad7606_irq_setup(ad7606 *ad) {
2 J, x8 ]% @# J& A        Hwi_Params hwiParams;
1 m( R$ L2 w! z& u8 [' v1 j0 c        Hwi_Handle myHwi;
" y1 `! [* F( |/ G  U        Error_Block eb;1 }2 ^% s0 `- L+ X3 G
0 |0 \, O: |3 n' m
        Error_init(&eb);
  @1 k  U+ H" _+ t0 G        Hwi_Params_init(&hwiParams);% F4 K! w' _/ Z3 r# O: Z
        hwiParams.arg = (unsigned int)ad;
1 |) E0 j6 [3 Z4 d        hwiParams.enableInt = FALSE;
+ ~% _4 p: w; }6 ^# ]" ^0 c        hwiParams.eventId = SYS_INT_GPIO_B5INT;# x5 ~( I0 e! }; g/ q+ x
        hwiParams.priority = 4;( w( u% v! @0 ?7 u
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数" C. S3 ?/ o8 ?8 V) p: F" K! M* S$ I
        if (myHwi == NULL) $ f1 u/ a' u+ g4 m7 p4 c5 I
        LOG_FATAL("failed to create hwi");3 X2 s$ b4 e5 |

: i/ ~  \  T) A( x. b        /* enable both interrupts */; Q1 @8 H9 w# f
        Hwi_enableInterrupt(ad->irq_event);, I7 l$ q2 {4 l# r# n" t* k1 Q9 O
}, ?' N9 G) j( P3 U7 D6 h; n/ R0 f
3 w9 S% e' M6 R$ ~9 \  z/ Y
, e6 O: q& f+ C1 j! R* k0 @4 U
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {
+ G4 Q: }0 b, ?* Z& q- \" x1 t        volatile unsigned int savePinMux = 0;
/ m) r. F5 d/ `% M3 e/ M        //初始化5.11、5.9 、 5.5为GPIO口7 z: _! q8 S0 K+ b6 s3 r
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
0 ^. K" y$ Z5 _
) H! f6 Y) j1 Z4 t7 [        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);5 x' I: I6 V9 \) M% Q4 }. V

( }% y. a. `) q( E        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));3 Q  O' d: q6 E
) k: G" d' a: @' V; A! N; d7 Y8 t
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);/ C9 p% M4 E. O
# k% S2 w8 G7 C* s  A0 l
}
# e% g* @& Z6 b: C# H5 d5 f9 d( u; H

4 ~& b2 @; p) [0 R: k6 mstatic void ad7606_gpio_setup(ad7606 *ad) {! @8 b  V$ w( h1 y4 U
        /*Set the AD7606_PAR_BUSY to the input mode*/
! M4 b: o# _7 \4 v        //初始化5.11、5.9 、 5.5为中断口
2 f; L; A5 @, l( h8 t7 \. q        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);% K8 L2 \! i6 f* I* n; q2 X8 ~
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);) s( r, O* P+ x5 \
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);# p4 q& T% j# `: N8 T
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);) |# \; l0 s3 p! D1 X: c6 b+ Q
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
5 I  T" `2 W: _3 P' n5 t0 l        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
& m! z; J3 X' c$ c) U0 c  S        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);3 j3 ]& m! }9 d, [
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
$ Y2 Z" n( Y" E        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);- q5 u4 h: e+ W4 j/ Y" D+ y
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/' X, \: v" [7 x: ~& J
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
( N1 l6 a$ B- ?1 X  K% C5 r
, V3 u" C7 {) n  A+ A        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
$ p8 V2 U0 ^8 {+ u/ B- ^        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);* Q3 T  m# H% X( A
        Task_sleep(1000);, P* a9 S7 E( H6 ?& X
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
& P) i+ x" t$ k. H" T        Task_sleep(1000);
! @' F& d/ O; D1 u
7 p" y- w$ G" W6 a$ P' j        /*Set the AD7606_PAR_CONVST to output mode*/& ]; I6 m" E. L8 b3 b
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);2 v; b# t9 |# q" {/ l8 Y
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
. I; s0 A) r6 j7 E: Y- y9 D& ]- D) n' e
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);* Y! C8 M6 J' w4 {, i
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
( _$ I9 _! B. W0 l5 W% B
3 X8 o0 W  b" w}
6 ~2 F( R# Z+ x  U* Q# j* Y; V  j

8 N# a: {+ e$ j; f: m0 O9 ]static void ad7606_busy_hwi(UArg ad_addr) {
% z5 T/ |2 K- [
. R# F5 X  m! z) ?8 c" [( t5 T* j5 C# X# o- j
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
* ?0 Y( i6 t9 f1 A        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
( h3 \4 A, C8 r. B$ M0 E. o
6 `' Z( R' _' v( K5 x        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
* B$ C3 Q/ v; {% C1 f4 x! X. m( l. C! M        {
. W) V4 D* u5 L) v* I% }. P                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
' y: V0 x# A8 R1 R- d% o                cs_addr = SOC_EMIFA_CS5_ADDR ;/ R2 M3 X1 x1 ^+ N3 K
                internal = 0 ;
4 O* b/ E5 Q; z" o6 p                int_flag[0] = 1 ;2 H: }2 \0 Q, {: \* v
        }
! {* M- c# m5 |3 B% C8 l) U        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
2 E. ~9 M' \# E7 ]# u        {/ R' ?1 E; s# D! }
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。$ l+ b/ N; @. O3 j  q
                cs_addr = SOC_EMIFA_CS4_ADDR ;2 z: o2 t, w; M  e& E- |( q* l
                internal = 6 ;
9 R* a7 u* ?+ e9 B) A2 w                int_flag[1] = 1 ;
) E# S; k: [! ~4 m0 x        }1 M" c  V/ k  E3 g/ i4 I, w: m
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)0 N6 f+ j# `2 A5 A# ?) P2 T
        {
; U( X2 [0 d% E5 w- G9 K% Z8 H                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。$ Z4 _# Y: j. o& s0 X
                cs_addr = SOC_EMIFA_CS2_ADDR ;
! E- A% G1 D' F# I                internal = 12 ;% k; c5 D  V5 j8 x0 r! ~2 @, U% [6 _
                int_flag[2] = 1 ;. n5 _0 n/ V3 Z
        }
9 m1 O# f$ {6 v- _0 P: k  
/ _3 p' C8 l( r9 _8 F        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);0 a4 m* P) a5 k4 D8 S* E
      
' ?4 H% M. J" m$ }        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
* z" e9 T4 H" W1 Q6 R5 W}+ E% x5 z0 [1 s6 h# U* }

3 [. \  S7 z% R; @! n& q' `! E9 _8 b
; @) n# [! p6 h# D
- c4 f* M5 ~; g- U2 Z8 I% t
: Z5 t. G( I$ ^/ S! O

本帖子中包含更多资源

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

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, 2026-1-31 06:44 , Processed in 0.042074 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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