sysbios hwi 问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:+ q% Q/ \7 H2 D3 F9 K- U$ z
#define AD7606_PAR_BUSY_GPIO_BANK        5; a% K# v" J- z2 M
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
# M' V9 l$ C: |/ g+ D, M* `6 Q* ]6 {, P3 Z" r2 I9 q
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
8 f' r# u8 s: O7 a9 ~3 E2 s" Z#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9+ f. u1 T. H) F7 P2 ]" `! B% h
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.54 w' A* [- o8 M$ f( z9 y  V
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)* U% Y! J  T! y( ~/ p
2 g$ p( J" D5 C) \& ?0 T
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)& y2 g1 s: Q3 Y, \8 k
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)3 o) n2 C) \3 S+ Q2 q. E
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
9 h- [4 z- n: e' @1 r) G+ Q$ P$ j9 j9 \) p$ u" d, n1 b

2 s! z- D8 C8 r$ Z+ |. j& A& S
8 ^% ?  h+ X/ G1 R  x) }static void ad7606_irq_setup(ad7606 *ad) {$ p0 A4 e9 `; \4 }$ ^6 K! a
        Hwi_Params hwiParams;
1 m) Q  C6 X' E* t        Hwi_Handle myHwi;
' c" I5 ]6 }) r: b/ C  H        Error_Block eb;
4 `  I- q7 z4 D/ E( ?, I7 t, @( v
        Error_init(&eb);% L2 J9 J" Q8 W7 r- P& r
        Hwi_Params_init(&hwiParams);5 F. ]( U! ?. |! [7 ?5 o
        hwiParams.arg = (unsigned int)ad;4 T; w" c5 {( f0 e. M2 W
        hwiParams.enableInt = FALSE;7 \6 h( Z# j6 J3 L1 a
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
; D+ Z1 X; G, h/ t% `7 S        hwiParams.priority = 4;' ^( Z# ~4 O- I1 }& V) c( i
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数1 Q8 i2 X/ W5 W# c: V8 F
        if (myHwi == NULL)   J: @2 K2 }* f# L
        LOG_FATAL("failed to create hwi");
, O# Z, G' J  T5 N6 g: s7 M" ]4 {! z- V+ [4 }2 u: E
        /* enable both interrupts */
( s6 W6 X; k2 N7 t( b        Hwi_enableInterrupt(ad->irq_event);
, [  B2 w# `' v0 ]2 `- u* P}4 y, k! A5 ]9 u7 H! X: p! n* j

* s) D" ^. @% }7 l. f0 {/ p+ o+ K( N8 J+ c/ B* ?
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {
" F* I! H  d% {: p6 J        volatile unsigned int savePinMux = 0;) p. B4 N3 o  e% I
        //初始化5.11、5.9 、 5.5为GPIO口& n3 Z9 h& V2 ~! }. J
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));5 i0 a2 C$ Q% i% B) {, p: [

+ \3 L& |. m' b2 {, C& a% X        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);2 f8 x7 U" `2 \% d( q* w2 F0 n
9 O: ^( D% @3 b
        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: w' ^  c& M4 k0 e# W6 X2 [

# n/ E' O+ E3 ?8 }6 _        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
$ y& K* d9 Q2 j, G
+ ^+ }& O& R) j, R; K! I}
+ |; [( C  ^0 Y
' O: v) U, ^& M, D* P, T) m, r
& d0 F0 V$ f6 L% W+ a  j1 Ostatic void ad7606_gpio_setup(ad7606 *ad) {
! _6 K/ n+ j/ w+ Z7 V5 j1 b+ F        /*Set the AD7606_PAR_BUSY to the input mode*/
. y  W  T5 @6 P7 k, b# _1 J7 n        //初始化5.11、5.9 、 5.5为中断口
  [/ e. l8 Y- F% B0 n        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);' I4 I2 l* N* _* |
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);9 g& n3 ?, s3 A  a8 ]; h
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);6 J' Y2 S& H/ i
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
. _7 ]# {1 }  X( b1 z3 q( G        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/7 S" X: x5 n9 f2 J& m
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
6 K- A8 r6 W( i; {9 L        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);9 `$ Z8 P8 [* k& L+ A0 `
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);- X5 m, Q& U5 N& _! l* F8 U
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
, Z  }3 H1 I5 d: I$ F9 z7 a        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
$ W$ E7 K' j+ ]6 \5 e$ w$ a        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);$ M8 K7 ?1 [$ S2 n4 b, \0 ?, L

, S; o+ }. e5 G! Q8 i: ]        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);6 v5 B! f; r# P9 Q8 m
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);& o7 p( x7 O. `/ Z! n# w; l
        Task_sleep(1000);
, U3 U6 q% s# X0 G        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);2 ^# o: L2 p9 K( ?& G" F: j0 s
        Task_sleep(1000);
7 j& ^6 T9 p$ ?+ l( q8 C' }: E2 m  Y  P( q' a5 P9 c! u
        /*Set the AD7606_PAR_CONVST to output mode*/8 e% d; Y4 O, Z: p0 p: k; A; c  U' M  U
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);; Q6 P4 t% r- I( l4 F
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
3 r  `: G0 B% t1 j  L1 E
1 a. g2 d7 O9 Z0 k2 m        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);. k( k8 j$ N4 @* i
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
2 E' {, x9 e8 d- P# E; \* d7 ?1 C7 Y& E$ v5 M$ q! R0 ^5 }: Y/ }. a
}
1 K* Y0 e0 N5 A, ^6 J2 |
& r7 X6 K4 m  I2 c* \& m8 @4 C" P
static void ad7606_busy_hwi(UArg ad_addr) {( z9 f: T8 N0 I, ~! i

' Y# h! u3 ^* ^& S$ [" w$ L
6 ~$ g3 h8 r6 g! [0 g        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
# H" j' j# u% [& S' T" Z$ t9 P+ B        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。7 K, l& n- H2 ?; L/ u- Y
/ A# j( J- E& y3 `
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
* Q. y4 e: a! l        {1 c0 F8 C  p  W, X
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
( t! J# q* p8 E, ?/ \) [' f: u1 n                cs_addr = SOC_EMIFA_CS5_ADDR ;: i) J& z, n" j) c2 s$ X
                internal = 0 ;5 M& c" _4 _. {( I% [6 {- w
                int_flag[0] = 1 ;
) m- Q  I2 }: M' {' [# r( S        }9 ~2 p( E& n3 r( j
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)3 H8 Z* ~, u3 Q5 u5 z" A6 E
        {1 Y0 m: o6 S5 i( H' \( w" |
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。+ S5 q6 [" v# U- F' T$ _2 M
                cs_addr = SOC_EMIFA_CS4_ADDR ;, G$ Y* v3 S& _; r9 }8 K0 t1 e
                internal = 6 ;
/ s% C8 d& n: g0 A4 q1 C, K                int_flag[1] = 1 ;
; Z  v$ S4 q: c6 Y% C. }        }7 `4 g3 p, T% l+ R
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
9 L+ T! [7 k* c        {% u3 g! K  I+ c2 t! Z
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
4 C8 ^) e  X( J0 v) e                cs_addr = SOC_EMIFA_CS2_ADDR ;# r9 F2 D3 {- n/ ~, P
                internal = 12 ;/ `* Q# @; r* Y4 x" W, K" y; W
                int_flag[2] = 1 ;
) Z3 v* A* u* n2 j" v$ x4 ]        }, k: B7 q! |# L5 g0 D: u
  
# A' |( Q9 |- |        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);, E; Q* @% ~* a% ]* E# i
       , J7 }( K) ^3 _. [" s) k3 h
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
# r2 h( D: l* z+ A$ f}0 x0 Y( d, |7 d' u: R
% m" d& `9 x  m" Y5 O6 F' T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图+ v+ W* \& A; C% l& G' J

" q' @# ]1 Z: j+ H6 y; E2 K4 D

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-1-31 09:04 , Processed in 0.045283 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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