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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:( D4 ?1 P# t3 t' ^  h
#define AD7606_PAR_BUSY_GPIO_BANK        5
7 j! }* \( A/ i* l#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT! i- [9 V) b4 U, u
) p8 q5 Y) N( v" j# a2 N  h, W
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.117 B& `+ Y% k: g$ e# g3 L, g
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
. E- Q+ V% Q/ F& n4 H#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.53 N6 W' }0 v) j. l  N) F
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)1 V+ c1 i( p* o" c1 X
# a* B; B9 h. U3 q' ~7 g
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
; ~1 ^0 C1 I+ Y$ x5 N7 f#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
7 l9 M0 o( Q2 `% }0 Y#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
* U. |4 ~6 y( F5 g6 m
4 G" A  m* S0 J; k  U+ W- Y5 d. m' D9 O) f

0 x1 h% T* @3 T) Z- ustatic void ad7606_irq_setup(ad7606 *ad) {- D% V' u; }  l& i- F
        Hwi_Params hwiParams;% ?/ f. y+ E+ S# w' w: ^
        Hwi_Handle myHwi;
& l# J$ ~- k0 }* I; u* d        Error_Block eb;+ X. i# y/ P1 ^, \& ]
9 J% x( P# @  r# X8 J: A4 T/ O  @/ J
        Error_init(&eb);
8 ~$ W$ \7 O$ c& J, W        Hwi_Params_init(&hwiParams);) `4 Q" d, F0 O# ?9 O# X2 \
        hwiParams.arg = (unsigned int)ad;( t7 [4 G9 d2 n
        hwiParams.enableInt = FALSE;6 f# v% m* y# A6 C
        hwiParams.eventId = SYS_INT_GPIO_B5INT;# n3 R3 b: t) _( c& |
        hwiParams.priority = 4;: u  ^& u% v; d
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
6 i  k; I/ m+ x3 l        if (myHwi == NULL) & C" F8 `" q; v1 w9 y' ~
        LOG_FATAL("failed to create hwi");  A9 P3 G. s/ m6 M
; F6 @; k8 Z) l2 l8 u% ]+ Q% P- G$ V
        /* enable both interrupts */
" y, n- _" f  }        Hwi_enableInterrupt(ad->irq_event);
$ R+ e, {# }, o) O8 ?* n/ W# u}7 }4 |2 b! {  e, y$ N6 ]# j- w
# }4 K: i. x4 W  X9 u$ s$ N& u

- G! X% \% H1 m( B& W; H+ Bstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {
. X/ G% ]/ x/ U$ Q" o  W4 D6 c1 n5 R        volatile unsigned int savePinMux = 0;
+ H# z, K, y9 W2 ~        //初始化5.11、5.9 、 5.5为GPIO口
& e5 E8 J0 O, ?1 ]) Q- {2 I        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
; l4 O* M- r3 r1 m, I: c! r3 o$ E% F% j& f1 u" C; d6 Z5 k7 L
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);+ H7 F" n- m: S
, P+ ~- _0 q$ V9 ?' g
        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));9 x! r. `* V$ }6 m! ?
: [5 w& m4 b% g: m. B
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);+ L( b8 e! `* D& K/ W

1 M, d5 v0 ]) X1 d( _, d}0 P, V+ F7 `8 Y% y' `, w
8 `5 l5 J8 ?8 C7 Y* o9 U

5 x) c! C0 P! }  A( V* s2 A+ g+ estatic void ad7606_gpio_setup(ad7606 *ad) {
/ e% G# N8 r+ e" o, V0 _        /*Set the AD7606_PAR_BUSY to the input mode*/7 l# y7 Z1 H8 M& g( r
        //初始化5.11、5.9 、 5.5为中断口
/ N3 y+ R& P  @2 q        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
# ^( \# v6 I4 x, `        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
; {8 M3 a+ c, g. L: O( k        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
9 M5 V+ m6 |, b! e        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
& \; |& M; \* m6 I7 D/ n8 D4 C        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/. L7 `( {& R" k, |1 j; ~' E
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);3 }5 z  U1 H: }* L; G
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
+ A9 ^  }" @* k. l* g5 [, D$ C        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
$ j2 T, y# j! s( ^  \        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);. w! r- Z0 r! u+ n/ z, D, O. F, i- w
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/; G" x! E8 M- L9 R/ A
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);: U- H: I+ b3 z* n5 n5 f) r2 ~5 T

: [1 n0 c1 L" c        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
  S- U% t) c: W3 J2 p        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);9 H6 \( u, F! D* M
        Task_sleep(1000);
. x- }  p# Y6 c% V# C; ~& m  g        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);) N2 A; z8 W+ z
        Task_sleep(1000);
. k7 A  ~, g6 Y6 ?
* U! A' D. ]% Y* o  b/ X% R" U        /*Set the AD7606_PAR_CONVST to output mode*/( ?+ N* t. `2 }; F6 E, _/ L( }5 d5 D
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
* @) x. {8 e% J% k3 w! E        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
- P6 M1 t) s" F7 |' {1 U* S0 a7 p9 V0 l5 [1 X2 }: ?
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
, X5 `7 a& O1 i" R; p3 A7 a8 w        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
# U. l+ @9 n4 x# V% W" k2 u* h. }2 B( D* Q- X, z' X+ C
}# }% n, s  z, t8 k

" [9 H: M! ?+ q2 M% @8 r+ D( t0 R2 I* H; W) v9 g* J1 z) j
static void ad7606_busy_hwi(UArg ad_addr) {
7 F5 Y! X0 I' G$ E" h  B4 Q; J
( f4 \5 q( P. H/ r' r! a9 f( P; r- i( [. u
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
4 ?# S4 K8 H' w( t$ z0 j8 [1 d8 D        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
3 X. V5 F9 w4 T) n6 E+ u  k. x" T0 [; t' J% ?
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
; A0 v) p% S/ Z1 p        {4 I4 c: D: r+ B. I8 z
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
3 v; d; R! {( U: P, s                cs_addr = SOC_EMIFA_CS5_ADDR ;
" l- ~( O- F, H# `% k  W, H0 r                internal = 0 ;% Y6 w& S  v5 S
                int_flag[0] = 1 ;) H5 u/ b( g$ F- L% R, `$ q" B
        }6 B$ S# z- W8 u5 x1 }& U
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND); k4 C5 L8 S6 W" T2 e6 a, m
        {- T9 P1 Z9 k- W# g
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
6 z7 P. y1 v# H- {                cs_addr = SOC_EMIFA_CS4_ADDR ;: @$ U- Y$ ]. w( p* ]- u
                internal = 6 ;
4 G+ J, P9 D; t$ `5 m: j& }                int_flag[1] = 1 ;
5 s7 \' J( I& [: a* ^  G. a! K        }- ~0 G/ W' T$ q5 l/ @
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
' }/ p! q, s: }1 M  q, |2 T( s8 }        {) _/ s& x- h" _. _& v
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。& ]* Q5 S  E( `6 O
                cs_addr = SOC_EMIFA_CS2_ADDR ;  `6 m! y: F4 i/ X5 b. b
                internal = 12 ;
7 D$ H. S% h9 @: i: Q9 l6 ?& \  I2 j                int_flag[2] = 1 ;; Z. C0 O# ~- w" a
        }
6 J. U/ f7 |/ e- N  + [5 m" W1 r( X, B& N7 R" c* ^/ H
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
! R: R3 q5 ^5 E: D% @2 }       4 P$ F  t$ o$ f& [; L# D2 k, }- A- Y
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);- T- b3 q1 {2 W+ ~1 s6 R2 ]
}0 H& C- f) W! c3 F" X  z0 ]

1 ^, F* {! _$ Z* D  H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图- ~" y" n4 i/ l

9 X7 a* D3 p) v# g( i

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-4 05:57 , Processed in 0.045692 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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