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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
9 Q7 A4 Q5 C4 v. S% k#define AD7606_PAR_BUSY_GPIO_BANK        56 M* R4 l- e: N4 B4 n5 S; ]& _
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT; M7 y1 z( i( Q8 k
6 ?2 [1 c' T0 \# W
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
% h, f- }( n$ [, k. l9 |#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9& F; v) _% \5 y2 W
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
) v% [6 C& a5 U0 I) c/ x' E#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
' U$ l% Q. M- l$ m" F0 x
: E3 Q2 k2 r) _5 l$ o; ?#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)4 o" c4 y7 m. e5 y% i0 D
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)4 s% ^  d; z- k# L
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
$ h+ ?7 Y5 s% Y3 J( j6 r- o/ e- s- g& K' [' N
5 m: q4 g! r* f' ]1 I1 i" m

, y+ q( _, j; e: fstatic void ad7606_irq_setup(ad7606 *ad) {* x0 L9 z# ?: S' b! I
        Hwi_Params hwiParams;
2 n7 ]5 Q4 V6 g! V6 j+ w9 O        Hwi_Handle myHwi;- t1 Y8 \2 `& b- J( L$ [
        Error_Block eb;
) r% L6 n$ [. k" x' q2 b! V3 I2 t* b. Z" t) P
        Error_init(&eb);' Q% A2 r! Z& D: p7 t
        Hwi_Params_init(&hwiParams);
( {9 Y3 o1 O7 `5 s        hwiParams.arg = (unsigned int)ad;
, C  d/ a& \- C        hwiParams.enableInt = FALSE;
' S  Q1 ]5 B* B+ }0 \7 [        hwiParams.eventId = SYS_INT_GPIO_B5INT;
: `6 f, `$ l5 z- {7 k) }2 E8 I- g1 ?' b        hwiParams.priority = 4;6 P3 v0 Y5 e( j" z4 t  t
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
0 b8 c2 j1 ?! w4 `' S        if (myHwi == NULL) 5 C8 c: _0 x3 ]) k5 h5 [
        LOG_FATAL("failed to create hwi");8 {  p/ v" |8 D+ Z8 @! G3 r
) N( e# K% x* A
        /* enable both interrupts */; j, F' B5 O3 M& E
        Hwi_enableInterrupt(ad->irq_event);
. l8 T0 m; z' {" }$ k9 Z+ i}
0 P) J8 [5 D: k# `3 |: [
# j/ l, y+ s. C" t% X. o( J
- Q7 U% m7 d$ K& C- lstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {
' ~4 c5 l) b6 i2 c        volatile unsigned int savePinMux = 0;
) B' ?! j# r8 L# e% {7 f        //初始化5.11、5.9 、 5.5为GPIO口
5 I8 f! k' g2 ^" X* R6 ]8 e        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
2 W9 e# Z: H2 R( C% G( I
! z% ?3 D. Q+ `; C+ P        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);8 h5 O7 ~$ j) C; M: p

$ P/ _+ O& H* e        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));# U; w( }9 ^$ Y* Y

# B# ]0 p* }9 Q  q# u1 {' y        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);! g% F2 ]; K8 n' j5 Y* x  P7 n9 C( g7 a

! i" E2 x+ e. \+ F5 Z}! u: {4 F  j& ?- a( }

( v& [9 L8 w0 Z' E% s
; Y6 `  D" X$ |static void ad7606_gpio_setup(ad7606 *ad) {
4 u: N- b2 U2 R. r% n5 G        /*Set the AD7606_PAR_BUSY to the input mode*/% ?0 k& `& A* m
        //初始化5.11、5.9 、 5.5为中断口
; V- x* f5 W4 l  m) _1 v        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);+ w* [7 {- K* n# X( ~
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);9 X8 x* M9 M4 {: @) ?! v
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);* x/ \0 U+ j6 g
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);+ }3 X  q4 G2 r4 v1 ?/ c4 G
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/- J+ N  r: f" i9 |/ ^: B, p
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);9 z) g7 W3 ~0 W$ N7 @5 q
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
% T" u/ U+ Z' |& V" i8 A' [! k        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
+ v( T8 d# x9 X- N$ a        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
! t2 Y1 G# x5 C2 J/ M        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/* f' A% [& w+ l4 D' u% m
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);$ M& [1 s" Z; [% `# u6 G( Q
# `  b/ u" U( V9 j1 |+ e
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
: W* h5 |1 o3 U- S3 o+ G- ^2 l        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
$ B! p# z5 v! {+ V& x  s# y        Task_sleep(1000);  b5 s# _" z8 C! o
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
- Z8 m1 Z0 l2 [. r7 F        Task_sleep(1000);
$ a$ h) _& B$ y4 {2 A
) s( m0 X2 C/ e9 g        /*Set the AD7606_PAR_CONVST to output mode*/( a% y0 h+ T* I, ?; S" ]8 ?( D# `& I0 q
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);- ?" X( i# b. ]5 t/ |. u0 N: S
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);  e. F" e. B% P4 T2 ~3 h

& T6 [% E: T& W5 l. ~. G) D9 Z        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
* Y, o8 w) g& s0 S) [        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
. k; f2 x  `+ b7 N8 O3 B5 ^/ ^) x* H8 t: ^( n
}
$ Q' B5 x$ X" A0 K, R# I1 \) T5 d- S+ x$ \# ?- A
) S% u. R$ c$ W+ h+ Y
static void ad7606_busy_hwi(UArg ad_addr) {
8 ?) z7 N0 I$ `2 H3 S$ V3 E8 Y+ u, J( U2 I3 X) q
4 J- Y7 u& i4 W- [2 W+ ^8 Z
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
3 N3 O" f. `) g/ N2 {! R  A        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。& l& a3 S% E4 Y; ?7 `" Z; e, s

1 w  M( }! l2 E        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
: V& u: n- p/ Z9 L3 _        {
% j7 V  z5 Z1 `; ]1 |2 \4 }; W! y3 @                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。0 F; s! ], H2 e: ^/ X
                cs_addr = SOC_EMIFA_CS5_ADDR ;& h& ^3 P% ]1 }) f4 ^3 w" {2 Z
                internal = 0 ;& d. ^4 E  d) n: u% F# O# m
                int_flag[0] = 1 ;
/ h9 `" B7 |5 Q2 b% |& a        }
1 i& ]* C6 c0 G/ v' ?        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)9 p, J2 h3 d7 x4 `) G. K6 A
        {  M+ M8 J; H0 t% o6 `  v
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。1 u# v* Q: s- A6 v0 @- o
                cs_addr = SOC_EMIFA_CS4_ADDR ;) I4 Z1 a# F# ?- A8 b
                internal = 6 ;
: n7 N4 o* L% f                int_flag[1] = 1 ;5 C6 E! i- N) |5 ~/ j
        }# F' S: R$ l2 I& d" Y* p5 x. M5 b
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
/ h! R9 K4 C$ K# P9 e/ O9 O        {6 }7 o0 z9 P7 j6 [( r
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
0 U5 R/ n/ K2 i                cs_addr = SOC_EMIFA_CS2_ADDR ;+ Z- Y4 B1 ]0 g6 w# k; g* r2 M+ ]
                internal = 12 ;
3 {" ~5 C0 h  `/ w" Z6 H8 u                int_flag[2] = 1 ;9 F6 ^+ g, A4 E/ T% A1 w/ j& U5 H% f
        }* @! J5 I* s! S6 {
  
. O7 y( M: \) a. O        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
' w& C& J- s0 ?7 l      
3 \; I1 K4 N2 Z5 {6 P3 Q8 }! T        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);( H' R5 |5 \9 J! X' `
}
4 j$ Y3 l& ~8 C5 Z' m. q( \% s& p7 z3 m) y0 t# W1 {0 n( N% L4 ?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图2 a5 f, Q! b! ?# K9 u; G) a+ {
9 X: r2 u. h7 F9 ^4 ]

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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