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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
$ e+ O9 w2 ~/ [& u2 N8 v#define AD7606_PAR_BUSY_GPIO_BANK        5; t  U' a  W. q* C, a3 a
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT: n1 R/ c1 n/ _; y0 u

- N6 V! h. x% ~$ z4 F. u#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
7 z' s0 d" Y1 p6 b9 D4 D#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
% O" @. ^& E6 i: A#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
* l, z# L, \/ z% Z6 z#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
$ P/ d( U4 @2 D  `4 s1 T0 F  r" m9 u5 m
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)% _( ]* y7 ]  r$ }5 M& L& ?" n
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
  Y6 n: {6 O/ h/ L' h* ~  E/ z* y9 [# x#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)) I$ G: q9 I- ?2 ~. B, i

  D3 @; D$ n4 c: {8 X: |
2 K8 o$ _  O, w: m
2 a2 \! z) d5 w9 Nstatic void ad7606_irq_setup(ad7606 *ad) {8 Q! Z. G- c+ n# W
        Hwi_Params hwiParams;6 q* X' J# P/ F  z2 B3 p
        Hwi_Handle myHwi;
; H7 c+ |8 K, W: Z/ ^- C, @5 V: y7 e        Error_Block eb;
% F: r& }" B1 T8 H$ `6 i" S! ^! x* \" n' l8 g' o+ X
        Error_init(&eb);
) k9 C# |# L9 e( q        Hwi_Params_init(&hwiParams);
" u' A" D$ m- l/ H$ S+ H* ]        hwiParams.arg = (unsigned int)ad;
+ F2 S7 i, @3 _: i& n. `        hwiParams.enableInt = FALSE;5 W1 o/ H" p+ F3 ^! o- k" B
        hwiParams.eventId = SYS_INT_GPIO_B5INT;: [) H) o" P. t2 i" U- n
        hwiParams.priority = 4;
0 K7 q, q* l& q        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
' ^; t5 z9 \- o: b1 L. }        if (myHwi == NULL) 8 o; _% ?: E8 O+ {; l6 z
        LOG_FATAL("failed to create hwi");
, Z* r) I) l* E& O1 s8 L* z- k2 i* ~9 z8 A, n' z; Z
        /* enable both interrupts */% Q; W# x6 f1 P8 ]  I9 }' ?
        Hwi_enableInterrupt(ad->irq_event);
2 a0 j" d) b; T. P& F}
  [' A( Q! u8 |. p; W
$ _/ d; T. y. V' \" Q; i# b2 |4 }0 U, e* Z* t
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {
) U8 R4 `' X. l; C" ^3 @: t) t        volatile unsigned int savePinMux = 0;
8 e, B+ }# s- u2 N        //初始化5.11、5.9 、 5.5为GPIO口
$ l2 \+ N' F1 |9 t3 F+ f# r7 w3 c        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
1 P! h/ y+ `: `- `: r8 A3 u; t1 \/ Q
; I+ D3 g2 K6 @  Q2 P: P        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);+ A' S4 d+ d# {+ _1 P
9 l& D& D  Z1 ]; i6 `
        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));* b4 R! U& _5 ^& N: A! y- q

, F1 ^% t+ L! Y3 i/ R        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);* Z; T& d7 C0 h+ O2 j# s/ l

" X. [1 h( ], L}* \% c* t2 N+ q- A: B" L
- g! j+ W$ X% Q/ H0 i. y  O

' J9 O2 S1 E6 Jstatic void ad7606_gpio_setup(ad7606 *ad) {6 q# Z( w! ~: O6 d& r& i( L
        /*Set the AD7606_PAR_BUSY to the input mode*/
* E/ y6 T( q6 Z+ m! |2 I, _% [        //初始化5.11、5.9 、 5.5为中断口
* w+ T! B! z/ L        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);, P4 f1 e3 h, m$ @+ u
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);; J6 e. o, s& H/ S' ~/ S' }
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);5 E- z( P1 x& v2 ]+ }  C2 D
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);% @' F; Q1 M' G3 _( ?
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/2 s' I, `) W& F1 x% U
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
$ V: A# o; @, o& R6 J) L        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
0 u6 H+ K# g  u, |; P8 l        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);7 R# a+ i. U" G" ~  S0 F
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
. q0 x% I4 |* n& l* k  P6 _1 c        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/, G) S% {9 D+ t4 G; o/ M* a
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
  i5 d6 x) B8 {/ \4 p; i/ r0 i4 X/ g$ L7 Y
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);6 F  I* f# A8 G3 W
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);0 @; r, r: c0 |: l9 P
        Task_sleep(1000);1 b. K6 P+ k9 Z
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
% @# I' P8 x8 f. q% P- J; l+ h, R/ v        Task_sleep(1000);$ c4 c( i2 g( W$ v

  y' n: }2 \( K& q. z$ L- C4 u5 |        /*Set the AD7606_PAR_CONVST to output mode*/
: p0 c4 d5 S/ I4 @; l* e7 Q        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
0 p8 n# }2 Q3 r' |; o* s        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
% X" ~7 t) |4 ?" I) p8 P; u0 d) v6 d, X% }% Q$ t& Y
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);! ?: `! t; ^# m$ E5 A
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);3 J' k6 F8 Y  d. h4 V; g

" {0 X" |$ _$ g2 p}* R0 ?  D- {# D

1 t$ d0 u' [' r1 x# E, o  I( {" B( R) |  r) e$ m9 U/ `
static void ad7606_busy_hwi(UArg ad_addr) {
5 ]9 h( L) l" I2 `, |# L: C& F* z- n+ V6 U' Y# w9 Q9 Z9 S

, g1 `; f- T$ q! |0 p        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
' V& `" ]8 M& B        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
" Z+ W2 m* _1 G# b) U- d+ H, z+ k1 i( q. o! ]% j
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)/ |- m& ^3 u2 u& u0 `
        {
% V+ @* R) P+ g1 o6 j* Y: ]                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
2 O+ ^/ V8 F: g3 }1 u                cs_addr = SOC_EMIFA_CS5_ADDR ;2 b9 w7 p! J+ ]* ?1 m3 x  L
                internal = 0 ;
& D1 ]: O1 m% I9 h, X0 j" [3 W                int_flag[0] = 1 ;7 i8 Q* o, i+ t) _# ^) c
        }  t* ^/ i+ t6 K* |# X
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)1 H! X5 @5 O( g5 a! ], F
        {. A; N" n6 d$ m: L1 J( k
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
2 q$ ?3 T7 V# M1 L                cs_addr = SOC_EMIFA_CS4_ADDR ;
" i0 \4 ~9 K2 b0 `, B# H& r                internal = 6 ;
: c! _& r* y! t% O# c9 ^  \                int_flag[1] = 1 ;' |; K& N8 j7 w5 `
        }
! F: ^, i# C; t: C4 q$ z  i7 n' e        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
$ }1 m/ g$ D+ k% R% I1 m        {7 }$ ^8 K4 M- w- I
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
' ~2 x# N  g8 k. w                cs_addr = SOC_EMIFA_CS2_ADDR ;
# L! m3 r; h/ h# _6 h2 |" H& Y                internal = 12 ;: C1 x  O3 ~( D7 P2 y
                int_flag[2] = 1 ;
- ~( `' E6 r) X. R6 S6 [9 b" e        }
. I; x2 [% h4 q- ^  
$ P6 D- L" E1 {! J% A        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);8 T' G  [0 q2 t( E( J) U1 c* Y
      
2 _. i7 i2 P9 I) ?# N' U" u- s        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);' }: b% h% u3 m( L
}
+ h0 Y! O6 M! p( X! P7 ]) z& z' O3 H6 X/ J8 k7 v6 x

& R4 c5 K5 ^* S; ^' G0 v' A
& s+ w8 a* f( H, u9 s/ M% V) \% l
7 `/ _6 \% E! m

本帖子中包含更多资源

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

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 11:20 , Processed in 0.049253 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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