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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:8 p8 i# r2 i; y; U0 Y& r
#define AD7606_PAR_BUSY_GPIO_BANK        5
# o& I' c0 G1 S% o8 n4 M#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
% I- B& f3 ?" k1 M+ b6 J
7 A( y5 {& R! R/ Q#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
: o- c/ h. C' K) \! |2 `#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
1 P! ?6 r) p, n9 d#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
1 n* R7 P/ Y4 V#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)' v( p1 g8 w% _) v( w9 g
$ X( l/ y5 t, U
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)% ?: O, l) G* a$ j" f& `5 r
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
1 H7 k) Z+ o2 b. s+ r5 u5 O8 R5 r#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
( A2 R4 O* V7 \% u7 Z
2 G& g+ D+ q- k& N3 s  _
* q* N  P6 ]3 Y5 N) i7 J( ]5 Q- i* x! }  o  _7 z
static void ad7606_irq_setup(ad7606 *ad) {
6 Z# u# t8 ]" t5 M5 w+ Z. Q; H  O6 z( h        Hwi_Params hwiParams;4 i# P0 I; y" l% }" |7 F
        Hwi_Handle myHwi;3 u: t2 ]; Z) C
        Error_Block eb;
; f! l) a+ h$ n2 [) O
+ i% f% i) d* F& x! |7 A& A/ I        Error_init(&eb);) }3 ]( q( h+ \/ ]2 X4 h7 F
        Hwi_Params_init(&hwiParams);
& `" V) F6 Y' }3 p4 h0 J2 V: ~+ y' O" Q        hwiParams.arg = (unsigned int)ad;  p0 N; _0 M, ]* n" i& a" Z
        hwiParams.enableInt = FALSE;9 L( }5 |" ^2 g" S% w) M
        hwiParams.eventId = SYS_INT_GPIO_B5INT;6 w0 h* t; }% E* W% v% A
        hwiParams.priority = 4;
$ Z' V7 h# S- t, x' e        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
+ |' @9 T# ^6 S  s8 L; X        if (myHwi == NULL) * b+ u' [! _$ Z
        LOG_FATAL("failed to create hwi");8 X6 [# D% Q# q# N) c8 w

/ x% Y/ _9 I+ v8 \  z1 K        /* enable both interrupts */6 c( G# p1 G. ?7 z
        Hwi_enableInterrupt(ad->irq_event);
% k" j& h+ H/ D4 Z8 F9 N1 J) L9 F}
# {5 N2 P2 h% Z$ A% o+ ?
0 z% \, o' n- }
* P$ i! h* u6 L4 a* O: [" n. Rstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {4 h1 c" P: y9 p: ?& j: V
        volatile unsigned int savePinMux = 0;
6 ?( b8 \- G) E* m  X4 d( v" e7 ]9 E        //初始化5.11、5.9 、 5.5为GPIO口7 g* Y7 Y  ~1 w/ N
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
2 V- y/ a. Q( k" v
% T% a) z2 _: j/ V6 {  G4 }# G        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
" R0 v) W# ]7 v* U: u* a, C2 z- w( z6 Q! w  r
        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));
, Y5 ]0 H2 j' f  Y& n8 ]2 e* M8 e4 ?4 s; O) H* }: S' r
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
; q/ k/ w" Z6 @; ^9 C
* A7 m; t7 o* P7 J+ G}5 X* e0 ]/ x! `) m2 F. U2 s) U
3 z. b1 R7 i' W2 V8 a

. _$ ~1 C  [0 S# l1 T/ q- d2 Fstatic void ad7606_gpio_setup(ad7606 *ad) {
$ _0 M$ R6 m3 c) ~" ~        /*Set the AD7606_PAR_BUSY to the input mode*/
0 L) i! H5 `) @2 G8 Z* l. y( f" Z        //初始化5.11、5.9 、 5.5为中断口
. G# J) f- ]# A7 H0 A        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);8 y! ?; N9 M4 m
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);, S. l4 {  k; @9 b
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
: b5 m3 w+ N8 y( D/ w$ g( d$ K        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
9 g; _. z9 T. A2 K4 l" A% S5 D) z        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/5 f* P' |# M. _8 e6 J1 Y" F: w
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
% }0 ~- E* Z& Q/ Z( S        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);$ m, u; w( W4 `/ g( d0 O
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);! F" ?) i: G: d- U
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
4 z) O$ a7 D/ y        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
4 I- |# W: w, {$ t9 J/ y2 r- A        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
+ z* V5 L. }. ^+ B: d
! h( X+ S! {% @* F# ~6 J/ k, b# x        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
, L/ _/ q( s) f2 o# O( X        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
3 X8 I, D' t6 x8 [  i# Z# h) ~        Task_sleep(1000);
* k( \4 m! T. A( D( u8 f        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);- c9 j5 [1 c) f% K/ C: T
        Task_sleep(1000);$ T- J; ]; d& s+ e; F) ?1 k

; _0 E& O+ W, E3 L        /*Set the AD7606_PAR_CONVST to output mode*/2 _$ v! m+ b7 V) ?6 s1 i$ y
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
  N5 i1 W  Q3 L- B- Y/ n! {& Z        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);6 [  \4 U7 [) s9 a
8 A/ [! ^1 s( H+ r% d
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
6 ^5 i7 m; Z; e( P1 D3 k- B        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);* F3 d; p8 o+ h  A: h8 K
% a( b8 U) P+ l
}) s! ]1 F" G+ B( P% ]

. U# C: E" q% Z7 }- n$ s# d
3 V+ ]$ V* }9 A2 Y/ nstatic void ad7606_busy_hwi(UArg ad_addr) {
/ K2 }: s) O4 I2 H6 {- ?$ O" Z
# n( X: g+ }+ _; L
* R5 b! \( G4 g        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/7 g+ Q. v1 o4 [+ c! b( M
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。3 R6 y# @0 t1 G% j" E+ \. ]; H6 w
5 y) r; i1 O) Q' B  v3 h
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND): Y5 x6 S9 v# Z  J4 W
        {8 v  r5 I+ T2 ~% u& {+ U
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
+ X& p3 E- K* x" Q                cs_addr = SOC_EMIFA_CS5_ADDR ;
# l; O% l& x+ i( W$ R                internal = 0 ;
! M3 E3 P# Z' r! ?7 D/ d" k' @8 S                int_flag[0] = 1 ;
- B. Z) ~: G+ M        }
; h4 h  K- s) Y  x* n% g4 V. I        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
/ V9 d+ U9 ?. z/ l+ N, A        {
$ G9 f8 V, M" }+ _                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。+ n" p* h: Z5 O
                cs_addr = SOC_EMIFA_CS4_ADDR ;5 z% O8 b4 P" f  ~' b
                internal = 6 ;* j7 p, z6 P# B
                int_flag[1] = 1 ;2 g' h4 P( p9 `2 W- N
        }
, I% z' O0 g9 e' ?6 {) T! U        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
( t, s. X# ?: ]" T9 v        {/ Y% p) I, @! ~
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
' \  z' C6 H. X6 W7 s6 s                cs_addr = SOC_EMIFA_CS2_ADDR ;
4 b  G* H( a$ J. B/ ~9 t0 ?9 y/ h                internal = 12 ;% w9 C" l0 y# O! O0 M
                int_flag[2] = 1 ;
6 P4 S6 S' ?$ Z5 a2 F        }& e8 C$ M* L. U
  ! B9 h) e, i8 d1 Q! C  Y8 {
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
" z4 E$ R4 N$ s! V& T4 y1 A! Z) S       * q' V$ C' h; _9 q
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
2 H& [, g+ i- E& c% ~0 @}
7 S; |/ G; K$ x4 g$ Z6 H
' N/ ~& W& g9 T) J% c
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图
  a  {) U# b" A# R/ w6 q7 E& ?7 B: Y& E  P! a

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-3 12:14 , Processed in 0.040464 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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