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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:8 }) p$ n7 H% x
#define AD7606_PAR_BUSY_GPIO_BANK        5( D3 m, m% q* f4 M
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT9 C5 D4 Q5 I- X6 h

+ c4 w: h0 M8 u, F3 y#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
  \7 j9 o: T) c+ }, Q# W: k#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
! q  i2 G) O: g; r5 t#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
0 n) W% v$ ^& f+ R#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)# b" d, U# {) g6 x& J& I& C
7 |2 l! b0 V7 C; }5 F
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
$ t0 y  ^) o& `( M7 N, r0 T0 S3 X) u% R2 ]#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)& y* ~$ b0 q+ V+ {
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
0 s+ Q; |4 q) _/ r( R: W- |
$ q: {7 l$ K! I+ r
# h' B8 c2 C! w1 T
/ o) M+ w: }  S1 t6 t( s- istatic void ad7606_irq_setup(ad7606 *ad) {
0 _6 ~! D/ ^4 [$ n% w% E        Hwi_Params hwiParams;
  F4 k8 G: V1 Y. l  R' \7 o1 q        Hwi_Handle myHwi;
# H7 X# I4 k$ g# l" I" K        Error_Block eb;! o" i5 g: `6 G. u* Y0 n. R

) D5 c' p. w; U" H; w        Error_init(&eb);
& }$ T( k: c; v1 ]  n, V, f        Hwi_Params_init(&hwiParams);
+ y- J4 y$ i! M- z( p* F; ?/ t9 E        hwiParams.arg = (unsigned int)ad;
" T: r) u9 M, Z        hwiParams.enableInt = FALSE;
" b6 P1 {' `1 U+ v  c* y6 l- Y! U        hwiParams.eventId = SYS_INT_GPIO_B5INT;$ q, E# }5 f$ p$ ]9 ~
        hwiParams.priority = 4;: v( g) a$ G$ F& ]; K; P/ o6 v
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数9 v) b! D: g5 @3 `
        if (myHwi == NULL) + ^% h% e4 A. L; K5 H
        LOG_FATAL("failed to create hwi");
) D: J5 }5 @# D7 I( a: m
' w  C/ N) G. a3 ]$ b! Q        /* enable both interrupts */. w6 v* w% P( P, @* Q8 _' y( X
        Hwi_enableInterrupt(ad->irq_event);
3 E9 }, v- X- V' Y. N6 f}5 q0 P# L8 J- t* G7 Z0 o

3 R4 `. r: U$ l2 i- p
3 V, R" [: i8 j2 ]- N3 Wstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {3 @  U% B; q& g4 H8 g
        volatile unsigned int savePinMux = 0;0 E3 D) @* U. F$ n0 C6 Q, X
        //初始化5.11、5.9 、 5.5为GPIO口
+ [4 s( v4 `! q) h        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
1 g% Z. L; A  Q4 f5 Y) _5 g& P9 P5 ^4 Z# \) r
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
0 g3 p2 r: H2 \  |  }6 D9 Q7 [: ^5 }+ Y% 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));
# @2 f: s2 U% k5 G( f4 n
3 W; T3 v- w. C        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);, X0 l/ u: n( q# O/ `: H/ A

$ S- x6 F8 y3 X7 t; N: P5 v2 @}. e- _* F1 ~, Y6 n1 S' b
% ?/ a- B1 @* |) y9 @2 |

7 X5 m; y5 r  G( Y2 istatic void ad7606_gpio_setup(ad7606 *ad) {2 j) Z6 g& ]3 p; e; u! g' q
        /*Set the AD7606_PAR_BUSY to the input mode*/5 n4 Y# \# f4 _2 q5 x3 B
        //初始化5.11、5.9 、 5.5为中断口
2 @9 \* l# v7 K$ b0 u4 Q1 Y        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);6 s8 N/ X3 z: H! B2 J3 l
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);8 E; w) ^5 I  x7 Y+ ]4 |
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);: a: z+ \# L4 V
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);6 G. M: ?, P! f) j( f- i
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/; ^0 c8 m7 y+ W. b1 c1 F
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);7 Z0 j+ K! f3 s1 V3 W- r# q9 T
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);8 S) `0 ~2 j* I& y
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
* p' {1 t  }- O        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);# V% d  ]2 Q- ?3 [- t
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
# c" c$ ]% K; t        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);, [  H2 W" V% Y" y/ o) }
, K  f& c9 y8 e3 D" V2 T6 S
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
9 j3 j$ F6 a; r0 U( k        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);  x: G& t* W/ B' k
        Task_sleep(1000);
# X+ c. k( i. E" x' x) Z        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
5 b- a) i! X% ^2 q6 l/ U        Task_sleep(1000);
7 E" E' O% H0 I$ I: C6 j
' n% @# A, h7 t7 @7 N( G        /*Set the AD7606_PAR_CONVST to output mode*/2 v1 [, @+ X( B8 A4 F+ E; J* D+ p+ C" g. B
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
3 S6 f6 b* H6 J  c        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
& l, K3 Z) f/ l9 T1 c( A% o
: V( c. ~3 m6 q- k        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
/ |3 {. l) J4 V- x        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);6 l) w& X. }: G4 d
) Y4 [& U; ]( o3 ?" u! C- v" X: \
}: f9 ~2 m+ k6 S0 E0 z$ x
+ [2 V6 i1 ~, _9 p* l
' H" a% v5 \* F
static void ad7606_busy_hwi(UArg ad_addr) {  R3 h; k0 O: u. L& e

9 ~4 p7 [3 r8 X6 w# I/ t: l% G# @2 i' ]! U* J: s
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
; b. H% t6 B0 G- x        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
$ M9 f& C( s6 `( i
- u4 ?1 F; y2 ^* r0 W6 a: U# ^        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)2 r" t  }2 j1 O
        {
' p- F6 j2 c$ Y  O1 a3 ?( ]7 U                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。9 A- s8 ]7 S6 ~) w. w
                cs_addr = SOC_EMIFA_CS5_ADDR ;
8 m8 k7 P: _3 L" H* [" s                internal = 0 ;
7 w- O/ \& ]1 f0 f                int_flag[0] = 1 ;4 |1 {; ]' H0 p) U* p8 g) f. n6 L9 V
        }
' R* n4 }' b2 Y$ E        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)" ~1 g. a& w$ s, c, V5 Q$ {
        {8 K) l3 Z$ K9 y7 n
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。" `0 q6 J: h7 k) [3 M$ h; j+ }
                cs_addr = SOC_EMIFA_CS4_ADDR ;3 R+ m/ N, I7 N. H7 d7 q3 U
                internal = 6 ;
+ d3 @/ B9 u$ N, J                int_flag[1] = 1 ;$ {, O1 z, k/ z$ M5 D+ h2 [
        }2 t" V, T' f  O! v) \5 N
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
+ p! d8 @. h- Y: a2 l/ k8 t        {: F- f& O8 S. i1 X2 m/ m8 e* b8 d
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。# [6 u0 v3 k% Z! S. j5 ?7 C
                cs_addr = SOC_EMIFA_CS2_ADDR ;4 I8 J" F2 U9 B
                internal = 12 ;. K/ `9 I5 {% `
                int_flag[2] = 1 ;
8 u0 J+ S- c# n        }
3 x: w2 f# _. o8 d1 Q/ \( n  
1 X. B, U" C; j- @7 {+ ?+ y0 D  j+ c        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
% _' ~- U$ r9 d" p8 }! s      
7 r" \2 I1 s* b+ g6 b4 @        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
; ~6 V! d  |" h# s  W+ ]) {7 [}& r8 |- m1 u  V

: U) g# M/ G- N% ^
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图
+ Y8 f1 _! p7 K3 }" k
, o' {1 A$ y: J# e" u0 Y

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-17 11:00 , Processed in 0.041452 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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