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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 端口识别问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 17:29:58 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
: O2 P0 ~" ~5 v' t2 n#define AD7606_PAR_BUSY_GPIO_BANK        5
- f9 Q) W% _. o' C! n+ S#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT% t3 Z. {4 @& Q" x4 i( m# p5 D! |

/ ]$ s5 t; D# p6 U. v/ c* l9 ]#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11  `: f! k  E; W, ]9 R
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9- C0 b5 w. v3 A) n4 p" s. j
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
# N4 @6 s8 u; E! K6 c8 u+ X1 L0 C# [#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
- d- y: N9 M7 f
* W" m; U  A0 V  M+ {% s#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)) J) Z3 u7 }: c& S) X8 g3 @9 n. y
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)5 X) X% d0 B4 U1 ?0 q( `
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
$ s. `) T7 u- D# y: U! C6 K8 i1 h& g- V' q1 U! T; i. G
4 Q; S% z( }3 O' X8 M4 ?; _4 M
2 L9 z9 A: W0 D* f3 E& V7 O
static void ad7606_irq_setup(ad7606 *ad) {
4 z" d6 O, P1 u+ \  Z- p( A        Hwi_Params hwiParams;
" G- }) |  r+ l" M, a        Hwi_Handle myHwi;2 b9 K+ s0 H& O5 W
        Error_Block eb;
* @' `, n: S6 q; C+ b1 T& V. L7 J) a
        Error_init(&eb);; v' m# N  v, Q+ Z& l
        Hwi_Params_init(&hwiParams);
  Q5 S& t# b" ?: i4 L. z        hwiParams.arg = (unsigned int)ad;
2 h0 O7 E" M  z        hwiParams.enableInt = FALSE;2 L- }7 O. j' v' m! ^
        hwiParams.eventId = SYS_INT_GPIO_B5INT;! |+ s5 M1 r' ]1 V! M4 J
        hwiParams.priority = 4;+ a0 g8 G' y9 ~
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数4 y9 z1 l1 H6 I  L) b. K
        if (myHwi == NULL) : i# F% k7 w: l* _
        LOG_FATAL("failed to create hwi");
3 m5 G; X# K9 p4 D$ S$ `9 `
9 [; {3 E( J% `: {        /* enable both interrupts */+ N% f/ f0 e3 ^/ F% t: L
        Hwi_enableInterrupt(ad->irq_event);
4 m9 O2 @4 y# n}
2 \7 z' i+ [' S* d( \& Z$ I$ |! W( D5 R) C8 }
, |3 o/ @. i: _3 h7 c3 y& P
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {
; L6 D7 q6 ^4 [! Z! n        volatile unsigned int savePinMux = 0;
  p3 g; K5 }4 z. L& n; Y        //初始化5.11、5.9 、 5.5为GPIO口5 U) [7 t" Y. A0 a
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
0 b5 k7 I" i8 B# u' n& W2 ~
0 r5 M- B+ U1 [3 P        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);$ |. v" `' K* ?' b+ G! U1 e
" q- E) u8 A$ k0 P- u# x/ p7 J
        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));; v/ b, ~  F* n: ?. c. w
1 c1 S( @0 [' V8 l  t% p6 {! ~
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
6 S! W, u/ @4 i! s: ^7 `& k& v
: P: T+ x+ M' s5 [! ?# o}2 v9 I& y0 d3 y

! X) z# L2 \+ }/ T$ |! O8 G5 {( i6 w2 @. v, M- o
static void ad7606_gpio_setup(ad7606 *ad) {- T, \# M: U% f6 \$ Z0 `1 ~
        /*Set the AD7606_PAR_BUSY to the input mode*/' r* F; V( e: L& D# W
        //初始化5.11、5.9 、 5.5为中断口
7 ]8 V6 g+ ^& b8 S: w* v+ d+ G/ p        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);. E* @# O5 w7 N, X9 i8 E
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
4 d, ~. Y0 |9 V/ z9 r; i        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
/ Y$ f3 m; \; [3 u; x+ x7 |% C        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
' L; R2 e( d0 l        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/' O( a* ~( G. s( n, _, @
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
, C2 f4 C4 b+ D5 h        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
1 y' n$ g8 F0 J; Z% r* N+ n        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
  E9 {  U4 P1 s  M: Q8 u        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);; C8 c( H" f" ~5 C, }' v
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
( i9 E0 {8 @( X8 |' m* J        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);* {4 q: I3 T) d2 }$ z" w4 g9 M8 c# L

+ y3 A4 Q- E/ \1 I5 P+ k0 I        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);* b0 \% e7 d- K: ]. X, Q
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);5 D' ?: o5 e  K9 t* @3 Y! i& v
        Task_sleep(1000);
4 g( x2 T* g9 J. ?9 f3 g9 }8 @, Q        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);) J4 b+ z) [- D9 t
        Task_sleep(1000);
1 r# f. E7 F' u" ^* I# G
$ S4 ^3 ?& ?9 v+ B2 `0 [        /*Set the AD7606_PAR_CONVST to output mode*/
1 K, S- R' Q& {1 j' V% c" V6 T        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);4 a/ C6 Y6 \! {  g3 H
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);- E; |$ D1 r+ _$ O

, |. ]: g& ^5 l/ U1 }, ?( P: O! K        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);4 o  `. S2 u, R8 o
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
+ a. ^# k! z, x& W
8 b; _& m; x* j}; B$ ?7 h/ ^0 N+ D7 v. N

2 {$ Y/ z4 j2 W, I- O3 C* y# D  Q  V- M4 |3 Y
static void ad7606_busy_hwi(UArg ad_addr) {
, [0 W0 d% m) }7 ^% _! ?* D  r
% C4 Z# s. {+ M
( Y' ?* ^- R& r9 N4 W2 y5 n        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/! A/ j) D6 h% A3 @# Y
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
7 z7 f6 G+ M' S1 X
; x# S; f2 o) J        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)1 q: @- x% [3 N. B& u
        {; P; [8 t0 f# A- R  w. n  i. m6 A* Q
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。" V& r0 w8 J1 k5 p9 ]
                cs_addr = SOC_EMIFA_CS5_ADDR ;
7 @" Z6 n/ g2 b                internal = 0 ;6 Y0 S; U) Z# `2 d7 o/ q
                int_flag[0] = 1 ;
) F' i2 g5 S3 s" y$ Y        }
$ L3 H4 s& n, h1 F7 R        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)1 F1 c; N5 V4 T0 R! O
        {: v4 y  v( h3 C; o$ s- q; {1 I, l! E
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
0 @; W8 {% O& {3 B2 C                cs_addr = SOC_EMIFA_CS4_ADDR ;/ Q. r* G! J! o1 ]" V  \" C
                internal = 6 ;3 ~. v" }- o0 n& l$ }& D
                int_flag[1] = 1 ;
& H! O3 O6 X+ I        }1 \/ M) s, M9 r  C1 p
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)- K/ T5 [4 `  B* E
        {- Z3 z6 w; `2 |- N( ?' Z
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。: M+ E% `+ j* A( N% I1 f4 j
                cs_addr = SOC_EMIFA_CS2_ADDR ;4 T; H0 F6 V) r7 O) a1 w0 Z3 V
                internal = 12 ;
+ V9 g( q; f9 F: s$ b$ b& e2 U) J                int_flag[2] = 1 ;
7 n* b3 H) [9 X5 P        }
/ l4 {/ D: R' I8 `$ h8 m- j6 Q4 C  1 d1 u% V; y/ U' ]$ }( [
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);5 l- g8 D$ g* j" p
       8 t% D3 G4 @1 \, {! R& B* Z
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
$ T+ M2 E0 |/ x* T8 K. K( P7 d}+ Y9 j  V! ?$ D# U
; e. A, ]% ]# s' @% B- d: \

, Q' q2 c# p; _! }0 A6 c& [+ g% \( M- i  i# j2 t6 d

' S" w$ n2 U$ S

本帖子中包含更多资源

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

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:16 , Processed in 0.052132 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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