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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
6 b% |( F5 Q6 y3 l#define AD7606_PAR_BUSY_GPIO_BANK        5
0 E+ n8 l: G# W% G#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
) W% Y, J$ A/ L: g4 X& M+ Q4 _; Y* ~( }/ e4 e5 f  L0 |4 L4 Y9 B
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11+ x4 {5 o$ z9 |0 b9 e& ^( {$ ?
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9$ {$ E  ~. g1 s  R& L$ S3 _/ d9 @
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
8 n) e! s1 K# p  C; U* v#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
* W" z6 S, ?1 w. N7 f
7 `" j' y; q  q# e2 P* R#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
9 p" I; S2 l& p" b+ ]; A# u8 r4 n#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)6 o, D8 [! \; ^( g/ r% u, W
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
( |- Y4 e! F3 P. h+ }
# v$ e; u3 F2 q. i6 X1 R: E# b, B8 A% x+ D
- ~" C! C- p! z/ T- v% h9 }% b5 ]* }% w7 P4 Q  q' x
static void ad7606_irq_setup(ad7606 *ad) {8 w% _7 G  f7 x5 x" @/ a6 Y4 B& ]) h
        Hwi_Params hwiParams;3 P9 U$ I/ f  z3 I% G4 E4 v
        Hwi_Handle myHwi;
" d( {0 U3 ^9 P' C) Q9 _& A$ }        Error_Block eb;
2 @% _# r  i6 g9 N/ W; I  `- J0 {" ?9 |9 F
        Error_init(&eb);: R1 R) y) \9 A3 s
        Hwi_Params_init(&hwiParams);5 j7 |# Z* a) ~
        hwiParams.arg = (unsigned int)ad;. e* I( Q% o2 [  M9 O. d; n
        hwiParams.enableInt = FALSE;8 X7 E, p( F9 r; X+ \) H
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
, p5 `% n- a1 W& w, v; C        hwiParams.priority = 4;; F1 i( S8 J3 j) R4 n) g6 T% u* K
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
+ Z: J8 I2 q. T        if (myHwi == NULL)
7 }- A$ R! t, H6 X$ ^        LOG_FATAL("failed to create hwi");
' G# U6 |5 U2 ~1 x5 B- S" E1 J( m' {: V4 t  R$ m9 o2 {
        /* enable both interrupts */- s- c7 ^) u) b; T( e/ t
        Hwi_enableInterrupt(ad->irq_event);
& C+ w4 ^3 r$ N4 Z}6 i, m+ [2 B9 F" Q6 O

( T( I' J/ i+ o) m  k; C: d- S+ p, k6 A! U
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {
2 C2 S' F3 O, P        volatile unsigned int savePinMux = 0;: B0 [, @! a5 v! q4 E
        //初始化5.11、5.9 、 5.5为GPIO口% q/ ~6 ~, K, P% ]' G: I
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));' v( T* b1 G6 S

* }0 V. ]% Y. p* U0 f+ b, r        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
/ r9 z& J6 G  ^5 J3 L, g1 i. a+ k
. V8 o2 Q+ }" Y, r        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));
! u7 e9 Q3 W) R# p! [" b7 A( M* r
/ l) E5 S! v8 ^3 Q        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);$ i" Y5 h% ]* D- F

) J$ p# U: w5 w: }' u( t9 ?* d}
$ d; l/ H; M0 D8 i8 O& i% r# K, j% m& f6 n6 a3 I( S! C  |" c0 }4 }
/ _, l& K' d' g  ^
static void ad7606_gpio_setup(ad7606 *ad) {
% j  [  i4 F3 _. l2 E3 g        /*Set the AD7606_PAR_BUSY to the input mode*/8 p: C  P$ ]4 |) J# E; m! T$ F- N
        //初始化5.11、5.9 、 5.5为中断口
  _' V( j" W% E* p: w1 z8 n; m        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);' T# Y4 r/ a8 j* ^
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);% `6 O2 b5 J9 b' l  P! q; b
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);' [+ H. c+ j. @( @! c0 ?& Z
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);1 `9 j* s7 {: f  g, d; z
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
2 b/ i! I9 [" p4 Q" Y, V% X        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
+ c) Q5 B  F/ C2 t) f/ m        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);+ D9 U5 L* ?" ?9 t# v
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);$ ~8 H! b% d* ]
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
; D3 D- ]8 y$ u( I        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/; W3 R2 O) y0 G4 v3 H
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
& U- ?$ N+ {" n' {# d0 U! V' _; m- i( i
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);! z) ^5 }/ j8 M8 _, `2 W
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
' Q+ v6 c* Z) X% U6 g1 x8 r        Task_sleep(1000);
- b- E" Y4 b# y0 r& X) V0 k        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
8 c1 Y1 @" a' L        Task_sleep(1000);
( G" P! D( S5 t4 n/ }, b" |; X  T0 g  p: Y& v- Q+ F6 g3 F
        /*Set the AD7606_PAR_CONVST to output mode*/
/ A' o& u# C1 {9 A; n7 P        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
/ A' W* j. v8 ?+ l/ H        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);" [1 N% e6 e( @* N

! c3 Y% v( F/ K) I- l7 j        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
6 r$ U+ g/ ]5 J" G8 w        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);9 y! U( E9 Y- V

; @; K0 v% V( ~* y9 D& m' K5 O}
  H5 m1 R. i, ~! m; P4 R' }8 ^  b) [
6 P+ d6 K  j) X; N3 ^
static void ad7606_busy_hwi(UArg ad_addr) {7 T  [# j  A/ _, _& e( i9 R
" u" s/ P6 G0 j2 F" P4 l

! c9 \9 K- R2 b/ d& ]" }8 f% E        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
: l" S5 i' x' }# P2 L        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
- o8 I/ _- ^7 t3 F" ?' r! J' P( \, c4 u& O+ d! v& P9 m
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
  v& H  ?' ?, _        {) p( e& J& V- N, s- ^. Y0 H
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。1 x% f$ ]  j+ w8 C" {! u
                cs_addr = SOC_EMIFA_CS5_ADDR ;' z/ b$ W% S- p5 p$ ?+ z
                internal = 0 ;
5 [0 w7 |6 a( l, {5 i; h: x/ Q/ p                int_flag[0] = 1 ;
7 a$ @. a& t% f        }
! F2 }% b. ]  X+ j: }        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
3 n. E; h  A& @* `: X+ Z        {
  A# e! E! ?- L8 l$ x9 W" G                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。1 D8 q5 L+ X7 w( _4 R1 Y; Y8 w
                cs_addr = SOC_EMIFA_CS4_ADDR ;
- Q! _( u! @: X. d                internal = 6 ;- v8 h2 }7 f& K4 A! X4 V
                int_flag[1] = 1 ;1 s: X; ^; ?& [( C+ t2 F0 @
        }2 f, G/ ~% G. v0 _2 {: N& e
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
3 U' \* k; ?1 Y; @        {
/ y5 x( [- f) U4 ^0 }                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
1 d) C- H" @7 P" Y- o                cs_addr = SOC_EMIFA_CS2_ADDR ;
. j8 c! o2 v, P/ g) {0 \! J                internal = 12 ;
& i3 C5 Z& D! J4 v+ ?( ?                int_flag[2] = 1 ;
& H  _* G( l1 n4 S, K& T3 K        }  I5 E% O& {  p4 s, A. x
  
4 R0 q( _; \7 c        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
5 B  a/ O. L0 F) l% J       : S; o& X$ |3 e) N' U8 Y6 Q
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);  g+ n' `" n2 q6 M5 [; H  Y4 b
}3 E2 P  j6 V1 A+ D  X5 n

# V; _; F, n- L7 [- ?4 D" q3 Z8 S' t
* W1 a  x7 O" D2 i) [  T

8 Q4 y6 ^  X* e! s  P

本帖子中包含更多资源

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

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-12-16 02:12 , Processed in 0.054313 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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