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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
( v' ^2 j3 J- i% F, _#define AD7606_PAR_BUSY_GPIO_BANK        5  T& @9 r( a2 b0 Y$ d
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT% |. ?5 A5 }4 R' k0 g% P

7 y+ f3 n" m0 Q8 J( ~#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11" d1 k# D/ S& z4 \1 O, B% \6 p
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.93 p) A1 }' |- z8 y" b+ X
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5/ F9 i- S! W$ m2 P$ h
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)% W2 b( n, \" j9 S0 `& y
/ ^+ \, \  d) v8 p1 R( K5 U5 A: j
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)# P# y1 z" v6 |- G6 l1 w
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
" V3 S& ]7 Y9 d) [; e( w#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
5 J/ r6 o- [/ D. }0 M. ]: Y  h; y9 Y" U
+ u, V+ Z. I3 J$ z
# b4 I, q5 s" {6 r4 f* q
static void ad7606_irq_setup(ad7606 *ad) {" l* ]) ~( _3 B/ I# u! t4 _
        Hwi_Params hwiParams;3 Q9 t6 M0 M  Z9 |
        Hwi_Handle myHwi;
6 d5 g' k, K+ ^# u( a, U+ ^        Error_Block eb;
1 K+ ?1 h4 @7 r9 b% X# K! \3 K$ }* J% v, G  t$ W2 L
        Error_init(&eb);! H! [: ]" p0 f
        Hwi_Params_init(&hwiParams);
- i) H7 V: n( ~2 b        hwiParams.arg = (unsigned int)ad;
2 b% d! U* w) d- s        hwiParams.enableInt = FALSE;8 g& \4 T/ p! p8 H6 P9 e& X- \: k+ `
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
" D) T0 i) i3 W0 b* Q8 n4 v. a. y        hwiParams.priority = 4;
8 F# i  J  e2 r4 C& ^; S( F# P( g        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数1 _3 o& E! j; Z; h2 x! \- ]; ?
        if (myHwi == NULL) 1 q* P9 K" ~. Y, ]  }* x6 n
        LOG_FATAL("failed to create hwi");3 s3 i5 o6 w7 e- L  D

7 |0 Y. `' \- J, r" S; \1 ]# y        /* enable both interrupts */+ O- w% D+ b5 a  s
        Hwi_enableInterrupt(ad->irq_event);. i3 X4 M! p* x* ]" Q7 e# U( U
}; c, X4 T( n! G& Y9 M+ q

! O8 d2 N9 x, N" R1 l6 P
& v; x5 l; {0 ~3 A! \7 j: U0 u6 tstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {
  }! ?2 H) o5 {( i5 H3 y; A4 R        volatile unsigned int savePinMux = 0;
5 Z7 q. W# l5 `+ ~, S7 e        //初始化5.11、5.9 、 5.5为GPIO口
. a4 G% g7 x, C; L0 \0 U        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));5 c' {7 |3 e0 Q5 _# ?8 Z* Q# ~# ^

7 C3 w6 D" s: y0 K/ Z. Y        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);& f9 L0 E, w4 V# J3 W

3 m+ ]# `; A# m  K: j" g        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));" f3 e- T9 w& K: I; g  x

- p+ _7 h5 X. V. F" V        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);2 p2 G8 w( u3 ]7 c+ S  i

- X4 `- ^) u+ }2 z- p0 Q/ T}, _! d0 B- `( g+ Z0 G
; p$ z. |, \( s$ q4 i6 S
7 u% o# f: R3 d* `* t1 B
static void ad7606_gpio_setup(ad7606 *ad) {
: u6 S3 C8 W+ \6 E* \- z$ w& a# y% }        /*Set the AD7606_PAR_BUSY to the input mode*/9 X9 S" z2 t! T- R4 {
        //初始化5.11、5.9 、 5.5为中断口  e2 Y' c& B$ w: P6 o; X
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
7 i! ~) [; P+ P& z; [% \9 S1 ^        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);/ w% F/ h8 F- |* e! a6 {& J
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
# D1 n) C$ ^7 J4 v        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
( D+ s6 U- q- Q4 O        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/; ?5 ]9 [- N3 \
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);0 i% f# H1 k* q* T5 V
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
, s# i6 a$ D* P# V+ v6 B        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);/ ?7 ?* F, d7 t* ^0 d
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);' w1 _+ Q6 u( V2 Y
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
8 w8 N1 t7 N  ?% p0 ]" X        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
) W7 |7 R$ T8 j0 ]$ a" j1 R+ E
; D% @; \; R, Q& ]  [7 D        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
: A7 W4 H1 }: ]5 u        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
: `5 v5 \) b: n/ E7 g/ i6 A        Task_sleep(1000);. j/ \3 x! ~# Z
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
9 p# x" X0 p$ @. e' \2 B4 H        Task_sleep(1000);
7 t" E" l4 v/ H3 E3 {7 Q  Q' L* N! N$ \; J1 `
        /*Set the AD7606_PAR_CONVST to output mode*/$ V" o) i) w$ h- w
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);5 N, y" l" @7 h) B
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
: @6 c" j! M# A% z% b7 ]
$ b  b/ G- s) g7 B3 n1 ~5 @        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
# K* ]- G% W. j        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
2 R" N2 v* X) q7 u( ^8 C2 h/ M) d( [, f  U
}
! F8 A( A8 _# b1 Y' P6 }
" b8 \7 C4 T6 N) S* t9 K4 n! ]1 _/ q& F7 W- r$ F" v/ s/ H
static void ad7606_busy_hwi(UArg ad_addr) {& L4 R# H( D# g
$ s( Q+ Q" q# ~9 [

$ ]( y6 m) X8 v        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/4 S/ r6 i; W  V  U1 I: Y9 M( ~/ R8 C
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
# o7 e2 i$ S- F  L! ~( w7 g! l
4 w, P- T5 ~7 z  Q        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)0 f# Q8 }! T3 m; _* ]! x7 N2 a
        {9 h  Q4 g6 K$ B! x8 K  r; {
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
; ]' B6 w, f  h, t7 J' ?9 \3 K5 J                cs_addr = SOC_EMIFA_CS5_ADDR ;! Z8 W' B# X( T* Z
                internal = 0 ;8 ^# Z( q# r0 g+ }& y! [5 h
                int_flag[0] = 1 ;
7 ^2 F) B1 B3 w" \5 G        }) a! Q6 B" ]3 B  e, H# @2 k7 \& o" c
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
  b) w; `% w  G& o9 ~# M+ H        {8 w1 r' F; p: h, [, w
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。1 m# P6 y; A3 N
                cs_addr = SOC_EMIFA_CS4_ADDR ;9 ?( k' X+ h' S5 R" t3 J
                internal = 6 ;  \) M  @$ X' I6 C9 z  U
                int_flag[1] = 1 ;
# n2 n5 y: ~3 b2 B( {) i+ T        }
& Q4 S& {# e2 w# r) k/ V& X; r        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)/ l. z" n& x/ |0 G+ s# _$ k
        {+ c" R9 ~4 ?( D; C0 Y3 M( q
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。2 d$ g3 [. d; z3 M( M; Y3 Y1 X
                cs_addr = SOC_EMIFA_CS2_ADDR ;
7 S- U  L6 S7 W" q                internal = 12 ;( E. t7 O! q2 V+ z
                int_flag[2] = 1 ;) G. ]0 L: C/ F; K+ f, ?5 q9 F
        }& |# i( |8 Y  t7 x, x+ G
  
7 V# ]# s5 f- o# K1 j        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
) C0 K: U3 _, b- s       # |5 {7 T4 `6 M7 B
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);$ ^8 \. Y, H' g, y5 h9 l- G- r2 L
}/ W9 m: e& F; d5 z3 A6 J) H
0 }' w0 w7 a5 [0 c& y
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图
: U) E5 X( c/ e2 N& |- h0 U2 j( x  m  w$ J; L3 ~2 Q* j

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-3 11:56 , Processed in 0.037695 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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