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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:) y7 f+ ~" D2 Z" i
#define AD7606_PAR_BUSY_GPIO_BANK        5
& _" P2 O9 b: M8 S. x#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
, l5 e% A, H7 s0 m$ |
; b. Y( e+ g) z9 ], |7 U6 F#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.111 a4 y: V; p/ y
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
/ J: ?% d$ U- w( R3 E, I#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
  Z+ `1 T5 A- b+ S; }6 C1 N#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)5 M- Y8 h" w8 l# ^

% R" s% J9 a# `  m3 b#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)2 }7 S9 H. z7 O$ |: A8 V& `- o
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
3 p3 N: B- v/ O+ q7 V8 g7 N#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)' P0 H3 F/ d# t) G0 w

# r: E  `8 t5 }) U4 w" t" U7 R$ J) C
& p0 b; |# n9 X
static void ad7606_irq_setup(ad7606 *ad) {
; I% X  ], L; K, l. t; T        Hwi_Params hwiParams;
8 T7 ^, H1 n4 q0 p        Hwi_Handle myHwi;
' @9 W$ q* Q% ~' y2 A+ C$ W8 ~        Error_Block eb;+ V* J' X" p; M) Z+ q2 z, B5 f
" H4 S; b0 C- g5 P
        Error_init(&eb);$ Y# e5 d4 j- U
        Hwi_Params_init(&hwiParams);
- j/ l9 T" S2 J1 E) T+ c        hwiParams.arg = (unsigned int)ad;6 ~# E  F, G* T6 M( @! s+ d* Q0 F
        hwiParams.enableInt = FALSE;9 T+ K8 g* ?8 t" L7 @% O9 V3 E
        hwiParams.eventId = SYS_INT_GPIO_B5INT;2 K. y# p; F8 K8 Z0 n8 ]
        hwiParams.priority = 4;
1 z, {- g1 }! J  z3 h" G2 q        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
3 w( J$ I% t& k) y6 W$ u        if (myHwi == NULL) ; ~3 i' q0 ~1 p; Q1 X1 k/ O
        LOG_FATAL("failed to create hwi");% G  m/ X9 ]  k. c: v
/ l! ~6 D3 Y, h% a* S( R& B
        /* enable both interrupts */( `; R% m9 }$ J6 z: ]0 ~+ L% j
        Hwi_enableInterrupt(ad->irq_event);8 ]) M1 s! ]* X- [% [
}
& C1 ~$ y0 z  K8 B9 P4 B. I# Q
* B- ?- G) B$ [4 D8 g
+ b: o, O; L- a0 f- q6 E; astatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {
: T# Q, a; ~- }/ C5 P5 T4 I/ [3 A        volatile unsigned int savePinMux = 0;
( W2 [' E9 p; x* f        //初始化5.11、5.9 、 5.5为GPIO口
+ p& S6 f* D! V4 [7 ^        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));3 |( f# D  R! I5 X8 O! @
/ b( g) U! z  q( K
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
5 _. E' _4 U) O& b; @7 `7 _9 {; V2 v# Y: A
        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));
# H' L- P5 `+ c: Q# F8 J$ L. n( L5 C: i# f2 {6 m
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
* `: y+ l; \0 F* X. Y* m: T, h3 W( t( @7 H# a$ R
}( _9 U6 o  d) ~

* ^* a# T" x$ q2 ^7 o& {4 A- z; ?1 M$ B8 A4 x" B' [' L
static void ad7606_gpio_setup(ad7606 *ad) {
6 \% q; l; ?7 e* }9 P$ {  E        /*Set the AD7606_PAR_BUSY to the input mode*/' M, {% I/ C# P$ c8 d, [
        //初始化5.11、5.9 、 5.5为中断口2 P' H% v) Z+ z8 l/ G
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
( [. Q# Z: c1 K; Y) a        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);! x' P/ Z9 Q8 N5 }7 P' x
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
  W+ Z! E$ ?1 |$ E& ~' S3 M- C        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);  }: N$ r  R0 I+ r
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/1 S' r. ?9 g4 \# x4 ~! E/ k" e( C$ o
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
! P3 g0 O# E1 B% o7 n. C        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);' J/ ]8 ~+ l! s) W
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
$ I! H/ ~) p5 g0 a8 c; k$ K        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);- p' h3 o/ F' G# s( j8 ^# p) I  d
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/. F# n: e) t( L1 q1 t1 m0 `" b
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
4 L* Y0 t9 W& r4 l7 ^& j5 E1 I9 h3 w7 d3 [( X; a8 l1 _
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);. h+ }; P, ~4 Y5 B
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
5 _/ K( X2 f! f+ y  K( k, Y/ Q        Task_sleep(1000);
5 J; p6 w1 A6 E# Q& D- A        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);4 i' F- ?8 F  l
        Task_sleep(1000);
  \3 X# S0 _5 e, I
; e3 |( K4 M; ~; e+ G8 a        /*Set the AD7606_PAR_CONVST to output mode*/
" ?# o! J; i  \        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
) C! K0 H/ H, W' X        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);( C0 t" X9 |$ `5 F

, K$ `* F% h# C* n4 W2 `" Y        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
9 T+ e* O, P& Y        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);. \  m  c: U5 V$ _/ [7 H; Y

' J, i' K: [* `' F0 k, e2 J}
* t3 p9 R  c- S4 D0 j! K0 _2 m$ C+ ]! Q1 m; T$ Q  W: _

- y% a2 N2 v$ Q& cstatic void ad7606_busy_hwi(UArg ad_addr) {
3 f0 Y! w5 h4 [2 c( u- U; ^0 K- t( k. o: G1 J
4 r) t0 B0 @2 G) |; ?' a
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/, u2 f6 A5 ?- r% O' |
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
1 [+ `9 b' [9 {# w
& Z% \# a1 U+ ?& @/ K; S        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
; ^' ^5 o8 U7 M3 q. Z! o        {9 Z- v4 x2 P, n: `" L
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。2 U9 n* d$ o4 A
                cs_addr = SOC_EMIFA_CS5_ADDR ;
  D, S# K8 _8 k4 k3 |5 f9 b% [                internal = 0 ;' S, `/ o9 y- r( r$ f1 w! q, e3 z
                int_flag[0] = 1 ;* n* w& B% ^. b. S4 F7 q
        }; L8 G; r- Z& {" ]5 e1 b
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
0 H. f4 e/ \) V- O7 ?        {, M9 E- ?. U6 D$ y6 l
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。% M4 X9 ]( V/ p& A5 _1 y- P
                cs_addr = SOC_EMIFA_CS4_ADDR ;- n7 X" l( S( o$ N$ `) m2 `' o
                internal = 6 ;
% H0 o$ m" F+ {5 B' g4 A- ~                int_flag[1] = 1 ;
# B! e0 z8 L& {( X, D        }2 B( |. K+ A; K
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)& k+ ], n0 P& N# U0 D
        {- P4 U4 E4 h. c; @9 k
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
$ Y* g9 P) Y4 ]9 \9 P7 |                cs_addr = SOC_EMIFA_CS2_ADDR ;( e) P' O! V2 k( ], S/ k
                internal = 12 ;, F; g* }7 L) D8 m- Z+ @1 ]; M
                int_flag[2] = 1 ;
, h- v& o* i* b5 ]: G        }
5 `) ^; ]# g" _- v# i% }" _  ; B* V( V! |, L- d" g6 w, t5 Y4 E
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
! f1 ?+ Z7 y# e      
+ W( ~+ a" ]6 p" d        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
1 n# @+ K& ^0 @: ^% f" H8 p0 F}$ N6 ~4 O, m8 d9 W9 m2 m
5 x* Q- q/ i9 a5 L4 @

. O4 m: A: |! F' R: P; _0 M
# v" d. V7 V% Q* Y$ C: o, v8 X: G6 V. R9 b. t/ T

本帖子中包含更多资源

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

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-1-31 09:45 , Processed in 0.043473 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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