sysbios hwi 问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
$ o: s+ b0 g* Z7 a% x! ?#define AD7606_PAR_BUSY_GPIO_BANK        52 o, y- `( x# g& N) z2 ^
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
8 u: h9 g8 P$ y+ a7 p$ W) t, t7 j; z
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11/ M6 G% r& e, I) _* j2 x( X( i8 h
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9/ g  }- n6 {# Q) j2 X8 E
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5, U$ ]2 |: G0 R- H: h" s' b
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4): m! d) d5 B3 M( e2 [' h
3 S) [% S& Q5 E. I5 q
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)8 N- }2 A) b# V. J( `
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)0 M( G5 H9 |! _
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
5 U: g% G+ u  i: f* S8 i3 v2 _9 h( |/ x+ H6 A
& W+ }5 g4 \3 _: Z' l4 S) \* P
4 H( J9 j( {* k6 {
static void ad7606_irq_setup(ad7606 *ad) {
% p/ K) e5 F, L( O% C0 ^; ]        Hwi_Params hwiParams;
+ @' r& O! |" z& P. \        Hwi_Handle myHwi;8 d+ Z* [: ^) J- m
        Error_Block eb;6 |/ Q8 q; f+ n- D! _+ J

' Y# k; G2 x; K5 m        Error_init(&eb);
( j. e+ J$ `; `/ ~5 R, h        Hwi_Params_init(&hwiParams);
$ f2 {' ~8 n" X! w7 h. b        hwiParams.arg = (unsigned int)ad;
! F: j4 s, P5 @5 @; v# N        hwiParams.enableInt = FALSE;
1 [5 |2 }# G; H        hwiParams.eventId = SYS_INT_GPIO_B5INT;
- O! g! a, M2 _        hwiParams.priority = 4;
( y2 ~4 |: X9 f& T7 o        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
( ]8 ^7 I+ y% T) \/ _( }+ b        if (myHwi == NULL)
: x4 h' y4 s; o& I        LOG_FATAL("failed to create hwi");
  k) V* T7 Y+ t: C+ j
! o9 _/ \3 L! A4 n        /* enable both interrupts */: g) M8 X/ f+ k: R8 ], Y  N8 U
        Hwi_enableInterrupt(ad->irq_event);1 N* I4 W: G3 S6 k+ g
}/ u" D! b0 c% }/ M' K1 d& B

  ]% N6 G) Q- g' L  y' Y$ n! B( [* Z) ?5 K' [  r. [
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {
& p) m# \4 T! C7 O3 @& L        volatile unsigned int savePinMux = 0;
' k8 E1 N+ l- Y8 ?" K7 C" C- s        //初始化5.11、5.9 、 5.5为GPIO口
2 L5 n; }$ N/ Y- E        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));0 [" v7 P( U; L: [" i4 ?! J% G

1 ~/ h+ ]/ G1 E& U3 b7 J5 Y0 k        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
% x3 q$ n1 Y( `. b  x
# Y  }* p: {  A5 T        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));
* v4 i2 s2 p8 L- }# E6 o/ S& y5 V9 w& i! d6 ?- V
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
: Q0 d/ T/ e  t( y/ {" o& N8 }  n. ^6 @  U  B! }
}
* _0 A# A9 J' h) m* B1 J
( ?( g$ ]9 h2 I, {6 ?+ O" W1 b- w
4 C4 N; U+ p% U6 xstatic void ad7606_gpio_setup(ad7606 *ad) {: a: q/ {. z9 I- }
        /*Set the AD7606_PAR_BUSY to the input mode*/
; a$ J6 m4 e2 M: p        //初始化5.11、5.9 、 5.5为中断口
0 P2 ^" g' |/ S: b        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
/ G2 @$ n. n2 M9 Q. I# F) k5 n        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);$ U9 \7 c5 Q7 W2 A
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);# C& F7 H( w* _- c1 P5 s+ B  U( `
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);3 a& ]) C* V/ \. e. Q$ m
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
9 U! q/ N1 [: B1 U7 K( U0 |        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);) p" d" q2 M  B" P! U+ q+ i7 U
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);0 m  f/ b% I) J  {- U) c" E% L
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);% G  e4 g! ?: y9 Q' C9 N
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
, d+ l3 E9 F$ f" N# N        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
! G- B4 c8 K% m" m        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
* b( p* g) k  Y2 v, [
* m$ P9 V/ l# z' H/ \2 `" \$ M        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);6 `( q2 ]/ [4 v& N$ V
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);! M: n$ f3 y* {
        Task_sleep(1000);
) N, K) \$ t- J& }8 r# Q" r" R9 W! P        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
4 q. G* s5 u) a! p/ w3 @6 ]! Y        Task_sleep(1000);9 }6 U+ {' o. K

* D2 n2 D  y  C( x  `  G9 S1 a0 b5 p        /*Set the AD7606_PAR_CONVST to output mode*/3 W% P* i; V2 t6 H1 p( p) n
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);) U+ G8 Q# G7 |( h) q' a& p/ L9 z
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);4 ?3 @% s3 x( }$ N
# h% ~2 h( r( p( l% i! q% g
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
! [# |3 ^# H2 k; s7 F5 c        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
# S: u; H  u1 ^( P- M% G
% ?; w$ h. ?5 [5 i3 t/ k}
4 h  M- e. V4 E/ N; l1 Z% q" z! w' r  L. ?
* o( U+ K, H0 O. U6 ?$ G
static void ad7606_busy_hwi(UArg ad_addr) {5 m5 g; o& \% U0 G6 \! j
- R3 g- R) c+ B/ p  B/ r8 g  k
' n; D5 m5 }$ m! i
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/; N* w. [2 ?( B5 r! D
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。  T& `! r0 R. Y1 U8 N1 s! b

" `2 q+ w2 Z; ]6 [        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
1 x5 X, J* g3 Q1 _  C. u: A        {
; g* X# ]1 J: v9 ^# M( x                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。& G6 t! a' L; r! h
                cs_addr = SOC_EMIFA_CS5_ADDR ;
9 Z* E, \) m' |2 m                internal = 0 ;
1 r) q% j# W, T& S+ I8 k3 f( ^                int_flag[0] = 1 ;4 t( O/ q. p0 f, G- I4 H# y
        }$ S/ A3 E( L5 C3 S2 d
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
1 l8 ^' |6 w. B. S- A        {( l, ~5 i4 D" P2 A, d/ m
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。8 g: }8 [! h4 G/ P* G' K) I
                cs_addr = SOC_EMIFA_CS4_ADDR ;  \% ?5 ]+ n# O  }% M- i  X
                internal = 6 ;2 w0 x0 X* w5 y
                int_flag[1] = 1 ;3 t) K0 c) J3 f/ A2 C$ H$ ~: W1 w5 S
        }/ `' N+ F( z+ Y* ^2 Z6 p# P
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)7 T4 A, R! w# K& ^9 V% w
        {# c( l) ~/ D* F2 t2 O4 H% y
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
* h- t3 V  c8 m0 n6 ^+ K                cs_addr = SOC_EMIFA_CS2_ADDR ;
" O3 v1 P& e# m( W, m4 w& i9 r                internal = 12 ;
: w) |6 ?# Z* Z4 V- U9 O4 W! A# ]                int_flag[2] = 1 ;1 f: J2 ]# J5 ?: _+ s9 N# A/ Q/ I
        }
: A4 g+ R; \4 E( e4 E) u, r  + l5 Q- ?$ v) g6 [* `2 H
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
+ L, Q0 h7 O0 E) u3 ~, S" x       ; q: ?; D% Z3 v2 c0 @0 s
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);) j6 M, s+ L, Y7 F6 y
}6 ]5 z- |- I5 `9 S  V5 T' W  O/ G

2 |( l7 \- f$ {9 {
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图" Z( g, Q9 C# b% M9 M; e/ H
2 u' P3 n" I9 C3 c$ X8 z  e5 G4 A

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-1-31 06:23 , Processed in 0.043063 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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