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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
2 ]' g" R7 O$ ~#define AD7606_PAR_BUSY_GPIO_BANK        5: Y/ m: z# m" y: P- s
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
* u% o, n1 k7 k5 ~  |/ _& i1 y/ L  F4 O4 S  v- ^4 B
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11; U3 m2 c0 Z# p
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9$ Y: j8 Y9 B( f$ }
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
+ Q. B2 N. X+ n# V+ y" w#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
6 u7 G" Q3 i5 h4 k
6 A" T. \/ n# ]" i: E#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)/ a/ c  j- _; v7 ]) ?
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)3 X/ v7 U# b! ^
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
; \4 m' M. t9 E% W3 R; B# A- p0 K1 X, I2 t; Y

: Y8 h- P- H- Y4 r1 g* j( p* B8 B- {; k% V9 |
static void ad7606_irq_setup(ad7606 *ad) {- \6 M* }* S- s; P% J
        Hwi_Params hwiParams;9 }& w& u" Q6 d% {6 v: a
        Hwi_Handle myHwi;
3 ^* I1 @% H5 h) x) I/ \# g$ W1 J" T: c        Error_Block eb;- b# G3 ?% b& v" M

# _& J4 o- d# [! V6 u5 A1 N        Error_init(&eb);7 C9 N& i! Y- P6 v0 J8 ~
        Hwi_Params_init(&hwiParams);2 G. a2 E+ ?+ M
        hwiParams.arg = (unsigned int)ad;/ [3 ^! z# P" ], J9 h8 `: l
        hwiParams.enableInt = FALSE;
1 ~; q$ N. s$ I' x4 P( L        hwiParams.eventId = SYS_INT_GPIO_B5INT;4 s. B$ T: J- f1 K7 e( [
        hwiParams.priority = 4;
* T! h/ X% H+ h: v& a% i        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数) q0 b& B9 B6 \
        if (myHwi == NULL) 1 c4 j& |! ?/ d
        LOG_FATAL("failed to create hwi");
, E: `6 t* A! L# G0 X
' \  m% f% K1 |        /* enable both interrupts */& j0 k& O" `/ \/ p% b, c
        Hwi_enableInterrupt(ad->irq_event);
" q! h3 j+ ?+ z, N9 u$ E}
& F# g# w! h& X
, z! k0 W8 K9 v/ l7 P# J& y' t' W  ]. L. S% h. O2 e
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {/ i: U) a7 v4 x, i! j
        volatile unsigned int savePinMux = 0;2 s6 [. y0 u: W, B0 D
        //初始化5.11、5.9 、 5.5为GPIO口4 F  y0 y* u3 g4 X' x
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));6 G! n. f% o" i: W$ @' O

- S4 C* Z4 J4 f- u0 x! I6 W        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
% u4 D: l& M' _# Q4 v9 u- h5 {
* m( r$ L. g3 b2 e$ e& h& B        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));
7 k6 h! H: k( p5 c+ S( [! w) `$ N- z+ a" f6 i) w' j
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);8 Q; b  l% ]) s% E5 J. d
- r, P/ z" X8 j. z4 s9 m* [- ?5 z
}: A' x) b" L* T4 u) ]) s! ]9 g5 {+ z

+ E3 G5 \& p( B! _) m( s2 W( H$ `6 {4 B1 ]6 a; i! a! ~
static void ad7606_gpio_setup(ad7606 *ad) {9 [- A! p' }3 c6 y+ ]
        /*Set the AD7606_PAR_BUSY to the input mode*/$ s: U. k; T& S6 F
        //初始化5.11、5.9 、 5.5为中断口
$ k, e; K0 Q& j  P8 k: F8 A/ W6 ?! g* ]        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
7 K2 W( k$ O" h8 d$ @        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);5 d, D$ B& T  U5 c2 d& u
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);* d. W$ x: B) P: j4 \2 C& c6 ^4 R/ V
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
8 m" D* W' p  S6 S! M        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/( y7 z: R$ ^6 j* B
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
3 @2 S3 \$ P4 ~  n) _( I* `        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
+ t3 `. G' p" s- A: k        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);# B0 _) Q1 d. K6 L1 P' r
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
+ I! D+ F! j1 I% m3 l4 j2 M2 I        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*// S) Q5 S* y2 o" _2 @' @+ G8 `/ Y
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
+ G- ?& M0 n8 |8 g) T
7 c- n4 |9 x  t$ A        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
5 U4 T" R$ ]( W' J        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);1 ^, R0 |1 T; o7 |
        Task_sleep(1000);
  J1 R0 G' Z1 D$ u0 p8 o        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);7 C! z: m( f) ^
        Task_sleep(1000);* B9 N( W0 o; L1 o2 b% W) y

: {0 K6 l' l7 c( f0 N        /*Set the AD7606_PAR_CONVST to output mode*/' P4 q. Z9 J  c
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
5 ~2 E) ^2 H8 C        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);2 h2 f7 Q( @" u

  B7 }/ \! H0 {; ^        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);/ ^9 ~4 [! Q  F
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);; V3 B8 ?$ |6 t9 q5 F1 J

% i  P! l; i9 z. t- ?  t3 w6 \' q}
  F1 A6 |9 _4 n+ h9 B& s
" T8 F! ^4 @0 W6 J) \7 I
3 u7 u& A. B5 J+ r2 |; g6 ~/ D9 mstatic void ad7606_busy_hwi(UArg ad_addr) {
# ]7 N4 \3 s# q' R* u4 B! ]
2 \0 C' c2 v2 C( B8 z. C: M
  p! }! Y1 |1 l' L4 O        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
3 Y$ L6 S3 t5 T4 ^        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
0 W9 j0 F. k8 Y2 b3 K) o" i" P+ f0 @6 Z- T$ l: c4 b: C
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)4 J4 \. t: X9 w) r; d" X
        {! j, k7 P  K. F6 `( ]/ ^: }
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
& A+ c/ a/ v! b$ d  c6 d3 f                cs_addr = SOC_EMIFA_CS5_ADDR ;" p! S, m. j# H' x3 }+ Z
                internal = 0 ;! |( z8 z2 ^2 [5 j* w3 X
                int_flag[0] = 1 ;0 o$ a: P: |) X2 v6 }
        }4 |) M" e; D) ]3 j( h/ ?
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)) l& {$ w! w  V& u2 H1 l
        {
2 ^- ~1 V" G- ~2 _( X0 _                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
# o. E7 N- t: X7 k4 V# A1 T                cs_addr = SOC_EMIFA_CS4_ADDR ;  j, q% a/ h6 `+ F. U
                internal = 6 ;* Y/ `$ o+ d) J0 ~: |% p
                int_flag[1] = 1 ;
  `( }( i/ b( x* l5 a        }
6 ^7 y6 l$ [! O' X; o        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)$ k3 o' b3 J+ @: y1 e" N" K
        {
, n/ w) P  F( k6 G) S( n& ]3 J                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。8 m; ~, T9 m8 A, ]6 t
                cs_addr = SOC_EMIFA_CS2_ADDR ;$ b- S! U% b6 }1 B" R
                internal = 12 ;
% }' _8 L( d, B: c& h& Q% C5 g                int_flag[2] = 1 ;, l* g7 W" h# r9 E
        }! W- j) Q5 i7 o0 P
  9 s6 g  g2 r0 X- K/ n5 F
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);# p2 k. E% w5 @" e& i2 T. c
       8 h6 }; R- U  ~3 b2 n
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
! ]% {7 j9 z, @# V: T}
  Q; V7 L1 [' t* M' s7 A+ f  _$ D+ J( c0 n& ~7 p; \
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图
# }0 |7 Q& D* Z, c
/ f1 @* h, l2 k7 S3 J; B

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-14 20:50 , Processed in 0.046619 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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