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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
8 B0 A; n1 F1 q7 ]* A1 u, P% y; k#define AD7606_PAR_BUSY_GPIO_BANK        5
9 [, m- E) m% {0 G+ g$ j# Q' x0 {#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
( v, L/ G7 p3 D4 S  _8 X( C
' f/ F! ?( ^4 `9 b; j#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
2 G  _  }/ y) m6 S' x! |2 ]9 R#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9) P. z) \5 ~* _4 R5 P/ @
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5+ M7 @& c. g3 B# X5 [
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
% I$ d7 O" \1 X2 `- n8 a. I0 S$ [6 }, v' f" c; h4 u
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)7 p# l! e/ A  L7 W
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)- {: C, h: M0 q# m
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)9 P' T1 D: p! A

9 `9 E: w' W% m' R- {* C' V# B; u& e' g* N

' X% b5 G" g, ?* D6 nstatic void ad7606_irq_setup(ad7606 *ad) {, I# j# h# T, R( e% U( R" A
        Hwi_Params hwiParams;
, q4 c8 e+ }+ E0 s- E        Hwi_Handle myHwi;) T* o+ |" ?" M: w5 ~2 }
        Error_Block eb;
1 Y/ y' }, A# j0 {% n: g0 {8 ]9 z3 ~0 l4 y' L
        Error_init(&eb);" Z% ?+ N1 m% f9 W+ b$ c9 O
        Hwi_Params_init(&hwiParams);# P) j, s7 c: c  ^! q# L5 A
        hwiParams.arg = (unsigned int)ad;; T; d. j# _' o! a. M3 v/ p4 X, L
        hwiParams.enableInt = FALSE;+ r. M5 G$ R# x$ h
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
2 S7 n* |! e7 _. I        hwiParams.priority = 4;
* E! N9 Q4 D: m; k- }- ~" ?        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数4 ?5 e+ v' D9 m' d
        if (myHwi == NULL)
% `2 ]7 }+ U, A/ N9 j9 [        LOG_FATAL("failed to create hwi");
! F% M7 i5 B+ Y% w4 c" z. ~9 m8 S5 c& y/ G& _, ~$ V3 v
        /* enable both interrupts */( X+ c8 D! u. d& c
        Hwi_enableInterrupt(ad->irq_event);( r7 P9 N7 _5 F3 O# W
}, R. o) R& A1 M

3 ^8 p& g3 {, P1 A& g8 s6 M) |& j. E; S& I  O, p7 _' X0 N0 K, U
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {
& e3 X/ J: `, g2 f' l4 }        volatile unsigned int savePinMux = 0;
, y% O8 V, x( b, `0 `) ?        //初始化5.11、5.9 、 5.5为GPIO口
/ u) k- a. P# c/ B1 O7 k        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));; v2 c/ ~% Q3 p+ J- F+ v" i
. y$ Q- b# A$ a8 O) G3 Z6 b7 Z' ^
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);6 m  A* x5 N4 ?! n1 i4 J

6 _1 o& }* k& B* p0 [, c, c        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));
$ \8 E6 D; S( H  p. v! ?5 p$ Q! J3 U
, R! H+ f8 D& ^- R        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
9 d" S7 O  [/ Y% p& }
) \7 ~0 Q& _& K}
: a" V% m: s4 y( r: K, o+ l3 |: u2 ?2 f$ _
' g( G% ~! K2 L! w8 h" w6 g; D
static void ad7606_gpio_setup(ad7606 *ad) {
6 J7 q& N. M  I) P+ U8 g0 y/ M! V        /*Set the AD7606_PAR_BUSY to the input mode*/3 d/ C, r8 m6 G' r! a! z$ h4 Q5 E
        //初始化5.11、5.9 、 5.5为中断口
: @4 s/ Q" U& n3 ~        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
9 d) N  @  d3 ~# f1 ^8 p6 O' v% m        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);' h. ^5 u  j! H- Q4 G' Q  l
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
$ z8 h; A* v# l        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);2 h* z/ u& M7 c) C
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/1 \5 }5 I1 c9 H" `% _; }
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);/ |8 h. {/ I+ j: n& c7 `; D# B
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
% {  ^9 ?" r/ D3 s        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);3 o& P/ }* y* w) H7 K! D
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);& S, c$ F9 h: ?0 u( `3 f" t7 Q5 h3 T
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
8 g3 W# @, ^7 h. j. R8 m5 f        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);" u  h0 J. ~7 w( U  P2 {
" R% p: c8 U# M( D2 R9 H
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);0 O1 b2 F) J" j! F9 G! l2 s
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
1 |9 i- y3 W- u* X" g8 ?        Task_sleep(1000);
4 [( h. {: g8 o) ^" U        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
2 q/ e7 I7 j& X, e1 v7 W* t        Task_sleep(1000);
3 D" D" T2 c9 b- ^4 x/ \: j0 y! w; K3 R4 D
        /*Set the AD7606_PAR_CONVST to output mode*/9 T, o% ]7 ?* k/ m, N7 a
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
9 t: y. k% l- S# z8 {- G( K6 y        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
9 `% e/ P8 U6 b& m7 ]7 @* r. z" Q0 \7 x- L  T- B& s1 v9 y# g- X# |
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);$ J7 K0 y, x- I% h: K+ L5 E
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
- i7 F7 `% B( k3 n$ z( D
! H5 g6 J) n0 o. \# ]# U}
' k) ^* T3 J; q7 m9 y$ \3 M5 v, g" m  g/ p7 _( Z5 G
6 e6 ?4 ]: {4 g8 i5 g
static void ad7606_busy_hwi(UArg ad_addr) {8 H5 H  I* ^; q" D

# n6 V" X: }& I* M; p' A+ h6 x# x0 C4 w# Y
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
6 ?' Z2 m' C6 X* ~        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
7 J2 G* ?# A/ ~% G; L  u  C% G9 \3 F* _  D" ]- @
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
; \7 \4 _, b. z! g  B* w4 D        {  @, n( g/ I3 p( _: E
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
. Z( A2 y4 M+ n                cs_addr = SOC_EMIFA_CS5_ADDR ;
) b# W* P: w" H! ~; h5 [                internal = 0 ;' B; H5 l% `0 l) L7 M9 q9 l; l8 i
                int_flag[0] = 1 ;4 A' H- v0 y* ?
        }" S' n! K; y/ Z4 Y; l
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
; l2 M- Y5 d: p5 c        {9 b" R0 q* d8 {4 k" a: {6 {
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。! W* g' K+ u! Y4 o9 q- C
                cs_addr = SOC_EMIFA_CS4_ADDR ;
! J7 \! y* P* X$ ?3 u                internal = 6 ;+ t, m  M0 h! n) W4 m  I, \
                int_flag[1] = 1 ;& R0 t7 _- [, w8 d  g* ~) Y% u
        }
' \3 O4 f5 c, F/ [3 G" `2 f: Q        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
4 N% E8 _6 P- Y, ?1 f' A0 z        {
3 t0 F# v% l/ [% l8 Q                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。! x2 J# u- i: T$ L, }
                cs_addr = SOC_EMIFA_CS2_ADDR ;
* u" k' Q7 L/ ~* U$ a                internal = 12 ;
1 s: f) b  F( V7 x/ D                int_flag[2] = 1 ;* p" R) l0 j0 V/ P7 z9 ?; Q
        }
7 i. Z  J) i- r4 N5 v8 R  5 M, z3 S% T  X0 _; O5 ^
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);2 g7 [) f: G( o% ?$ |+ k& m5 |+ _
      
- b3 Q" r, b' d( {        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);1 p2 S$ ]) [- i# h2 u8 n
}
! {3 N6 T9 p) z& e: X- k  U% Q  w7 w9 @( ~4 e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图0 u2 b( r, z9 \$ ], o9 v5 z' l# H

2 m9 J, N+ g3 G( y* e

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 15:41 , Processed in 0.038774 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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