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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
, ~& n% P6 o3 y8 {#define AD7606_PAR_BUSY_GPIO_BANK        59 |# i" k& ]4 i
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT; i; g; X, J1 G4 q/ @! t2 M

  n% i- A# O) s; K- o#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
4 B7 `! X: Y* T' |#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9. |' ^1 f0 Z$ Z
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
/ @4 X4 n% |# S4 ?7 x0 I#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4); v' D, z# U  _' R. X2 V) U# j
3 E- k1 A9 O. s# q9 r; _
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
3 f& L  u, L& _2 j0 n#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)" b- ^$ T- g" L( e4 b) r
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)" _  S. }$ ]' P2 s. M  x

$ Z" e  d* p$ v0 v* O
7 o6 n3 Z7 J" Z& h, }
' V( i1 g, r! j! U1 z. Bstatic void ad7606_irq_setup(ad7606 *ad) {
. H( g% j+ i# C* Z" K        Hwi_Params hwiParams;
6 i0 P& p+ q9 }% s        Hwi_Handle myHwi;
$ X2 o9 e8 j+ j5 D* B        Error_Block eb;
7 _7 g2 e+ a' E4 @: o
( J6 t3 k# w% a6 f* G# D        Error_init(&eb);' R3 x* |7 a/ t" |, `) v5 [0 [3 q
        Hwi_Params_init(&hwiParams);+ ~: P$ J9 t# t* x" V) ?! M
        hwiParams.arg = (unsigned int)ad;
+ U- z9 b7 m7 ~% u        hwiParams.enableInt = FALSE;
% y+ n7 Y3 I9 H        hwiParams.eventId = SYS_INT_GPIO_B5INT;
8 q" X) s6 q3 ~; Z; j6 [5 _1 J5 W' C        hwiParams.priority = 4;: L1 A8 g% M6 i  k0 z
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数. k; d5 Y+ j. y" {
        if (myHwi == NULL)
) V1 @# l7 u* q# C2 H9 f- c        LOG_FATAL("failed to create hwi");
, D! [! g/ K9 T1 u* S7 D0 v
! z7 ^* q  O7 h        /* enable both interrupts */
+ H" Q# x- k9 o. A        Hwi_enableInterrupt(ad->irq_event);9 U" X0 H& Y0 S8 `) o
}
) S9 c) }* e6 h3 p/ m' A* O
: i- l% W; A" J( h( _/ M
  ~, ~  I% c5 y- M% @4 ]6 D8 `: pstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {
* j3 p3 v6 G8 g+ A" i( m3 m        volatile unsigned int savePinMux = 0;4 X- @7 ^# T9 E
        //初始化5.11、5.9 、 5.5为GPIO口
" A+ W( r( E; w# L0 A2 ^        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
4 S$ F  ~' `. b% g2 J, Y+ {* D  K: L+ S7 p! a2 N& p
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);" j* W6 t4 [" G" G, x1 E8 `5 C
0 e# Q) ^  w  w- C3 }- w6 k) m1 I
        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));
2 g. l& i( b# L* a# u6 A! d5 x$ w4 L) s! D% o
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
( o  }7 t" Y& f+ w; R0 U. B8 r6 S2 ]' C& v% t/ s
}
& X7 F) r0 i1 F5 s" u$ @8 I9 l; U$ V
4 _1 i+ Z! U% P+ E* O
static void ad7606_gpio_setup(ad7606 *ad) {! c+ H# y* B* i4 h9 j: K  j
        /*Set the AD7606_PAR_BUSY to the input mode*/
, ?0 ^" K, \3 v2 V! E9 Q; Y: Y        //初始化5.11、5.9 、 5.5为中断口8 v+ K: z1 ]. O- H7 ?4 C  y4 @
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);0 h9 [* F- B% T* v- l
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
& b: L1 `2 ~0 L5 A3 l        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
4 [* }, p; }) C8 y% J( k& c+ R        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
4 Q$ H3 `; Y- O; G        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
/ i1 A( ^! o6 g, m( r9 G- S; |        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
2 h. A7 s  L. l0 \        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);: K: Y8 W4 H3 U# B$ V0 P# K
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);/ l: E# A* S0 y  c3 Q) Y
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);  U1 i# j: ^# z4 W
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
3 Z; G* R+ b3 s5 ~, r& L# b6 A        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
2 T' q' ?$ I6 M# F% O+ [' n( i& e2 I# j8 z# ]
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);4 h  j6 |) R; N4 P+ o% c
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);6 O; p- H# ?6 n: A8 i% B: J# _
        Task_sleep(1000);
+ G4 A' ~: |$ @( g" y& y2 @        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
# V! b* f) b4 j. ^) q4 h4 B! V        Task_sleep(1000);
: w% a& L: ~  s) T  e3 N
( R: ~3 K. T( j        /*Set the AD7606_PAR_CONVST to output mode*/
( ^+ Q; l8 Q' e" A) H6 J8 |( q" i# d        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);" ?% ]. J. l: B: _0 z
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);, K4 E6 O6 M, Z. |2 F! c3 n. |, }

5 V  o6 q% p- e9 H4 \9 K; E+ N        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
5 [0 r0 L2 W% p4 c, U        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
9 E9 m3 Y* G& l7 y4 X- k8 T( F0 V8 l
}
: O6 ?" i# o/ a: M# p
  _9 {! P& v9 g. E, o, C4 |# l$ G& y; B1 F! [% O6 r
static void ad7606_busy_hwi(UArg ad_addr) {5 y2 G9 l4 ~- N  J* Q& b# N6 J# j# M

& s2 K* N6 I0 p# i) C$ z! A# k! \
+ s% x& J1 C" `        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
1 _# X+ l. `  s% Y3 T7 v- [6 T" l; I        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
7 r- s  H0 l4 w+ z# H$ y+ g# P4 ^0 W7 j  }; y' K' I( D: `' Y
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)! v8 @0 T8 e2 A
        {
7 U8 M* X* a$ ~                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
6 A8 H) a# t' n: \! _7 {; ]& [                cs_addr = SOC_EMIFA_CS5_ADDR ;
* f1 U1 ^3 b5 x. m                internal = 0 ;
# I% Q$ E% P5 }) S; ^6 [% @  d' u3 {                int_flag[0] = 1 ;) N9 U3 [! O9 O' P7 D1 f
        }- W: h; K5 e: H8 Q8 \" k; M
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
7 i3 I' |1 d6 }( A        {' g( k/ H0 H$ ?! e' ]
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。  k2 b/ J1 X/ w. B* W2 ~
                cs_addr = SOC_EMIFA_CS4_ADDR ;
5 m" F0 f( M$ ]2 j4 n- @                internal = 6 ;8 x3 ?0 T4 E4 {# h
                int_flag[1] = 1 ;( L+ P# p8 f8 ~8 t
        }
* S0 v3 s( W2 J+ }8 ~+ s; G        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
$ u0 y  x6 q" j, R- L; ^) {2 p/ P        {
) q' O8 P0 r  p; }                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。' Y+ g  k- p& Y0 E
                cs_addr = SOC_EMIFA_CS2_ADDR ;) K' ^, }' w2 \4 e) i  t8 _( a* u* r
                internal = 12 ;
' e2 P" I: x* W                int_flag[2] = 1 ;9 [; c% e& f; P
        }9 |) ~4 G5 n( i9 w
  
1 K: y! A5 P7 X9 H* i' P' ~        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);" j. l& N7 M+ P# b; S! e$ o
      
1 B/ s. }! [/ p0 e        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
0 i8 E- E4 j$ \3 L# D}- C/ }, n, e% P% k. H+ O; ?; j( X( o
: L! @% @8 u) R& f/ f% ]! c" l  U

. Q0 v9 E$ U9 Q% n2 i8 k4 a
) `# C7 A/ j7 p  ^' c% {" v4 ]# I* P4 b, z( T7 d/ X

本帖子中包含更多资源

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

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-8-3 15:16 , Processed in 0.043795 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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