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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:5 y6 g. `0 [- Q! [0 C( v; t
#define AD7606_PAR_BUSY_GPIO_BANK        5$ Q: Z/ K. S2 M" y
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
1 ^( p0 F2 ~; Q6 o5 ^
; ^  A  n" `) l# i#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.111 f8 ^2 R0 h7 o) O+ L3 d
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9) X' M2 }1 ^$ D2 G" D" P9 E
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5% D5 a. |5 h4 c8 Q% J
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
* L, ~  ]$ n1 |  F
- V& {- H6 ]2 I8 k: b. L$ V#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
" b1 n- K9 j. [6 ?#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)2 U5 y3 |% W6 G, ?
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)% c: V, d$ t2 r% T" s
- Q0 O! T- \" x* ?
+ o. l) B5 b9 V7 ~7 ^

; Q$ N* E4 K: P( W0 g. A  O4 Wstatic void ad7606_irq_setup(ad7606 *ad) {6 ~2 D) e. j$ Y  e7 e+ F
        Hwi_Params hwiParams;
  ?; x3 Z8 h$ p7 u  ^        Hwi_Handle myHwi;
2 r  o1 ~9 B2 S( f+ ~: V! p        Error_Block eb;4 D# F, e7 @9 d9 E3 H
! u1 v2 j9 N0 U- f' I7 J' H
        Error_init(&eb);) [# S- a" q& B* ^8 i
        Hwi_Params_init(&hwiParams);0 Q$ l0 D/ [$ D4 t" B; [
        hwiParams.arg = (unsigned int)ad;
3 f5 [( E% ^' J$ _4 y        hwiParams.enableInt = FALSE;8 N; s0 R+ Y2 N+ b+ {6 W
        hwiParams.eventId = SYS_INT_GPIO_B5INT;: y& d- J) H$ c2 G1 E1 i- F& o0 T3 x
        hwiParams.priority = 4;
" X8 ^$ R9 O' ?! T+ X        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
4 q3 F, M! ^, y' O3 \8 [$ i  V; Y6 S        if (myHwi == NULL) % M! d( r- O2 s% B
        LOG_FATAL("failed to create hwi");* i. m1 w- ^$ l4 e. P) d

; f! b9 o9 ^( u: [' N7 a" K( s        /* enable both interrupts */, ?6 W+ P! U0 R0 l. ~
        Hwi_enableInterrupt(ad->irq_event);
) E4 A! ]5 Q* B/ D# X}9 l5 ?5 T5 L& ~$ o2 |

+ r3 O# p3 b2 f0 K8 L0 V
7 l. M- T+ M4 g/ i) D  Ystatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {
% u# J' x& `! t  L# u& R        volatile unsigned int savePinMux = 0;5 G0 p% q6 E' S8 ]- N3 O
        //初始化5.11、5.9 、 5.5为GPIO口2 E7 F) w, g, l" ]
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));6 B' [" t0 \) ]! C: [* S1 D7 H5 X  e/ G
) G- Z6 X% Z% W$ h
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
* A' w* Y& e+ P5 s7 z6 _9 |3 q  S  K" ~- K1 X% w4 g* U% K' S: 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));
7 Y: q) B, w; f# w& B, d! b8 {' C+ ~! u; i" v
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
1 S- J! Z0 R; s  _% Y0 h
2 S! y" I/ N" N$ m' q3 a1 @3 u4 H}; o; h# C$ K4 a0 X
; p9 l( l1 t. Y4 K$ l$ {8 X$ f3 o, k
& ~7 P/ a) B4 t2 j5 B  O# ]
static void ad7606_gpio_setup(ad7606 *ad) {5 s2 u1 w+ `7 e+ L
        /*Set the AD7606_PAR_BUSY to the input mode*/, s, u! S( d$ o; j) c/ E% ~6 z' z* o
        //初始化5.11、5.9 、 5.5为中断口: j. t5 O) |4 y- _& b, A
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);2 W) P8 k0 o& [- s! v
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
* L5 V6 M$ p+ w( c4 s        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
. c! J" F3 ]8 G# P+ s        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
5 O3 J+ y. D0 f7 B        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/8 R# P) N% B6 t/ G6 j/ z
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
0 d- o0 `0 y! z: i$ w7 Q5 S# l$ J        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);0 p+ e; m7 t5 x5 E: A
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
; F) W  t- O0 |        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
; @: f: |; s4 i! L8 e) c& L( }        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/* e) W" r* S2 X# r
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
! c4 y2 N0 v0 }' V8 [6 @7 ?- [: M7 X: [7 W! E1 @* `$ r7 _
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);( S3 h: p" {1 f1 V! \
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);  M' h; q4 o9 H5 f5 u& V
        Task_sleep(1000);
% N" X/ e% X3 K1 x, c+ ^        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);/ I! l! q7 ?/ Q5 X8 K6 O
        Task_sleep(1000);
  s3 g9 W4 E) q# N: Q# ]1 H4 ]$ ]9 V' F% \
        /*Set the AD7606_PAR_CONVST to output mode*/
4 J5 _' ^" ?' n        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
( _: U  i8 y2 H% ]0 R( t        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);8 D3 k8 _& R# f" U

3 W* _$ k7 L" F! U5 S        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
; Q& p4 s/ _$ W        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
9 l! W& O* I$ b6 p: Y7 A
0 p) z0 k4 D. a3 z2 P6 p}9 t- H1 }$ m) }4 Q! G4 d8 B- H% _# W

9 Y4 F2 F4 X7 b9 i4 |  n
8 B$ P# L4 e2 B8 e9 Rstatic void ad7606_busy_hwi(UArg ad_addr) {
8 i8 [  g9 S; C
. x+ u; M* v" B+ ]1 P% i6 A
& u: F, P9 S& k: m        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
7 }1 w7 h0 M4 V9 R9 O        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。, l! A+ H# d* W6 V2 b' ?$ X
  W8 K- T, ~  \4 Q) p- e
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)- @8 f; W5 ]2 T, q2 h  \/ o4 U
        {0 X6 G, ~/ E& L. f" i
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。/ k9 B) [6 h7 j) b2 e5 v
                cs_addr = SOC_EMIFA_CS5_ADDR ;
; u! Y) J5 W2 H3 F                internal = 0 ;3 E. a* N; D% _& E0 ~
                int_flag[0] = 1 ;6 o" o% Q' ]% H3 a
        }0 O- ~; f* {% L' v" R' L
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND); w4 V  K3 |. E1 T" M
        {
8 C( \( i% v% w( \, M                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
+ g  D6 a7 @3 _$ j9 H4 Z. j, ]6 w                cs_addr = SOC_EMIFA_CS4_ADDR ;2 m4 k( W, |+ D2 d! e! T
                internal = 6 ;
0 X9 D* L6 Y3 T" x7 w! u                int_flag[1] = 1 ;  D: X/ `1 Z# K7 `! g& m! k# M
        }: }' z; g) W5 o
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
" u! ?: N/ F1 |2 G        {
% _- p" E1 z7 ^& e) B* M9 e                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
: c' x% i* `7 n, L$ J: \$ j3 T                cs_addr = SOC_EMIFA_CS2_ADDR ;$ O7 N" y- c5 A2 b
                internal = 12 ;
  n2 g- U3 k2 S) y1 q& z9 _/ ?                int_flag[2] = 1 ;/ K1 \3 Q: X6 S$ t0 ~6 Z* S( [
        }
# w: H  F. X; a. V+ U+ |  0 Z7 G+ O+ `' N, j
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
+ a; ~: _) |( b! Z( g( J, }       ( }+ I" w* Q7 e: g
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);. M) K2 z& V+ W$ i% ^
}
' f. A* b, B& }  v2 V" _3 x* z! _; \( n( m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图
1 D# n# Y  d% _
5 P& o: f* A$ G) Y  {

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-17 10:40 , Processed in 0.040438 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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