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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
# G6 F& g6 `2 @! y; W8 P% A#define AD7606_PAR_BUSY_GPIO_BANK        5
( R8 z! g7 u4 U) W#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
( Q8 P- o# t, c/ R
. D+ ~" v4 T4 `: o+ T4 K#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
  i2 Q% J9 E+ e; m5 f& a* p$ i8 X#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9% @. z* o* f9 ~
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5( R3 u. |6 k( m, D
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
  M0 C: c5 h; e+ e# o8 ]# M: ^/ R8 ?5 D* ^6 T  \. l
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
0 s2 W8 W9 F2 }9 J#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)# q! E( A5 v  [5 i7 l- e0 f
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
$ h0 X: U2 \1 [2 l- `5 S( ^( D0 F; X  H+ o
+ ]5 l2 @2 l; \+ M: b1 U" @
* j9 m& B( U. B8 ~( _  d
static void ad7606_irq_setup(ad7606 *ad) {; [+ D7 P" I, P
        Hwi_Params hwiParams;
- Q0 c  E( e- m* E        Hwi_Handle myHwi;
# n0 s( h2 {5 `* I, x# C        Error_Block eb;
0 f$ P$ b- s$ V& T& j) I6 Q
: {1 [* {7 z5 n& H" F        Error_init(&eb);
, J! Q" a" L: w' S' i+ O" H        Hwi_Params_init(&hwiParams);% L) p0 v. q8 l  B
        hwiParams.arg = (unsigned int)ad;6 N. O+ y% X- v# F
        hwiParams.enableInt = FALSE;* I( N5 q+ p/ q+ o* }
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
* D% ^- F1 Y0 V+ S        hwiParams.priority = 4;
* e) l9 ~5 e7 J; H        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数2 J5 \* v% W" D5 L  u
        if (myHwi == NULL)
5 `; h: u7 o! W  P        LOG_FATAL("failed to create hwi");* e  O- s8 I9 i6 z& W0 D
2 D6 N: s! E7 t9 K) c' A" T
        /* enable both interrupts */. w0 _' t' C' j8 v5 d
        Hwi_enableInterrupt(ad->irq_event);$ b" P1 n6 h8 c9 \( e) ?3 A
}3 A0 _6 _, }7 v
! }" w) L2 c3 b6 ^
$ x" T9 `. Y  E$ }$ ]9 O
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {/ d, i& h' Z8 y) ?# R
        volatile unsigned int savePinMux = 0;) j& k$ W0 W) i" p/ \1 Z/ R$ R
        //初始化5.11、5.9 、 5.5为GPIO口
$ [; S% A4 Y6 j- }) P: c/ v6 _        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));. P6 k3 O; F. W; M- E

6 y* c1 C% r2 T0 I8 H- C' T9 c        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);5 L  X+ @% u: Q1 f8 _+ Y
" T7 Q& _# v4 z4 m8 u$ g4 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 X) Y9 y% L) S& Y
* ~/ Z6 X% P; T* E! f8 c        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);! j% b) I! `6 B7 U0 h( t. N
6 `' a; U) o; k) x, F2 h9 Q* K0 X; {
}
' j6 e3 b$ p( ]0 q9 a  C# i( \
& K: \. o! C# F' m' l
2 V3 A1 j+ ?! }" Kstatic void ad7606_gpio_setup(ad7606 *ad) {' a- B6 ~5 s7 l- S6 v' e+ l
        /*Set the AD7606_PAR_BUSY to the input mode*/0 W; h2 _+ `: h3 }" O! N
        //初始化5.11、5.9 、 5.5为中断口* U, [* `8 b" J/ f7 x5 a$ W& i
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);0 Z3 ~% Y( A( Y0 k' F2 \" I
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
3 U1 I( D: j4 E+ Q, z: g        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
6 J5 X9 {3 ]' O$ U, {2 W        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);( R& J4 Q! g6 Q0 I4 F! g  n
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/" ~/ L0 G1 F# c7 y% W2 ?
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
0 W- N6 A5 C7 n, w, ]. Q        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
# G! R. N/ h, l        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);- o& u! a; G$ `
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
$ F5 C" |5 j9 B4 w$ E( [        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
# q7 n" S2 D: g" g! H" h! I; g        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
' b9 }, h3 X/ ?5 C
6 A8 F6 [' _* e9 z6 n# x        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
0 L: X; O8 a( O, S4 v' V1 i8 l        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);+ c, \( Z& [( d
        Task_sleep(1000);
# M: }& ^( @6 G) ^2 E7 b        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
9 j2 k  r) F) C: J6 q: i        Task_sleep(1000);
2 j, F! b! z( t* c9 {
! J" a( }3 p; }. y  F( ~( v% _        /*Set the AD7606_PAR_CONVST to output mode*/
2 t7 g1 e9 m/ D4 F( m6 L" Q        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
9 P$ `! H+ Z# c4 ?# ?: A0 Y        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);+ B, Q0 \  A; t: V" r

- M+ k5 s) a3 a4 N! b2 |; J2 r        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
: }9 B; K( i  q6 f        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
5 v( I) @2 |4 [! V* ]
+ N7 a+ u0 z5 d1 u) i  q7 a1 O* a6 m$ r}& m8 [2 t; D/ }
' a2 k. D5 D5 p) D* u5 ?, D$ I

  |) s9 c7 V5 Sstatic void ad7606_busy_hwi(UArg ad_addr) {2 o0 p: g9 Y0 O. c9 D+ G

. o" |: n( q! f9 {8 K( f2 o
% l9 S4 P( e2 q        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
7 Y6 w- U5 f& \; l1 G  e        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。% g& O& B% N% C/ q
$ X3 ^! x5 i7 T( ]  _0 i! C
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)$ V5 Y; Y- i9 u3 l/ |* H: ]" N
        {" a; B2 B# U- i9 s
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。- E, n/ w) s5 w2 l& a
                cs_addr = SOC_EMIFA_CS5_ADDR ;) v7 c0 d  v2 Z& i$ ~
                internal = 0 ;
4 T- w( o5 h9 |- f3 \                int_flag[0] = 1 ;0 O- l8 \, n$ j; j
        }/ ]3 L0 z/ J  _$ P% X7 d
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
: `6 E9 ^; p5 A5 {        {) b0 t! C- Z; W, q: V
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
0 I9 v$ P; q; D) c& E) T                cs_addr = SOC_EMIFA_CS4_ADDR ;
3 O, t3 h% k8 R4 s                internal = 6 ;, X$ [! D7 d% k8 Z3 i
                int_flag[1] = 1 ;! b! X$ q; Q/ G0 C7 x
        }% c7 E* f3 j. R9 f! t
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
3 o" E: y* S" o9 _& p  @0 k        {4 J' J. }9 k# h' x
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
. R3 |0 E! D  C% V5 }                cs_addr = SOC_EMIFA_CS2_ADDR ;
- L# X2 F+ e5 \                internal = 12 ;+ N' e9 L, i1 s$ K
                int_flag[2] = 1 ;3 |$ ~9 v& H/ ]% h
        }( G: b0 A" _+ n' m) t
  5 X0 `0 `) i' _, b) h: V  F; Z; `
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);+ w5 a' d$ n8 P
       : j, ?% I" b3 K- |3 D2 V. T
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);- }% c+ _% Z* X& h* q- I. G7 k
}
* w$ L% l9 e; h2 c0 M7 b% r
+ d+ K- N' U+ n9 K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图- y8 b* g: [8 g: A5 w

3 V9 G6 v9 m$ A" n

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-17 08:36 , Processed in 0.037536 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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