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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
$ t1 y' L* Z& q! Y#define AD7606_PAR_BUSY_GPIO_BANK        5
, _( E0 G# p( L2 ~# Q  U1 E#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT$ U/ j  _, @& |& [

/ u" y5 G5 ?* J& ~, K; S#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
( o! |5 a2 v' k  M* x' h# B#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
4 X+ p4 i  R0 K' D1 h8 P1 g#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
  O) t2 d5 s, n% q/ {2 l+ U6 _0 [#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)/ j2 l0 S4 M8 P. T2 g7 D
: S! g0 Q; P* H8 E0 k9 g
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
4 K( J; Y3 m" `5 L( ^#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
: V6 ?! O# t* E  H. Z- P0 f' V* N#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
* M& r1 x+ y  R# m1 J
" d# {0 m7 M) k. ?4 ^4 \0 F" m; m: R. e0 T8 t7 u( ]" V, t5 w, X* I
6 ^* z5 ^2 X* j6 d$ o7 ?9 F
static void ad7606_irq_setup(ad7606 *ad) {2 R+ E3 B# s! r- J# ~. T
        Hwi_Params hwiParams;& E% B0 w+ ?; }0 [: S0 v" m
        Hwi_Handle myHwi;7 Q) x. D8 ^2 f2 j
        Error_Block eb;
; K( K- G$ u8 \+ x1 W4 c) \
9 U+ X0 u5 L% v3 h# |' j7 s- u        Error_init(&eb);# q% j+ p9 ^, C7 F
        Hwi_Params_init(&hwiParams);# P) g& @$ a" K; U; s
        hwiParams.arg = (unsigned int)ad;
: o# I$ t8 S/ m        hwiParams.enableInt = FALSE;
1 b6 p/ G6 z3 r/ j7 O; r/ {, _        hwiParams.eventId = SYS_INT_GPIO_B5INT;
( q3 T$ B( L0 ~' w% G        hwiParams.priority = 4;
' L# z6 A. b  U. P: \" J        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数; i% z4 ]' V. n7 t% B  z& ]
        if (myHwi == NULL)
; v0 ~" R. n0 d+ j( S        LOG_FATAL("failed to create hwi");
+ P( V3 w6 i* a7 @# M& v1 ^7 o
7 d  @2 v" K* B  y- e        /* enable both interrupts */
, h9 }. P- l$ J2 ^; }) f        Hwi_enableInterrupt(ad->irq_event);) p% f5 A) \, X, h& |
}
9 q2 V% O* H* {4 V9 c. J
* H- ?4 Q8 f! S
' z) D* _1 S* |4 sstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {# l7 E+ n5 W' x+ T: j- o+ [; r
        volatile unsigned int savePinMux = 0;
! z% N6 v& j4 @3 S# c5 c  X        //初始化5.11、5.9 、 5.5为GPIO口
7 e+ F5 N& m- q! |' W6 w        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
& Z5 V% V' z6 h. m( e1 m
7 l# W4 D2 @: B4 S! Y        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);) v* @/ ^. M/ f  s# ?' h

- E# g' l, z6 d        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));
4 @3 ], L& `. Q3 _% D% c* A3 R
# F: T( A- G, p# w9 D        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);8 i7 L# o# r) d. i( o& {% d
! [0 o" m; I) ]' {, q  D& i
}3 S! b2 A0 o! I- |

8 n; k$ p# X9 f( z- F
2 ^5 N9 B, z, v- }static void ad7606_gpio_setup(ad7606 *ad) {2 j) r6 b0 L) u# u) ~' e! S! f
        /*Set the AD7606_PAR_BUSY to the input mode*/
4 g: j1 R$ J% b3 I        //初始化5.11、5.9 、 5.5为中断口' X: f: w0 p4 y: Y/ j. x
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);/ ~5 |3 c8 Y1 k# W) F2 |
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
5 I8 L/ \" Y) ?0 p+ E( S3 M# C        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
& m) [/ E* W; j4 V$ _8 }        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
4 w4 M! F1 }2 s2 @" t        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
. f1 s, l# s" q        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);3 s: i: {4 Y) z& K( H0 m; \
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);  W0 @$ L/ e" c. i1 g" s
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
) l' O& i9 Q' ]3 r3 C" d6 I' Q        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);8 v% T7 S2 P) N5 a. J) y
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/5 G% J" i8 q& c% F9 t. q
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
3 s# R. H" f9 V0 o. C4 i1 }
1 I$ u3 L! u. C( a5 P% O; M9 z        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
2 P' I' A# J6 ~/ n* D" {5 Z        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);* i0 Q7 O7 N  @7 X9 X8 j7 e) A0 ^
        Task_sleep(1000);
' U4 Q% I9 b- T1 K# V# M3 D3 V0 l        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
: y/ Y5 ~4 N6 i        Task_sleep(1000);  L: v, D% J. b9 N. o& R3 ?9 R+ l5 ]
" D7 x/ R2 F4 P: ~. c# j
        /*Set the AD7606_PAR_CONVST to output mode*/) g4 R( |' a6 a* y4 @4 f1 O
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
, e$ p/ Y6 V( _# `+ H2 o7 y' {        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
/ c4 X/ ~3 E6 H' G. F! V! l, j0 A. w) ]* V. s8 j
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
( K' t# U5 C" U$ ?% w% N        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);; y4 |: D- a! ?' B
! F6 F* D. h) ~
}
* F8 d* A8 F, _1 S& Q3 _
# }# D. d+ W( t( }# [* K3 H& j8 W; W$ [" }  e
static void ad7606_busy_hwi(UArg ad_addr) {
$ G: s) v; q2 ]$ j3 b5 C; n' x2 S* k4 B" b0 G1 p# V# E
# K) P6 Y+ Z& A& G3 \, f# u# s. u. Y
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*// Z: T+ I, W0 h
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
# r6 z8 l! U" G6 _6 Y' g" ]) T. w6 s: P; c8 T) }
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
0 f5 j. V3 N$ i' B        {
; m8 `+ w1 t1 \9 _                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。$ I$ U; A' g5 ^
                cs_addr = SOC_EMIFA_CS5_ADDR ;
2 U  c- N  v* e* i( g                internal = 0 ;
2 d& D8 {2 M. g( Y$ H% ]0 ]$ N                int_flag[0] = 1 ;: h) u& z' a8 S+ C# y5 z' m; M
        }7 h& u: @1 F( o/ ?
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
. j: i" @* z- N5 ^        {
) D3 I) u' R: v                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
& W4 H) q& Q% g6 m                cs_addr = SOC_EMIFA_CS4_ADDR ;
& B% N3 k4 [! R& l: u# G8 f                internal = 6 ;
, V. V% j6 d1 z7 h/ ^; H; F7 q$ Y                int_flag[1] = 1 ;
! R% G" m: U0 M        }
' G" m6 _7 |, c5 M2 \( t  ]  q        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
) P3 e$ p6 f8 B3 m4 i        {; Y! v% U( p) {/ P( A# X
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。$ Z+ u7 T, S; x8 W$ }+ U
                cs_addr = SOC_EMIFA_CS2_ADDR ;
6 N5 ?' L6 {9 |- ^+ {                internal = 12 ;
6 L: K1 i5 W, y) p+ N# b% G" L                int_flag[2] = 1 ;% K) }) h2 y5 S$ m" Z/ y6 j
        }2 m/ S" G" B7 ~( n8 l
  : k. ]! d. v1 n/ y+ E# W' T
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
+ x& ^8 }2 |: C9 s      
4 }) K( q+ W- m6 Z2 T/ p        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);5 m: M- c7 j1 K
}! }5 E! N% L: w" a! Z
1 X/ b& F* x4 d
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图
$ I2 J- c! }; C  A+ ~' ^* c' ^/ B5 z& K% K3 U# h- Z1 H4 d

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-10-16 14:43 , Processed in 0.037544 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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