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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:; E% k+ L' n% l* w' E8 }7 p
#define AD7606_PAR_BUSY_GPIO_BANK        55 ~/ y8 F* L! r3 n" `. a* q
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT. a+ \2 m$ q; ~* _. X4 c

8 o/ [2 F( I! s( A& y, X0 w2 C& S6 h#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11$ i. D* h1 Y4 d2 O
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
- n9 a- Y/ W6 Z#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
. t& {1 s& w  s6 F8 N/ B8 n2 p#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)9 ~) ]) Q) b: M1 r
% O  d# L7 ~! Z0 v5 x' K) X+ N0 l
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)0 g& m4 V. r" S' Y1 t
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
( l! ^) i3 P" ~7 P#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
3 l; L+ N$ M* Z) K. _9 l/ K6 K0 ^, |. H% {0 j! V
9 Q7 O. e. \! V# f

) j- F" a3 k7 m- A6 X4 ]4 ystatic void ad7606_irq_setup(ad7606 *ad) {
! c- T+ ^: r; o5 Q& }        Hwi_Params hwiParams;
# v2 B" E: X% W% Y" f. k: ?/ ]7 n        Hwi_Handle myHwi;. e/ ]* |/ ^' s7 O  E% Q
        Error_Block eb;
5 U. R" h0 X. Y0 i
4 y4 r$ t7 y' c* U2 g$ k        Error_init(&eb);& n2 P: r& P! Q) n5 @
        Hwi_Params_init(&hwiParams);/ c7 B. d2 v. }+ u! s, \, j7 l. s
        hwiParams.arg = (unsigned int)ad;$ W& k* k" B! w7 E) a3 a  W' d9 ^
        hwiParams.enableInt = FALSE;$ V# }; {6 t: Z% p
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
" t' q% T+ n" n6 s4 g        hwiParams.priority = 4;
0 U& o+ T# F9 y  W& y$ l% V4 `        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数) Y+ g( o; j% E* O( Q( y
        if (myHwi == NULL)
( X9 \# B1 F3 H* r: A. S        LOG_FATAL("failed to create hwi");
$ B% H4 V5 G" x3 g* F
8 T+ e- `% H" z( {" U, \0 |        /* enable both interrupts */
; L2 b" Z5 k5 h5 l5 e: ~0 H        Hwi_enableInterrupt(ad->irq_event);* d( f. a* t7 r
}
# q* v, i) ]% S0 f
1 K0 d. a; b, S( ~) T2 A2 ]0 G1 I: o6 ]1 P7 O) J# e
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {
  V: V' D) l4 c' C9 H  ?2 v        volatile unsigned int savePinMux = 0;
' Z0 `; d3 D5 p  `( I2 h: T        //初始化5.11、5.9 、 5.5为GPIO口
& \/ i: A+ i5 ~6 K" X        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));) M# {* r+ h; p  _

$ m4 I6 t6 y8 ?        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);3 q7 k! b7 M" g2 P* k. q! q2 b

# i) Y9 W5 ^0 h, t0 ~) N8 W        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));$ j/ v0 F! I8 V0 f* z

) P. H, e& V; {( B* R, X5 I+ t        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);9 ?) p6 d( C3 w0 P0 C# U1 X# u5 Q' ]
3 [( ~, N% Y0 g! F- V9 |) ~% ]
}
- g$ Q0 Y# N' a
5 P8 E, B" h& f/ b4 @9 h; e- `& \# E7 \' I% q4 g" _2 G2 p3 b
static void ad7606_gpio_setup(ad7606 *ad) {" k9 r$ ^$ K6 I* E7 b: `
        /*Set the AD7606_PAR_BUSY to the input mode*/
: s3 a( A4 g4 ^5 c4 t" C  q        //初始化5.11、5.9 、 5.5为中断口; c- w# [& ^' h2 O9 Q. d# e; G1 q
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);: `' r: Y$ k' v7 t7 P9 N
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
$ l' q8 Z  ]; b; |" k! b2 y5 i        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);: L" _6 U) u. A5 U8 G  F& q- H) Q
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
9 W  g) ?: L7 U# j( G, X* `6 @' @        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
. ^$ Y, g: G) c/ j        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
! h  c1 v" Y" ~, C3 s        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);- W/ Y' {7 ^4 b; E0 p, s' ]
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);# e0 n/ @) w$ i- y) D) j4 B" b
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
2 x, U* x4 Y7 ~- j, z        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/" e) r" p  G% c  M
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);9 K; Y7 k8 p( u% d# k2 d+ U+ X% Q: P

* Y$ @, z4 Y) ^4 Q6 L        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
2 u3 a0 {" G0 c" x- N. v        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
, b, }, O2 Y/ [% D8 x. S% a; _        Task_sleep(1000);
7 e7 G* L1 a: M* n        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
) G2 s" h4 a* \# p! `4 S        Task_sleep(1000);
# i& L, L* i; g0 K- R
4 G- j, O; @6 o9 B, T        /*Set the AD7606_PAR_CONVST to output mode*/
4 c) h) _* K6 G  ~) ?0 U        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
* l0 g5 {& D& Q        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);6 u" o6 Z: J! a/ `! e! U0 ]

! N5 d2 {7 f3 U! Q1 d0 I6 {        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
, k- K8 J2 G% }7 I  ~% R8 L        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);5 f0 L5 K0 b3 g; E4 q( [
) b0 f9 t& q, v6 P! m9 f
}, v0 Y1 }; q( b3 {) L- ?1 ]
' B( V! L+ Z* p
7 t+ F% H7 K) M7 v- A5 L9 F
static void ad7606_busy_hwi(UArg ad_addr) {
0 w, n: D, h4 v: Y9 w9 [
( ^) w' t- b; V: Q, _. k: ~# |7 v% L( Y7 J, \( b
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
; l- g" O1 D; d* J( i+ U        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
8 o$ b7 v3 _" |% S* w! {1 f; T! h; q% V, C, Q
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
; F* n$ U6 {# v9 s  G% b) j        {" u- I9 |$ ~: ~2 x  O
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
0 b# D. ^' G6 z2 w8 Z# M                cs_addr = SOC_EMIFA_CS5_ADDR ;
- K* K* x5 {7 n1 E: J5 N                internal = 0 ;/ [; F; I& s; y. ?/ F5 ?
                int_flag[0] = 1 ;
# |: y+ m# T6 N3 Q- p" z        }
6 w! e8 v2 ]8 V3 @        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)9 L; u" U# L0 \) K
        {: x8 \6 m# p& D  L4 D( M# c
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
' n6 a9 a2 D; R  G                cs_addr = SOC_EMIFA_CS4_ADDR ;
; P2 p& r, V5 B: G                internal = 6 ;* _" K5 _! ]* ~. F+ f, ]
                int_flag[1] = 1 ;
/ H8 u4 ^. \! I        }2 H0 o' d+ R2 J
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
$ X1 B, [1 j4 Y        {
+ R# F: g4 Z4 h6 h                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
' ]7 j7 L; E( w4 ]3 z3 j+ a/ i# j                cs_addr = SOC_EMIFA_CS2_ADDR ;
% }; C- b  ]" Y5 c                internal = 12 ;
8 F' {5 y, a6 H4 J7 m" V                int_flag[2] = 1 ;
$ U+ K6 p; J% _( m5 V. ^3 B        }
/ j# I" q: [) E& |! P  
8 I) V  Y( E5 c! I( T        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
$ T/ r4 e- i9 [9 k  L  H2 B! Y: D       " [& K$ `# Y2 e1 {
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);* j. k5 N8 u6 v% L5 {% @
}
8 _7 D5 v7 k& ~1 `# g, H* c
% r" ]$ H" t! q- g% Y/ r! D& K/ [  }2 I! F  M/ L
3 F- M1 @# J( s9 m% P

4 Z' ~2 E+ W) G5 f

本帖子中包含更多资源

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

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:17 , Processed in 0.042256 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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