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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:) F  \0 j: @' K2 U- i" e0 v1 u7 A
#define AD7606_PAR_BUSY_GPIO_BANK        54 s6 G# V, H! p4 _
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT# x' y! O; v* u% D0 O

, _2 }7 L5 S! b& a, V2 k#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
' |: O2 x0 M& n6 c/ ~+ E5 x0 {& @#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.92 J' G! X3 c$ f( N. z+ I
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
  M4 e9 J( A+ C#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
# y3 f- o& _5 h" p" j+ a$ h2 P/ X5 R2 T) q8 G6 |3 l8 x
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)- u9 X' c2 P: \0 d
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)/ U/ T0 @) n# N; U2 b
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
0 {* V" F* o: r- ?# ?+ @" I  }1 s0 g# f0 H8 p, Q; b& X

4 `6 |3 H0 |7 m
9 U% ?0 H# s) H9 A5 Wstatic void ad7606_irq_setup(ad7606 *ad) {, t4 n7 p. `& a
        Hwi_Params hwiParams;
# U0 Z3 b# F, g6 D2 p- Y8 v        Hwi_Handle myHwi;
' }& _, I( d2 S0 a4 M" }2 e        Error_Block eb;
; @& s! s( a1 X) @1 ?( j0 u
2 M) P5 c7 g) v' ^: }        Error_init(&eb);
% _/ `1 d/ @' U9 \        Hwi_Params_init(&hwiParams);
2 f! f/ L$ e( w8 K/ C+ Q        hwiParams.arg = (unsigned int)ad;
! k" D- Y( ~  A6 h        hwiParams.enableInt = FALSE;
& l# [6 \% x9 Q  U' h* @& B) I        hwiParams.eventId = SYS_INT_GPIO_B5INT;4 C1 O: w8 ?, w4 `+ r" N- _$ @! ~
        hwiParams.priority = 4;
. ]2 V) Y7 c3 x% _        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
. J9 V) I) p7 d0 n        if (myHwi == NULL)
$ K* R! K% f7 w5 j6 ?9 R        LOG_FATAL("failed to create hwi");
! ~  _/ W* M; {! Z! m  w
! U' [/ h- z6 N. n3 c        /* enable both interrupts */
$ k6 C1 x1 U, }; T/ W! ~5 P        Hwi_enableInterrupt(ad->irq_event);
9 s8 I8 P5 |' _' U: @) I; D6 F' W8 C}* E; C* |1 ?! _. ?
. S7 D, L8 ]" F& p% r0 X

- p' i5 a  z$ s* c4 Fstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {
  z( T# B1 a" K( K9 ~% L# d' Q" }        volatile unsigned int savePinMux = 0;0 [! g$ V/ _0 k2 P, w2 V
        //初始化5.11、5.9 、 5.5为GPIO口
( O) S. ^  z$ s9 r8 y$ }2 @        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
6 t1 v5 U9 m: T; S! \+ u2 Z% ^8 g
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);7 b# C- Z1 ?* R  Q9 h& g; U0 `

5 e6 [7 I7 B, }3 \8 d        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));
. B$ I+ a" {& n( q3 L9 d; N8 ^
1 A+ W2 F- k6 E0 P* H# Z% D        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);7 C- T. C/ H: i6 _. G; U
$ h' j6 r5 C8 S
}" v6 V6 {- T* e6 J* _% i; |. H) F
" a( T: K5 s6 `6 U

1 d, U3 w. a; D+ k. hstatic void ad7606_gpio_setup(ad7606 *ad) {
# _: Y$ _; G) D" l6 F        /*Set the AD7606_PAR_BUSY to the input mode*/& o# G; q; T/ ?: x
        //初始化5.11、5.9 、 5.5为中断口) C2 S. t# y( h8 t
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
. O# F, W. x/ P        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);$ u( w3 f/ ~8 c' r% f! ?4 z
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
6 [6 N3 k& t3 x! C        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);  c% N$ Q' d$ G+ r
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/" C& V1 e0 ^5 [# A' l
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);; F- x3 {( O8 F- T/ p! ~# Z% |
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
3 `' z! z9 c, ^& n4 h& y        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);6 R3 H1 g: L7 k' x9 ]
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);6 c$ W: s" U& i8 `2 T
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
/ M! Q' z- l+ e8 ^' m1 A1 Y& Y0 U        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
6 K1 p2 E! J* h" C5 o. W
6 [) [4 j% L- `6 F; u0 Y        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
+ ~: K) U7 l6 e. X0 C, o        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
$ t. f6 k' y3 ~1 v0 J9 {1 V        Task_sleep(1000);
$ e' O5 |/ U1 M. U- j/ r  R7 z        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
- B1 v% J& [; r) A7 c! Z# s, W        Task_sleep(1000);
& d( G0 \* Z4 ?' _2 Q) ?' R1 ]) t6 X0 d6 A% |  E. N2 \, h
        /*Set the AD7606_PAR_CONVST to output mode*/# A: K8 e( o0 d1 z
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);! H2 L- Y0 l! R; g! r$ O* H
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
) q) t/ }+ a4 ]  A2 @& Z
6 j- ~" m, F4 L: l! ]( h# B! t        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
  e: @# j$ D' @8 ]        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);6 f& r5 \. R1 E$ f& m* S6 V

! ]' _$ k  m9 R  H9 D" E& ~}. v( y% M, D8 F6 p2 W
) e+ g; ^7 |% q& X6 P# d& I

. g; O7 v. l2 @) wstatic void ad7606_busy_hwi(UArg ad_addr) {# R: y( U  L9 Q8 p6 r. z' O$ c

4 ^! Z/ c# ]- K  O7 `) k
/ N9 i$ `; F$ u) b* U: s        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/; r0 D  X6 y6 y. X( n
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。. L+ U- X5 G$ t4 W5 Q4 m- L
) J, [! e; N  h3 Q8 R1 A
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND). x. u6 ]" V4 R' g. e, v
        {; ?) A1 D: c9 d% K' h
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
' W% {6 o8 N4 ]4 N                cs_addr = SOC_EMIFA_CS5_ADDR ;! K! m: L/ p, X6 o- w/ ^
                internal = 0 ;
1 V0 X1 |3 c4 \8 [                int_flag[0] = 1 ;
/ H# D4 @: x9 I% X$ n9 \8 `0 {  I        }
# ^) n7 E3 M9 s& O        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)3 e# z& R0 l$ m1 C; z
        {: J, E- c7 ^6 Z
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。7 v% L* b/ v7 C1 Q$ w
                cs_addr = SOC_EMIFA_CS4_ADDR ;# s' B! k7 j9 a) w- U0 S
                internal = 6 ;
/ w+ L/ J+ I$ W" @3 X. ?                int_flag[1] = 1 ;8 ^' L) i: e( b) c' P
        }+ B8 ]& _( r/ Q8 D0 s
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
( Q7 M5 r; {; x3 A: H9 \0 l+ E        {
- A/ _) J5 Q! D) ~                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
9 }6 K3 S7 P& X2 E                cs_addr = SOC_EMIFA_CS2_ADDR ;6 [- b+ _( @- c+ }2 D) i% i, O7 O0 X
                internal = 12 ;9 t0 x' x5 W! o2 T0 z: K
                int_flag[2] = 1 ;
7 [  j4 A: J$ ]7 ]$ U        }
, _/ r0 _/ j0 C1 x1 [" e6 q" X  ' g' @  E  ~+ y3 J9 \6 `% p
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
* h2 V6 P: v. u8 h3 p; K& L* V+ w      
, d. ]' l/ n. Y        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
9 ~7 h: h3 v5 S  R5 D/ k' e}
- c9 G6 ?; e  f* E* E# h7 }3 [9 p

4 H0 W$ g% s! Q5 h( K
# ]& a, O6 z! S2 t- A
# N9 p  T$ u. W1 z9 A1 N

本帖子中包含更多资源

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

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-16 03:46 , Processed in 0.039787 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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