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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
- s( z4 E' ?9 V4 |/ h#define AD7606_PAR_BUSY_GPIO_BANK        5
1 F- L* o' d* Z- Q#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
+ z- Y/ C+ _+ a) I  p* K% V
$ f2 F) a( P1 @#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
: q4 h. y9 ]7 w& q, l, b4 }#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
& V( L, X3 @1 v  e  E. ~9 Q$ r7 b- S#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
7 Y$ ]& D6 d- {- {4 h( Z#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)$ e' ?/ u8 k) R3 G. p  n

! }" H; f2 f  H6 H$ |7 ~#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)! w8 Y1 y$ Z! ]9 q: [9 t
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
: L* x- [- j; ?  f. e% j#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
; S) U0 P9 o6 B: T+ E/ z
  `/ m% M" }' H
' w; T$ d) R8 S$ Y3 p5 `1 {1 @2 P1 o4 M! L
static void ad7606_irq_setup(ad7606 *ad) {% T  k* k. ?8 k$ _* j
        Hwi_Params hwiParams;6 s! g- U" t" A) @4 P/ ^0 u; o
        Hwi_Handle myHwi;
8 w/ }9 b& v) U2 O  p        Error_Block eb;& U1 I! L& Q2 ~" ?" \$ c

' i! ?4 \2 Q- f; q5 d# q        Error_init(&eb);( b* h! [/ ~5 P* J& A0 s. E
        Hwi_Params_init(&hwiParams);
. G4 O) r3 |7 x6 T  T1 x0 S        hwiParams.arg = (unsigned int)ad;
. \) L9 `* q4 g. U% M        hwiParams.enableInt = FALSE;* r  V! r6 `- f4 F  D# p
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
/ I, @" t8 v  F; R9 X        hwiParams.priority = 4;. C0 `% z3 Y  O5 x
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数' }2 P, r' B( G
        if (myHwi == NULL)
! w# F+ m: H' i7 L/ ?7 g1 F+ ^/ M. c        LOG_FATAL("failed to create hwi");
2 {) L, r- A: x3 t3 }2 H3 F3 L% l4 J# m0 S
        /* enable both interrupts */
. T' B6 u) U; {- f/ O( t        Hwi_enableInterrupt(ad->irq_event);
9 m- Q! D: Q7 Q, K7 _}! n/ ^% F( S7 w) M3 h; M' r& A& ]
# v* m/ v3 Y3 r9 L; M/ l# `5 X
* Y4 J' c1 v; i5 K/ ]0 f
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {
% l' h1 @# }7 P- q- d8 L& H        volatile unsigned int savePinMux = 0;2 p4 a$ k" x5 U& o
        //初始化5.11、5.9 、 5.5为GPIO口
9 O& K6 |3 t  J8 x2 R% g7 C+ U        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));1 n- U) ]+ _* G, R' M9 d
. u- `. d( D0 u1 C1 b7 `3 b4 E: F
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);+ z  _: Q8 k# |9 _, E

6 I! s" J8 o5 c5 D# T9 B8 m        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));  S9 F6 a* U# J" r! B

. ~, g- N" |9 L- T3 s        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);9 c# S) N0 V5 m& f7 k

3 K: @9 G" `) s1 x1 s) ~}" k; x* s: U/ K" Q0 R3 W+ E1 @. }
  {0 G) T8 |' A$ p) ?( ^
3 @7 T% m2 q, Q4 @9 U+ e: |8 r0 u
static void ad7606_gpio_setup(ad7606 *ad) {
! D  M! W7 Y  T9 c: n* W        /*Set the AD7606_PAR_BUSY to the input mode*/
1 j2 D* T9 b$ G2 h; s* B        //初始化5.11、5.9 、 5.5为中断口. u2 c  f) Y, h  e: M  k: C. K# b' Q
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);" @* r% L5 E7 i% d
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);( I( ?- ]( S+ ~3 ]: D* }6 U7 l2 h
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);& A2 U  N* Z, H& [
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
  k( g6 U0 n  V. d0 c7 n  _        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/2 w, h$ L! c' L; g' O& }6 S# b
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
& `8 d: p. G+ a- l1 {7 g        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
4 V% ?  ~5 t/ x+ U1 h/ O        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);0 L" P! U. f1 i5 Y! x
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
+ N; E& D4 z! ^* k5 ^9 r        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
3 c6 P6 B+ c" Y: w        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);: z- z) ~* }/ _8 m5 y

( w+ p+ T3 G6 e# W! u        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);. K" m) P( E2 Z: e9 N- M, w2 W
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
$ Q2 k, @& A/ c2 x0 t* l: y        Task_sleep(1000);
7 V& w8 {7 p( [        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
  ]4 K% A3 I' s; W$ ^! Z        Task_sleep(1000);
7 x% i' G! M5 z
5 s, k# Y" o5 ^* s' x* X% f4 q        /*Set the AD7606_PAR_CONVST to output mode*/
0 N3 O! x4 E; K        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
6 P- c) V, |7 L; |1 E        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
" w; ]: K$ H9 g: }( x- X. s2 p
+ `( p; U/ d. A" G# a        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
$ @  d+ N3 e  k+ v        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
3 k5 [, D$ ?0 z! e. i7 ?' ~- o" v; I8 h* ]1 ?. n0 O" i. b
}, ~5 Q: X8 [; S: N
! u1 g+ c9 o8 y2 E( y: q4 c1 ^% h' L

# }: m' ]* Z& c) _static void ad7606_busy_hwi(UArg ad_addr) {
+ g. h  D" P$ |+ i8 q4 N7 }
- M/ \5 f" A8 {+ q' U3 D4 a0 k" f/ Q4 \2 I
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/: t; @  r; K* t: g( Y  ~
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
: A" z; m( N; \4 b# {
7 `4 j& n) m2 S& ]8 T        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)! i' l$ F7 x. y. o3 E( [6 R$ ?
        {
. o5 I' Y! `# g/ r5 \  K                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。7 |" u: s) C3 r+ _; a  P
                cs_addr = SOC_EMIFA_CS5_ADDR ;
7 o+ i- c+ L+ O                internal = 0 ;
# Z3 |0 c2 `7 E3 y9 U6 p, ?  R1 R                int_flag[0] = 1 ;
! {8 \  M( O- g2 f, Y        }$ B6 {% b" b7 Z8 S
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)! b7 |) q9 C  p" e3 J7 @8 ~
        {/ m, l2 }0 g( U0 e# J" f6 S
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
. [( v/ k, M& b7 m0 ?                cs_addr = SOC_EMIFA_CS4_ADDR ;! U# r% B: j. [4 z2 }1 H
                internal = 6 ;
- O% L" ?; J- L! f                int_flag[1] = 1 ;; l1 u/ P; m, ?
        }
( a1 h' {. M+ r3 Q        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND): C9 G8 F' D$ x& H1 f
        {! P4 E* t8 k: `4 e; @) z
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
3 _& I. M$ \3 I! D" p/ A0 ]                cs_addr = SOC_EMIFA_CS2_ADDR ;9 `( S7 |9 U9 J( L/ z
                internal = 12 ;
  E1 g$ h& v9 |4 C. |& b                int_flag[2] = 1 ;" q% \# q' J! F1 P: A* X
        }, ~0 Z% u: X: F: Z
  
: f$ f, p+ N4 C% D' [3 H2 a2 \        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
' J3 Q: Z3 Z! S. O5 ^2 v# Y/ D       , g0 W1 Y. u8 s' F. K8 m3 r1 y
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);' }# _0 }% i/ g" m( e7 M
}
# l: c0 ~4 g6 D3 n
# c% Z0 e) C" P2 t. ^
- ^4 u# z" d2 \4 ^: {. v6 J2 C8 n
4 a# t$ f1 i1 U

本帖子中包含更多资源

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

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, 2025-12-16 12:58 , Processed in 0.049414 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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