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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:( b8 a5 W7 N( ?3 ?7 a# C/ Q+ O
#define AD7606_PAR_BUSY_GPIO_BANK        5
. K. n6 T3 ~/ w/ s#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT' u. |4 `  a( _- t& }+ s1 D
2 m  P  g' ~" P9 T5 W4 y$ E4 {- K1 S
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.113 B; M: X" C( c" t  y
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.99 j1 _) X# W  b" A: `  ~0 u
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.51 ~4 J, S9 l+ q9 @$ a! M5 R4 \5 k) M5 }) h2 h
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
3 y4 |. n' u0 x% o/ W- j/ v/ R& o( q0 {1 w0 C6 L' E
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)9 h0 H% T; T% E' k7 e2 {
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
: g( c% w/ \0 [! A! Y#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
/ U- f8 j2 O) B1 Z. h1 k4 x
& K. e1 B) C; Y1 K1 i
6 h( E2 o3 K; b! i9 Z6 @
1 v5 D7 q$ T+ t9 xstatic void ad7606_irq_setup(ad7606 *ad) {
9 X, U, r; j. H* Q+ v/ w        Hwi_Params hwiParams;  v$ h: V/ Y, x/ t) \4 H& o
        Hwi_Handle myHwi;
7 j: B- Q( M/ T# S) }5 F        Error_Block eb;7 Q! L1 O* p% p2 c; L0 U

4 z) {. H0 Y( E! \- s        Error_init(&eb);
% @3 F0 E5 m* Y# K, X        Hwi_Params_init(&hwiParams);5 L# \- r. m" Y9 g8 Z3 ]) }
        hwiParams.arg = (unsigned int)ad;
5 Z8 v& p" H6 T$ |        hwiParams.enableInt = FALSE;5 \& n( l. z5 F2 G, {
        hwiParams.eventId = SYS_INT_GPIO_B5INT;& B2 d+ n: |5 a+ u2 {$ [0 {
        hwiParams.priority = 4;
8 B4 `. ~! u' i% L8 j; U( b        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数- {# F. [5 c/ K% m% d+ n$ Z( ?
        if (myHwi == NULL)
3 [$ _2 H* j4 w/ @$ i        LOG_FATAL("failed to create hwi");8 p0 ]/ t7 G/ A4 L: O$ W9 \" P
; Z" C$ l+ e6 z. D  H
        /* enable both interrupts *// U, r& n5 R9 |5 t0 \' m! K
        Hwi_enableInterrupt(ad->irq_event);$ ^) U- P* t" J$ a( G, H9 k
}
1 Z5 U; }- t7 [: X& B0 z1 J5 P' m4 C4 v. B* s8 }; |' p- [

* [1 x" A0 `) g9 {5 v! h6 I5 Vstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {
$ q2 D, ?4 N  J$ H8 P( P        volatile unsigned int savePinMux = 0;
" y, J& L2 w1 ]1 _! a+ M& T- I' S0 U        //初始化5.11、5.9 、 5.5为GPIO口
: x" L4 P( M: a; d  v/ u0 h        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));( s, u7 M- E0 ]

3 o! T; p# l# f8 Q2 w. R6 Y        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);- ]4 Z4 M- v# [* @1 ]

- |  @" I& V( Z& p        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));* y0 g* J! y- G* ~/ e6 I" l
0 L& Q% C4 j  q2 @
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);+ W3 m( M) P$ A9 F6 {+ W3 ~" M
5 L0 q7 \! X2 h2 U- L
}: z! s; x: n- f5 h0 K8 H: i

4 t1 M6 m( O0 D0 R7 ~$ R0 y; p4 s; Y) A( E9 N8 r
static void ad7606_gpio_setup(ad7606 *ad) {
) `, u6 ~: ]. R" _  l3 ]9 I        /*Set the AD7606_PAR_BUSY to the input mode*/
6 U  A& ]/ f& R) a% U: R% @( k3 K4 A        //初始化5.11、5.9 、 5.5为中断口" g1 v( O' r6 R) T
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);, o5 l" D1 ^8 w) t0 o9 v* `
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
4 F- @# f7 i+ a8 P; Y# y        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);% I: s$ v: N+ N6 d1 I1 Q: H
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);/ j9 J- t! D" q3 t. m1 i
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/4 ^" s9 Q" b2 c  ^) V7 w4 h
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);# I  g* J6 r" n: @& i4 X( P
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
* b( y* M/ e3 o3 ?        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
; m4 ]+ {. V8 X- _+ }! H' `- f        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);0 B$ `' i% W4 k+ S) v8 G+ o
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/: s7 }  A( A/ i$ k
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);  U4 `( C( d- f: C% Z

, _% a( ~0 ?' Z  [, n' J        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);0 D8 f  g( j) t' P' w
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);7 l- y, Y# l3 H0 F# g' h
        Task_sleep(1000);) i, n" m4 z" k6 _  f# j- |
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
1 o- L" y+ K) x        Task_sleep(1000);
$ J9 P) h* Y, {( e7 w+ a, D/ Z5 f4 \& {
        /*Set the AD7606_PAR_CONVST to output mode*/$ c/ k( M7 e# s; O8 s' A5 y, v
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
* d! a9 B1 S: M/ E, q$ \) A        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);9 K, O! C8 `) A& J& Z
2 S" |, f3 f5 u& A4 D' b
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
! f% \" Y+ h* j; g& _  S- \        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);/ d2 N! ]- D: Z# y# }
$ o* ]5 O  ?+ h0 w7 f, u, Y2 u
}9 W0 p7 i7 Q; Q( {
9 b" P- X4 g, u' \4 \
* I: H# Q6 T: h! ~
static void ad7606_busy_hwi(UArg ad_addr) {
* o+ v/ y5 d$ ]! `$ R8 H( N; K. ], O
0 E8 B' u: V8 H8 d! U: f: `! C1 V1 m
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
' f2 n% u0 a9 r3 a+ I) |        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
% g& e! Q0 l& V$ f% ^& w& o4 B2 m/ y
; O, |  Y0 P& c+ ^1 [5 ^        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
2 _. c. @; h' c; y8 {8 n( Z        {- @4 \3 w; f0 {* m2 t3 A1 G
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。9 i  r' R( P& a8 J- H
                cs_addr = SOC_EMIFA_CS5_ADDR ;. }) S) v# w) K7 J% C: j! O
                internal = 0 ;5 W7 y* t* n+ B5 D# r3 l- V1 R
                int_flag[0] = 1 ;
1 F8 ~$ o  [9 d/ a. n7 W: o6 |        }$ N& O, y+ F! \4 {5 d
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
9 c2 X, [6 e* E0 W        {& a6 e8 r# E6 p3 x& \
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
0 S4 o: R* l/ n& e                cs_addr = SOC_EMIFA_CS4_ADDR ;/ X" O9 c1 X4 o* a& y& H) }; e' s
                internal = 6 ;; p3 z# ?2 u# ?! B! e" ]! X
                int_flag[1] = 1 ;% C' S5 c- U+ @+ H
        }* N+ ~- A2 `: J
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)1 H3 [* J; I+ B6 i
        {. T/ y6 r7 ~6 h; a( P4 _! C" J
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。+ f  T$ i* t4 x' T2 i" T
                cs_addr = SOC_EMIFA_CS2_ADDR ;) ^( b0 G$ w+ T! i& v" }
                internal = 12 ;4 z8 j  N7 L& V. i
                int_flag[2] = 1 ;% E3 _% E4 o. f. J) N' O
        }
; `7 T9 G" G) A( y/ |4 `# w' T+ g: b  
, g% A! F8 x  C, V1 z3 t        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);! v; }. K( C1 i
       0 k/ J! O$ n4 o; F
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
, k9 p8 e5 g; L- x5 P}( G8 F% x% L# S$ }- c; X

9 E% a+ h' \$ ?1 A8 g# e# M4 r4 w
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图8 s4 \  \  T! m( F( p2 [  A: M
: n0 e/ f6 a' j& Y" i9 [9 f

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-16 18:13 , Processed in 0.037274 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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