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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
0 V. x9 n# ?3 E8 H5 w' Z) f; Y#define AD7606_PAR_BUSY_GPIO_BANK        5
4 E" s- B  u+ \" Y/ w0 n#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
1 s; Y, \: d: z6 B" a$ i) C! l6 B2 ?
2 j, w- t- h4 I* y! v1 f' }#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.114 M! ?+ }& X, H6 d6 D* \9 i
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.96 a. S. x0 W5 P
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5; q5 T  Q) q+ C: W3 ~6 W
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
; }6 Y2 h' x/ c. e( a- C
' R7 z( K+ x" Z#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)4 p  Q0 F3 P  H6 L$ ?* I  B
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
7 e9 Z) q) g7 f* {" y#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
* w1 b! w- }- e: _# u7 w! j1 _8 W! j1 P
/ ]  y1 b& q) k, i' K4 L6 y( {
3 ^4 Z9 W1 z- e8 E1 L( @; y
static void ad7606_irq_setup(ad7606 *ad) {
# T' \, x& W& m/ c        Hwi_Params hwiParams;- ^' i6 _, e: y* z$ G
        Hwi_Handle myHwi;' u0 G2 Y( Z$ j( G+ I
        Error_Block eb;
+ T% }, f) p* x# @7 z
( }' R: a0 c; t4 @5 r        Error_init(&eb);3 W+ {0 {  w( I4 }; a) x
        Hwi_Params_init(&hwiParams);$ _, _/ [3 |9 D8 {7 }$ ]4 L
        hwiParams.arg = (unsigned int)ad;' W2 V. I$ g. f/ f4 P" G
        hwiParams.enableInt = FALSE;  I& o  k% j  f, c
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
# b9 |. r" c, }5 O        hwiParams.priority = 4;. Q  f2 @2 L0 I
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数" r# A& x* I. ]0 N  g- W' b$ w0 A
        if (myHwi == NULL) ( i3 q; j; R) K: E5 W- E5 ]' v
        LOG_FATAL("failed to create hwi");4 m' D( E4 K5 _5 P" N

" a7 {2 i6 B3 b1 r" M+ n: }        /* enable both interrupts */& T+ \6 o( h5 O8 _( R) I. \# y: v
        Hwi_enableInterrupt(ad->irq_event);
. O7 J  }* ?- o) _8 _+ ]+ Z}
" Q# ~- F( y. G2 W8 ^8 _+ ?0 V* A" N7 Y1 i) `+ ^1 r

6 {, J/ G, l' L" Ostatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {
- K) B% u  V4 M        volatile unsigned int savePinMux = 0;
* l& P1 N2 S2 `: N; e        //初始化5.11、5.9 、 5.5为GPIO口
7 G# E+ K8 [8 ?0 v        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
) o, |, B4 e4 H. @9 h' K
$ O( j6 b0 o0 Y& ~2 x% n' E! o( z        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);8 b% F% e9 w) ^& ?' }, B( {
" p! q) j+ X6 L* ~8 c8 t
        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));
& e" u+ ^* _. p  C9 s9 m9 g
& T8 m4 _- k4 l! r        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);9 \/ i- r7 ~1 a0 V0 n

* Y7 t) F. t; \4 z# C* q9 A5 o5 C}8 g" d% a1 P! h

3 G, q3 n: g$ B1 A( Q: N& ]
) R0 ?. d# v# ~* j& [static void ad7606_gpio_setup(ad7606 *ad) {. J( m' e  o0 E6 q9 D  l
        /*Set the AD7606_PAR_BUSY to the input mode*/
3 j) n3 K! ^5 T  m3 _        //初始化5.11、5.9 、 5.5为中断口
* Q) F+ m" H% _6 y        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
; ]1 `; n3 J- r# j. Y$ k        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);# ]7 C  l7 P" ~7 J* ^4 T
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);3 \, Q7 `1 @+ }2 K  k1 I
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
* `% \5 ~- r1 n, E5 ^        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/* U) C9 s- E* Z# A  x
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
. G9 _9 B" z# \; O        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
( V' m4 g7 r4 F' m        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
' J. v0 e, _. W% X        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
3 ^( M- _3 E; h        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/: \$ ]4 a  m$ }1 N' E5 i, L! ^
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);" u( h2 G0 Y8 p  V- G2 {8 |+ ]

* u" v1 ?$ S1 o  U6 G" C        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
6 |. X5 ]- X$ b, i' F        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
/ U, P; u! p8 ~1 A( q8 v) K5 U* \        Task_sleep(1000);
- _0 \" b. M5 L' w6 h        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);% K; G, U4 m3 E" ]4 @
        Task_sleep(1000);! w- r' f0 E# E# c! x+ n

* v, N9 W* x! h        /*Set the AD7606_PAR_CONVST to output mode*/! `1 v" f9 t( a: u, |
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
0 C2 ?8 X& F. V5 c9 U, g  H4 J) H        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);! r% z* z  p8 H+ r: I: M" d2 m

5 }8 F! n+ r0 m: }0 v9 S        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);( V; a0 Y: V* w# ]* F! H% v
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
, o% ~! U7 m- ?- ?7 S
2 f& }1 K: k* U/ M4 L6 ~0 o% F}$ x/ u8 n( R0 s9 O
9 q" a8 ~% i7 W9 U" q
+ @+ K3 I, n. a; G+ l. C0 m+ l4 t
static void ad7606_busy_hwi(UArg ad_addr) {  J  J4 t0 W! I) t$ g

& {$ p; D  Q' y8 G; y
# A4 ^, C( r6 v/ ~7 O$ h2 H1 ]: b        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/. D# F! M& M. t
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。1 @" k: d# U' x# I

" s) \4 Y- |/ a; J        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)$ I* ]4 y) B$ P( v$ v0 b
        {
- Z1 {( j% E  ^- y. b# M                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。7 C2 v3 L0 W8 d  m& z! b, n3 l9 q
                cs_addr = SOC_EMIFA_CS5_ADDR ;' o1 s- F/ ~: e$ P( ~
                internal = 0 ;) r& i0 P7 a) P4 D) j; m1 X
                int_flag[0] = 1 ;( N* ~5 @7 h: F4 U
        }
' x9 E! o% ~$ X# ]1 w  J% ?) s        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
" I* \4 [, ]7 H9 i2 ]/ a        {# h5 K3 `8 {% @* |( k
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。9 P5 w0 C6 a: b
                cs_addr = SOC_EMIFA_CS4_ADDR ;
2 q8 P' h, r+ D" E" m: L                internal = 6 ;
4 u, A5 |- k7 O& \9 i1 A                int_flag[1] = 1 ;4 {' t- K9 ^* f1 {# z* }
        }
* V8 U1 K  A) u- [, O        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
) ^+ v% W( y2 D  Z- f7 o        {
5 I9 |: V2 J9 R6 L& {                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
; _) D8 ~  }, q4 R# Z$ e                cs_addr = SOC_EMIFA_CS2_ADDR ;
. N5 u% U& E! k0 B6 U                internal = 12 ;, |1 A9 W5 G  ^' Q$ r1 R5 E: c: T
                int_flag[2] = 1 ;. r3 y8 b& y6 ?' X6 o2 m* ]+ Q
        }
& ^1 _- F- H' z  
6 H9 q9 x' x8 h  A* L& L# H4 d        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);1 W. M3 k& r( b/ B3 F1 u) O' @
      
; k& _3 @: m, N. c! s1 K7 u( t        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
. `- {' U8 b" K; J2 _0 w- p}
$ c! ?6 C" F4 P* h
8 k! l7 t3 D, l/ n& C, G0 `0 o- ~+ H/ l

$ F$ b  F9 Y6 s4 ]" z9 i
7 X$ G) n& b+ p; I: y

本帖子中包含更多资源

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

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, 2026-3-17 09:54 , Processed in 0.042327 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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