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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
) L- S: \3 i+ z6 {" _- e3 q1 @5 f/ d#define AD7606_PAR_BUSY_GPIO_BANK        52 {' R7 c0 b8 L+ }" b3 w
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
+ W) j" h$ i' ?2 O
  M1 v3 Q( i. t7 h: w#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11& `4 M; F* l1 R% e5 @6 P- I
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
5 Q$ ?5 s- u0 R# n2 V#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5* L: m3 a: S) ^  v* |/ [
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4). j* Y7 X$ a: m! L5 z
, M( z5 L& S! [4 m8 `
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
& k: _" ]+ J* F# \. }+ d# n; N/ d#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2): n: l, R5 y! B: @+ U. B
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
0 z# A9 Q% @8 n  v$ b' v
/ V! x+ z) ~! P1 g4 p2 p7 T1 G
, n  D- \& V0 }2 y, t: i
. v1 D+ E2 H! M& D* estatic void ad7606_irq_setup(ad7606 *ad) {
/ u- H2 K1 |! I. e        Hwi_Params hwiParams;8 {) V5 P# I& N1 Z
        Hwi_Handle myHwi;
, t) L+ A  E3 f3 S: v) {) i        Error_Block eb;
8 I8 {& `" }6 C# [$ }/ V, P7 e( Y0 \4 Y- f; U" j
        Error_init(&eb);1 Z$ c) M; ?- _- U9 p
        Hwi_Params_init(&hwiParams);
. |6 h- B2 w# D        hwiParams.arg = (unsigned int)ad;8 L! K- @8 n( `* S2 y
        hwiParams.enableInt = FALSE;
* o) F" T( ]6 {" z. i8 m        hwiParams.eventId = SYS_INT_GPIO_B5INT;, I) E+ g. K# z; }# j8 O1 `0 Y$ i
        hwiParams.priority = 4;3 G5 B# @+ W) t" ]+ ~
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数9 b$ o& t0 p* o9 K  F! w
        if (myHwi == NULL) # |& M& }6 [* |% o3 s1 K- O
        LOG_FATAL("failed to create hwi");/ I+ e6 |0 i- F

, z1 G3 R& r6 k3 |: F* Q: Y2 n        /* enable both interrupts */
( R* z$ ~1 r2 }  @" {# `        Hwi_enableInterrupt(ad->irq_event);
4 M* B1 N' E  Y2 P$ ?8 P& e}9 [7 J6 {' A0 T8 {

0 y4 [& y! c( ~/ I. i6 K! ]% Y  ^
4 Y8 r4 ~  ]+ Q7 M4 R5 dstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {
8 q5 s- I/ E( P: W' S6 _* l        volatile unsigned int savePinMux = 0;! @* x& x5 l, F: c5 [
        //初始化5.11、5.9 、 5.5为GPIO口
& H4 x% M3 u: S& y        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));1 H9 P( P- \, n" u. U
" {+ `, |. q7 ~! w/ u
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);* S9 y2 m! l/ B$ {

, p' c  R2 D+ j# |( O0 }        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));2 d8 c' d( ^9 B3 \) g" P- Z8 a* u

# f3 T- \- ~4 o6 `$ i; Q        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);% C: I" c' e: Q6 i1 w

5 Q" o8 o5 F4 g4 I}
: G1 I; r6 R3 ?/ `, ]& t$ i; Z0 W3 g) o
- H# M4 y- G. ]: R' x8 N# _
static void ad7606_gpio_setup(ad7606 *ad) {
1 N# W2 p% j8 D6 C  e        /*Set the AD7606_PAR_BUSY to the input mode*/
$ q  d7 ], Y( p+ N+ R. V        //初始化5.11、5.9 、 5.5为中断口
. d- m* X) ~# X, O& g        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
. y  T6 K5 a2 ^1 |9 v1 q  J        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);* A$ m" {) f7 A" y1 y! P  [
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
" |( ^7 J+ c( L% K- _        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
4 ?) r3 ]* h5 @( [" X$ ^0 ?. Y        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
; F6 t6 E( P) C  |# H+ S        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);3 ]8 G& K0 O0 G  j. Z0 C6 a
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);) B3 K5 W) {6 v8 X! Q$ U+ w* I
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);& v; s5 p4 s- Y1 \# _
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);8 N# l1 `: U" H
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
& D! Z' b0 c% C/ j, C; m8 ~7 l8 B+ {        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
( N4 b0 {, s4 ^" U7 c& g
$ u9 f( K$ [  g# Q6 t1 O        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);: n1 L/ H! L  d% E4 c# @6 S
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);0 a! w" ^3 j- X1 e( ~, O2 U
        Task_sleep(1000);
* e% b+ ~" D( p/ I        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);# S! M6 G% C3 O" z/ V
        Task_sleep(1000);
. v2 V) G+ }9 F# B9 T8 w( `  b
5 `6 n6 _% x9 S4 F) G8 ?1 b: b        /*Set the AD7606_PAR_CONVST to output mode*// m" E) A8 Z- T& ~
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
5 a2 m2 p6 E% j: l        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
) W" ^* ~- f0 p. p
( ^( q6 R0 G, M) S: i. M' f        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);6 \8 ~+ d" B8 ^2 z- Z; u4 J" e
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
5 b0 _( y; A, f1 D5 m9 Y5 n4 n" ^/ l' |5 O: E1 B3 G; G2 d8 _
}% j# ~4 v; y- K- U+ c$ w
8 B6 O' l$ t, U9 b* B
$ w% J2 x+ {$ t& g; S- l
static void ad7606_busy_hwi(UArg ad_addr) {2 l/ g( f% |' R# c  ~! L$ T1 L+ V
7 `3 f  ]6 ]9 [* g5 Q6 l6 L
6 i3 a4 a; b* w. O" j5 ^, I
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
" K: M4 X( E7 A3 Y) l! ?        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
" O8 O" ?" O5 x3 p/ u% ?9 _" j! U' C3 X
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)( E$ Q* X& a; y  L1 m" G/ x
        {; j! x* U  D) g- x
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。8 `# Q* N$ [0 X' E/ `: N/ j
                cs_addr = SOC_EMIFA_CS5_ADDR ;9 @% w) ~* m. C) A0 j+ `! m
                internal = 0 ;
8 f1 O! f! Q+ t6 I  B                int_flag[0] = 1 ;: h% V0 X  i3 B# t) x
        }  H+ w; z' J+ C+ p; ^
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
; H; O9 f3 u) |# e) K1 z        {
; ?9 a- x2 l4 d: m8 N                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
$ |) m" X1 Z9 {- e' b* ?- U% J9 H                cs_addr = SOC_EMIFA_CS4_ADDR ;
7 o. O7 B; t" G                internal = 6 ;
+ u6 V1 j$ J! q& v: H                int_flag[1] = 1 ;
+ C' F( l( i, @+ k' X        }& Y  H' U: w' x6 @5 [
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)/ a; A0 \# v! j8 ]% \6 |2 f& Z9 @
        {
$ C  H+ V! F( y+ G9 N                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
' h" H  \- ]3 h8 F8 u                cs_addr = SOC_EMIFA_CS2_ADDR ;4 C  l; H  N% l" ?( c
                internal = 12 ;
1 m9 g' Z3 R, T2 G- \                int_flag[2] = 1 ;+ i3 ^& @5 `! B8 i2 h( l6 g
        }: p7 P4 W+ z4 a# H/ `( l
  
5 s' S4 g8 x& E+ I        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
1 q% _9 n9 H/ S       : G& V8 `2 c# c% q
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
) F5 Z3 I# e- \}
! c' O; q- y$ A5 u/ q; F5 Y3 @+ @
4 m+ f' U" D" ~' K" i8 z' I; k+ Y! D0 p: ^* Y
) Y& j9 F$ N% u6 }0 o+ [, ]% t
/ W- ?; g( u! j0 F7 t  d

本帖子中包含更多资源

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

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-12-15 05:33 , Processed in 0.038997 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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