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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
- s# r& d7 ^6 Z" f% Y#define AD7606_PAR_BUSY_GPIO_BANK        5
2 V; b  M1 n' H8 Q6 f( ]#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
3 I0 Q) ^! ~1 u6 Z6 {: s/ w0 q. v" V- j; v0 c
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.117 V& f# A9 i: |1 b, s( W
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
0 Y. D" s: R- a5 i% z4 e: ^#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.52 O% [7 B1 s$ L$ b; Y8 p4 E. v& X9 P: a+ N
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
- {1 x( S1 Q  G5 }+ ?9 A3 Z. g% i0 O* S: |( j. `
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
* O  W1 ]! ^6 N/ S! a/ A% @#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)1 q  F3 H5 G. E8 w: C0 Y8 S
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
4 d; L. I0 x" g, N( ?4 k
3 f. F( ^- ]1 c. Y! O: I
7 D2 Q6 p  Y, z# m+ x# b  N; s. L" O9 j2 ?3 f, i
static void ad7606_irq_setup(ad7606 *ad) {
2 A4 I+ \: f. w4 m! Z! ]        Hwi_Params hwiParams;( p4 I. t& A: l. B/ o/ x8 |
        Hwi_Handle myHwi;: }# n% [6 M6 H, |+ O
        Error_Block eb;: f5 X1 z4 {/ l
6 l+ J; g  i, I5 ^
        Error_init(&eb);: e- D. g& N* S/ k. q3 u
        Hwi_Params_init(&hwiParams);
$ C" u; U, p- w5 m        hwiParams.arg = (unsigned int)ad;
! b2 r8 P" D. w        hwiParams.enableInt = FALSE;
- G1 g! s$ x* H, x3 j* I- ^: e        hwiParams.eventId = SYS_INT_GPIO_B5INT;
3 S# d8 W* j$ F& G        hwiParams.priority = 4;
' P$ [  h$ R. f        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
% O3 G* ^9 Q2 k& l( W; ~" G* ~        if (myHwi == NULL)
: x1 a9 ^8 C* p; T' G" Y        LOG_FATAL("failed to create hwi");
3 `5 s6 Z9 V& g3 a  {3 X3 M1 ?5 \; _2 O4 |
        /* enable both interrupts */8 r4 i, T6 K4 u. y  Y* r- g
        Hwi_enableInterrupt(ad->irq_event);- T( h$ W. V+ N/ a
}( Z; ]" k* Z1 d) r: n- v: j& c# o

; M; ]( y0 z. e3 q( S, }. b: i  ^
: q. }' h8 }# L( R/ D5 jstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {( u" P1 s. q; i' S; T
        volatile unsigned int savePinMux = 0;% `! e' p1 B& `2 d
        //初始化5.11、5.9 、 5.5为GPIO口
7 t. y8 D& t5 L        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));# Y/ b# [# C- _; a# k3 s; q

& M6 d! d0 \& N, M2 M        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);  X6 a+ @4 g- Y) Y
+ }( e" J7 p$ ^$ C$ Y# _5 m
        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));
/ e5 r1 f' L+ M- L* O: i  [9 t6 U6 i0 k) U" p" J! M- X8 p2 d
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
; J) X7 J/ @/ P; g* `9 C
/ J, B& ^6 T- p7 {0 Q" r: _}& P% E7 k, z  D2 Q
& ^* f  G) V+ Y/ x% ~) i0 B& Y! H

; G2 E3 d9 E' H& ]static void ad7606_gpio_setup(ad7606 *ad) {! m6 U5 C8 A( c( X5 m) g4 s) M
        /*Set the AD7606_PAR_BUSY to the input mode*/) p% i% ]2 w/ G9 F9 A! g
        //初始化5.11、5.9 、 5.5为中断口
% [( U$ G" f  Z8 u4 s% ~# r1 ^* D        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);8 \$ ]" P) K' `, {* V$ ^3 U' n( H  D5 k
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);8 e6 l, J( q0 x8 Z% n/ h
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
3 U: H* f8 U8 ^/ @- [& Z* f        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
2 J' L# t( E0 @) U        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
" j6 J5 ^/ b4 Y* M% |! m        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);2 Q! F9 g1 l1 U" j
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);, B4 S+ ~( y0 {$ A) C
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);* }) U- c+ @2 p7 h( }$ Z) t
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);+ _& [* l4 a3 Z6 j# @+ f
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/5 h& n9 v" q7 l6 ?+ i: ^9 B8 l$ ^8 x
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
$ e  E4 U9 c5 j; t6 Z- e4 i, j
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
, A2 D* h, t+ P: V. V2 K        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
) F4 G: Q! F! _5 O6 O: Q( N        Task_sleep(1000);  R* j' @3 A3 ^" c1 }
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);" W* {, l1 n; [
        Task_sleep(1000);5 p% Z$ t! E8 x' u
& l9 t& i9 I) x3 i. u5 Q- U
        /*Set the AD7606_PAR_CONVST to output mode*/
$ \9 V5 a+ h9 z1 G        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);6 U+ i! z) t' N
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
9 R' K( `' ~! ~. g( [2 o+ |2 d; y( `* y) [9 v
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
7 m% O* T1 ~0 |! g5 _  ?        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);( `1 B! n1 u6 p, H( O5 S4 f7 U; x! s
* _- j5 h$ ?& O. ^) ^; a% Z
}
# e8 A* S3 ^  {! S+ g9 L  g) f0 W! y1 h
# U/ v1 w$ d( w- I6 x6 L' C
static void ad7606_busy_hwi(UArg ad_addr) {
# y7 o' _7 |+ H  [8 z
; v; A/ Q  O  s+ A; Q) i7 Q% {! f: y$ {- o# n
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/( M- U- f" D4 J' \# M3 a
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。+ J/ r! s. j7 o

, b' L% z/ I/ L$ L; {4 @0 j        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
7 e( n( W3 j3 B4 x; x$ {  o: w        {
' o. T: Z3 w8 C! z. X                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。3 X5 ~* w+ S/ a! a3 a% [
                cs_addr = SOC_EMIFA_CS5_ADDR ;: T) C8 h. l1 }5 Z4 b9 B" ^
                internal = 0 ;+ i/ j1 O7 @1 U, l; I, q2 F
                int_flag[0] = 1 ;
' V/ D! \; }/ m2 w) S' y. A3 E        }
* @9 w& C/ P- R! V        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
: |9 E2 I: ^/ J# q6 a* _        {, d/ L) Q  _! H* d
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
; x, Q& z% M# ?$ K- i8 j% T7 _                cs_addr = SOC_EMIFA_CS4_ADDR ;
- u" L2 \6 R5 n                internal = 6 ;' ]$ t- P5 b- |  R  N6 ?4 {
                int_flag[1] = 1 ;3 k$ b3 ^$ z( e' J
        }# A! T+ w/ T% P+ Y
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
2 X3 Y9 L9 ?7 [! L. d: X6 L  b        {. x, A5 o' [4 g
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
* [  a- S4 D/ z2 Q0 R                cs_addr = SOC_EMIFA_CS2_ADDR ;
0 a) A. {" Z2 l% e- @                internal = 12 ;
; W9 ?6 g, g& t+ T. j) I# f                int_flag[2] = 1 ;
  ~5 P! T# y5 s1 C$ N, e! j; [        }. E) ]) b0 @/ i$ N( I5 e
  % W5 g* `  O; ]' i  N1 F# D
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
# F6 `; B) F  p* J$ S) ~: s, e      
- C9 Q! Q9 G9 W# d; b6 g' [        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);9 o# I. ^" T! L7 I( _
}
  {# F1 k- C1 X$ M' }/ b. V
/ a) e+ L! @1 P$ p
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图/ x+ r- L, |5 R# N* Q
: ]% U$ i6 }' D) h1 P' J+ `

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-15 02:13 , Processed in 0.038442 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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