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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:$ J$ C9 g5 b4 ?
#define AD7606_PAR_BUSY_GPIO_BANK        5
; [% y9 i! f# r3 S) Q1 ^) p& v6 A. g#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT- o8 U9 D% z2 Q
5 u( N0 ~* ?  Y! E9 n3 `! u. u
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
7 T7 l! H, g2 N0 ~+ _#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9& V3 S9 I; H( A% V  |% q
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
: m) P9 V( A+ s$ O, Z#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
$ T! \0 ^6 V4 H& k, Y( u# u
9 S8 l* v# E/ n( @# o$ c#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)  H0 c6 l/ a' `1 }3 l$ t9 {
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)+ u9 w! \6 z7 C* F
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)% @6 W& R  M* g! ^# U  V" w0 E3 E
, f. K' W& e- d: L9 b* y  H" S

7 w2 f4 v- V' N& k1 \; x5 M6 Y* d% x! |+ I
static void ad7606_irq_setup(ad7606 *ad) {
% m/ T1 _/ N' }4 Q! T' f        Hwi_Params hwiParams;; [$ P( m2 q8 O
        Hwi_Handle myHwi;
& u: T- h0 D- l7 Q" z8 r        Error_Block eb;. \0 \; R( w' ~+ g' B
2 }% s* x, a! n! l. @8 n% ]
        Error_init(&eb);
! I. P' ^4 a1 ^6 _" s        Hwi_Params_init(&hwiParams);
/ j& P% p; U5 |; k, d8 I1 ^5 f+ F        hwiParams.arg = (unsigned int)ad;+ M5 B4 U7 x$ d
        hwiParams.enableInt = FALSE;: O* f* T  f; w. ^. p7 k
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
" i! E; ?" w: E' ^        hwiParams.priority = 4;
1 O5 G' J: L9 D7 U- {        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
% `( ?# E7 k" B3 f$ Y        if (myHwi == NULL)
+ ~. z7 Y1 X1 i! N6 A        LOG_FATAL("failed to create hwi");. j' @2 c: p' E; `( E3 H9 h# u8 M
' H! X" D2 L" P
        /* enable both interrupts */* Q9 H& a  O" m3 k" F
        Hwi_enableInterrupt(ad->irq_event);& m: Y+ B0 Q0 Q0 @: ]% Z' C" \
}+ m  H! E! C7 z* G6 _3 R9 ?/ @

  g, F6 }2 z1 J
% P8 x' ?# I1 g1 `4 z+ cstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {
5 @& s2 @4 h: U0 N0 N  H        volatile unsigned int savePinMux = 0;
2 A2 r- I8 d2 d& ^3 k( t        //初始化5.11、5.9 、 5.5为GPIO口
* j0 J" l6 Y) ?% n        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));8 q8 w. R+ f# c4 v& |6 k
/ a% x/ Q. E0 h
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);  G$ U% [6 p  C

* C* o$ H& @! U$ F& Z4 N5 X! 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));) ]3 e. c* }/ D8 L
( Y, i& B: A; x1 a- t/ ^8 U* }
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
- @6 I# w& f7 {+ r6 V6 ^. a# o
: p. G8 `' r: R" v2 l  q! `}( y- y. ?5 d1 f( B! z1 e3 I
( M# W0 r2 e) @2 v

! Q! ~. h8 p& X8 @: Lstatic void ad7606_gpio_setup(ad7606 *ad) {
6 e" o# {2 }( F7 \/ B        /*Set the AD7606_PAR_BUSY to the input mode*/$ F6 k" x# e# J
        //初始化5.11、5.9 、 5.5为中断口6 a3 N; H1 x# Z: N; \& J( R
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
$ p2 u' x+ c3 B3 x- M5 \* i3 ^        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
: [7 l  U  _8 _; s$ X0 j        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);( M* s* x) i8 U6 o
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);6 C7 _! L0 v0 P3 i1 f' x
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/1 W' O" J1 u# A% b: z
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
, G: D% o$ N9 b3 V3 m        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);; b5 O; _; ^- J6 i1 f* K& ~) r
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
& M0 W- R+ P9 O( d: u6 m. X* l        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
+ B1 v+ i5 t6 K, n) S7 x" A        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
0 o7 H% `! Z: r1 B        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);! t6 @" t9 ^& |8 d
+ Z0 T0 [) l; {; j
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);0 n$ j& K1 \7 c+ C6 a$ @& V
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
$ K/ _3 |' P2 t& m5 x5 Z/ ~, ~        Task_sleep(1000);
2 u7 Q8 ?5 O  E) h1 ~& Z) E$ g        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);6 S; a: [% F. [; ~5 M5 q. H6 Y4 D9 e
        Task_sleep(1000);
1 B/ i# X" b% P# K  r% i6 M4 K  }) G& ?, y( v
        /*Set the AD7606_PAR_CONVST to output mode*/1 q' j+ Q* _/ Q2 f3 E% u
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
# g( r2 Y1 R% `6 c        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);# o* r. A. ~0 a( [9 Y/ G1 i$ a
6 p! l" @/ e# l) h4 S
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
1 J% g' J, A# w% v2 g  D5 y# t        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
1 ^+ C0 w1 J* H# _6 t# o
; ~  \: A4 ~1 I2 x}
5 e( E1 D3 D3 @7 L/ d6 }7 O7 P: C# a, g. {5 |0 E
' S5 q5 |9 X" j1 P5 |
static void ad7606_busy_hwi(UArg ad_addr) {  w3 U, d- V3 f
$ e$ ^1 i# |$ j; [2 y8 c6 a, {, K
! E; u! |& c2 j: d+ b# @
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/8 @& V9 h# s( M. ]
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
: Y5 ^7 ~- z- G' W' O- z% X( F. u/ Y
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)7 w3 u" w/ C* J$ ^3 G+ n: {
        {
; D1 p2 `7 e6 t& T& i  x                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
* x0 n3 l9 N% J* K3 Z% I, Z                cs_addr = SOC_EMIFA_CS5_ADDR ;
9 x5 }$ g3 r8 y% w* U) I# K6 w                internal = 0 ;! ~* P9 x/ W2 j5 N! _. h
                int_flag[0] = 1 ;
& @  n1 s1 _+ d6 m! @: q6 I        }% `, ~7 L  I7 A5 L
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
# |0 D+ E  T; {2 e1 p        {4 c- O- _/ P# S0 _' q) n3 a
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。9 O  \+ E2 l5 n- c+ _1 [# E( Y
                cs_addr = SOC_EMIFA_CS4_ADDR ;
( c0 G( x' z  [- S/ i0 K                internal = 6 ;
  j" N9 Y/ ?, S                int_flag[1] = 1 ;
! [+ j) d1 _" `- o! c5 O( A        }
# W7 t  {8 v7 [& q1 `        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
4 `6 ^" G2 v" x! e* t; z        {
0 P" O0 @  Y; B/ S                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
  m. F0 v5 _! F) c, P" D+ Y3 r                cs_addr = SOC_EMIFA_CS2_ADDR ;
2 y; @7 b1 n2 p, `                internal = 12 ;
0 W' e) b" d% A3 ~$ B                int_flag[2] = 1 ;
" O- p4 V5 U7 s6 A        }
  {3 ^* n8 `9 x! E0 ]  2 b& i5 U! N+ P, d4 e% t6 F
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
7 C& [; q4 P- d- y% g  f      
8 c* N1 [; P6 ~7 B) k7 V* g        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
- R$ p1 k3 j' D) y' p. K' C}: {1 L8 L/ D# G' j$ L* L

3 y& P& @7 v3 Q9 J/ X: {! s) Q6 D- b8 I1 f( c# S" g

0 D& I5 _% [" L; q) m2 ~6 B  }% }# w

本帖子中包含更多资源

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

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-6-17 16:06 , Processed in 0.054477 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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