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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
6 @$ n4 i! e) l# d' p9 v#define AD7606_PAR_BUSY_GPIO_BANK        5# C; _' q/ ~7 l
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
: ~& X) V7 O# n3 y3 H+ i; {
3 D. w6 F, M/ j5 ]5 s8 W#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11+ b. I1 \" @$ X& ^: N; H& F
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9* X5 A! k; }9 e
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
& ]) |. c( Q$ s. N7 q% m#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
! u7 m, P8 I* S0 r8 E" T1 ~. @7 k1 v/ Y$ X% {+ y+ Y3 B" }
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
" q5 ^* a* Y7 K' D: B% {. a/ r) Z4 o#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
, W- A: J  h: h3 r#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)1 m% x0 p# N2 ^( s! y& m
6 g: T' ]2 B7 ^+ M1 @

& B9 P! e3 _( X; \5 n% }" i0 {. B7 A2 b$ t
static void ad7606_irq_setup(ad7606 *ad) {0 P% _7 J) `( u) g& d
        Hwi_Params hwiParams;' `3 o$ k# N$ d, q
        Hwi_Handle myHwi;
% x7 O2 s0 E- ]( S% L        Error_Block eb;. X8 t1 Z  X) U' O" L! |1 W
$ G5 B; ^/ ^. w$ m) X
        Error_init(&eb);/ S; ^+ P( z1 j% |% X3 W& r$ K: i
        Hwi_Params_init(&hwiParams);
4 o5 G3 g' A$ x5 f$ F        hwiParams.arg = (unsigned int)ad;/ [+ o) n$ z$ p& B6 G+ y9 a4 a! d) Y* @
        hwiParams.enableInt = FALSE;
' ?, f- _+ V( `; p' ~7 ?. y        hwiParams.eventId = SYS_INT_GPIO_B5INT;
! G$ r+ V. ~2 u6 P1 ?        hwiParams.priority = 4;
4 E' l: f' e$ Z, n5 T5 ^: R- Q# T        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
5 p/ P# l8 d3 U8 }0 f  k+ H. h        if (myHwi == NULL)
1 m! T& O& x9 T) n7 J        LOG_FATAL("failed to create hwi");3 P7 d  e6 V9 q/ E; Y, x, q0 s

3 w% d& ~" _/ z! C5 _2 M        /* enable both interrupts */
  }: M0 D3 t* |9 C        Hwi_enableInterrupt(ad->irq_event);
/ N. \" x' d4 F8 y% {}
0 l; L! K$ \/ }% ~% t* Y- M; y
, J' H0 F6 u& F2 k- a% z' \8 m6 @9 ?: C1 W- |
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {
. h9 o+ [9 V6 G. k" R& H        volatile unsigned int savePinMux = 0;0 K5 ]' U; G: x& L) c* t# ~. u
        //初始化5.11、5.9 、 5.5为GPIO口
' M. Z0 @/ }# R- J5 i3 ?        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
% D9 U+ U* \8 }7 d% W! E" W3 y" e1 K. s6 @5 L. a
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);; `. t8 F8 R4 O1 F' s9 T$ p

% r" ^+ W5 T) L0 h+ q8 t" y        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));* l4 y% u. \# ]( l: D3 M

7 q, h) T9 Q  |# w        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);; _# V+ J4 `0 e5 E1 v' Q/ L1 e
5 M. L1 {: N3 c  P9 [
}# h4 M( g% n8 b: U0 o7 a
; f2 _+ G# d# R! c1 G0 T
+ `5 M  W5 Q. O% s& A' w: ^
static void ad7606_gpio_setup(ad7606 *ad) {
% b* l  X) @% P6 n        /*Set the AD7606_PAR_BUSY to the input mode*/
- t# x: b* D  W1 c" t+ \/ s        //初始化5.11、5.9 、 5.5为中断口/ Z1 |# U" h( g; R) `
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
6 v0 r( |$ g4 U) T" e" J2 r( W        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);' r- Z& G( x. z) ]6 z
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
7 m0 c& V0 F# @' G1 N. k2 ^  o5 f        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
" Q7 h) {; e+ }% D. t8 {' ^6 K1 i        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
" }7 Z: v& n5 G$ e        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
3 n1 i* k$ {1 G8 }% k: A        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);8 L% M1 a: ]6 Z# W8 |
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
' z/ M! d# x# y0 p  B& ^        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);7 K8 K5 \: \5 F: C. z5 t
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/. Q; \) ~% [* _6 y, d4 j  Q
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);+ x! k: Q+ J5 _
5 y4 i. W+ X( u( \1 |  w/ A
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);& z4 w. U1 E3 F. r( h2 P
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);/ {4 V: S9 Y' z. S8 ], I$ A, ?
        Task_sleep(1000);
" r' u0 ?; `; x- i$ x        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
5 \) y) `# @. y! r/ M* O& U0 d        Task_sleep(1000);
9 @0 g- I) S$ p& \5 A
8 {( p& @$ }/ M1 ]        /*Set the AD7606_PAR_CONVST to output mode*/! g3 ]8 Y+ K3 d6 |/ z$ {
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
# |/ w7 j/ g9 i        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
6 Q- Q- L" t3 \. W0 g- M1 O4 ]& O- P3 C3 A* ~) l# I4 |$ w1 y
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
" \- D2 [$ j5 _) c        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
( O! s3 ?7 x# x; P) m3 h" q/ }9 ~; `
- c) i4 S* f* ^: Y}
( m3 E# u6 I0 U1 c/ \' e- u4 n
0 L# }1 G, n( Y# c  P) t* z, n. w& d( {  M( A: O7 w: o
static void ad7606_busy_hwi(UArg ad_addr) {- u1 D- E5 H5 c( g
4 ]- U% c' z$ U& F) B8 E' V
0 P1 w& [% i8 U
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/$ S7 |" @; a+ X9 z
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。4 k# n2 B+ H2 ^: r
# K/ V0 D6 {8 p: X( C% ^3 p
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND). N' r3 }6 P1 x! o
        {
' {' b2 E6 h. f/ r3 ?                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
) s( a9 ~+ N$ ^: s1 j0 ]; z                cs_addr = SOC_EMIFA_CS5_ADDR ;
# e) Q- U; h- D  n% k- ^                internal = 0 ;; s9 w6 I! d+ n" ?: l. U' V8 y
                int_flag[0] = 1 ;
% T+ g2 x5 Z' ?        }8 v) K$ C0 e9 r" c8 O0 i5 i7 I- e
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
, T' j' m: \2 `1 y- B        {
8 c  u9 P4 u9 r3 R9 R+ t                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。; {$ x6 \- e6 l, h, ?' U5 _
                cs_addr = SOC_EMIFA_CS4_ADDR ;/ V" F/ H$ e/ N. I- l; H  F2 q, U
                internal = 6 ;+ `4 V+ B) l& k# K
                int_flag[1] = 1 ;. z) W0 c% g7 J) X4 ], j3 I  w
        }
6 z; E' @1 q4 e3 ^8 V! j+ M        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
% x+ z# E# |5 w  |, {6 h2 w& N1 y        {
1 G3 C$ ~/ B4 x, f                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。3 H# l% h9 ^# e8 N% e
                cs_addr = SOC_EMIFA_CS2_ADDR ;
) i! Q  u4 u2 n5 y* \" S6 `                internal = 12 ;- d* v, C/ }; @9 \! v9 z; m2 |
                int_flag[2] = 1 ;/ E2 n% T" R7 q/ G
        }4 n* q5 x/ @2 H  X9 \
  . G" m7 E' i* W1 \. E: [
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
! F" g" y: A) U0 A      
1 ^5 c9 Z  a$ t; Y% M- e8 S) l        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);( W; z. M, u& |9 ~8 B0 X
}
# S) t- W* A/ q0 l! }" N; c. i1 `
/ j5 o6 E8 E5 L
1 a  V% h" ^- B0 s/ B  k& ^6 R/ }+ A

/ o* `1 J: J0 Q- Z

本帖子中包含更多资源

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

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-6-17 16:48 , Processed in 0.039020 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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