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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:. p( }. ]+ D& }  x( Z  c
#define AD7606_PAR_BUSY_GPIO_BANK        5
+ E+ b* g- c0 H" L' F( e6 j#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
- z9 h: X! N; v8 E
9 a+ \; A' P1 e" g- ]" k#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
. b$ X3 N; \) ^$ o4 z! c% U4 z1 Y#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.96 K3 y1 ~+ ]! E  o5 q# B( I
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5+ l2 G' V9 o' `. H/ d# f+ P. Y% F
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)3 d; B, Y: n( x9 o/ k3 d
  P4 h1 F* c, X/ i
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)6 Y# |4 e# b3 K# H. N, U& d* O9 S
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)2 Z$ T' y* I, I: ]( g! r
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)8 L- v, j; I# s4 {

1 r( P. n/ r. v. I
* o+ |$ @9 ^$ M7 @) L6 i5 r* R7 h
, {' o/ S, X5 p1 _" K) hstatic void ad7606_irq_setup(ad7606 *ad) {
- i) s# a# k2 Z        Hwi_Params hwiParams;
7 `& ^2 h5 X! c  z- h  w; o        Hwi_Handle myHwi;- }5 J! }; N' F6 B- m
        Error_Block eb;
9 E$ {. a' Q9 u3 t/ T5 E8 D/ L! N+ n3 j7 q) w
        Error_init(&eb);
6 W' E4 d! l" Z& g: }        Hwi_Params_init(&hwiParams);
! E! I8 g  \* O" o: x; G; Q4 Y        hwiParams.arg = (unsigned int)ad;
8 c) u  c  |+ N& l% v        hwiParams.enableInt = FALSE;
: c. W/ z/ k/ |        hwiParams.eventId = SYS_INT_GPIO_B5INT;4 R5 _9 `3 G6 R; F9 f
        hwiParams.priority = 4;
. q  `4 r( }' M9 j! F        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数* i- ?2 l/ B$ E- ]
        if (myHwi == NULL) ! n( }: |, _4 i; ~, z7 L. d+ r
        LOG_FATAL("failed to create hwi");% {5 ~- J) G" z' s

/ z6 {1 q$ [, Y' A5 [6 S& `        /* enable both interrupts */. E! S6 z- i- J# }8 E
        Hwi_enableInterrupt(ad->irq_event);
$ t( Y, `# W( P( c4 r( ~9 R, _}
  h/ O/ G7 [+ }! r6 Z( |: H$ A9 K' n  O: K3 |2 A* S; l9 x8 R

: W7 A0 m8 d: X7 o* B8 istatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {
" W8 y* [+ z* B! F& [        volatile unsigned int savePinMux = 0;
% Z/ `9 t# _. ]; w( E        //初始化5.11、5.9 、 5.5为GPIO口5 P1 d5 x. Q2 F, n; }7 j
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));, B$ }% x# L7 {; ?* L/ _

( R. Y( }7 Y  H        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);) |* x' o$ a. ]) p
8 {" a* ?5 Z+ u: w* ?. W
        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));
/ L+ k5 w: }( m( @/ v
. @4 r, q3 r; G/ K/ ]4 V        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);8 `! {* s3 P+ _. O) l, ?$ ?; n* ~3 w/ V
% F! O# T8 D7 m6 B8 {) K" R& ^
}2 U5 |) _% L8 X% n( ^% E' S# F

, y& y: o1 `9 E7 P5 F# {1 r9 R
5 \& C' g! |) U" q+ H, mstatic void ad7606_gpio_setup(ad7606 *ad) {
* N! I, R( u; [        /*Set the AD7606_PAR_BUSY to the input mode*/
, s. g$ ?/ L5 g- Q) z        //初始化5.11、5.9 、 5.5为中断口' i" h1 f6 M2 Q* k1 N' k/ I3 }
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
  f+ H/ O& e1 s' N        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);6 s+ E& p2 c& \1 A3 ]6 W' a1 N
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);% \. @2 ~' S3 q5 U4 N
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);- o, l) n" K! s# g  [- p! b
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
; J5 x! i. V" J5 ~        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);+ Z- p) W" d* _" P
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
6 U. \4 P  _: D4 v: }! F        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
7 v! N, b& P4 m        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);; O9 H" W+ B' Y# r  J+ }
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/0 h; Z: J" J" O" o# a
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
) L: P. h9 i7 U8 M/ X% w! |% _- F) G1 I
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
. v# ~2 M. q2 H" E        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
3 _6 K0 I+ f" P( r) q* N7 L        Task_sleep(1000);
6 t0 r9 u6 q6 Z# }. B8 t        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);2 H9 R, P) x5 N/ m. N+ Q4 G
        Task_sleep(1000);
& O' l% b0 q, u" ?+ _
, A7 w  |* _  q        /*Set the AD7606_PAR_CONVST to output mode*/, j* d% S! t3 w; c) Y4 W% Z' c4 p
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);, u! i1 V6 P4 u9 [! M( f2 g" C
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);5 A4 ^  \* X( P+ |0 x
- `' |! e1 W0 {; l
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
$ a5 h8 n3 M, \$ i7 i  [        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);! k# K2 L. Y. {

, v# s2 I9 d5 R1 Z}
- F8 G% s% y" ?4 ?, R4 n2 d; L4 _" T/ z- V
+ W- D* ^! p# m3 h( h! `5 e
static void ad7606_busy_hwi(UArg ad_addr) {) r2 m2 e6 ^2 l/ {# x
* [3 R; c2 S. E9 E+ H

3 N$ e, U( R0 X  L        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/4 `! F  R4 r" ^; ~& B5 i; p8 g7 v
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
: c& A' }2 J7 ^5 I/ T  X1 \
. Y5 }5 Q/ N5 B5 A! y        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
! n# W5 Q! ~- n$ |# t3 j        {
* |8 `5 {" N! @) E2 A* o                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。! f( w% t4 x8 y. }7 }: A+ X
                cs_addr = SOC_EMIFA_CS5_ADDR ;
4 F  ?* O$ b3 c. J                internal = 0 ;
5 R2 Z/ [% X, r/ Q- K                int_flag[0] = 1 ;% l1 [( _+ f# k1 d8 w  A# _" ~. ~
        }
9 R! z' E. [% \1 e( _        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)9 S6 Q( ?9 O+ l
        {% o. `1 U9 }$ J& X/ O: l
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
% I$ U/ D4 H2 \  Z                cs_addr = SOC_EMIFA_CS4_ADDR ;
7 L) n1 [3 n( F0 m! B- v  i+ W: h                internal = 6 ;
( G" A- @. O# w5 j5 e8 W                int_flag[1] = 1 ;
( z2 r- }) `) q        }
- O& U2 F  P/ D/ C' C  o! m8 r        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
7 L3 T$ S- k4 A  n        {3 M0 d8 L* Z, z' ?
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。* R9 s9 g% y6 W) Z! @
                cs_addr = SOC_EMIFA_CS2_ADDR ;# _3 }3 V% A7 g) e
                internal = 12 ;
0 I+ P, ^! M& s# c9 E                int_flag[2] = 1 ;
" w9 w( a  i  S% S/ M3 g0 S/ D        }0 \& h) |) r1 W
  / E3 G) Y6 O9 K6 k2 r
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
" S2 u3 x* r1 K# G' O, s      
& s2 o* l) F6 L& D2 F" T        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
! c  A# U+ g: B% j6 A& t7 `1 s}
: z0 x) t6 v+ r/ T$ T+ P& L  ?' w. w& @; m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图9 e0 u* S; K  Z6 n* X

; {7 d4 T) q" w% r7 r2 x

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-17 16:36 , Processed in 0.040804 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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