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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
4 P" _9 h: n/ U#define AD7606_PAR_BUSY_GPIO_BANK        5
2 F, y3 n) U. T, W#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
* I3 H. l2 f5 e, v1 Q) t: y+ ]: {( t; D7 u- ~; ?
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11% P8 [2 V# J- C
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9% ~  G/ A! w% |4 W* @2 ]5 S* s
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.58 Q5 ?# v% W. h: ?3 q
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
# z8 Q( X! Y. A3 M; y9 x/ [1 U2 r  |6 [! c0 A9 H, O
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
9 B2 [0 _! T% K) l1 O#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
1 I) _  E0 V" C( H#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)" R! d; H& t0 w$ z. d1 X0 |/ O/ [

$ b0 d' R7 l0 ~% \! [
6 h0 h, f0 G4 b) d
: ]) P5 P  _/ `! n0 Y  rstatic void ad7606_irq_setup(ad7606 *ad) {1 F' V2 o+ ~4 ^* g2 }9 C
        Hwi_Params hwiParams;
( T! W, j# P# K- R- h# a        Hwi_Handle myHwi;2 Z  D" t3 A) c% A9 f$ l
        Error_Block eb;+ O+ F) |1 |, T6 {
; Q( m6 I6 C/ ]3 X6 g9 l  u
        Error_init(&eb);
7 g# W7 x' s' B        Hwi_Params_init(&hwiParams);
8 {  i4 d6 X6 l* L4 H- ]        hwiParams.arg = (unsigned int)ad;$ u# P* T8 R( d7 m- o
        hwiParams.enableInt = FALSE;" K0 o) U! `1 P9 N
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
3 X  W( c% {( e- e8 P5 D        hwiParams.priority = 4;
2 w; a+ z0 M& N& ~( P        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
, l. v6 v9 [9 U2 m6 q5 o; \  t        if (myHwi == NULL)
. D- m* x# [- F) c        LOG_FATAL("failed to create hwi");0 B8 O! S2 K) l2 d9 B5 g# ?

; i8 ~. H) S/ D        /* enable both interrupts */) ~# Z6 h' Q- A' Y
        Hwi_enableInterrupt(ad->irq_event);
" a! W; `3 E) z' w- r1 V7 s}
- W. j$ d; v0 w3 c. u
' L( t& s  i6 p1 ~6 `; I+ b7 V# s  s0 q5 J
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {4 }" \& K. a. j/ l) ?
        volatile unsigned int savePinMux = 0;
* k& k' n' k( P        //初始化5.11、5.9 、 5.5为GPIO口4 j$ A  r$ H. g6 o8 Q
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));5 A  U( v: }) D$ B& I# o

: D0 @4 E3 ~& }        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);8 ?8 R. V0 C+ Q$ V

  X% \2 w' ]5 B# M4 k        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));/ N2 d$ k. {4 s3 U

9 U$ i/ A5 `/ D; L        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);3 a, c8 T! ^9 y. C  z' ^+ ?+ [( N
! |7 D+ v- {- B. E. ~% |- |
}& `; t, M3 ?5 b# w! k& }

$ T0 h' O- @- C3 Y( J; W) J0 `
5 I6 I4 E# ~9 n- e; |3 p' v0 s" Lstatic void ad7606_gpio_setup(ad7606 *ad) {# U$ Z& K4 ], M# p7 m. l
        /*Set the AD7606_PAR_BUSY to the input mode*/
4 V& o* z" O' t( H  l6 W" b+ E- @        //初始化5.11、5.9 、 5.5为中断口3 l! U1 T# B4 L, E) |
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
7 X6 J) S1 k& C' [3 @        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);& n! A* z& D5 v5 z
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);: d# D- E. ?6 g' @4 H
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
& c) N7 v: P) f7 d& `        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/# h+ h# R" M! o, f9 R5 a; i0 Q
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);' D- X4 ~) A7 ?) F: ?, R* D
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
5 w1 x& e' {  d6 r* i        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);* N# C3 d" N0 N2 P# o+ q7 o/ t+ b
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);4 F5 |; d6 _  c. Z$ R9 L4 m
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/! _4 j% h, U1 a& R
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
* N) F2 k9 K% j7 t% ?) f+ l5 O
2 r( g* M; E* M+ }+ Y! \        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);5 E' q* O5 L7 S4 `
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
0 O3 x9 V' U! ^' t9 {        Task_sleep(1000);, n5 b6 d+ S0 l" q
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
8 |; d' z, q5 b: x/ X  Y0 P        Task_sleep(1000);
/ m  w! q# k  @, q! D) H  ~. `! N, C- {) J0 C  }, K- x
        /*Set the AD7606_PAR_CONVST to output mode*/
& P+ }+ h- }- v1 G5 l2 B( F        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);( [# O% y) U; z/ u! }7 d: d8 ~, N
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);; ]0 M  x- V9 m8 G/ X3 D9 J( i

% H7 h& k- ]+ s, \( B# H        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);2 @0 S9 B3 c: O, o
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
7 `. j( l; x; t9 p8 J( z5 r8 A2 A8 Y; i* }" \9 }
}
/ j7 {4 |& @& ^; w# U% D0 k( J2 B4 m. u2 L- B5 F3 ?) _, X0 r4 ^
# q6 x% v$ i2 u8 j7 B/ Y  A" o  P
static void ad7606_busy_hwi(UArg ad_addr) {
9 S6 ~3 J' |9 e* f  N8 m4 d4 l! I' D
3 J7 c) l. Q1 r
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
! e$ ~+ }, q  j        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。' a$ g" Q& W$ c5 f- d

% g  L, g4 v8 n: i) E& h) y. G        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)$ O0 w( Y5 M; Q& U0 z
        {' o, A% Q- E" c, D9 v2 j1 w  X
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。/ n% _% Q+ O: q8 ?
                cs_addr = SOC_EMIFA_CS5_ADDR ;
+ m+ R# T# S0 S! a4 h- |; O                internal = 0 ;
4 w! Z1 N$ w7 H) e5 P: ?% _- G                int_flag[0] = 1 ;
7 W! F( Q% r( U$ \        }
: P0 r, ?6 u5 ~* |! Z' g        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)( K% Z: A& ]( V! k0 c( @5 O; a# N
        {
; s7 y! E' W9 Q' C                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
2 Y! g- G; {+ @3 q8 x                cs_addr = SOC_EMIFA_CS4_ADDR ;* l9 f- K' W- h# Z* @- U5 |( u
                internal = 6 ;) z6 Z( v& U; }4 Q7 b& o$ I9 c/ ]
                int_flag[1] = 1 ;: W3 m( X- k+ X3 {
        }
" h1 p8 Y& j, X: m7 G1 s        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)/ w' t# p: }* F* K
        {
: ~# d" d4 Y% e4 i" h                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。8 Y3 q4 c( W# @7 _. o3 }8 u
                cs_addr = SOC_EMIFA_CS2_ADDR ;$ \0 v7 V+ r, P
                internal = 12 ;# R1 k, ^9 `' H
                int_flag[2] = 1 ;( h& K1 W0 g1 Z
        }' m. R" G6 C& R* {* b$ e
  
5 n# c/ U( @' x  L1 E4 M1 U- p- n        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);4 K% y& h; _+ `  i
       # D# s3 E4 J5 f) O; Z& ^
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
/ f  z( j! W. b. n. y3 Z, K6 W}. p/ M- g8 Q0 T, `8 M8 U& Y3 ^4 d4 t
" L' M; E) e# X' V6 H3 h( G
; a% @5 q% c$ W2 H
) x# z1 d3 W4 R; z

5 _. Z8 D+ c, f0 l6 V6 _

本帖子中包含更多资源

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

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 18:02 , Processed in 0.041105 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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