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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:7 ^1 b( L0 n% F
#define AD7606_PAR_BUSY_GPIO_BANK        5/ s+ M. }! ~1 c
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT' L9 V0 \" D: c

8 C' B! w2 `4 U4 B  u#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11# X; W' E% G& i! u4 l. l
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
! r8 ]- t3 Q9 l7 r& F#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
2 |* u0 \! h9 P1 ?#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
$ v0 v. }- w- ], k" U. o
+ Z* V/ J* P3 W! G# e; |! G( g' R#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
" T2 g0 F3 R7 B, P4 N#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)4 b- o" ]+ B3 I" {" n
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)0 u# o# t) r* y" A& m. D' z
! F, K4 y8 Y1 e! i
$ u0 y, k3 b$ c; ~
. ^3 k2 }% Q) N' E! I
static void ad7606_irq_setup(ad7606 *ad) {' N# p+ O0 w9 |' t
        Hwi_Params hwiParams;" R7 c) c- ]* @/ t. O* o+ A( |. @/ S
        Hwi_Handle myHwi;+ n$ P" P! e  h% t: j
        Error_Block eb;
) w; I. [4 o5 Y5 d. _0 D' |3 y- P6 X
        Error_init(&eb);
: F5 |% w0 M4 i  M        Hwi_Params_init(&hwiParams);" {3 B* c) q% ~, T, f% d6 P/ P% w
        hwiParams.arg = (unsigned int)ad;9 ~5 S$ |8 ]$ y/ f/ [' b) C
        hwiParams.enableInt = FALSE;8 D5 o+ ^$ b! h* i* [+ P! a' C3 C
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
/ I) X+ O# i. W0 T        hwiParams.priority = 4;
2 g+ M! t* b3 Z/ g/ L) M/ m0 P        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数/ I7 H  _& _/ {1 H6 q
        if (myHwi == NULL) ; ^, X; O5 ^( k( D( Q* t
        LOG_FATAL("failed to create hwi");
! G4 w2 b3 A. S  W
" o( \, X- s- u4 \* _  p  P        /* enable both interrupts */
' F( m3 s, k2 e( t8 @/ ^/ h0 X        Hwi_enableInterrupt(ad->irq_event);
! ?, |2 D: Q$ o' U* x0 ?5 v: P}
- W1 J. s3 P6 D  A* M
. M$ a: o/ v; n* s; _& A8 \4 F4 d
. z7 C. c! C0 a: Z8 Lstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {
/ Z2 ]; w1 x4 o! I        volatile unsigned int savePinMux = 0;
/ p6 j& O  B  }1 n  w        //初始化5.11、5.9 、 5.5为GPIO口
. G0 c$ M5 ?' T. p% v9 Q# A5 x        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));4 _9 n7 B0 k: s) X" R( Q
/ l  N" L! q/ S  u1 n  z8 [. ^- ^
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
1 }9 U6 l8 y1 w1 f0 @/ K3 u- Q1 l, ~  J
' f/ D( p+ V! N" {) S5 u        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));
- s; ^! \6 Q8 a( y" n- r" A4 b" V( \$ I) S3 u
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
7 v$ k! Y- F' a7 W
- U) Z8 B9 {7 H, u3 I}( o) D! d0 o; j+ I; w$ y

; E1 b) h/ n# g% C) H/ w1 I' v% I& Y
static void ad7606_gpio_setup(ad7606 *ad) {$ l+ J. o1 X, E
        /*Set the AD7606_PAR_BUSY to the input mode*/( G" P& _4 q% _) F
        //初始化5.11、5.9 、 5.5为中断口. w1 u& c5 T5 O0 b+ P, m0 O* P
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);1 u; D: F  W. D9 p" e$ |
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
% ^4 ?) \  H# v3 ?2 {7 L        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);9 i( e+ t6 l# Z8 q
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);$ K. ]: U! t3 C$ U  R7 J) X
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/4 m* w) L4 e8 m1 Y
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
, @  I( ?8 C0 E8 T0 S        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);- @7 T- k7 x) v2 \  d( ~  i) G) ?
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
7 l: `1 A5 L3 o7 o" p% k0 h1 f        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);) Z6 M; |3 E- R8 ]! Y4 `- F
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
, ^/ G! a5 J: F* i+ ]+ {+ E        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);' U+ D  H% s2 x. X# I2 b

# H7 z! H: ]$ g/ W        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);+ ~7 s$ E8 l9 [  `3 g
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);2 F  S1 H0 ]% _- {8 n" \4 ^
        Task_sleep(1000);
2 X5 M# Q4 O, z1 E6 ?* C        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);; \6 x* W2 H  }
        Task_sleep(1000);7 x* y' u  X3 f7 o
" J* ~8 r8 m# B0 J* ^" B( {& }
        /*Set the AD7606_PAR_CONVST to output mode*/
& A% ~) X# g% c, p/ K+ O: R        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);- F1 j& H# y$ T$ \. d
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
+ r' R' g0 j( W' A* F! u7 e( \
% u, a# K1 b( \) g( ^( L- Q" }$ z        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
7 O0 y) F* g5 d- A3 T5 o* T) }4 K        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);7 Y/ F/ _. s: ]  a0 g) Q
  q- d! V, y, H
}
. x5 q) {1 W( t  Q8 x- u3 Z% d* M1 F0 [1 b; t0 W
& ^. d" s' m7 y% B8 ]. X! A
static void ad7606_busy_hwi(UArg ad_addr) {
! u1 ^  m7 L% ^) {7 A: J3 B% X; [- @6 Q3 s6 O( j
6 a& w; o, _. a
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/) m" ?2 m9 v9 z: o4 S
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。9 f) A. k' B( s

1 Q' O* Q/ c( l. x        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
6 f+ k# H* }1 U( ~+ K! F        {. G4 J  R  a- D0 g2 I
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
& D* s* K3 O8 R9 ~' G3 {" f                cs_addr = SOC_EMIFA_CS5_ADDR ;
- Z$ s$ A/ l  Q0 h  A! a                internal = 0 ;
) H( D/ P% U5 i" f: Y, l/ R                int_flag[0] = 1 ;
' d) h4 Z  }& i( Q$ ^        }  ?! z' M$ ~1 y, z8 U
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND); m) K$ F6 H& q) `* }  M$ \( I
        {1 D/ Z" l; g% ]& U6 x; j1 {! u
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
, d1 n- a" C, g+ S- M4 O1 t- g3 m  H) F                cs_addr = SOC_EMIFA_CS4_ADDR ;. B( g! R' f! h( {* c( k! L& W$ U
                internal = 6 ;
- ~; J1 z. w( ]. a( W                int_flag[1] = 1 ;
  @! o( k. @8 q        }1 h1 T& s1 }2 C' d9 J) `
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)& l( n, }/ j( F4 }& N* ]: i& i
        {9 ~1 a/ ]2 H! ~7 p( _$ Y8 V8 O
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。1 B; d/ X5 }+ N" |& a, i
                cs_addr = SOC_EMIFA_CS2_ADDR ;3 a! P3 {2 I0 \
                internal = 12 ;
0 d0 w& ]: b9 x+ F                int_flag[2] = 1 ;
. Q+ d/ W' w7 C% Y: P3 O        }
5 r# F0 O' e% U5 d! @  Z  
- m2 w' Q, w6 y3 B        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);% K7 |7 V& }2 M4 c! g: S
       3 {* f  c& C/ K) P+ j! V
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);* [: z" G9 c- q9 {4 t4 ]! @
}( H1 \+ [& V4 @8 I4 L

9 |6 q1 X# @% K9 d8 O& s; |' s5 }
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图4 }- ]5 u$ N6 E3 [1 M. Y. I( E" {' n% J

2 r8 r# t* _& s/ |) ]

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-15 16:16 , Processed in 0.037647 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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