sysbios hwi 端口识别问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
1 r* r( T: a" ~4 J- ]$ H#define AD7606_PAR_BUSY_GPIO_BANK        5/ P/ @$ |/ [1 R" a" o$ k8 ^
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
1 R0 j$ }+ _0 ^  f: l/ Y1 H* T
, ]! _' P6 {$ A7 D) `, k#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
7 h, ~  A+ c4 H3 n4 N  {#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
, ~0 C$ T; Q7 h0 X  k3 M4 M#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5. n5 @, \6 C' Y% y/ j
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
+ }; ?# \/ u' O4 b& d* a# M! ]+ n9 P( c4 A: b- u1 s7 x: }+ Q
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
* j4 d* }8 R! I#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
5 C0 ?3 S( K! \+ S; C/ e5 k#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
6 _4 k8 K  f/ K9 P9 {9 x. T' {: d) n6 w

8 V% C: O4 M  M( M
. s: X' v0 c1 y$ p2 F& x* Wstatic void ad7606_irq_setup(ad7606 *ad) {
; D) C1 n9 T% g) a: u0 e0 V5 i; x  q, e        Hwi_Params hwiParams;+ }" ]% r8 l! C0 E
        Hwi_Handle myHwi;
+ V+ A" Z2 f, o+ ], N& k        Error_Block eb;3 S" ]& p- t0 {; i
9 J  c6 [- F9 ^; g
        Error_init(&eb);# ~$ N8 G" o4 m# G$ M: K# s" \
        Hwi_Params_init(&hwiParams);( ~# G* w# M9 _" Y( e
        hwiParams.arg = (unsigned int)ad;
1 |4 ^2 o5 |( Z$ b* `        hwiParams.enableInt = FALSE;* t9 O  r+ a* L/ J
        hwiParams.eventId = SYS_INT_GPIO_B5INT;  Q; {- D! i9 ?6 m& i& V
        hwiParams.priority = 4;
- J0 [# o. S6 |! r+ s' g        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数/ Y$ N! {  _) D) W. B
        if (myHwi == NULL)
! \# m9 U7 Q$ ?) U: q% ?$ G        LOG_FATAL("failed to create hwi");8 G+ [9 J1 G( \
$ X% n8 V1 R5 {9 z
        /* enable both interrupts */2 R) Z5 u, p+ A, P/ m$ K6 i. M
        Hwi_enableInterrupt(ad->irq_event);
* U2 L8 c7 l6 n' G* j. ^# \0 j}
. B( W: f0 e/ t9 ^) L4 O  L0 J8 ?+ J- P: y0 M- c& C8 R/ a" m
" v& {" l3 T$ V7 T. A# p! y% J
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {7 Y* O, S9 R2 \  V( q. k
        volatile unsigned int savePinMux = 0;
, f( ~3 _( X& q3 w; M0 b        //初始化5.11、5.9 、 5.5为GPIO口
! z5 H" G1 u% t) s% R        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
& }. m; U! Q  l" t" k0 k& B3 w7 v
2 O4 o7 m; L  l6 U        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);, a3 ]. ~" k$ O3 l5 E

# j! E9 g- C& R: E- g        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));
) `% z5 D5 u" O% t# Y% r4 D" N$ \5 A" H
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
( N5 z" O( x! O/ m8 M& g3 x5 A. ?
/ L+ H! a4 k+ V* G+ W}# F2 i" w; C0 Y6 U

8 Y6 P# r: a4 I4 y1 p0 i0 S* ^- T1 d& Q0 I* C& r# t
static void ad7606_gpio_setup(ad7606 *ad) {
$ W8 C; E) a1 C, J8 `        /*Set the AD7606_PAR_BUSY to the input mode*/; E. X' f  a5 D  r4 t) j6 [
        //初始化5.11、5.9 、 5.5为中断口
3 u0 A; n, O2 H. @8 Z        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);. A3 M: O+ |3 E
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
  @6 `1 _, w3 @. }7 q0 M        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
2 P- b4 y2 {0 M) N+ M- Q        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);/ W3 g8 o6 C8 _
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/5 \# q- z" ]$ Y, m- m# x( B
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);) V; |. Q5 S1 r; N) J. I/ y, S
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
" w& N! t/ ~. k, R        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
9 M+ j  H1 W% N' z! U        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
) V& p$ N' u, T6 k$ w        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
. H5 u, H0 T1 B$ n  x: k4 ^4 S7 z1 T        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
* Z: g9 {- h1 c6 ]) O) }* d4 j7 M$ G  o
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);( `! k, d- b: B" ?" M/ T8 A
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);$ x  e$ J# Y6 a* L. n$ x
        Task_sleep(1000);
0 O: R6 {  j6 M: F        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);6 \  m) _+ @, i! E: a6 W
        Task_sleep(1000);
, o$ q5 G2 D1 q! c  s
0 v8 m) Y8 N9 n, b$ R8 G: o        /*Set the AD7606_PAR_CONVST to output mode*/
' I% S/ C0 G# M        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);+ j4 T( b$ }. i! l" A3 `
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);( B4 U9 I4 Z* s: C( [' X

( C0 z% k( }( T" R1 N& G        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
; C1 |- r) {! H5 d        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
5 e  H, U# v% ]. p7 o8 L# ]0 G7 p
}3 u: y( z4 F0 y" X) D! T

# m9 x1 X  j9 M  ^3 ^& L! |5 q$ s* W: D) s9 }! R# r  L7 F5 V' X
static void ad7606_busy_hwi(UArg ad_addr) {
, ?8 ?! A4 i. b4 ]
+ |0 j+ w: b% U+ l  D8 _
, ?7 z3 g; N% f5 b! J  ]8 Z        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
& [: G  e7 m- C4 d/ Q; G5 U        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。  l8 C6 Z9 l0 {- N. m; P6 e
: ~  s' c; O& U) F3 e8 F
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)6 y3 ]9 }; E$ q
        {
. V9 Q& G( a0 X' \9 c9 k                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
2 n  _7 V5 K/ ~4 w( Z- _, g2 x4 E2 c                cs_addr = SOC_EMIFA_CS5_ADDR ;
. O4 r% Z8 W: {8 B5 t                internal = 0 ;
2 G7 c; p1 t; C, f2 Y* D                int_flag[0] = 1 ;
' Z" M5 ~% E* F# r( I        }8 z4 Y) W  y* r8 u6 ~
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
# A$ }% `1 X" K% D9 @; a9 E        {
* ?9 W% b4 g" E2 E5 }" Y2 z$ y                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。" p) i7 a5 g2 Y
                cs_addr = SOC_EMIFA_CS4_ADDR ;
3 [# \5 ^) U0 ]! W3 @4 y+ ]- S3 U7 n                internal = 6 ;
0 p9 H# [- b- w7 D2 N) a) l9 o                int_flag[1] = 1 ;# ?* w8 m1 `% G3 f" i9 E$ u+ C
        }. C: x/ O* c" ~6 h3 Q
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)* k8 e* L: S3 O+ y0 q
        {% U/ ?' K( w( F% M
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。1 x/ ^7 Z) @  o3 }
                cs_addr = SOC_EMIFA_CS2_ADDR ;' x; z$ a+ Z( F& |
                internal = 12 ;
% Q( H/ T$ r1 Z9 C0 p& z; p" _: S                int_flag[2] = 1 ;
1 H7 ^: h& ?9 b1 _' p7 D6 |        }. }4 e# m# P7 K" w& B; n3 T8 q
  
7 w% g! m* K) G5 f3 q3 P" W        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);8 X( a2 A; J# }
       1 ?+ g" O# i3 W' Y
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
! p6 \( k' D) C3 m. @}
1 o* d: M. j* A4 u
% s6 r, O7 p! W3 f6 C. _6 z3 h  D. T' w" t3 d

$ v9 I4 {( }+ o2 L4 \2 t" Q# M6 h) K! f  F9 q! S4 J- K

本帖子中包含更多资源

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

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, 2026-1-31 12:31 , Processed in 0.044012 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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