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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:4 B! W3 i# \% Y
#define AD7606_PAR_BUSY_GPIO_BANK        5$ j: ~9 a% g6 f5 G9 G& J3 a
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT. C3 A( L$ G5 T( o4 u5 _, E
( M5 r+ B/ G$ T9 d5 B: d
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11; i( Q* p$ {2 Y/ _
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9; C, ~% {( @; n
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
( m# V/ K6 j' Q$ e! ]% z1 s3 C#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)! ?! q% K' l) i" B$ @2 A: i

9 }5 I. M( Z! U& T: b9 b: O#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
/ l# H2 ~6 G& {) m5 w) d* @#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
- u9 i6 y2 q0 j) I% q#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
6 k4 A! S, W/ X- o, ?5 Y+ [' O4 ?/ l+ u, L
5 X9 t% P9 \) c9 z: {# L

* V1 q1 Y, P6 |. y$ G6 L3 ystatic void ad7606_irq_setup(ad7606 *ad) {
4 i5 p4 o& x7 Y0 D) y, H        Hwi_Params hwiParams;
$ Q& C: K+ U# S7 ]        Hwi_Handle myHwi;
, O+ c) n) F  g1 Y) [: Y/ Q        Error_Block eb;
" H- I$ ~) W! Q" {( k
' g" h# e. ?- f2 o7 I        Error_init(&eb);: [" X$ \0 L2 r! s/ {% u: t6 P
        Hwi_Params_init(&hwiParams);" K3 c/ o8 d, P9 I) }: N. i
        hwiParams.arg = (unsigned int)ad;+ y. }, [! Q8 [( a" {
        hwiParams.enableInt = FALSE;
% D( B7 e; L4 L% m3 M( ]4 V        hwiParams.eventId = SYS_INT_GPIO_B5INT;: X( u  p' o8 z1 C
        hwiParams.priority = 4;
) a& W7 M$ |& v! V6 Z7 t+ F        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
4 s4 }, y( I, U( z) e9 f        if (myHwi == NULL) ! B' o3 y5 N: N" m6 O
        LOG_FATAL("failed to create hwi");
& {' r) f) Z; E) ~( w8 o% C
" ?3 B+ H0 A0 q% H: V0 o        /* enable both interrupts */9 M8 p8 g0 a. n! y
        Hwi_enableInterrupt(ad->irq_event);
9 z: f  @7 w6 _: @3 S6 u' ~}
: _# k7 v; R+ |2 j) f6 o
! g7 Q8 }1 e- W" K: Y5 W5 u/ E: i* H" S$ E5 x3 N
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {
- e( \( ]8 u8 q- k2 M        volatile unsigned int savePinMux = 0;1 D+ M) a& r( c% @% s  O
        //初始化5.11、5.9 、 5.5为GPIO口! ^5 F4 z1 d1 L# y) s
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));8 x6 V1 J1 E) Q; i- j9 B

- e7 G( v8 X3 v5 T) X        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
5 W( c4 b3 k4 x' Y' P  A9 X8 G/ d  e4 c* i
        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));5 ]& \# z: A  @

/ W; r" \5 ^3 w2 i, ]; a; A" m        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
6 Y) g( d. s& ^' M  i6 ?1 M
7 y; N( n0 T( k% ^8 s}
/ [% E8 K. d* o# b  `1 y
3 e1 B- [- Q+ N/ {6 r" \- F% E) ~8 o0 k6 F7 U% _! V; S+ W$ `
static void ad7606_gpio_setup(ad7606 *ad) {
5 c2 C7 c' c; ~% \8 i6 N0 X        /*Set the AD7606_PAR_BUSY to the input mode*/
- |/ t. u9 \" ^( F. }: l        //初始化5.11、5.9 、 5.5为中断口# _8 n; K# w2 a3 r
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);" v. ?* Q* x2 o3 ^3 m
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);, b, M: \6 H) z: L- H. W: p
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
  t2 n: H5 U1 c$ m. G+ Q# V        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
: q5 ~8 c; j+ |: A5 ]" o' P        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
8 w5 S/ j2 `4 k% l3 e        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
* }5 n; D7 L3 R8 }        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
  @& |" t+ c8 R, M        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);; }1 h- o4 x9 X) y' o) E
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
; M4 v# a3 _8 z- _5 F# T# e        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/5 j# M; i, f+ D' G
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);$ U" [6 B8 t9 ~) W% B
: J# E( f& l1 \, y2 U# c- S
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);8 e1 {/ a" M3 G0 v6 O( j8 _" U
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);- y# k. b8 `( G: w. _6 Q
        Task_sleep(1000);' \4 x% I  j8 r3 F: |% ?
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
& H$ k* O- [4 y  K        Task_sleep(1000);
6 X6 Z, \6 `* h3 S& M8 [9 S0 O9 q
; f. [3 z0 _* V1 i! a, o  j- |        /*Set the AD7606_PAR_CONVST to output mode*/
7 N; U0 M, C5 z* O, k  ]0 u5 i        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);( j: U4 A" @# T- u
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
6 m  J/ P8 v- [8 H$ @" N
2 G7 \/ G* o, j0 b9 N        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);" b% Q- U: h# \$ A0 ]' V% k
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
& M2 @; J% u# m0 M5 i; y% m/ h
. k* ]% \  j; X7 H* L}, V+ e# k( h( A, a( o+ z8 }2 L

0 l+ s& \3 H! j& r4 @4 w  {8 {, w/ z# n) ?" F, e
static void ad7606_busy_hwi(UArg ad_addr) {
9 o# V; X/ Q3 G, l: q4 y/ }% i, Q% g9 H( k6 }2 \5 G! n) Q% I
3 z. }$ T" q& f' A9 O
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/$ |; s$ W& L: _9 L7 g
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
0 W  [; n" ~- E) Y" x
$ M( T% w& W+ L# C: n; C# i; q- j        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)! B5 h; c- ?/ u% x% j
        {% h6 ?; N9 i% r1 f
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
  ~2 l8 u# v1 E8 ~, d! a                cs_addr = SOC_EMIFA_CS5_ADDR ;
) ~- D8 S  O7 ~& `$ P5 O, b  y  @0 h                internal = 0 ;
' K" \: m3 ~; C) j4 _: u# N( J                int_flag[0] = 1 ;( Z) b0 L+ ]6 u' k* ?7 C. {
        }
- p% K1 B. x8 @        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)4 H3 d3 Y2 `, O( X+ ^
        {7 q/ [1 z- Z: X$ c. j7 V
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。. l. |" u, H- R; D
                cs_addr = SOC_EMIFA_CS4_ADDR ;
9 {# I( [- Y& L1 ?9 r: y0 _                internal = 6 ;" B" k! U9 G$ G5 o: Z# |5 h
                int_flag[1] = 1 ;! n2 u# E- r: ?4 `: f+ _
        }
- @. |8 I1 w) K0 H; }        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
! u2 X" H3 E0 d" l* y3 N. z        {1 p6 Y$ _) u" s% x) s* _. b
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。. G% U0 D4 M# n
                cs_addr = SOC_EMIFA_CS2_ADDR ;
5 }. V& d7 ~- {6 q0 {  L9 l* |/ S                internal = 12 ;' E7 ]+ J% D( ~$ @& H* y1 m
                int_flag[2] = 1 ;# x- U8 M. l  V1 B/ t2 z
        }
7 X* F- v* E5 |. |8 a& W* o( U  
: b$ X/ k. p2 I+ T/ @' w: \0 R; h" J        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);# T; N0 e& O4 X
       1 k4 l! r! S( @# e- o# M1 ^5 w% i
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
% @  d% U; y2 \  K% j3 v0 D3 B}
" t6 M* s- U0 \7 d& X3 D( {- b9 h: y+ o
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图6 C6 `, T8 j/ F, E' M* c
5 t  a8 R( A  J

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-16 14:48 , Processed in 0.044783 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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