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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
5 o8 E) R4 w, b$ P& s7 M#define AD7606_PAR_BUSY_GPIO_BANK        5
, I% }) U% X8 A# g) b7 j: q% |#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT; L0 Q' F1 N' _& q
) n" G9 K- x: o: b1 Y3 K& G' C
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11$ b: _* L1 a( t6 n7 p
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.98 H: s5 ~4 P) }* X$ U
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5- E6 N$ w% P7 e  e3 y. K+ b
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)7 \" F0 B+ K  f$ C
0 r. U5 ]3 z4 y$ Q
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)! p+ s. O4 o8 l8 o) h% a- v5 D
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)& Q8 D- n4 h4 _' R
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)9 ~4 x2 M: l/ Z9 u, a% \! r1 H5 u7 g

: C% u5 l1 _9 W" Z1 N0 b% ^* E$ |3 K
: T4 H0 j- l1 j' R
  _. D5 [$ ~/ w  i8 E6 Qstatic void ad7606_irq_setup(ad7606 *ad) {
/ Q  G+ c- H% y, r        Hwi_Params hwiParams;
) D# F' u4 U" O" u7 h% @$ W0 S        Hwi_Handle myHwi;( H4 k0 l, t& V7 p' m
        Error_Block eb;( X/ @( m$ d3 b$ p7 U

5 D$ Z' @) g8 q  c; {: ^        Error_init(&eb);& x" u; Y9 N& P+ [: t4 G: ~
        Hwi_Params_init(&hwiParams);
1 ]) a% p3 y0 }, i        hwiParams.arg = (unsigned int)ad;
: F6 i# m- Y/ e) ?. t$ ?6 ?        hwiParams.enableInt = FALSE;
5 o5 G9 l- {7 }8 E( Q        hwiParams.eventId = SYS_INT_GPIO_B5INT;! H0 e6 p8 b! c! O# C
        hwiParams.priority = 4;
# V& n8 `+ l: \! x0 }        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数  m/ K: o- |" d# a$ Y: J, T
        if (myHwi == NULL)
5 }2 O) p, {6 n: x. R5 A: ^1 v$ J        LOG_FATAL("failed to create hwi");: T% i2 {( L( e8 ?: T* a

; B# H$ b7 R: H3 V& L        /* enable both interrupts */. L/ Q, R8 B' ]0 W3 K) D
        Hwi_enableInterrupt(ad->irq_event);0 M) Z; G$ t; f0 I% Z
}
  I: Q+ Q, M+ W' F, G' y+ W8 {
. s  h4 H. @, g- D# O" }
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {3 s6 }0 T6 V! c2 @3 ^
        volatile unsigned int savePinMux = 0;: A0 A$ G/ ~" R4 B, L2 s% x
        //初始化5.11、5.9 、 5.5为GPIO口
7 n0 i# }: n5 V( c0 h/ _        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));" m) n2 t" \& a# ^- C
/ u% G" N/ y: `
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);& {8 n8 Q, p" ?; ]

# |- J% k4 C; r1 [( N/ ~, b4 x        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));- E6 i* g+ o& R' K2 ~

$ D4 P; i9 x7 g# a' L        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
+ X+ ~$ K* M$ r" V& _+ V0 \: Y: Z3 `5 u, X
}& k4 J: I4 |8 M: O  Y, _
8 t7 o, O/ d2 E0 z7 f0 Q
1 c3 O; N' |/ O0 m
static void ad7606_gpio_setup(ad7606 *ad) {% o- d& L9 y) b, |
        /*Set the AD7606_PAR_BUSY to the input mode*/; y! r0 ?! I$ u2 _* D) ?
        //初始化5.11、5.9 、 5.5为中断口8 d% F& i: M" Y! Y
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
. a/ u% }" o+ [! ~5 |, v        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
) N! p# ?/ F8 T        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
: X/ p  y" m; j. l        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
9 j- V$ r. @8 r1 Y% j0 v; v        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/5 a$ w# e; H6 |
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
* ~2 r9 a, U. n8 L: f" a        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
/ W- X) e1 }4 L6 p2 D0 t        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);! [* ?- f9 i/ W
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
4 `& e8 x. g+ K4 S" I1 j; ^- m" M4 h        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
5 ?7 M9 i9 H. s        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);- ~+ t7 z0 C/ \  N& Y! G- u  X. H
! U# r) m# g7 P5 d2 X0 Y1 {
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
  m. e, H1 [' @5 M# J  d        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);9 K: U4 m: s' F, N, K
        Task_sleep(1000);' V( Q* o  e, {+ A
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
3 k2 r4 h$ U, b        Task_sleep(1000);4 I  d9 k* e4 L9 ]
/ E& `1 i" I. M+ g# U1 n
        /*Set the AD7606_PAR_CONVST to output mode*/% U. l4 K6 l  }: M
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
7 l. T0 h7 p: c. f$ h" `  @        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
5 h9 V4 Q9 H6 @  s$ z4 d+ G- D( b$ M0 \/ W( d. X# c
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
& [9 U  Y" d! F3 a- I7 r9 U# `        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
7 L, e! l- k9 `: N% @5 v* A- S1 b; {0 \
}
2 x! [3 |: g* L- I2 l
! R; y( {. c& K0 y* N% P/ J
/ z4 C: Z& J7 s& ?* S; Xstatic void ad7606_busy_hwi(UArg ad_addr) {
: S3 f& T7 D: I
( t/ K6 {/ E7 i( D0 @
* A% ]1 J. Z( a' t: s' d        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
6 Y! N3 u5 i8 g, @1 b" a  B        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
( y0 g- b! i+ s0 @7 ~( X
* t" A# M8 Y' V' D# ^9 W, P4 U7 m        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
8 w! q* Y+ r! J        {
, r! u& ~( U8 h  l                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
9 u3 s5 t; u& M( l; a  t                cs_addr = SOC_EMIFA_CS5_ADDR ;9 Q* N- y6 X% [* Y! R6 Y6 ^
                internal = 0 ;9 ^4 Q* z. u, H2 @
                int_flag[0] = 1 ;
; t1 B. \1 @- w        }* ~# n4 X' ~/ m! Q) ]( k! s
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
! W/ K6 a4 f7 H# f9 e7 H/ S$ B1 }        {& N( O& @' J3 z6 y" H& e5 I
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。" j. Z0 \. @+ b$ d/ ?+ j
                cs_addr = SOC_EMIFA_CS4_ADDR ;1 C) H0 t/ F- \1 p, w+ y
                internal = 6 ;
- o" r& a/ y- ^7 [4 c                int_flag[1] = 1 ;1 _. {$ H# s3 l3 a8 p7 h' u
        }
5 v3 }' R, J2 L; q" I: Z        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
  ~5 r5 [: N. A* Q: ?% {, e        {
& a, Z/ E! h5 ~                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
3 @9 r- j6 z* [7 Z                cs_addr = SOC_EMIFA_CS2_ADDR ;4 _1 @/ _# W7 ^* J/ E
                internal = 12 ;
8 b) u) u: `. O* P7 H& Q2 n0 D                int_flag[2] = 1 ;
/ `" q. j4 C# {8 n* C        }
9 L6 c& I3 r; N7 b) a( I  ( Q' m1 z0 i3 G! j  [1 H2 M1 r" O
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
6 B% L' N, a6 Y9 X( A+ C! S      
/ i+ P# @) ^7 D+ S6 W        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
  P5 |7 `+ P4 r; [}" x" G4 |+ H& ~$ f

; m* V0 q# E: _2 w3 n4 t) N0 J1 H
2 c4 M" l, K! y/ H2 L& [9 S! s! ?+ w5 N- M

0 F: `9 e! e; ]7 d! c0 `" e5 M

本帖子中包含更多资源

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

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-3 12:04 , Processed in 0.040030 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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