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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:2 {3 {% V% E& J# L6 x8 c# y
#define AD7606_PAR_BUSY_GPIO_BANK        5
  M3 g! Q( {: M/ Q/ C' h" e; c3 o#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
: i" J" o9 @4 Z: q* @  }
8 n7 e# V* j* w6 Y#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
% _3 P# `* B( c$ U5 J* v% ]#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.96 U! ^. r8 v6 q- Z- h! d! O
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
: |4 n) n- }5 w9 S1 O$ X#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
- P3 L) i& \! _$ ^. }2 w# ^  h+ K5 E( e( t- s1 m2 }. Z7 F& w5 {7 T: X5 m! U
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)" d: R4 i0 g) E7 r4 b* R$ u
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
7 c4 g+ h; s6 b8 \6 S1 N#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
! c- o5 c. C% n$ f9 @* R1 h' q' b
$ T" M. U- B4 `& v& @" O- @
* S+ Q$ r: A' c$ X" w5 X( ~4 K$ w4 H, J" x) l; f' h
static void ad7606_irq_setup(ad7606 *ad) {1 a3 N4 ?- p8 }1 z" \0 P
        Hwi_Params hwiParams;
* Z( s5 S( q8 P+ ~        Hwi_Handle myHwi;
6 c; B; j2 C. w        Error_Block eb;5 w  b, z; F4 v6 P4 a5 _3 W

8 f. F# t* G+ L9 {4 P7 V( N6 V        Error_init(&eb);2 g( J' V/ X' o! U$ I  V
        Hwi_Params_init(&hwiParams);
/ s- z  s8 x* H. F2 p1 K        hwiParams.arg = (unsigned int)ad;
& |0 R3 w6 v- _0 w  d0 b/ K+ N        hwiParams.enableInt = FALSE;+ G* [3 U! Z: k9 ]: P
        hwiParams.eventId = SYS_INT_GPIO_B5INT;+ r: B- x4 g( [* m6 @  L( O2 p- z
        hwiParams.priority = 4;+ I" W. _; v* h! M
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数, f5 b5 ^! Q( [. _& j
        if (myHwi == NULL) % Z' i9 [- K0 S0 @/ Q
        LOG_FATAL("failed to create hwi");- l9 r; ]; m$ N7 L1 x8 Y+ p
/ Q4 y; S, ~/ z0 K+ g& d8 x# f
        /* enable both interrupts */$ ^# |- y! \  a0 P
        Hwi_enableInterrupt(ad->irq_event);
2 W. D# `+ o# d}
% F2 D% u+ `) f6 B0 y- W6 b6 m; @+ V
: N9 p9 t: N7 a6 e4 f& G; ^
7 x+ F( C% b; m4 qstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {" G& d$ k7 E  d7 u; g2 y; `# h
        volatile unsigned int savePinMux = 0;6 Y+ N. b2 c+ }$ V* T; W
        //初始化5.11、5.9 、 5.5为GPIO口7 m; e* O2 y" D; A  S3 @
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));% g* M7 A+ D6 k& P# V" \* ^
, f$ [+ r6 M! u8 m5 `" j; i# F
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);  m% @' o3 z& e6 }+ m8 B

3 R. v# q7 D9 `* Y        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));
7 J5 x' S+ M- a- _$ V4 ~
; v! ~9 W, \6 J' |" d- \6 i        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);/ ^6 _3 s2 H/ B6 n2 E% v
2 ~8 h, m9 P  W3 o, A
}
( b3 q2 q+ q: V/ g7 B8 n) `8 P  B3 U
3 k) K1 {% A! _& `/ o
" B2 g3 U5 k  ^static void ad7606_gpio_setup(ad7606 *ad) {, i5 U$ x$ [% n8 W4 K0 b
        /*Set the AD7606_PAR_BUSY to the input mode*/: [7 L! Q4 P" A- n7 A+ G3 {
        //初始化5.11、5.9 、 5.5为中断口# `. [. `# V% |% E: z$ p& `  P
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);$ d* K# P% v% [
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
; \; m$ i) |, V( o        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);+ |6 t$ \, b0 S1 z
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
7 q# ~! e! x, ^- Q        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
! i8 J) t/ `2 V  w        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);0 F' b2 g& e! ]; ?
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);# W! r9 m0 y1 X: j0 W
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
0 G2 Z: q& `1 w$ H( _        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);% P9 z! j7 c, }, P4 x
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/. _, r0 A% S- h! p* @
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);7 R3 d3 X3 j7 }" s" ]9 m

0 [* k0 S- y% l4 W        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);  B$ K2 V3 ?5 a4 U$ K9 g7 p
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
! V: c' `- F7 ~" ]        Task_sleep(1000);/ {+ i6 Z/ f) p1 H1 w9 [
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);: T9 F4 z+ t6 i9 s# q+ n" K+ D. R7 V
        Task_sleep(1000);
  z3 L" ?; R, p8 c- p  Z) b* {, J4 E+ i/ a( N6 N3 y; P
        /*Set the AD7606_PAR_CONVST to output mode*/
) B% b& t4 [" v% I/ E3 i        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
2 Q8 M/ f; |( ^0 k# K        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);. k4 Z; {" C6 j  h+ w
3 P6 J' w. J% b% r& ~+ `
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);% P3 s. H% u- I# I( l. |
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
7 n" I- u8 b5 ?
( D+ p6 c- M, d# n6 I# U+ e! B}
- k# [, Z0 A8 p1 N$ L2 k$ e0 u6 `# Y0 N* p. h5 x3 j
! M. P8 c& G* D5 c7 G
static void ad7606_busy_hwi(UArg ad_addr) {
* L) t: e0 b5 V  ^( m; w3 z7 S/ I; c3 {9 m

. a! J- [7 g- d- z6 X        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/, n: q. V4 `5 F! ]6 g2 b  Y
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
) ^$ K. h4 s8 m/ Y6 [9 {/ I; ^. J4 q1 y
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
8 j& E( _: ?7 _5 b+ n& b        {3 s) w9 @4 W! j% e  V! ^% i1 y0 P
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。) w' r" I, a3 a- h
                cs_addr = SOC_EMIFA_CS5_ADDR ;& V. |# _9 W4 ]$ j: M$ U8 A1 C
                internal = 0 ;- C% \% C# N$ \5 U* K1 W; N1 R- ?
                int_flag[0] = 1 ;+ x$ E$ x) Y9 e& u! N1 V, s
        }
. V. L% x0 O6 n, u5 E( T        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)  }6 r# u: G3 ?: X& o6 n" p
        {" `0 s7 z9 l. R/ x' h) L$ k
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
# m6 J' ^$ E- {7 n6 L& n( z                cs_addr = SOC_EMIFA_CS4_ADDR ;7 a1 n; }2 x* c5 N- o/ d) h
                internal = 6 ;" k# c- o" D9 E  t  ^- n% H: S' }9 q
                int_flag[1] = 1 ;
1 F3 E4 |2 Y4 }) z4 d        }
$ z4 `5 D9 ^& B: }' {2 I        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
8 B: L7 Y9 L9 t/ R* e6 k        {
9 Y8 W" t+ t0 s; ~8 x; d                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。- N5 D, `8 C2 R; M
                cs_addr = SOC_EMIFA_CS2_ADDR ;
$ E% `) i& N- @4 }8 T* X. c                internal = 12 ;
% @3 N* q! ?5 y2 F' e8 n                int_flag[2] = 1 ;7 O9 ^6 o0 f2 s7 R
        }
/ l8 E9 u/ F/ x0 q+ U- |  
- Z% ^1 C4 A8 ]  v9 X        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);$ ]. f5 y7 x1 Y) L8 D/ R2 C  A. c
       4 V# J5 |! H7 b0 D! d
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
  i6 v0 l$ b% Q/ u}
6 q7 D$ x! x6 U+ v0 i  R/ q1 \5 i5 x6 K( P  V. R+ k! _
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图
% a) q7 C( \0 x' i, n( J6 R' R6 J- E, p4 B3 o

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-1-31 04:55 , Processed in 0.511798 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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