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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:2 _- S( i6 u1 N
#define AD7606_PAR_BUSY_GPIO_BANK        53 _* k" \5 A" @6 z9 B1 e. q
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
4 n& Q  x) W1 U6 N* z7 Y6 Y5 \7 {! L. s; V( w0 Y' N- s
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
# h0 e# X" K- o7 T0 _8 L( |7 F#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.96 Q7 {2 V9 b& i4 x+ K0 M, \+ v
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5, m7 c7 h$ ]- o6 f
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
' S/ I) `: o. L6 ?: S: ~' a6 g; W- Y2 S8 I: t
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
9 ~& x6 _- i3 b% r7 T$ r" V9 Z/ p#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)0 S$ N  m; k$ O9 ]9 l
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)8 O. q9 K+ M' L

2 y4 j. U  }4 x( z* x# [, J* u
1 r" g+ t+ p, v; \, O
  m" `8 C9 j, l8 i/ |  a; \( xstatic void ad7606_irq_setup(ad7606 *ad) {: Y  f; f$ O" m2 Z
        Hwi_Params hwiParams;" t, I4 s  u# W% a' s
        Hwi_Handle myHwi;- b8 i0 C4 L! X# I9 z+ K
        Error_Block eb;
! o! \& e; ]  i. W
# g1 ~* e* s- h* l! v1 D9 J& z        Error_init(&eb);# D6 d2 e" W- {0 m- {
        Hwi_Params_init(&hwiParams);
" z  x6 ^# Z1 |* ?  U% H        hwiParams.arg = (unsigned int)ad;/ \( O# G+ j: D  q/ a( t7 h
        hwiParams.enableInt = FALSE;
1 Z9 N9 l9 E/ ^0 i& G, Q        hwiParams.eventId = SYS_INT_GPIO_B5INT;
3 x6 h& z% s5 s9 Y        hwiParams.priority = 4;
: _5 ?9 M: O, _. i        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
: N* J, `6 n' t* l1 L& x4 ?7 ]8 C7 J        if (myHwi == NULL)
& W" e7 F0 d9 k  l! V- N  u        LOG_FATAL("failed to create hwi");
/ C! s# w* {0 o) q& Q
6 K  R& ]2 y' m( v# Z        /* enable both interrupts */
2 P' H& o: {1 \4 O        Hwi_enableInterrupt(ad->irq_event);
/ O. [7 Q' L: B7 T' r}9 ?' E9 c8 u; \+ @

1 R( l4 R$ B2 Q/ {: t1 B' K
5 _3 o  L& \3 M1 ?: ]static void ad7606_gpio_pinmux_setup(ad7606 *ad) {& Y) {& Y( U1 Z% z+ v; H
        volatile unsigned int savePinMux = 0;
  `8 Y9 ~: Z: Y% T5 S' m: s  P        //初始化5.11、5.9 、 5.5为GPIO口+ I9 [" ?; M9 ]
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
6 e, @% B0 }4 E" F# `! m; N, K5 C" N0 \
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);1 j+ i  P0 n2 n$ X. [
1 z" B& K0 a( Y1 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));' E. z; S5 g# g) ?( l

* O  N5 L- J3 t9 r/ Z; c' z9 A        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
( w! |  C) b+ l& S$ l$ O7 M! k
# @4 k8 I4 g5 v1 M7 L}, e  X" [1 e- W0 d: p( j. [
; o) n3 n9 T( B; S" c$ S5 ~+ h, Z

0 ], I5 E2 [5 p. U1 o. }static void ad7606_gpio_setup(ad7606 *ad) {
+ P( q6 u& p" c+ D. t5 F        /*Set the AD7606_PAR_BUSY to the input mode*/9 C0 r% W1 `" n# h! H8 z! H
        //初始化5.11、5.9 、 5.5为中断口/ O/ {$ x2 q! v) h$ }
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);+ ~" X7 v1 t( F6 L2 h- Q9 H
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);; w5 W4 i7 _) H6 Y" N9 T
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);! p) S; Z1 ]' p8 c% A4 j. m
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
' W; x1 a6 D$ m        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/9 f( r' D  M% x+ H
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);, V) E5 R! v" v, s  M. E' u& U; G3 p
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);* `3 g3 `; M& q6 P+ F
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);0 `* Q  g2 p& r4 i7 c0 c6 ~! p% F
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
/ r+ T  b; w- b9 e* q        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
( Q* t3 V: H8 E- Q2 x# ]: g' ?        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
9 L& U1 d) G- W2 I0 P# P' o. w$ N
9 w9 j/ P$ b, S4 l, Z; ~        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);0 j& `; s7 ?) \- K
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
* M- r" ]/ v. [2 L: c        Task_sleep(1000);- i8 y) {) g8 u; j
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
  d3 g. J- R( S! N) I' C        Task_sleep(1000);& U6 `/ m5 b. E  T7 ?. M. y1 X* `

  ?3 ~  p4 ^, X$ V: F1 [        /*Set the AD7606_PAR_CONVST to output mode*/
" z, a. o1 N- N" W4 Z        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
% X; p& Q( |/ K6 X' B        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
2 p, P- f4 m, z  F; J$ [4 ?; D# P( B
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);: r) e( v9 [  G/ s
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
/ X) W+ l8 r9 J* K# x' j, h' [: l# u
$ k% L$ ^7 o  w& N2 N}
% c6 T$ @/ @8 ]" S1 m6 k+ r+ g4 n, c& g, ^

/ _2 u5 }% a9 A7 {static void ad7606_busy_hwi(UArg ad_addr) {
: G/ O% `( W7 o  U6 Z  L$ X, h# G+ W% Z. a% K! q

9 a  X. e4 z& E% h8 }( N        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/! p: j* c6 Y6 M8 z1 ?+ v) f
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
: |5 ^$ C0 B: W
& _. l* K& J2 F2 Q- h, \        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)( O. p0 X5 S9 V2 {& F- X: y
        {
& \$ d$ A& X# O, [$ u5 Q                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。) e; M7 i2 T" h# M" ^/ P% L8 t1 B+ a
                cs_addr = SOC_EMIFA_CS5_ADDR ;
# @# v- x6 n4 d& \  D6 K% b                internal = 0 ;0 w# ?9 r$ Y& b  g% U
                int_flag[0] = 1 ;
% P' }; E+ O" v" Y        }
" C. b. P. u* m4 z# B9 T        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)( ~! g8 V+ M$ U6 l9 }$ o
        {
9 Q, Z  u7 [. l' _4 e% Q                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。$ c) C3 K& c0 E5 R/ ?
                cs_addr = SOC_EMIFA_CS4_ADDR ;
3 l+ V* n* Q9 d! W4 x( v* D8 j                internal = 6 ;2 ?& j4 R9 u+ b* l% t% ~" H
                int_flag[1] = 1 ;# w7 b$ J, t; }* Z$ T  W
        }
6 `' o+ Y9 b% ]        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
2 v4 x+ N( \% H        {1 \4 j" K5 z, f8 e* P4 I' {( s& J
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。5 b: d( A7 h2 D7 N& [
                cs_addr = SOC_EMIFA_CS2_ADDR ;
( V* A$ g0 X: S6 }1 H+ Z* m                internal = 12 ;3 R1 n* f  V$ T, F( `
                int_flag[2] = 1 ;8 k' l3 C( Q: f, \
        }& `% v( I& u" e) i3 J
  
2 t6 X( y+ h6 R& I9 A& i        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);$ c- f% e$ h# ^7 h0 O, ~! Q
      
/ d9 n  G. q: t2 H2 k0 k/ C        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
! b( ^0 P; g% C- }2 U' g+ D% z}
" W* N. t6 x8 c! \# Z2 o5 x
. c/ E* ]: s! I, n5 ]9 b) F2 K! q* x
( ]- b1 s7 n3 i/ C6 z

' M; W1 H) t) x* g/ H' I

本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-9-18 19:35:35 | 只看该作者
你用单步调试,step into看看相应的函数值是否发生了变化
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-4 07:00 , Processed in 0.039268 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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