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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:6 x$ d5 w$ ^5 j# l. a4 @- j2 N' w
#define AD7606_PAR_BUSY_GPIO_BANK        5
8 |1 J" c" w0 Q' ]#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT* @5 }/ _1 j, b; Q3 z* Z' ~
# ~! h9 v  J9 c; s2 R, B3 {
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.110 Q; y3 r1 l/ q: v( S8 H5 B
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9: v8 t3 O8 D7 \- \" U' m: e; P9 k
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
0 j0 N7 V! Y! a0 e2 c8 F#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
9 |' w4 L. i' c0 C: R! ^9 O4 i9 L( e: z6 N& {2 n& W* G, u: W
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1). i, C# t8 X  a6 M) \1 q! e8 `
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)0 ^8 n( W( u9 n* V! F3 M% X3 x
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)# P: q( E0 l! m! a% E* A& l

1 K) m* V  o  H9 b4 G6 M
( S3 R7 M9 \5 c' T! h
. ^" D; d0 m" k( hstatic void ad7606_irq_setup(ad7606 *ad) {, [; @# |- N3 Z& \
        Hwi_Params hwiParams;! F- ]2 j  J9 o
        Hwi_Handle myHwi;
  Y9 j+ m# p2 e        Error_Block eb;
5 t( z5 T7 E. V8 v4 a# `3 ?* J. A3 M5 L; ^- t  T$ |
        Error_init(&eb);' ~  M9 g7 {7 t8 b/ R
        Hwi_Params_init(&hwiParams);  T, P+ e$ {% L; m0 H' U# E
        hwiParams.arg = (unsigned int)ad;, a# @! E+ |! I* d7 S2 D
        hwiParams.enableInt = FALSE;2 E8 ?8 w4 a( ~5 M
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
0 c/ L+ N3 c0 m8 a: u. m        hwiParams.priority = 4;+ [/ N/ r4 A/ a: E2 S! o) e
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数. R8 ~9 g( v) f8 q. d
        if (myHwi == NULL)
* P- K" i% E9 E$ W  j9 i        LOG_FATAL("failed to create hwi");/ n4 \& x7 K# h; m0 [$ t! Y" o, \
3 Z; J! }" }8 G) ?2 S7 s1 ~
        /* enable both interrupts */$ P* o6 N$ g( t5 U* b
        Hwi_enableInterrupt(ad->irq_event);& ^( q- A! U8 y  P* |
}
/ f) N; I& i7 n/ I: h( Y, D
  d" `! p/ Z$ O9 D7 `; C+ O2 H% d) {9 g# f% A, o
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {% x! l9 E4 w8 g! t
        volatile unsigned int savePinMux = 0;3 T( K5 _9 J" O+ Y9 v. N
        //初始化5.11、5.9 、 5.5为GPIO口3 v2 Q7 u4 W  k3 u! R0 P0 r
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));$ t4 e6 F  ^1 _- \  J: j: G* j
: V" H, A$ ^, N
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
$ W. L6 c, f: T3 G
& S  o; r0 n( u8 l7 C. X        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));
5 V3 u$ r) X- x3 ~6 m; c) ~. Y! a
! u7 d) W- [7 A( I- f* b        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
. {4 B# [, N- [6 R1 @+ q3 K) B. f2 V6 J: A: Q  p/ v! m3 j
}
& C) w7 z" h; X- d6 x* M' K2 B. m7 e0 g2 ~; z

* u1 q9 P: T  U9 fstatic void ad7606_gpio_setup(ad7606 *ad) {/ e1 n' Q. ~& Y
        /*Set the AD7606_PAR_BUSY to the input mode*/
# z3 G1 k. O+ t% O$ V1 ?8 `" j        //初始化5.11、5.9 、 5.5为中断口
: j; N$ c- V2 |9 R+ Y. g! |' f" u' B. i        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
0 l, u. w# @7 ~9 R) v5 v4 S        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);7 C- E2 o: I, l, N, o/ m
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);1 l7 [/ E+ S5 R2 z* y/ n: N$ F
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);9 C; L1 z. A/ {1 J, t/ S- C9 x* _
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/, X1 M! O. `( l$ b# V0 `2 \, i
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
  e3 e5 L7 I8 ]$ f& C* l5 j        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);2 p+ r3 t, b% G
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);& E& C6 E( I3 P! Q: C+ y
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
, a2 f' J  J; l( l        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
- U6 [9 X6 n/ P- l        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
) K1 d- o. V7 U$ r3 i/ A
. y9 v; D5 r6 `. \" L        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);2 h; t" ], Z& {& @# |) O4 a$ @
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
6 u8 [1 k  A4 n: \3 Y        Task_sleep(1000);- N, H' e$ B1 N- F$ v) j% z
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);4 K4 ?) k0 f# W+ m  o2 m' q
        Task_sleep(1000);
3 Z, c/ R  E6 w7 h
' ]) D+ X, ?2 q        /*Set the AD7606_PAR_CONVST to output mode*/
9 n. i1 f+ ?4 `        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
; s2 q# |7 I# X* k        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
$ }7 b# H3 T: S
3 A3 {9 W% v( f" E. w3 q        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
# u9 `5 A+ d: |( b3 |        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
/ O% j9 U# t- }# C% C
$ L5 x0 a  a: k1 n; @. j, b& }1 U}
/ [2 C: @4 h' x2 X) [  C2 I$ J( r' C
6 {. C+ w% h6 j0 H; H2 C  z" S' K; Q% a
static void ad7606_busy_hwi(UArg ad_addr) {' I4 k( ]" j! f$ _, r$ K& B

( \; S; ]# b" B" L# f
) o/ V' e# Q2 k9 w& d) q/ A! c        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
* e. E/ |, V5 P# R! @1 }5 V        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
4 @$ x6 C2 y3 j* `0 s$ P$ U* p2 }8 P
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
* _! a8 B3 q6 ?- }3 N, Y) ~        {0 R1 O- J5 E/ z( k- L
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。0 f" x/ S8 e1 E( A( v8 d
                cs_addr = SOC_EMIFA_CS5_ADDR ;
: U7 F3 ~5 F. |                internal = 0 ;
# S; `0 l( _1 K                int_flag[0] = 1 ;
& `, y3 U( [1 g        }
" i  j: \1 P2 }1 o5 q, p        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)2 ~. ~" I7 G% T1 J. K
        {
3 A8 d2 N( ~' S/ _) R$ l/ Z                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。/ {* I1 p+ P* ^" E1 [* [
                cs_addr = SOC_EMIFA_CS4_ADDR ;
6 s) d4 S5 p# K9 r" w) p) @                internal = 6 ;3 U+ I% k/ ], }/ S) u
                int_flag[1] = 1 ;1 Q3 X+ m, M+ x( @
        }
9 }9 R$ p! Z7 ~0 l/ |  U- Z% c9 i2 `        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
9 d! L9 E6 U/ v9 }+ p        {
- }- g# \2 {! n- P% g! S                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
1 a, q9 E+ U, \  i% [                cs_addr = SOC_EMIFA_CS2_ADDR ;2 a0 @+ [4 X5 L6 S. r! {4 `
                internal = 12 ;
) n8 [& w, [  r* @# f3 N4 J                int_flag[2] = 1 ;
$ j8 |# }% U+ q- }3 U! C  V        }
; e2 a/ P  X  s8 Y. T, ?  
1 M0 U6 j" M/ N  F$ A        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);1 U# ^6 \- \8 `- n& ?
      
  E  J1 m1 j/ ^5 h" A1 R6 j4 l" a4 A        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);, q0 a) [$ C# s# V! E9 K" F3 N' m. x
}  Q* o6 W! M4 A1 ~

+ e8 q0 O: E3 q! j
+ T- p' T- \4 T# ]: u/ Y+ o2 e" m( o3 K* `$ s

9 U! B. @7 V2 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, 2025-10-16 22:12 , Processed in 0.038728 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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