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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:$ X4 E9 M- K; C  c1 v; {, Y, b" H
#define AD7606_PAR_BUSY_GPIO_BANK        5
: {5 u  J6 j4 M#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT1 A% v" |" L7 C+ X# @
. |8 s3 Q( n0 J; V( `1 p
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
- U8 h$ s& ~3 y#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
- X8 C, A2 U! \8 ?. p) A3 `( L#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.54 U; @0 z  ^0 `6 q# m) B
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
9 S+ L# q6 h9 E7 ]6 j7 g2 H9 ^
$ K* p: J* Y0 D, @#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)5 Z+ q+ U5 j% x2 `7 ^, l) c  Z/ J
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
% K! D  f; p6 Q2 F5 @0 u#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)6 [: I2 u, y+ \5 O
% [0 E" Y: q6 F) ^4 Y. M
& `/ }; r/ ?! J4 u

+ {; b7 ]$ A: S& c- F7 jstatic void ad7606_irq_setup(ad7606 *ad) {
4 y0 }6 S! f& n+ l8 A4 `7 \        Hwi_Params hwiParams;
, b* P5 g: B; b6 v4 a) o/ W        Hwi_Handle myHwi;
5 w0 t: e/ c$ @7 d* M/ Q$ H        Error_Block eb;
+ P9 r' Y3 [# B& j
4 S  o, v4 {4 T: x/ o* H9 ]2 Z        Error_init(&eb);7 X( P/ p) }" ~$ P/ \+ p
        Hwi_Params_init(&hwiParams);
- i6 ]3 m0 X6 V* z8 D        hwiParams.arg = (unsigned int)ad;
- k1 p6 P6 l) t3 d3 h* N3 X  K        hwiParams.enableInt = FALSE;
) o6 Q% Q( e$ @. l2 {: B( W        hwiParams.eventId = SYS_INT_GPIO_B5INT;
2 x5 M$ s$ f+ ~2 O& Z        hwiParams.priority = 4;
$ G+ G3 W( f; l' ]9 W- b# N        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数* K" k5 D. B3 S+ l- [5 r1 b  s
        if (myHwi == NULL)
+ U4 |; D- m8 o7 k, A' Z        LOG_FATAL("failed to create hwi");/ u7 ^: Y* x8 D7 u/ B

5 y$ r( `6 O4 u. R0 k' {        /* enable both interrupts */  P2 Q( y% H4 n$ q& P! P) K% ?
        Hwi_enableInterrupt(ad->irq_event);( X3 P6 b4 w: g8 m  L3 u
}6 ~  r# M# x' q4 |9 W0 t
0 e$ j& f3 G# F

2 l2 b4 X4 o0 V9 pstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {( i8 x/ V6 I, o/ U
        volatile unsigned int savePinMux = 0;* {7 Y1 |, J7 K5 O7 Q! x
        //初始化5.11、5.9 、 5.5为GPIO口8 y. K2 C; l/ x8 }  V% f8 L' X' s/ ~
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
+ I, F& x2 o+ _! r: q7 C# j  k" Z6 H$ [  @) C. V2 g, h! g
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);- }9 i' T+ e. t! ?* f( s; X

) |1 h/ ^! T* O+ Q        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));
1 |1 Q' p) }7 Y+ G3 Q( s7 e  F! r* p9 N- |/ p
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);# {" d  i3 U- A2 ~- [# A. X. l
: O% Y3 U) K0 F- Z( T- x( U
}
! R# ^; z' O6 x6 f( P: o: M% B  e7 Q8 c. n+ e9 E9 _. }% D2 X

1 Y0 H6 [8 G) ^$ O  K4 p6 m7 Q% O/ Jstatic void ad7606_gpio_setup(ad7606 *ad) {  p  |) A: P3 `3 ~
        /*Set the AD7606_PAR_BUSY to the input mode*/$ W" f" w1 _* o7 g1 Z  Q5 h
        //初始化5.11、5.9 、 5.5为中断口
, Y6 w- S* q% u$ H        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);; Z6 j2 U8 ]) Q; ?4 L4 j( b
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);2 F, V& E0 t& I+ A
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
$ C1 y' c. i0 q( U, I* P+ ~* m) T        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
0 N+ _- W0 s6 B: e        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/* a' S& p" N2 V) p" y" r
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);! R. C5 j8 t# x; `' }3 Z
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);, P! K- q4 l, [5 F% B
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);1 p: n8 n0 a$ a# O8 u7 n0 U/ `
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);, C) y' h4 U' e1 n( K5 D+ [: L
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/& I8 r: g8 p) K4 d+ ~/ s5 r5 z
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
* X/ b( c' w- |# q6 G2 Z, D5 C6 R* B6 N8 Z* o
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
& o, ], s$ j9 V1 `* ?        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);) e7 l/ L2 r+ M3 U' ^
        Task_sleep(1000);
2 K  }# P7 O& y% d& S        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
5 K) d1 X- U5 E: \' E        Task_sleep(1000);: ^6 n$ W3 E% M. l9 \& d, n

6 q) f+ i9 S* ^/ I) e        /*Set the AD7606_PAR_CONVST to output mode*/# ~/ D% K4 b+ i+ m0 G
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
1 c6 ^! P: T  [% K4 B        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
8 C0 K: |' f+ ]  R& U
* n( f* r6 L9 t# s" k% J* l, X% D8 }        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
! a6 v6 y1 p2 X        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);0 F1 U8 s$ q" V4 Q
% D8 K" u3 y6 j+ l9 T
}
4 U/ J: F6 N0 l- L  D2 J8 N! N: g; Z# i' I- h
2 H2 Y2 c# }) b+ Y: Z
static void ad7606_busy_hwi(UArg ad_addr) {' @# H9 g2 Z, b5 P* a
' l2 t% l: ]3 q3 ]$ J5 G, W( H
' _6 A( R$ L  G$ t' F3 w+ d
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/. {+ ?' ~' K; {* M' T
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
# U- Y$ w& [( o% N3 _* R$ x( w: U: k$ W2 }% {* v, d) b+ `
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND): e9 C1 [3 v; @$ z* n; M% I
        {
- `" d& x  U& [                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
" \; A3 }$ E$ ^9 j                cs_addr = SOC_EMIFA_CS5_ADDR ;4 [( P( m( l+ {& r
                internal = 0 ;+ m, M! g  \8 ?6 {! N
                int_flag[0] = 1 ;
7 j/ \9 ^/ }8 y- O6 x& T( z        }6 S; k' I. _9 D- U3 [
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
  `$ g% \$ n  ]# t        {
! C4 m0 S# B. S, Z6 U& j                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
6 D0 B: g% }4 b6 r                cs_addr = SOC_EMIFA_CS4_ADDR ;* C# B" d; O+ e' \+ U
                internal = 6 ;
& y7 }4 _  u- @* y0 s                int_flag[1] = 1 ;
' o+ [+ k: Q0 V) m. z' Y2 U4 R* w2 y        }
+ G# v, }4 {3 W2 C1 w$ S        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)9 v. y$ Z: E4 J2 _0 b
        {
1 T) ^: w+ _; e& r                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。" c0 B+ n2 C  C  _2 {+ h5 B
                cs_addr = SOC_EMIFA_CS2_ADDR ;
. ]$ t) e( Q# R( ~4 E9 Z( F$ k                internal = 12 ;. G- n$ a7 c* L, c( ]: O. v" |
                int_flag[2] = 1 ;
* t1 X# E/ u9 r+ P4 E/ C        }
" j) f3 _; I  J, y$ g  
6 t& x+ ]  c# T0 A        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
% i7 j1 D( B$ l      
$ h  o6 K& L2 k% w, L0 W        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);+ E( F( S! V. ?( o. y# {$ ~* e
}
6 N6 j, o" J! b1 T
8 \" r4 d" b- `$ m1 W
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图9 n# R- M" ^8 k2 i+ i, s

: l/ R( H: [' d2 V/ [

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-17 12:52 , Processed in 0.037108 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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