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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:: Q) A7 s# m+ k% i% X' n, s4 V0 S
#define AD7606_PAR_BUSY_GPIO_BANK        5
( E$ Y" S- z$ M1 ?7 e7 ~#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT5 I$ C* n. |% z/ S& ~

4 ?. i: Z  B) G#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11" Y7 e# m) T/ Z, O9 w7 L
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9* |' v/ w' \# ?/ D6 w
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5& I3 K1 v7 V, N) F( {' l) R9 s
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
  f! S6 Q( ^7 r& `* l3 }- d7 C
1 c, y# ~/ t- p9 x2 ]# }: y2 `3 r4 |' |#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
8 p8 z2 Y% I+ u/ R#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)4 m7 x6 f$ q1 I
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)- U8 f- W/ n5 w9 G
4 c. l1 b; h6 K3 p8 J9 W7 C
7 T1 R  c* o5 o3 v9 U

! _, M; ^6 E$ V8 pstatic void ad7606_irq_setup(ad7606 *ad) {' J! }! S9 P$ R2 V% j" U
        Hwi_Params hwiParams;
6 a. t% ]( G; V# R        Hwi_Handle myHwi;. R) q5 t& l/ ]  o7 p
        Error_Block eb;
" P, D9 k  _& t( l3 i# A
; O( j) K& U+ F        Error_init(&eb);
  T2 c) C* r) v5 r7 k        Hwi_Params_init(&hwiParams);
1 x- D; n0 k% i/ f        hwiParams.arg = (unsigned int)ad;
. Q9 B' P( |. f  k5 s' c        hwiParams.enableInt = FALSE;
" i3 @7 K/ v' Z& {        hwiParams.eventId = SYS_INT_GPIO_B5INT;: r* l* I7 Z0 A6 l& O" m
        hwiParams.priority = 4;) O( u! O/ W. @
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
/ t7 Z+ n5 |2 X8 Q& ]' E        if (myHwi == NULL) % I# [" m7 @$ r$ m) G
        LOG_FATAL("failed to create hwi");0 q, l5 Z4 X+ p, N# S7 F% ^4 h

8 _! V, ~  s; v7 `* c7 F# v        /* enable both interrupts */
; M+ S; `0 m& ^$ \* O        Hwi_enableInterrupt(ad->irq_event);
5 i5 Q# ]# I/ J. p}! M  R' E# W$ t% J2 w

6 A, ~2 R5 D5 n9 j# @& }6 X% X. ~% ]0 a% Z9 F  T1 N1 W" T
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {0 }8 s; C0 y' h8 D7 C3 ^0 a- I
        volatile unsigned int savePinMux = 0;6 R% U1 K& T6 R5 j
        //初始化5.11、5.9 、 5.5为GPIO口3 L/ J5 U0 }/ g' r: Z& x
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));) Y* J  V' k! M
7 d) a7 O* T4 L8 W$ }# f5 z* ?
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
- c5 S. a# P. Z, T/ x8 f. v1 y# X7 u( G1 p1 `. l- w. ]; `5 S
        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));% |- C$ B6 e; p; A3 }! Z' p* n

, j. J5 n9 W6 E0 s0 i( ]        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);4 M$ O( P$ @  a7 I: E; g# n1 p: f6 I
7 G0 ?- N6 y. U$ _/ U- ~
}
* y! `- P' U) T3 w, i7 W7 w- ]. d5 J  A  a5 D; w

3 N4 E0 W! F6 c' Q" estatic void ad7606_gpio_setup(ad7606 *ad) {
- k4 ]6 o; T' K# i! Q        /*Set the AD7606_PAR_BUSY to the input mode*/8 {7 f& z$ ^( J4 b: Y
        //初始化5.11、5.9 、 5.5为中断口  h" \. i4 r* F- T) B
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);; m+ S/ f) y, k" F" Y: ?  f1 [
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
! c. X5 W! k1 ^        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
7 {0 m) c- ?8 t" M8 [; m$ J( V5 }        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
) @/ i9 c2 I9 p1 B" D% x        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/6 J/ h( y' C$ y0 s/ ~1 k
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
" {  r' F  v" L7 |3 h4 H( c        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);/ ~; j, f9 `, K: j1 o. }
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
7 `2 ^' I# K/ E; m4 K/ [. C! `        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
; I* c* g3 @% g8 L        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
2 n4 }2 y1 V) ?9 f6 q# k        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
4 ^  _4 [) x% @) Y4 H. J. h6 u2 s! j
8 j* Y: [% d% c. A% g, R        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);- C. X/ l; M$ L. ]$ z2 x8 ]
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
& @' ~0 \. R  i0 U        Task_sleep(1000);
. {& v/ N2 y' C8 n        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
. k5 Y! R8 W' G        Task_sleep(1000);
. |. m- c7 i* [; S3 I8 T1 {0 D# c9 L: C
        /*Set the AD7606_PAR_CONVST to output mode*/
1 \0 n3 e2 _( o3 d        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
6 m( k; f8 e1 \+ e9 U( t        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
0 @, @$ ~3 j: S* N+ q3 J4 ^+ a' }* a" M
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);! V# T) }7 D& O( I6 ~) h
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
( W6 n) U# t5 ?2 T; m/ R
0 b: d. R; d7 L, r) |  i}
, j4 @2 u# `1 n2 ]2 ^& f& v0 G4 p

4 \) \6 K+ Q" \. B; s, Qstatic void ad7606_busy_hwi(UArg ad_addr) {$ q# p2 q9 R4 t$ ~7 T+ j
/ ~# X, P: l% D7 q7 b

, y! B) }9 k2 `        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
6 ?' h% N: Q8 _, q% B        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。: ^8 w. `2 K* \! ^' w
: G" i  Y6 f! W
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)/ v9 W% p* y" C' s6 F% `
        {% K9 Z  n0 P" w* {
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
) X' F5 Q1 f/ Y: \                cs_addr = SOC_EMIFA_CS5_ADDR ;* h4 f1 Y# h, {% {  L8 k. `
                internal = 0 ;
! V6 |2 R- S0 ?1 ~3 {8 D                int_flag[0] = 1 ;
; ^7 E" |9 G: }# I% A  G        }
5 C* C# t' q' ?! V) }        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
" B0 ]9 n# _  ?5 n; c        {
5 a8 O" J9 G' q% E0 ?9 _                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
, Q. `6 Z% b- M4 i                cs_addr = SOC_EMIFA_CS4_ADDR ;+ Y6 T/ f% u6 I& U
                internal = 6 ;
  n) ~* I+ y  K& y* g& o" e+ @5 A                int_flag[1] = 1 ;- r# E  n5 |6 \$ R& ^! i8 ^% {
        }
$ }, M* I+ G  [' d        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
+ {" Z5 K" K9 ^9 Z: _! c        {7 {) c1 W- u* |3 y
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
( x8 R/ _$ e: d                cs_addr = SOC_EMIFA_CS2_ADDR ;( Z5 L, s8 r9 h" ?
                internal = 12 ;2 x* o: w/ U& n2 I8 L
                int_flag[2] = 1 ;
) a3 Q7 n" n' z$ T3 T2 z        }: `$ y. T1 T1 X" b2 P# s6 F9 @
  : @/ m( H* P$ S" U$ s9 E" [
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
% [% ?, G8 g5 X$ C1 w+ i) a% X, X8 E' B" }      
. N( `$ O* J; P% z6 z- l% j, l        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);7 m$ |! i0 D# B$ V
}( O+ \2 y* u$ u& z! i
" d8 g. F: j+ ?/ @# W* T
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图6 m; `" @, W8 O8 e8 n5 @/ p
% I% h: r2 m9 E, _& u

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-17 11:03 , Processed in 0.044474 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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