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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
5 J0 d/ A, f0 p9 W6 l* ?#define AD7606_PAR_BUSY_GPIO_BANK        5) q6 H2 m2 b/ y8 r$ c7 N6 T
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
& K- n" s& X3 A* S+ u/ i. ^. h1 e0 s( l6 }' U# H  k
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
7 t3 m% J7 d: ~& y( [! l7 |8 R#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
5 ]6 C/ ]! x1 W( J#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.55 p  W1 q' I: L. t0 Z/ F' u! \
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)& \7 \* R1 X* @) b, e: D- C; r
9 {' |- f  Q, i  h* P$ g2 p) Z
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
$ ?" @* }: v: u- @7 O9 g#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)$ a5 K( v  M8 A8 S. S, i! x2 R: o: b
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
6 V# I3 g1 W/ T; S* C& ?5 K6 [+ n6 Z

' H  a4 p" s) g2 w6 A1 q2 }
6 [1 |+ Y0 v7 Y$ xstatic void ad7606_irq_setup(ad7606 *ad) {
- S5 D, h. q2 d4 q        Hwi_Params hwiParams;+ `4 d# G9 o* B& O7 \
        Hwi_Handle myHwi;
- U  X0 d' @1 a" T& o. ?4 \9 \        Error_Block eb;. H2 K( \7 J/ ?9 i0 ]- w2 _* A
, s2 G' s# H# t$ ]7 C. z5 ^, U% i
        Error_init(&eb);3 R5 m( ~) ^3 H4 b
        Hwi_Params_init(&hwiParams);" @3 g+ \8 I" N8 ^  h0 }! E
        hwiParams.arg = (unsigned int)ad;  X& G7 d3 x" ~/ c4 r* o
        hwiParams.enableInt = FALSE;
/ q/ P/ y% o+ @3 j) \/ h6 s        hwiParams.eventId = SYS_INT_GPIO_B5INT;4 ?2 m% D8 Q" l9 I) U, ]9 P7 c
        hwiParams.priority = 4;
( L- I& u' _1 T" |! ^5 Q% i        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数% h' L3 W8 Y2 e2 g5 D
        if (myHwi == NULL)
6 Y* `5 Q# @$ b, ^* }. @        LOG_FATAL("failed to create hwi");
! o5 V! Q" O+ ]5 t
9 `" G6 ?3 ]1 Z9 Q! T4 g5 V        /* enable both interrupts */
1 b7 e2 J. d6 h( H* J" W; T2 g2 p        Hwi_enableInterrupt(ad->irq_event);
9 e5 k. P& [. }) B! Q/ r/ \}: m9 ^3 N  u2 ^. P2 C* ~- x
& W) U9 R- F8 ]3 y9 P4 P$ ~

, V) }5 s$ X2 U+ [. r* ~static void ad7606_gpio_pinmux_setup(ad7606 *ad) {
5 }+ D5 j8 K8 X4 j2 a5 t        volatile unsigned int savePinMux = 0;# T. {# F; V# O+ @4 L
        //初始化5.11、5.9 、 5.5为GPIO口
5 z6 ~  }& O; A" M% o        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
' e# C9 B! Z) o+ Y1 I( F
( E( X' L) Z& Q( u: s0 F% J) e        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
1 @  E" Q( z2 F$ b
8 y9 y2 S1 y; _5 O% m( 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));
) O3 n1 e* z% [- C: Y; ^" }
- \8 h$ N( F8 f2 `2 ?        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);% ]; p2 F4 W' `- L2 y/ j7 s

7 {+ b( ]5 y/ f% Q; Z% `6 R}
/ O! _4 ]0 H) w& F3 {& g$ A8 m9 S# n) C
; b' C0 J! B7 k$ }+ {- w1 M6 b- ^
static void ad7606_gpio_setup(ad7606 *ad) {6 N  v$ d6 m6 q
        /*Set the AD7606_PAR_BUSY to the input mode*/
% t' U" U3 J/ ~2 J# M) z        //初始化5.11、5.9 、 5.5为中断口
! k, t2 u' B. x, `- w7 Q" m# E+ U6 I        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
+ Q+ _; r5 p' D        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
& x9 }$ s! ^) A0 Z, ]7 l        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);3 s) O" W1 Y% c0 [
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);7 h+ {2 ~8 u& O" v9 n  w
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
0 n7 O8 F7 [1 X; a. W. q        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);  U0 |. X0 R2 a. K7 c3 }) o
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
5 z6 N( c3 W- h4 }! N2 @        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);8 X6 M; C2 m9 h- N3 E& p
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
( D0 q* V/ ?. O3 a& _: E        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
8 r" W. `# N! I6 C        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);  S2 A" L  y) N* b* }) H

' d* t  w) h  n        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);; D" L2 y) [% W& o& |
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);7 O' i, X! R# Q. j: B, R
        Task_sleep(1000);5 R- ?  Q4 w4 P
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);! v6 ]! y5 {7 d3 D
        Task_sleep(1000);
8 \: G& ]4 \* n; c* B7 ~7 ~. p/ Q" b+ ^9 u8 y$ {! s  D" D; I
        /*Set the AD7606_PAR_CONVST to output mode*/1 f0 ~7 A; u. y4 D6 p3 }% k
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
4 i+ L& E" i( |2 Q! s/ s* B5 k        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
# P/ R: c* }+ V* M2 P* ], u. p2 F  K; k7 {% R" C4 E
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
& C' n; g7 E8 _" j, |7 C        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
5 \) x3 I9 T) Z  x# }, M7 p0 |$ o( D; z0 I
}8 a: _0 ~5 D4 ]0 e& @
9 E/ z& ^  m5 {; d  Q
! j8 M+ m# B( J( u5 M9 H
static void ad7606_busy_hwi(UArg ad_addr) {
& r& R$ \- c5 C% y" u. d- [: G
# m: h* g' m8 N# y5 B
2 o+ ^1 t, U/ @! K6 J        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/( z! t( ^( [! B( f6 n; `
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。3 _+ N- c5 F. x4 u4 v3 X9 i7 |- I$ d

8 [7 U1 u8 n: u0 b1 `7 x# d5 Y        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)5 G4 e" m% B8 z1 T/ _, K: o2 g7 A
        {
' u" V+ q: J+ p( I                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
5 R; K6 r& _( P- u+ D+ @! s) O                cs_addr = SOC_EMIFA_CS5_ADDR ;5 |2 y( z; j  g0 s; j
                internal = 0 ;
; s$ V1 S* P9 A2 }2 a! ?; _3 ^                int_flag[0] = 1 ;
2 g2 n1 D2 F3 B) h8 u        }. m" z- \; s% a/ J
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
' Z" T- v: c' G7 @        {* b0 ^8 A5 a/ t1 _6 ~# f
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。9 m" o; S. g; _
                cs_addr = SOC_EMIFA_CS4_ADDR ;
1 ~1 e% N7 k- c+ p! K- F                internal = 6 ;8 D% e9 P# y8 L# g+ l8 b
                int_flag[1] = 1 ;8 D- F1 O/ |, j: n7 c
        }
, U! z5 R4 M5 C5 _9 n% ~        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
2 @+ ^. B! L* D8 B, H+ O        {: i7 [: u' F- L% i2 s1 H/ D
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
8 ^" }: G4 d: x) |4 I                cs_addr = SOC_EMIFA_CS2_ADDR ;
3 h  C  c1 b. v; i! b8 v* ~, o                internal = 12 ;
7 V( r  C0 n. A0 z- V( P                int_flag[2] = 1 ;
, @6 ~* a5 ?3 B# {: N. Z. U        }7 b% e$ A3 h4 Y. U  w. h
  
3 u6 s* j# q8 Z1 ^4 r$ A+ c        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);' V9 E9 n% ~; W% L2 c0 H
       " W8 D: S; A7 O) m) M
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
2 p3 G" r1 Y' n$ B2 v& ]}
' _5 U! V6 T4 G, e
& K# @, f  m* L! l7 U
7 |6 G/ ~1 G  z9 d
' w( m# \) h6 B  A$ m1 e, g! `: t  Y; h; u% ?

本帖子中包含更多资源

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

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-10-16 14:48 , Processed in 0.047193 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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