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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
/ R8 h/ O* A% [3 X! q& y. X( S2 F& g#define AD7606_PAR_BUSY_GPIO_BANK        5
1 q7 }# h) V; p+ j/ Z3 i9 m' {3 k#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT! Y7 }6 o! H2 x& F& O

* h- p4 E( Q9 d: x; x; F#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
" _4 |: U5 B* r#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
# d$ D# i2 J( c4 W( E5 J5 J: T. m#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
' g- H1 I( j6 y  u/ y. y1 r#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)( s  G: i6 h) o3 E9 a: H) r
" q7 P$ }7 t1 A5 @
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
* G! d  L0 o: ?4 r#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
! s5 \6 g+ l* p( F#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
; E2 k  i: G# {# I
. K; M9 e: [5 |6 f* x9 [$ l! o& u. \- b1 E* v0 ~6 n$ P2 ^- S% {

  m- ?3 J. t* Y3 _( w' q$ ^static void ad7606_irq_setup(ad7606 *ad) {4 T: J+ B9 V# I* s% z
        Hwi_Params hwiParams;
( D* V2 ^* M; @8 I$ X        Hwi_Handle myHwi;
' b, T0 @% @& I! o        Error_Block eb;$ v$ _6 {/ X% e

5 v, S) u! |+ S- E  h        Error_init(&eb);8 M3 @5 y; M# B; ]3 v4 }
        Hwi_Params_init(&hwiParams);
9 j' q1 y2 Q. y        hwiParams.arg = (unsigned int)ad;3 [) _+ n2 w6 }: C/ x
        hwiParams.enableInt = FALSE;
  Q* w0 u2 s4 R8 C3 X) y1 \! Y        hwiParams.eventId = SYS_INT_GPIO_B5INT;
* |+ L' a1 ]7 F  I; R; E0 R        hwiParams.priority = 4;
: k. A8 R1 k6 T% R2 M        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数/ v* I2 M$ ~9 K8 @* W
        if (myHwi == NULL) 5 J; b! Q, p) U  `- C
        LOG_FATAL("failed to create hwi");, k- ?, Q- T1 \3 B% X9 ]! O3 X
" _9 \  s/ ?! s4 [& |
        /* enable both interrupts */4 @7 S7 K7 @5 e  C
        Hwi_enableInterrupt(ad->irq_event);
" S9 S* ]* V; Y# Z* a) K}
3 E) m& L. ~, L3 W, X7 C5 s
' ?4 q9 ~3 k0 S
$ o& |" C, N  m4 `static void ad7606_gpio_pinmux_setup(ad7606 *ad) {
% D  U9 U7 C' X* d        volatile unsigned int savePinMux = 0;
: l4 B: L- W7 T: e9 V  V5 W2 o6 `1 ^        //初始化5.11、5.9 、 5.5为GPIO口
+ A6 b6 P6 Q) @1 V        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
5 s' ]% s; e7 V/ b; `+ f$ P- w3 I5 ^0 @% D! x% W1 O. Y9 O
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
" Q3 o- [  R9 X, H) b4 t/ [; J. Z2 M3 _& x' f* ?0 ]3 j* C; Z8 {
        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));/ K# I6 y9 l: f" I
6 _  }8 S& \: I6 v6 X
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);% F! P( }" J2 |# Y" ~% W2 L+ Z
. m% `. n+ z! Z0 v% t5 H" I
}
) v! N  ^% G! v' B" b  J' x1 V+ l# Z$ m" j! r
# Z  S% S0 K8 r
static void ad7606_gpio_setup(ad7606 *ad) {
4 z, t( p) J2 l- P        /*Set the AD7606_PAR_BUSY to the input mode*/
3 G* V) l) I6 ^0 b! @        //初始化5.11、5.9 、 5.5为中断口
5 E5 n; v; ~5 Q" b        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);# O8 e' u6 ?% V8 z( P
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);8 |1 k& V9 M$ Q
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);) A$ c: j7 V- N/ e/ |+ n& d. ~
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
5 |( O6 N, a4 g( _. r        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/8 V9 H, H1 x8 q; |
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
+ T0 U& r$ @; ]' o1 {/ g        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);7 r, D0 K) ]! \; P5 v2 S# M
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
& K1 }' U' q) V        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);, s9 r$ S) X- z$ m1 v  L
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/  t. l( p2 T( w5 W
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
$ S8 H- `  G1 Y) I7 v4 G
4 f8 T/ w# m. i) H        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
9 P0 i* d  m- \, }; x, G' _0 L        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);2 H* A4 b9 I+ \9 Q9 w6 V2 F4 }
        Task_sleep(1000);# B: g& p- n; E) \* P9 g0 C
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);( ^5 u+ Y7 }& K+ h8 v4 ~  d
        Task_sleep(1000);
- v  f% J' a. S2 X8 \  t) }
, \, i: P- O0 R4 y5 w& _/ ]$ N- R        /*Set the AD7606_PAR_CONVST to output mode*/
+ I) ~( X( [1 e5 u7 Q        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
: L) N5 C: m% l& r  L6 Z$ E        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);7 b0 z, p8 k0 S" s% A

, q6 j  f( H' g        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
1 K* [* l- Y9 X9 n        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
& g- M! y% b1 O0 o' f& C2 B
) ?+ j/ T" Y, m- ]9 n9 M# Q}
. `/ J; {  ]7 n+ K/ f! Q1 v% \; h" n7 A8 c( C
* L& w! ~6 ^5 h( L# U+ G
static void ad7606_busy_hwi(UArg ad_addr) {
& y; c: X8 t! I6 f1 |/ H, x+ ^& W9 g  T4 b3 a

4 _# q/ ?" g  ]5 y# S* J        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
- b1 \; h9 U' g- |/ }9 Y        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。. f- D7 s5 N- A: G0 C
1 B; R! ]3 k9 L3 [2 X) D
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
; q' h4 n" {# ?, @/ n        {
2 B( K3 O  |+ r  B& O                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
8 q3 ]( N5 g7 N0 o# o( ^                cs_addr = SOC_EMIFA_CS5_ADDR ;  {" h3 b' O5 q/ T8 @
                internal = 0 ;
2 }6 m, `/ n! x5 g7 d9 [                int_flag[0] = 1 ;
) B! o$ A7 B7 s. W4 q        }' `+ O8 c) u1 `6 _3 b+ B
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
6 Y9 X& M: N& N2 o        {
% L: u  L* y5 I* X# o- U! U                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。1 f* m! p1 L( A6 A3 d( K5 a) h
                cs_addr = SOC_EMIFA_CS4_ADDR ;8 s5 s. x4 C5 s1 f/ `
                internal = 6 ;
0 Z; l) l. C! y9 ^: n5 o) _  E                int_flag[1] = 1 ;/ K" a1 H) n1 l+ I
        }
+ \, o% D0 h4 J/ [2 W        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)4 W# |8 ]: g3 N# W0 v
        {
$ S  e; f+ f; J: _# R                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
) u4 ]7 Q0 |& a8 h                cs_addr = SOC_EMIFA_CS2_ADDR ;
' W2 P3 f' c9 J5 d& d                internal = 12 ;6 r/ n& T0 F# \, }* H9 V
                int_flag[2] = 1 ;5 W5 C$ T* S0 ~: z8 [1 o
        }' r* M# @; w$ n2 y6 k- t6 W" Z
  0 ]4 b" C" `5 _- H& r" K
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);; M: ?' D4 s* T4 k, ?! o
       ; k7 v1 b2 X3 f0 J
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
  R, H: T* k; g4 K7 m}
) S% [. x2 ?8 c% _' w3 d, W* W& J
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图5 s: X* z0 H9 m8 t, f+ K2 S
9 x+ ~; E% W% _7 l7 M7 T

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 20:51 , Processed in 0.041638 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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