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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:; S9 r' v7 i6 _* C9 J1 s
#define AD7606_PAR_BUSY_GPIO_BANK        5- e3 l/ Z3 x$ ~
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
( A7 @& C- w. n" J7 P
- C% c. O. W" B7 A& s  w% }#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.110 H9 s2 @; {9 E1 p, r0 Q' Z$ Q
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
/ s; {1 y1 i; }; }9 m& K0 j$ `#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5$ G; [/ f" P8 D
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
' |" L& o8 @, E& h7 [2 b3 s$ h  n+ y( R- C6 B7 u
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
2 |7 E6 F& x" g8 Q7 ^#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)% ]' q5 H2 i3 t0 M! |
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)3 e' P9 {# ^: }
6 d+ \6 K! C( @; J2 n/ i2 }
4 @( [0 p) W  ~, |. `3 \

) \3 a7 K% D8 J4 y4 o3 s- ustatic void ad7606_irq_setup(ad7606 *ad) {; t- s. l# i4 Q" h# ~/ O( b2 F
        Hwi_Params hwiParams;& i1 _; l5 a" K7 N0 \8 N
        Hwi_Handle myHwi;
! M9 L8 ]+ [1 m$ C8 Y0 G" N        Error_Block eb;5 \! g; a% D2 ^3 n5 M9 a9 y

8 u8 p( K7 ?9 }+ a! M; x3 P        Error_init(&eb);
+ g. N! f* c0 l. `& P, m3 N( _        Hwi_Params_init(&hwiParams);
& z, P1 m# H" W' c) W        hwiParams.arg = (unsigned int)ad;) ]# ?7 Y9 I1 a( P- W) I1 r# C
        hwiParams.enableInt = FALSE;) f, @5 i' H+ T
        hwiParams.eventId = SYS_INT_GPIO_B5INT;0 Z4 l3 I5 t( ~0 ^% G) j8 X) {8 y* A
        hwiParams.priority = 4;
" Y: l  `6 z+ H        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数: {7 W7 W6 s6 M: J' u$ ]+ r
        if (myHwi == NULL)
; Q* D* C8 B) j; \        LOG_FATAL("failed to create hwi");# D- |5 P8 A) c, \4 Q
* L% o& i! i$ w9 h5 z! t
        /* enable both interrupts */
  A# ?& @" }+ e1 o        Hwi_enableInterrupt(ad->irq_event);
1 B& G3 B0 G$ U4 T, L+ H% B& w: e}  g) N8 E7 W7 a
2 M+ V2 X2 ?$ h' z" q* F
2 _, `, Q9 a0 `
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {/ \* Q; D- `! W0 ]
        volatile unsigned int savePinMux = 0;6 ?8 l7 {& H) r, @) \1 G  R
        //初始化5.11、5.9 、 5.5为GPIO口
% f# \( q$ G* ^9 U) u% o        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
" Y1 `; {# ^7 S# z& u, h& u* K6 c" j& O7 s. x
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);8 u/ a3 U% ]6 n

: F+ t, P1 I; _. U. y0 |' ^5 Z        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));4 S' h- ?) Z3 {6 d: o
' @: s: ]  U% G  P1 }* S# B" m, `
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);6 z& Z5 m5 V; G; e: u' E1 a+ L* K

6 h% X* E. Q* k  i) ^" r7 s# ^- P}
- ]$ H2 A, c& o% K8 H! n  G, C& U! V; s1 ]/ Z

& a1 [& s  Z7 y6 _. r7 d4 Jstatic void ad7606_gpio_setup(ad7606 *ad) {
" F/ H0 Z5 J' k+ E2 w) ]        /*Set the AD7606_PAR_BUSY to the input mode*/
- \  F) B3 \( U        //初始化5.11、5.9 、 5.5为中断口; a# V$ W1 q# [1 W9 Q. \  o! A
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);0 L# Q" y& V4 K. }! |2 P: r
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);+ q! A; y3 b. y: c, H) J6 Y
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);, p* y% M$ k& v' e: L
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
: U/ K) I) [3 t. t( |% {        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/, E; x8 T9 {* X, V9 X% V( m
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);' a# `( E0 j9 c1 T1 J
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
  L' e! r" B3 u+ E- p        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);4 @0 v( d" d' s* p# u7 k
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
7 U3 ]) K+ A0 r+ W/ A+ H+ p        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/: \- J* k6 q: j3 L  R# ]
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);. L1 k  I8 l1 v  B3 ^

: C- g" X/ r- K* G! A9 @1 o6 E        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);% D  O! ~* `0 \' r( A
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
7 `8 o" u' [+ t! J% t1 E; O/ F* b0 @        Task_sleep(1000);# |  J" K3 K( S0 @6 X9 w
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
" `" I$ w; R  y' U5 J7 [        Task_sleep(1000);5 x) v1 [+ y" p9 h) p
0 C/ u! {( N$ f* q6 D+ J& q, q
        /*Set the AD7606_PAR_CONVST to output mode*/
* p5 Y# f/ ]. U3 y* i        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
+ p) M) Z* `5 v* G9 |0 ^        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
8 F) B" ~5 d/ W/ [; k/ L" k% n! x
% \/ ^; u! @: I" s        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);3 Z: W6 I& l$ ^' L6 a% j
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);: }3 w, |! L/ @7 D% X1 u
" L5 `/ H6 P, I, g3 _/ }. j
}5 b2 S* c1 u$ \( |/ N# y
0 @, K2 s% C2 ]3 D

! Z: l0 I9 |( ~. `9 hstatic void ad7606_busy_hwi(UArg ad_addr) {3 ]) u, ^6 y1 R' p; i' a# Y* _" [
: p8 t' d* l5 k0 U+ g- i
& Z' u3 ~, _. X1 `' A: ?2 v9 r1 a
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
) K' w& Q  d: j7 l        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。. ?' q1 Z* J) s$ V8 q, z; A) ]
: K2 ~% L3 \9 U6 Z
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND): c/ I- y+ J, O6 a
        {; r8 r' U& e& K  [' r& c. Q7 |
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
2 S- K; {: @, b! @$ Q/ s3 `                cs_addr = SOC_EMIFA_CS5_ADDR ;
# \! k6 S$ v$ n" M                internal = 0 ;
! e2 e" Y: W/ J' a) I9 u4 _                int_flag[0] = 1 ;
) S+ @( H7 i# s7 {  U- o9 G, t        }
. r+ N9 q# ~" D        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND), M% v) r8 u4 u1 f, g/ D5 v0 `
        {
" v3 c! R# ^0 V* L' i( w                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
; J3 ?3 c5 X! r0 r6 T  ^( ~2 z                cs_addr = SOC_EMIFA_CS4_ADDR ;
: l8 E1 O1 `: E: b- l                internal = 6 ;
* x) R& l5 j8 z7 R) Q. I                int_flag[1] = 1 ;, Y: H+ w+ u0 \6 P$ m* B
        }9 y" H- G# w$ d$ ?  _5 v7 O. ]$ `
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)) U; B7 x# |- t1 `" y
        {
' i: e1 r; M0 _' I                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。- ]- ~0 [& X1 p
                cs_addr = SOC_EMIFA_CS2_ADDR ;4 N& a2 u3 k' R7 S4 R( ^
                internal = 12 ;
( i' S8 ?' W( J! l7 b3 {4 ~                int_flag[2] = 1 ;
9 L0 R) ?- P: ], h9 F, e        }
8 m; u* \# {& n2 ^4 H; b  
& p: \3 \# t$ Y( I3 E" c        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
) {9 }9 o  c. q5 m8 Z0 S" Y# d      
) ~1 f1 g1 y2 n  v        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
- H) h7 [  U1 O6 e+ X0 s4 Y# X( D1 D}
) }; S* r( k5 w6 T, n0 |. |* O- w  `4 U' |, z) u( ^

8 _; j8 I6 V7 \) X2 U* |
! z+ J$ D, m: Y5 {
+ y! b- h9 G: X! o* M4 l7 `) z' T

本帖子中包含更多资源

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

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 23:26 , Processed in 0.038741 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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