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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:& g0 k2 {# v1 }+ d) b4 u
#define AD7606_PAR_BUSY_GPIO_BANK        5
# c6 n( W: N; g3 z9 i#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT# X( ?; S- M; y8 {( b+ j5 o# t5 L
) e  F$ o' |: v& i- s$ p- A
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11# q& `! [, d$ a, i  L+ r, {  q
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
& `, s9 O/ t) h0 a+ J" u& C#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
( o2 o. A1 z( M/ n#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
7 B  h9 Z& b3 Z+ U; M, F. p0 J4 q  D; [& I- r- f! c3 J  x+ `
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)& }1 }0 E$ f" s" L# S
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)1 L( d$ f, B4 L3 {) \4 A; V
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)' [2 @! t; o; V8 _9 ~0 a; O
9 P6 q' {& o/ s7 H* @  O( i
: F0 _) i5 q& ^5 H2 {
. y% A  l( k0 D0 o; G4 T
static void ad7606_irq_setup(ad7606 *ad) {
- Y( C8 I) N! _2 H7 C% X        Hwi_Params hwiParams;( \+ B8 I2 x& D2 f0 _& f  \( W7 P
        Hwi_Handle myHwi;
' A7 G; t' L: V" G7 j        Error_Block eb;
6 Z0 A5 d4 i. A5 Z3 `# L
( N. R2 n+ T1 y$ f0 k        Error_init(&eb);
5 J  R/ D' h, v0 _+ V        Hwi_Params_init(&hwiParams);
# }2 M& b7 ?6 M. x        hwiParams.arg = (unsigned int)ad;5 v+ x5 p% i  K7 r. G
        hwiParams.enableInt = FALSE;4 ^: f0 P/ [- ~$ Z
        hwiParams.eventId = SYS_INT_GPIO_B5INT;- ~. d* U4 S. u. ?: Q+ [* \
        hwiParams.priority = 4;
% X; ~) q$ t' a; h$ ]" Y; y  P        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
- y8 D% x3 b' t# E$ T& }        if (myHwi == NULL) * r6 I$ W  n4 f$ U8 X1 f
        LOG_FATAL("failed to create hwi");
: W3 v1 }8 n# k; s' X4 w: n* W2 W& S
        /* enable both interrupts */( q8 D- B' t  o7 O$ o6 x' E8 t
        Hwi_enableInterrupt(ad->irq_event);
  S- ^0 L! J4 V7 b8 d$ ?}
. Q: `- R& y% P
; R1 f% @( I# \1 \! _( x) R0 ^6 y% C
! a" V" P+ S/ Bstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {4 X/ I8 g& u; X+ p0 }' K
        volatile unsigned int savePinMux = 0;+ ^* F# y3 H: d* y& B) w
        //初始化5.11、5.9 、 5.5为GPIO口5 c5 Q$ d2 S* D! A" r4 K8 t" v
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));. d- ^6 W+ ~# W9 ^- W, Z
3 ]+ G* @( [! f1 K4 [+ A$ @" X
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
3 a; U1 S6 C' d1 @1 i) A8 J; {+ y) d; B# k( v0 ~' i/ j
        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));3 ~% q. r' x- t7 R0 z7 y: F- |
. n, _1 V0 a0 b! j9 t6 x. y' H1 x7 t
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
0 y  ?$ @0 ]  h1 o% c" J& n% T9 V2 v5 }- l7 L9 A" N: X4 q2 R
}
( u  K# D0 p! k9 H0 s7 A& U$ I
, Z; B: ^7 U- t$ n! Q0 B) [' `+ [. @5 j6 ^& `) J) Y5 f/ ~$ M+ q
static void ad7606_gpio_setup(ad7606 *ad) {. p5 M0 Z/ Y* r* R- H
        /*Set the AD7606_PAR_BUSY to the input mode*/
' @/ a) c0 g) H" Z        //初始化5.11、5.9 、 5.5为中断口
* d, V. X) A) x        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
& g7 Q) V1 c$ J+ ^' |/ U0 n$ F        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);" X# G9 [# [, j5 c$ r9 h- w
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);, ]* t1 {7 [) f: g9 ^" X
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
& U6 h2 H4 o+ L8 U) C4 j7 U        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
$ X8 }) e. i6 ]        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);0 S  v6 B; x( p) l. }
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);7 T9 ?! x3 \. \$ T' J: C
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
$ w5 X+ K/ [7 ^2 J        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
" ~3 n( ~) E# p7 _: o        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/4 ^- e0 O4 u. Q, I8 J' T& J
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
6 c3 N- `+ u/ `% y3 n
; R% ]! `7 M5 f+ J2 C- e        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
* y1 U3 r: o: z4 D2 P6 y1 F0 u" Q- ?        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);/ R% i* b9 ]$ K& f/ P7 y; C0 B- Y
        Task_sleep(1000);
, X) W3 N$ P9 A2 t        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);0 b5 J9 E7 Y* [0 X. }
        Task_sleep(1000);$ u- Y% T7 E' f4 V) f7 A; j

( N: w6 |0 `: D6 z  N4 u- X2 @; j        /*Set the AD7606_PAR_CONVST to output mode*/
  c6 o# `5 M) R4 L        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
$ Y2 V  U% H" o" Z        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);: m( e$ z& S8 v+ s8 \: Z

  c/ M/ W$ ]' o- Y9 @        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
' o" Q0 F5 X( A% J1 `7 L& _        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
* S' @2 ~! Q* X+ w( \4 b$ l, T( _. y8 @3 r  u  k5 y+ ^
}
' x3 L% r1 P( i# b* O0 U4 ?
" ~3 Y9 @- x0 w4 Q7 o" X
$ K( S. C: b- m9 q2 o: ~9 s6 {static void ad7606_busy_hwi(UArg ad_addr) {
* V5 g9 u6 y; x$ Z- S0 y& Y7 V/ j, S& T, P8 U
4 h& L$ N& c" ?1 E" j! y
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
4 V$ Y$ D" u2 q" l3 w& z% n        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
# k% t3 {( h- C3 I3 r1 s9 L0 W. z  ~( P0 q5 \* e# x$ Z6 n
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
" u& ^2 A6 P0 h4 v+ ]        {5 ^" u! f% S& h$ v
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
. K- d+ x( \( }, {# K                cs_addr = SOC_EMIFA_CS5_ADDR ;9 E( b  m, f* I0 J; V
                internal = 0 ;5 l+ ?' n9 K# P) |$ ]  w" G
                int_flag[0] = 1 ;
( ?; T5 w6 ]! K5 @& z        }- B) l0 P( Q$ a) g; ^3 I% o- e
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND); P2 B7 V) H% D8 Z5 d) c! ~
        {8 S. e& ]" I: _% j0 n$ S* ~  ]% r
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
8 s1 X8 f+ Q* B8 S/ j& K1 q# f                cs_addr = SOC_EMIFA_CS4_ADDR ;" x) |: O4 `% J6 }8 R1 K
                internal = 6 ;2 y6 z) {0 m! p$ q3 a/ S" Y
                int_flag[1] = 1 ;
% i& Z# k+ Q+ D, o        }
, g5 Q( ^) v1 v        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)/ |# w' T. d) d. }4 C/ [
        {4 Z3 @( V, x) T% I, S1 U! ^* r
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。& `& s. |3 D( {9 B! F
                cs_addr = SOC_EMIFA_CS2_ADDR ;0 k, b8 Q3 U  y
                internal = 12 ;# H/ h$ u& i3 J! T- q7 J( C1 J3 A
                int_flag[2] = 1 ;2 d0 s' @0 ]9 B7 Z, U( \, W
        }& w; e' x( K" z. z9 L/ R( Y
  2 n7 B( }  N% M5 I
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);( I/ H! l  k2 o0 K2 h) R
       3 k5 s% @9 v: [. L+ }  Q- x
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
2 Z  k6 h( l4 ]6 F5 u6 X}
8 Y% J, J2 Z" o" u3 ^* T' q
- E. D( H+ h  V. [8 ]
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图; j7 E1 K! w1 z* `2 Z6 T
) _  \, u* |% ^( f" u7 Q

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-16 17:56 , Processed in 0.055766 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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