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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
: a3 i  [4 z* ^; z% `' R#define AD7606_PAR_BUSY_GPIO_BANK        5  d' w3 s3 H1 d/ i- }
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
& p0 c+ Q/ n' F/ \' F
2 ]# J% }& e: d#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
% q% J* f% q! N( ^+ d- V* F#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
9 N  v2 ~* H8 @6 C4 F#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5' \6 g- T  H3 `5 F. Z
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
+ @2 A2 V6 V- ]2 {
8 k. C  f3 G- `, j  L0 n' |; |" R#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)" A' ]$ h' R( d% n, U1 f! @1 f
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)/ j6 N( a5 S8 G, D
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
) N( k! \! G5 |! {2 E$ L% R2 c9 r, O; S3 j3 E1 f& q) t- E0 y

+ N4 ^& N1 j9 b: n1 d8 R) v
  W4 P1 C1 S( [static void ad7606_irq_setup(ad7606 *ad) {9 W* k- q& r. y
        Hwi_Params hwiParams;
3 K! N7 l, E2 f  F0 f+ j: X        Hwi_Handle myHwi;/ h0 F5 r/ H6 }
        Error_Block eb;' ?( D, E- {" w) o; f

1 ^" B% h! R+ Z1 \5 r        Error_init(&eb);
" B" V. i6 l* N; m; t        Hwi_Params_init(&hwiParams);
+ x# y9 R4 s- ^, @- S3 \9 W        hwiParams.arg = (unsigned int)ad;
  T: t  ]( N1 G$ T* D4 Y. |        hwiParams.enableInt = FALSE;
% J) Z  s! Q& d        hwiParams.eventId = SYS_INT_GPIO_B5INT;$ }5 l4 [7 V* k4 q
        hwiParams.priority = 4;
0 W$ f9 B' }- D        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
, u9 ~+ S; G. z4 T        if (myHwi == NULL) " n! H3 J  m( Q
        LOG_FATAL("failed to create hwi");4 u$ H, D7 v# d* y( S8 P. R# ], B' R

* R" L  i' }) t0 G" t        /* enable both interrupts */# ^; _3 E$ y% q6 U4 b" g" b
        Hwi_enableInterrupt(ad->irq_event);
: A0 @- z2 m0 e! \, U5 w3 G" y}  ?3 x- }$ N! p5 ], T9 X# ~

; ~5 ^( k, J; O# m6 r
/ e! x. f' o/ R4 E7 B' q* P. astatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {+ r" u" `0 N$ G4 {; J  n$ Q
        volatile unsigned int savePinMux = 0;9 y+ s' p7 M* V2 s4 T
        //初始化5.11、5.9 、 5.5为GPIO口
/ B, O* G$ Z" i5 n' W& X        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
( r5 ]' K, _5 W. Y0 }; l  j
; ]3 s+ a4 s7 \/ Q( _7 l        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
: ]* k  v4 ~" T& I' O7 _2 E/ t$ f9 C6 H, ]
        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));) J; m! ~2 k- D" d- r  ]9 }" j5 S, q3 p
# \+ u. s( H. ]5 Y# q
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
5 x7 I+ |1 u; k! H6 V6 h& R3 k. |# n, Y* ^$ k
}$ B: ~/ E: d$ L0 ^5 R
( p4 i/ `( p9 N( `' r
3 B3 n9 r9 E" z- L% J0 p
static void ad7606_gpio_setup(ad7606 *ad) {9 n- k9 l% g, @
        /*Set the AD7606_PAR_BUSY to the input mode*/
; }- ]/ q+ t& k4 E  L4 w4 V        //初始化5.11、5.9 、 5.5为中断口
7 I- _/ {( ]5 \% e! F0 r+ W" ^& p9 k1 i        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
. S8 U: w/ S3 s6 p  z) C- f        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
5 x: o! }! F0 M% S# U# A- A        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);5 }% V! v4 K, d# m0 Q6 F
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
" V" }. K/ x1 i9 O9 L        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
/ O( D4 k( D; F( G/ O( H! E; ~# K        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);! r: B, N* D8 I1 n* O0 X9 i* ~
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);7 T  k) |# N8 z& l' k
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);* Y; [' i& a- \
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
% G/ e9 v3 }5 E$ k5 A& ]. i" J9 X( V        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
# x- w/ T* A9 F/ Y5 L& Q7 Q- i        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
. i. N7 \% M7 l6 a" w+ p) P
! x3 r) G) n& {% N3 k        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
# C6 N" Y% h; }6 u        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);0 g$ |4 }* Y  c# B  G0 [
        Task_sleep(1000);. @- `1 j5 }+ F$ _: O
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
: y8 ~6 z% x* s# `5 m4 [        Task_sleep(1000);4 M% q4 O1 w/ E0 l" I& I+ a

2 W3 a% q, X, H; y: T3 }        /*Set the AD7606_PAR_CONVST to output mode*/& z. G6 C- Y2 @
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);# f1 T' R, i6 r: C! p, W( P; u
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);, ~" ]1 c  S2 }4 T+ z
% v' K" b0 V' H  O, u. O4 X
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
. W  c1 C2 L7 j- Q        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);& w( B  ]' C# `! ]/ u8 K( x. c
  c5 j' L4 O; |  Z, L6 {
}# M0 @6 H7 b0 p/ b

* r7 X3 j# m6 M) d  X0 G3 M  h; c. A. F( N
static void ad7606_busy_hwi(UArg ad_addr) {6 b1 c# I& m* p; J6 n

/ w" u) Y# z/ X* Z/ e  Y) c8 @5 \0 C6 V0 w2 N* b4 V( C# V6 C
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
: ?$ ^5 b# W! Z* U: m- j; F        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。  p  I( i) X; k" E5 ~% M

1 F# A7 l! s. }( N- J        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
  m& u# v, E3 U5 ~' W8 F        {
5 h) C8 O( U; ?8 m+ l6 h                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。4 k' d: }) X; \2 e' `3 u9 k
                cs_addr = SOC_EMIFA_CS5_ADDR ;
4 g: L" _1 @' R$ ?5 P. g                internal = 0 ;6 b: }: o  C% {3 C) u0 |1 y
                int_flag[0] = 1 ;
9 S6 @1 u9 T/ a: b. f( K- W% D, I! @& X        }
4 g* W$ U, \$ o8 M0 I        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)" a) s& d6 W' y( y
        {, A5 t( ?7 ^( l; u4 S$ r4 Q, N
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。7 }8 _* w. i" E
                cs_addr = SOC_EMIFA_CS4_ADDR ;% H6 h: d, ~" m/ W
                internal = 6 ;. j/ [0 R& U+ E6 i
                int_flag[1] = 1 ;
; w! j- W# y+ M! d3 N4 o        }4 R- v9 K$ e1 Q( v
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)/ ]0 O1 Y. e9 h% E) h6 O6 N
        {% J! D# _' y5 I& i4 M* m
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
- @' z+ d8 c, o1 q; |                cs_addr = SOC_EMIFA_CS2_ADDR ;& y( r9 g# b# i0 }
                internal = 12 ;1 Q; d) O  j$ z& a
                int_flag[2] = 1 ;
) N  M  v; R- k, v( M        }7 c0 g, }' L# N5 }2 B3 ?
  
0 `* P9 t$ O  _9 [0 s5 G: g5 l        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
& {' U* z0 ?+ }       # H& @- R4 k  w- W5 b
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
. D+ H8 N) j' J}. O3 w. s& g/ g& Q

3 Z  i& u; O, B) \
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图" T5 t0 ~* h4 C0 W* p

) Z; b( V+ ^, D& w0 S7 c

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-14 17:42 , Processed in 0.038848 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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