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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:( R( [- Y) M# o3 d4 a" q
#define AD7606_PAR_BUSY_GPIO_BANK        5
( v( d5 X9 K5 w- {#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT# i1 A  A- A( B2 e) F( G

) o7 W; U0 K) |6 A" ?$ u% h#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
) U, p& q' D* {8 J' U- n, H- t3 ?4 h#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
0 L+ [3 _& p  v5 _2 {0 U0 g7 E#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
" N+ R' b( x0 ?4 h1 [#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
  u$ S& x1 Y. a/ S7 u) U2 X1 h' s2 }: c7 b! Y. F: ?
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
6 O1 C/ f6 E! f+ A9 G3 x#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)7 q) v, x- |/ Z! a/ I
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
/ m" o( e+ R; ?
9 y3 e! B- U4 f. W/ u/ ?1 _/ z# N! F; j- ^5 s4 R

/ G# H: M/ x( O: K; ]static void ad7606_irq_setup(ad7606 *ad) {
+ D/ p5 G9 {; {, A7 B- ?" t6 r- I        Hwi_Params hwiParams;5 z3 Q. _0 F/ L0 q
        Hwi_Handle myHwi;: d1 o+ S- c3 J. H( }1 F
        Error_Block eb;
9 @- S# _" Y! f: k3 T' ~' O8 k/ f% K9 F
        Error_init(&eb);" d+ P" u9 M( ^3 p2 x, ?& u% z
        Hwi_Params_init(&hwiParams);
: G- U$ R0 p0 W- h9 k( P5 d! n. E        hwiParams.arg = (unsigned int)ad;
9 R) S! h$ E3 A) A" I8 {        hwiParams.enableInt = FALSE;/ V1 B  u2 @- q3 L/ T" h
        hwiParams.eventId = SYS_INT_GPIO_B5INT;) ~  w( R0 ^2 T  S7 O
        hwiParams.priority = 4;
* P' e7 s2 h: J( n8 N        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数% ?5 v% U, ^& S; [. Y' ]' D" a
        if (myHwi == NULL) ) O5 n# L1 _( z, N- B
        LOG_FATAL("failed to create hwi");
( D2 C& v+ O% }3 o/ v: j3 `+ y" }4 H, o% s6 p% J
        /* enable both interrupts */
# m6 {" i+ Y  H. u        Hwi_enableInterrupt(ad->irq_event);
! i( y* S. |; S1 C' z+ a4 q}
( z4 j/ U5 R; ]  r, y
0 K6 p* |/ Y; K8 j8 v2 \. ?/ j8 S# r
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {  W7 T3 o& ?) ]/ G* _' g- a- @* l% k8 a. H
        volatile unsigned int savePinMux = 0;- z; q, ]( W8 p
        //初始化5.11、5.9 、 5.5为GPIO口# d% i$ g8 n/ G, `9 e: H  c% u0 i
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));5 e5 T! ?4 @8 k

* ?+ _5 f6 Q& \        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
4 \4 x4 D( x/ t3 P
8 n# S2 b# e3 ?# m* J' \+ \  z5 S6 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));4 P+ }" t& A2 ~

" }' Y+ @& x6 l) x: _5 `$ V  X3 d        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
* Z; {, }& Y: O3 R/ M" u% E  ]; r0 c) [
}
! y, T2 l3 _7 {: \$ @. s  z( d7 l

! X# [" q  _% u; t/ ?+ Mstatic void ad7606_gpio_setup(ad7606 *ad) {
# R, [# C/ @. B9 M3 C7 Z        /*Set the AD7606_PAR_BUSY to the input mode*/
9 J& B; }! o+ k" h9 h2 p        //初始化5.11、5.9 、 5.5为中断口% A# i$ X/ W8 q/ I# I
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
  Y$ w( ~7 m" E        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);" L4 Q; |' y  Z. \! n  g7 A: B
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
* p$ t  X8 |/ D' y3 W# W! t        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);( i/ v9 V6 z& ]2 |8 Q6 K$ m
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/2 ]1 t+ C/ e8 o/ N
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
1 d! n; z- u, _2 C        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
6 d# }! C8 o' K8 |) T3 R$ }        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);0 E) x8 w$ t" X4 n0 S! U. T
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);0 j5 ^% A% K& z9 `! L# f
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
" A+ x& G- j$ Y! Y# |  W. C' L% K        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);/ R2 `/ Z, C5 U
, `4 [* J- l/ Q8 k1 C4 w" m7 ]
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
8 f0 A/ M8 L  ]& ]( H! `        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);* T& E- T( m# n
        Task_sleep(1000);
( k7 s! B: L: B2 p* i  W        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);5 E0 W* m$ }: H/ R. S! ?
        Task_sleep(1000);. }. ?4 o; v" }+ N1 a
3 o& u& i3 g+ w2 Z7 L( F0 W: b
        /*Set the AD7606_PAR_CONVST to output mode*/8 @! G; n9 r& u  c+ |! J: x
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
7 J; ?, m# x, K, e0 D  u        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);  H7 ~7 P3 Q$ H0 _" s
- ^- A5 P. d0 f% d7 |
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);  f& D: x$ I. y  I
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
. |7 U) _  }+ r& C- L3 o* a2 D" ]1 q
}/ x8 q$ d: |- L8 s9 b  Y

" b+ i+ ~1 o5 b1 O" d- e0 ?
% W% W* _$ n+ z: m& P- fstatic void ad7606_busy_hwi(UArg ad_addr) {
- t5 e5 r4 l, x. ]( T- [' F0 \# N3 t$ p
1 w: G: @! d/ U# a( t
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
% [/ ~( r( ^& f. T: C- j        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
9 V( j' [) X$ G, U" C( t# [
- g: G8 n5 Q. U+ d. n9 X! z        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)7 e6 P% r$ I& W- y
        {
4 R. K7 n  W/ F) W& `% Q                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。3 |: J* y+ [5 E9 p
                cs_addr = SOC_EMIFA_CS5_ADDR ;
2 f3 R* u% D6 T/ Y6 F0 J                internal = 0 ;
  |) q& `; A9 G$ X5 U% p5 U                int_flag[0] = 1 ;$ j! ~, {! S: i
        }: b9 `. z& N' p5 d
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)# a- p' s8 r/ T! j+ Q
        {
( l$ p0 Y( g7 f( w! y( p- R                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
% h1 Y2 A/ V% a, G                cs_addr = SOC_EMIFA_CS4_ADDR ;4 ?& V$ A- c- [5 s) I8 t
                internal = 6 ;3 L" e$ x% u9 i  x
                int_flag[1] = 1 ;
  ^# N0 A: Y) m        }
* }; H4 T) R! t; P9 Z        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)' b/ }0 l6 l7 W+ R+ Q
        {0 w) {6 o" E' g  u+ O
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。( Q0 h+ [2 \3 T  ?  g
                cs_addr = SOC_EMIFA_CS2_ADDR ;
! ~1 U9 n# M, O( Y* n+ h                internal = 12 ;4 U$ n" a  y4 b8 v
                int_flag[2] = 1 ;
1 h& G8 @# l2 h) {+ R6 f  J% y        }2 M  n' M! o6 Y6 z! q8 v
  
) }5 X% P& G6 K; A        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
& i# i  v% O2 A8 s: x, w         N, Q. x& O" c, {6 F$ d. l2 d
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
) l$ r: F4 L3 p7 q7 U' M, U7 N}
4 |6 t4 f4 r" p+ |2 w; k/ K1 b" R* [  _# e( R; B& C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图
1 Z% h1 y9 C- G' z+ p
% O, j1 f6 M5 j2 i, e: S; p* O8 s  _3 Q6 t

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-4 03:06 , Processed in 0.038377 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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