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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:6 `6 I1 A: r! T0 P
#define AD7606_PAR_BUSY_GPIO_BANK        5
; n% m8 i* q8 @6 E3 m+ k#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT, Y' o, z8 e3 W; k. c9 F4 `
( Y$ {+ a9 V' P5 r: O  c- ]
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
/ g! p& @$ _$ _2 o! ^#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
0 U% j7 H( M; d* P! w#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.58 E* T% C3 d& ]) M5 o
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
9 o: o3 R9 t, X) A* n9 u( o/ s; U( l  E: M, `  s1 X
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)6 ^$ r; F. _8 l% y( Z
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)0 f+ U5 k/ a6 k0 f6 P
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)+ ^3 {6 T$ n0 |  |1 n/ A
; |' C  ]- c7 F/ Z

1 i5 k/ J2 h0 @% J- |8 j2 ]1 w4 P2 v$ Q7 o1 e* o; y$ o
static void ad7606_irq_setup(ad7606 *ad) {( u' ^' Y8 q7 T& l  v. n
        Hwi_Params hwiParams;
- `! t4 b1 d! e0 n% p9 w: V7 t& k: }        Hwi_Handle myHwi;
) B! E( F0 h8 w% R        Error_Block eb;$ a7 G) q% ^9 _' u$ a) F

9 L- G0 ]; A8 r/ @2 z        Error_init(&eb);
, D0 z) k' Q0 M1 G0 e5 G/ K- k        Hwi_Params_init(&hwiParams);
1 ]1 P1 y; g( b) v: n# R+ a        hwiParams.arg = (unsigned int)ad;
2 ^& m. A# C7 N: g* {. O8 _1 K3 u1 K        hwiParams.enableInt = FALSE;
+ _1 d; Z9 q$ s1 g        hwiParams.eventId = SYS_INT_GPIO_B5INT;5 I" B! H  ?0 l3 s/ R& K- ~
        hwiParams.priority = 4;2 x2 `+ y7 v" D, y! M3 c- Y
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
: F$ ?' }! m7 Z        if (myHwi == NULL) ) I; Z) M6 `3 t1 r
        LOG_FATAL("failed to create hwi");7 I8 y3 [! w( i& O/ @

  W" g1 m8 i1 v) A0 }        /* enable both interrupts */
9 \7 z( m  W0 L, C        Hwi_enableInterrupt(ad->irq_event);
0 V2 F6 K% ?: F}
) ~4 [' _& c: @- a2 y) v7 P) i1 M
( `+ R) T! g5 M( C& u
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {
! [# F# i  k' P8 ?/ G- T        volatile unsigned int savePinMux = 0;% A/ Z% S: {% m1 [9 @
        //初始化5.11、5.9 、 5.5为GPIO口' o" G1 i9 b$ q2 b% u$ m. O% u
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));- u( _+ E4 R) o6 n/ p' b4 Y, D$ C  d

( c* v4 r3 M# B! M# D1 W        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);) Q/ q# v6 Z# o. i# k9 E

9 p/ e; w8 q# 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));6 }8 |/ a' \: v. o9 ?! }/ t7 |2 @
2 O/ ?/ r" i. _8 D0 w
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);( G/ x- h4 }( Z& U
0 z7 t7 ~2 K; o  |& b/ J) T
}/ @; D+ x1 C+ A, ~9 L" l: D
' c8 ~3 {0 W4 l& L9 l
& s7 K: v" O7 \
static void ad7606_gpio_setup(ad7606 *ad) {
0 T4 _8 t- m6 ]# r) D5 i% `2 U        /*Set the AD7606_PAR_BUSY to the input mode*/
, p8 h( u$ Q% F8 s! w) H. C& L        //初始化5.11、5.9 、 5.5为中断口4 H5 Q" }, D5 d  l
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
. n/ }# G( \# u( P5 `8 I/ h        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);2 K( p$ g( u8 G  y  g/ h
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
% M; N7 x" Q4 R2 G7 V( V: D7 b5 H8 Q        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
+ t6 S# s1 U) E        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/6 R4 P+ {0 E9 x
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
1 S( t- e  z& o& ^" h& B' R        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);. w6 R& D0 j' g* |8 E  _; u6 D
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
  X3 c; z1 E& {& y9 `7 _) }& F        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);. o4 R  P. J4 J1 B
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
  o) U' Z8 o5 `        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);$ `) N- k' D0 K. O( {1 I) d
1 `- P& R& Z# d4 H; F+ I
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
+ C9 q) b3 U' ~& R2 P        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);; Y. x6 E, V" k
        Task_sleep(1000);
' B. d9 }# R9 {# D        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
& |3 Z( W* P0 D* S6 @! `- C        Task_sleep(1000);
0 @! W. f4 l* Y
; a" J7 r+ V$ z' U) ~% g. ^% m7 f        /*Set the AD7606_PAR_CONVST to output mode*/
- T8 ^( _, v+ y" ?: Z/ v        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
) r4 l, F0 @& G( M1 t' J        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);! B- J2 i/ Y0 u; l. k/ s
1 m! o" |) R+ u" ]
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);2 R7 `, a' C. x
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);; m; n! X/ [6 Q: I6 O. a9 X

' b! ^5 E1 U* e8 ~7 f, Y, W}! U+ r8 H8 j& l4 l

/ Z& h0 t' m% o! T' y8 t6 i8 e/ ]2 W0 Q9 h7 ~9 }4 a
static void ad7606_busy_hwi(UArg ad_addr) {
7 r! T. p8 U( J& t6 G
* H7 n: J- g/ f
  k; Z8 G! E$ ]8 U2 N. r( Q0 ]. _        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
# W0 g4 g- J2 {1 e5 K* N4 K# z  l+ d        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
  {! ~' }3 J* V* a$ W( U% n6 N+ {% D5 n7 \* f
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
/ `# u, s* D8 X$ J        {8 K2 f* |. s7 f1 ]/ ]1 D5 e5 a
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。/ C# l( V5 m. \9 o. A( v" Y0 O
                cs_addr = SOC_EMIFA_CS5_ADDR ;
% X' }1 g. ]/ y, o                internal = 0 ;
$ T2 G. G0 n5 }' j! m2 i0 n( R                int_flag[0] = 1 ;
5 S: I# A  \  n! _' M. \        }
( n! E& a$ o9 s        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)2 U5 a* m0 C5 L) E2 w( E6 O! ~
        {
& a( C6 k, f/ x+ m                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。) b' ]( F' j( j( Q. [6 m# \7 Q
                cs_addr = SOC_EMIFA_CS4_ADDR ;
" V0 j9 g7 B. B+ R7 a8 m                internal = 6 ;( O; F6 R" e' n$ }# V
                int_flag[1] = 1 ;
- m6 I- \+ I) t% U9 {        }
* i7 Q# ^" q1 e7 a$ H! N9 y7 V        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
4 N3 @, s+ r5 K# {* l; V& w! t        {
1 B# i. z1 |# }. `5 `. p                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
  O  V. b# f8 m& W9 f: D                cs_addr = SOC_EMIFA_CS2_ADDR ;
3 I: d7 U4 d( x& Z( {" C, j                internal = 12 ;
; `+ b* w7 Y* ?" n) ]$ S                int_flag[2] = 1 ;
/ k+ E8 h; P1 W        }
0 r5 A+ H+ T8 F  9 [% {% Y8 p3 T9 Q8 [
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);; p7 M5 W5 |3 U: u  f" Z! @
      
/ Q! X2 r" T9 Y/ e3 E        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);- g% j9 o8 H* p. x1 v
}+ L; [" C- B; b" `' O5 ~
$ I; f& h) j3 C  D

5 V1 @# h6 \, {9 O& C
" {4 L3 Z9 Z/ x" q0 O1 u
# L) w1 S# [4 P/ v

本帖子中包含更多资源

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

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-10-16 17:59 , Processed in 0.048552 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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