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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:! J  Y2 }' W* ], [
#define AD7606_PAR_BUSY_GPIO_BANK        5" v+ j7 m  o0 Y' E; K1 J) d6 b
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT1 F2 m4 j' s: o% u8 T2 e

9 M( C2 J& d: j/ i3 u#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
# _  H1 g5 v# J" k1 v4 G#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9. B" Y9 a4 |- X2 e9 p
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
; {% I, ^0 ?7 a" {  f4 ~5 K; _#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
! g) Q$ g% M* f& ?( P7 g! U8 V4 a3 j! ]7 J' F! B" e! ^2 k4 l
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)% ?: C. g! U+ D5 n, J- ^$ o
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
* E1 n2 D' r6 C* Q) B* D#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)5 \! v( B; i2 _' X0 o! H  Z9 `
- s& L3 {' v6 r  Y

# F# V2 B, R/ T7 l4 r( b* }+ r( v- v, r" `0 q3 |
static void ad7606_irq_setup(ad7606 *ad) {
8 g; }% z% U7 ]' i  m        Hwi_Params hwiParams;
+ [7 V- c5 G. J: [& \( l8 u0 j        Hwi_Handle myHwi;9 T" Y. i9 T) S! V& n% e9 @  E
        Error_Block eb;$ V2 w. I# f; w* Y: m8 q0 G5 ^, E

. O7 W  G5 i1 E  V        Error_init(&eb);
# {- }# I7 G" U' S        Hwi_Params_init(&hwiParams);# f) N7 I6 I1 ^" H" V
        hwiParams.arg = (unsigned int)ad;
  z1 _2 P+ G. k% [' `, u        hwiParams.enableInt = FALSE;0 L6 \6 s, P0 e' L. k5 h
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
; }* D5 U# v1 ~6 e8 l/ Y2 v6 N5 S; F        hwiParams.priority = 4;7 z5 E; K$ w  z, `7 \: x8 P
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
% Z4 ^" m( l: w, a/ w        if (myHwi == NULL) 5 E# ]7 {" i+ ~1 f4 I
        LOG_FATAL("failed to create hwi");
) [' K6 D( M6 k. U) d* j
/ K  R- \/ k& y4 B0 b        /* enable both interrupts */
+ n( B. `+ y# o" q        Hwi_enableInterrupt(ad->irq_event);1 q3 }& A% O2 O2 D3 v
}8 u& R# m* S$ C0 T
. u5 }% K9 ]" L0 ]% L) P7 T

6 g7 B, j, e) ]* }& k+ Gstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {+ @0 u6 N0 t) g& ], @% Y  E" X
        volatile unsigned int savePinMux = 0;
0 v& f9 V$ r5 \+ b. P  a! M- T        //初始化5.11、5.9 、 5.5为GPIO口
7 E  _" M2 u3 Z3 O& o/ J9 ?5 C( t        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
$ e2 J7 N, V$ i- \. j4 u4 _+ w8 B) W* [
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
9 ^6 r9 ^, o& x/ |8 {% P" U' C( A0 \  M. 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));  s) C/ I* b. ^6 ?) m- n
" k4 z5 r) ~; |: u, o7 Y# {6 A
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
& m# z0 a# c  T( V& }2 K& A
  o, u" R8 S) |( m" j}( W( o2 P0 V6 x+ _) E3 K1 A& Q+ y

9 S1 y- R8 f# a- M  S+ K. C( ^" z# o
$ ^8 q; c7 p) L. Dstatic void ad7606_gpio_setup(ad7606 *ad) {
6 o" C) k( M+ c, H' \        /*Set the AD7606_PAR_BUSY to the input mode*/
( Z4 q; T) }; D+ d        //初始化5.11、5.9 、 5.5为中断口
' j% I. ]1 o) c/ H  \! ~, p/ F        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
5 v" p. Z; j+ V  [1 `        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);! K9 s0 [: ?0 j6 ^6 E
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);- Z' J- v3 g3 }# [- C
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
1 C* Q2 h& {1 m2 {        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
$ W% z7 u5 `1 U' Z; |8 i) e        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
' d& u, Q' s5 e) k+ L5 k* a        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);- D' r# S' _; Q" M: _/ d1 Y
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
* c' N9 h2 i8 ]  o! P4 [        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);* M) q, x; I6 k8 w6 k  y$ ]! O0 U
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/8 q6 x  ~, f, I# j. ~
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
7 T% }% f: n+ [5 [3 j0 Z; I7 D* Y( |4 {  s
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);: U3 E& J1 Z4 P% z6 M5 \
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
6 U+ W/ e- o4 Z4 z- {! u6 O7 x" w        Task_sleep(1000);
2 Y8 `3 o' P2 w$ {3 O4 o7 |        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
; l- n7 f5 m% a7 U4 j        Task_sleep(1000);: N- b, t3 x2 q+ j1 R* D1 k
( `  `3 G- x9 Y9 x  N# l) f2 d9 G
        /*Set the AD7606_PAR_CONVST to output mode*/
: n+ y& A0 X# Y8 z* F/ K: {  t        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
% S% H& b# ~4 v; ~4 n/ J( C        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);, m7 t, H$ }& ?, i( }
* P7 D7 x. _# a. U8 r9 p3 b% S
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
' A+ @' X/ h! A. ?        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);: K% x4 g- _6 b$ L- J* B
- w- x# f4 D' G8 C) \
}4 d, J" A. Q% l3 m# @
, z8 G7 d7 E6 b" `  p( ]

" ]5 X, H6 K) f5 E. J( ]- Lstatic void ad7606_busy_hwi(UArg ad_addr) {6 W: M) N" J5 s8 ^
, z, q& z6 E3 [. S4 K

# b7 L4 @7 _- E% M1 k$ z! e8 F        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/+ a% D6 W) [: k
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
- {5 F) B0 J- V6 ^$ P
* k& w# F8 K* x        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
+ o5 A/ ?5 U# r( x* [8 x0 V( B3 u        {
) y. ~$ d1 n) y                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
7 _) N% k. Q! h) R/ b# ?" g( I& |                cs_addr = SOC_EMIFA_CS5_ADDR ;
% N! o( x6 C, P1 s2 c# |( m8 O- U                internal = 0 ;
) M" q. s- |3 N( Q4 J6 H! N                int_flag[0] = 1 ;
7 P/ r' H6 @5 G9 l* ?0 K( U, X        }7 `3 V2 B& s7 _/ c9 m, I
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
2 L3 X0 H) j" v$ l$ B. |' }  x        {- }  w4 q" |3 L/ Y7 S
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。; F$ u" ^' ?5 u
                cs_addr = SOC_EMIFA_CS4_ADDR ;
# M' Q5 F. L" ~$ _# a                internal = 6 ;+ ?% l! M3 V) i$ v' @* ]
                int_flag[1] = 1 ;0 X+ y2 P' F( @# L
        }
+ ~6 f! l4 o  x" J) m        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
) Y, K' T! Z, a# G3 k! H* J/ }        {: ~/ c0 z% Q. V! [; c
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
3 f% ~# x; L9 r4 W) X! z, {! I- [                cs_addr = SOC_EMIFA_CS2_ADDR ;
/ x! e1 V; R  r  M8 c& T% Y- s                internal = 12 ;' T" C& a+ ^4 f7 v( ]8 o* y' a
                int_flag[2] = 1 ;5 I3 J6 V9 H  H
        }. P8 n6 T* s8 P9 |% o* I: M
  2 Y( e* Z9 j: t+ R& J
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);3 Q/ |# [1 r+ m6 J( n3 J0 y
      
. r4 ]' v" W+ u% P3 {        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
  I4 h3 d" I6 n5 N3 g- P}8 \6 N: Z# G3 c7 T# V1 w

4 V# }9 t9 p" }0 ]; Y% ~1 U; v
: {3 ^1 j0 _4 Y- Z' u7 R) O$ s7 k& v) l: T
0 C" D9 U# G/ U0 k5 ~! _8 z

本帖子中包含更多资源

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

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-6-18 03:15 , Processed in 0.045385 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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