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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:8 E& T- \5 z3 h( z
#define AD7606_PAR_BUSY_GPIO_BANK        52 e+ c6 I$ d- i! @4 b
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
# o  n0 z# ~: H! B' @
4 m+ I# C6 w& M7 P% _4 u$ w' G#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
  o, b. W; c& ^- j; [#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
: L( g5 t/ v8 K# g4 C#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
; h" r, Z" s- U- C& R#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4); q) _& |2 M2 ]& J% {+ k
% B+ l- w8 ]% L- @. }5 n
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)3 g$ G4 i  y$ B2 [$ d3 M4 \8 ]: R
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
( c; o" q$ }/ b  o6 u& J#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
+ \/ C" ^8 B/ H: b  c& L, {
1 P; V6 t8 }; E9 x7 P
9 t( G8 r  `4 P" e1 O+ p' _5 K: O& s8 B( S8 O" K- L
static void ad7606_irq_setup(ad7606 *ad) {
  q" T1 \" q3 y* Z" ]# t        Hwi_Params hwiParams;0 j) Q) I1 J' w4 _  L' ]
        Hwi_Handle myHwi;
: Y& Q; d3 O; t8 x) ~2 e+ j        Error_Block eb;
: k; r$ J" w5 j% l8 k4 y1 r+ `% F8 e" M. N
        Error_init(&eb);
% V9 b$ @( [, _  f* ?( x        Hwi_Params_init(&hwiParams);: ]( `9 l1 i% A* r# n
        hwiParams.arg = (unsigned int)ad;
) d  g$ H3 ~6 e" {. ]        hwiParams.enableInt = FALSE;
2 H) g$ T$ Q# N  s4 u+ r6 a  s        hwiParams.eventId = SYS_INT_GPIO_B5INT;
# s0 b- b" X! A& G% \2 Y( m/ K5 J        hwiParams.priority = 4;
' I& `0 Z/ ]3 G9 Z        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
% j/ Q' Z1 S' k( A        if (myHwi == NULL) 6 ^+ |- z  x* o# h
        LOG_FATAL("failed to create hwi");  X, x# D" U3 n  b

, w) Y9 o' M( p0 `        /* enable both interrupts */
# N. p3 T* l# D. @: b. @        Hwi_enableInterrupt(ad->irq_event);2 G5 j4 T  S0 v. P5 }2 h
}' P/ K$ {3 |) |  }) d8 S

9 b! B+ f) j) q( C$ w. m+ r, e; t/ T4 U& r$ q
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {6 g9 J! \7 V/ n- b* N) @$ I4 R
        volatile unsigned int savePinMux = 0;( j( y3 B/ w  c
        //初始化5.11、5.9 、 5.5为GPIO口
# A/ K8 B0 `  V5 i; i2 m  d( v( Q        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
5 X4 N( P, \  u5 `, X& L/ v
# @1 ^$ [1 x- K# B$ V7 Q        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
! }# K4 c7 S! `( R
* E, `! T$ S# u) K/ I# p; C( {        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));: N  |6 b* W4 v8 v! e( p+ F5 ]% D9 M

. l/ M( q8 B  a; g        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
8 I& e- R7 r+ H+ l2 p, R' I+ L: F4 K; X+ }5 J
}
: J( c9 L3 |! _  T9 {* e1 S( U& U- Z# h' T8 G$ r" Z* F* V4 J. q# s

# X5 m7 U% P1 ~5 k7 gstatic void ad7606_gpio_setup(ad7606 *ad) {
, O( ]+ E; r+ h& Z4 T        /*Set the AD7606_PAR_BUSY to the input mode*/' x( V( N% G: O, e0 G- K' V
        //初始化5.11、5.9 、 5.5为中断口
! B! K+ o" D9 B* R2 R        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);6 w  O2 `3 i( A' A! q" e: r
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);2 T/ p2 h( P7 L# H, t$ |4 U
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
* D! q. A) P4 A0 B8 |4 l        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
) {+ g( ~& D3 \$ P' h1 `        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
; D: r9 f. O# U$ M5 E$ v7 x3 ^( ]: G        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
- [* G0 U: R* A+ X( a        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);4 c* V9 \# `( R8 F1 K6 Y
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
, P1 }9 ~; ~" f2 ?        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);5 L. n" Z+ `$ k5 ?; I# y
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
5 r% _6 n* ~2 `. M7 X8 B8 ?3 l# c        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
8 w; u2 P2 H$ m0 O2 m: V! }
4 O5 T/ i% I' {- N  q        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);2 k/ t$ h) E2 `" d# [: j; ^
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);. k7 ^$ T4 s& H& m; t" o, h
        Task_sleep(1000);
8 Z4 c0 [- o2 R3 y  n: ]% {        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);% ~6 p& R6 R. I1 w2 u
        Task_sleep(1000);
3 F+ ~+ Q) p4 n
  V0 E' v! k4 {+ ]' r( X  X) u        /*Set the AD7606_PAR_CONVST to output mode*/. g8 X: }9 P4 ?  D; m6 K
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);  J4 A/ k' X$ y% e- S* d0 p# d
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);2 U! A7 }7 b2 R. s" |7 e( g

+ s  d) t2 A! ?/ E" z$ u        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
7 [$ U0 s3 U* w( V2 g, X& e$ B' V        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
) b( W" t6 c( B+ k6 o3 o" l
7 q0 h  g3 \8 A4 v}7 }, ^, j* j4 ?4 N6 x( _& Y, F

" R+ m" D  ?* A/ A3 U0 h- c5 X0 R% m4 @( {1 z6 _$ S  U2 c
static void ad7606_busy_hwi(UArg ad_addr) {
2 q& \6 u; b/ g$ h0 i% \; {
$ c. T( o1 x$ U5 }; x% O; m; S9 i# O5 M6 X0 r2 W1 x' p
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/  v/ T6 s. W" C8 x
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。$ O# a+ L0 ^3 d

0 F9 `1 e' t6 b. [' u' k* _        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)6 T8 K3 {2 u5 u3 X* S, F7 W( M6 o
        {
* W2 `/ @+ l  {) W7 Y8 x4 a) D0 h                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
6 T, e0 M% v+ o$ j                cs_addr = SOC_EMIFA_CS5_ADDR ;
/ N+ a$ Z1 ^+ U3 _' [( K                internal = 0 ;8 I- @" T& D3 n9 r( R5 `
                int_flag[0] = 1 ;5 c# b1 |5 h; M7 S7 e5 L/ ?
        }
* X8 [7 O0 M: ~! j. R' A, `        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)3 S0 |6 K$ V, l) F% S, ^/ c
        {
- |6 Z1 a. ^1 d4 i$ Y; ~                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
9 u" l2 ?" s! T" ~: k1 e% u; _                cs_addr = SOC_EMIFA_CS4_ADDR ;
+ A; g8 L: R' [2 t* G- c6 z  j                internal = 6 ;
" F# x$ {- j. R: p7 Q4 O                int_flag[1] = 1 ;
7 n/ v$ G. W* }( u7 s" l9 S        }: a' Z# J9 b# E" x$ ~
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)( o" ?4 q7 Y5 C+ F) C5 P
        {( T2 Z8 u, @$ g3 d* P- [2 n
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
8 D) L0 m* _. L* c) c                cs_addr = SOC_EMIFA_CS2_ADDR ;4 t$ R! c6 _! y3 g; e
                internal = 12 ;
( e* ?. g. a2 B2 P' Z7 g; R+ v                int_flag[2] = 1 ;
; u% h9 ]$ }# }$ A8 U        }9 h  s* ~2 W* _8 }$ U. z- Z
    x$ p) U/ z4 Y' q$ b. E* u
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);5 f1 K; _; s4 ~
      
$ w" E( |$ |9 ^7 ?        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);6 g# m/ Q6 n) C; [1 @( n
}
  t0 n- T% M; k3 }$ k3 g* b- b  j) Q* n+ H3 g5 e

; G/ @& U& a1 ^( F
4 V7 v4 i, J: _, q* n2 Z3 I6 r  O8 q1 Q% G- d  _

本帖子中包含更多资源

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

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:01 , Processed in 0.041636 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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