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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
1 ?8 |: a! {# d, c#define AD7606_PAR_BUSY_GPIO_BANK        5
4 n% @% K/ h' `6 g# q#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
# j0 h  I# Y' I& @1 O/ _* T' q
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.114 @3 u! U6 }5 z, F. i7 E' Y
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.97 X6 }/ Q* `0 M9 h
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
+ e* q: B2 a$ g. u' p) S$ O#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
" w% b9 E+ B. M, }3 N# a: R; h! K1 i2 T  B! z+ U( C( \
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
( a0 h8 u+ E' U/ H#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
+ c  V* I& q. I" E#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
- s% B4 o( s1 V: X
/ y& o. B% L9 {' @; {
8 _) b" A# E* p! {+ l; @( r' q* v1 ]- \& k0 H7 O& l4 Z" T7 J. p
static void ad7606_irq_setup(ad7606 *ad) {1 R, }* k; Q# E# |6 T  i
        Hwi_Params hwiParams;* b  S. O% k1 m7 V% ~
        Hwi_Handle myHwi;
0 g6 Q8 t) d: g& ^        Error_Block eb;6 u8 S4 |- ?  b. d) l8 p

0 l# p* M! k8 S, V% w0 m7 S# C        Error_init(&eb);
8 Y: {! K7 R' ^+ S  @  ^( J; v        Hwi_Params_init(&hwiParams);
9 Q4 {% ?- T1 r9 k- j" q        hwiParams.arg = (unsigned int)ad;' {! H6 n( _5 ~, E% j
        hwiParams.enableInt = FALSE;) z% o& [0 ~2 E! b% Y4 \
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
, K! N3 l" o! b9 u( }        hwiParams.priority = 4;
' `1 _4 R2 X( V0 K        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
! M% p( F8 w9 p8 y: O        if (myHwi == NULL)
$ o) c1 x8 L. M        LOG_FATAL("failed to create hwi");% m! A# w. T& Q0 @1 c& \! Z% \5 Y

# e5 a( ]5 {8 U2 H; f) t        /* enable both interrupts */
/ @) ^. P2 g0 C4 R        Hwi_enableInterrupt(ad->irq_event);
. o/ |8 `5 B2 S" E}, x/ C8 z: H$ y! f8 L

5 c7 x, `" m: j& M: z
, P$ `- P" n+ ^# c2 m- }3 Bstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {, m+ _, |* ?% |( V9 |# C
        volatile unsigned int savePinMux = 0;4 k; ^, z/ T! Y( C4 Y- L
        //初始化5.11、5.9 、 5.5为GPIO口
2 K& j; |  O, }; G- M* _, A% K        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
; W! v6 i9 d: ^, g3 T2 Z. P6 I  C" b- I) O3 p
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);$ n2 M# S) \" a% U) ]
5 t6 P) n6 d( n/ g2 w! p
        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));
, E1 Z. s& G2 `
: Y$ @! u2 J4 J7 D2 {0 c        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);& S7 ?2 X6 ~1 F5 q

5 p( K6 p& ]2 B" a/ U}
0 {# _- H$ n' [8 n4 k8 _1 o0 P$ c' I& M1 M# ]8 M
8 i: R$ i" e4 L; ~) G2 Y# \/ P2 ]
static void ad7606_gpio_setup(ad7606 *ad) {
% G; @/ l' G2 ^$ C        /*Set the AD7606_PAR_BUSY to the input mode*/
3 C/ c+ z+ L5 w+ v' \7 `' N        //初始化5.11、5.9 、 5.5为中断口
" d7 X. f5 {+ P# K( x        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
5 C6 [, k9 z- P$ [5 [; @) N0 g& u" i        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);& a  @4 p% R3 x0 p3 _0 \+ X9 j
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);2 H1 I7 D4 W) _( h$ k
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);0 C0 E; H$ k5 ~9 O
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
2 z, X, p2 m! d" c. w2 W        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);& ]0 c, y. ^, p, l- l
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);% w$ m4 w! E( X/ J7 V
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
0 Z& a, n( k5 N  F; m& N        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
' F! S4 E( P' V3 E( b0 b3 p        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
  ~& J6 f7 ]: a7 x5 H' y        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
" @  x0 H* N: ?9 K' r6 Y0 Q. ^2 U( x/ p% b" \. g7 u# [
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
; x2 j( |1 k0 F, N2 v/ v        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);9 v( q' A. v, z  [2 Y2 u$ ^
        Task_sleep(1000);
/ t7 P- H" m% m4 n# I6 J+ m        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
1 x5 J7 |/ o* q" o        Task_sleep(1000);; {5 w  D) V) }6 N( e8 q4 m) A
8 X% m! Z  W( r, J* u4 s+ t7 G
        /*Set the AD7606_PAR_CONVST to output mode*/: z3 ^1 q" B0 M0 ^. V
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);# r, v* I: s8 I' L, Y
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
/ f& v( }3 w4 q* K1 ?- ^0 A
5 ~5 l8 W3 P  I( J0 h6 ]        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
" j: e  d: x/ t3 Q6 f        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
: T2 }, j7 E2 r( |8 x9 G' ?" {( M! V( k9 W
}4 ]6 j. W9 l# d( `! X  T! _+ m. a
3 U6 d& U0 G2 s4 E- ^" q" H
0 n2 u' F/ }& E) I9 `# r
static void ad7606_busy_hwi(UArg ad_addr) {  H  y4 _& K  v  Z+ y
; |( g* q4 e' q* T

1 g4 m1 T) n/ q' v6 a# A        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/' z3 c' M' l8 g" w6 s
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
) D9 l: Y' X6 U- J7 ]7 j
9 P% c3 R, x* l# Z3 W5 Y6 w        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
2 D3 K4 k# d5 ?, c        {: M0 |) C5 @# c
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
: x: l: E0 I4 e& f; b                cs_addr = SOC_EMIFA_CS5_ADDR ;( }4 Z, [# l! p, {
                internal = 0 ;
- u! ~4 a$ S: i7 V+ C/ u9 I                int_flag[0] = 1 ;! m3 `7 ?0 \% \; {. ~7 |4 c7 U
        }
0 d  k$ F- o( B5 |; l/ \        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
) t. Z; E8 i; K5 e, C3 ~        {( F" _2 J; ~; L6 t( O
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。, \1 R0 c- D8 J9 c8 `
                cs_addr = SOC_EMIFA_CS4_ADDR ;, ^+ W, l& g2 N
                internal = 6 ;& [' g3 b( s1 |% w2 X, u& V  T
                int_flag[1] = 1 ;1 W7 I0 M) A2 q  H
        }
+ n) r3 \4 y: o! q        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)& \1 z  p8 n3 B& k
        {
( q2 v1 m& b- V9 t/ g                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
6 w5 B; ]( W3 l. Z5 Y' t: x                cs_addr = SOC_EMIFA_CS2_ADDR ;
2 E. Z$ ~$ \) n( a, F4 A                internal = 12 ;4 j! l* K4 x* G
                int_flag[2] = 1 ;, u- _* r) [- c: p; Q  p
        }9 C  A, V) @: V; `& A* u$ x
  8 e( N: Q& D2 E' P* C
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);1 u$ R  [/ o9 t: t. C$ y. A
      
! l' r/ z# Y  a* L        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
: v: ~$ k. K# F3 V8 f}4 d  q- z- p6 O" n

  }3 \( B: q/ T4 C. i- u4 W* o( Y3 w3 ?4 G3 Y/ i$ l

$ z  i$ }4 R% k% }/ E( |6 @# W) s% j+ B& h

本帖子中包含更多资源

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

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-12-15 03:58 , Processed in 0.038157 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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