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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
' {1 Z/ o9 ^; e" M+ D#define AD7606_PAR_BUSY_GPIO_BANK        58 R" Z- A3 c/ J. e1 g. p6 E
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT4 _9 O6 o# R) w8 C5 q- C$ q. C

; X9 V, g- |  `+ s( t# T#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
5 N6 ^% R/ E+ Q0 C2 W#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
; y% a7 i5 E% a! n$ K# i! z7 i#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5, U% a" J& f! C% x  t
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)0 \  T) h1 g, L+ A
" e+ m' q9 i) Y& P( _+ r0 u0 e/ p
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
4 v7 P# }, {0 J! o#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)5 S0 O, g- G3 |" I
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)6 ~/ j: _9 {0 [

6 ^+ O0 E+ ]2 x. D( m" _! [, N+ s+ D, _! H4 l7 f$ I

* \/ e( q6 C* ]6 a0 j- T0 ~4 Estatic void ad7606_irq_setup(ad7606 *ad) {
; o  A2 E: z$ n( P- r4 B" Q6 E        Hwi_Params hwiParams;
6 h, o8 W# W, F3 V$ _        Hwi_Handle myHwi;# v& T+ m/ o! H9 Y6 S# d9 B- t
        Error_Block eb;+ h3 ^; n. P# D

! x- z0 z& ~& M+ y        Error_init(&eb);
$ @! f  x2 g0 o' @. ~        Hwi_Params_init(&hwiParams);
5 w1 K3 i+ ^9 @6 w1 c        hwiParams.arg = (unsigned int)ad;
* y, ]1 w0 W$ {( f) u) [7 U; A# d        hwiParams.enableInt = FALSE;
% }) U5 L9 r; b( b9 ]$ K( d, I        hwiParams.eventId = SYS_INT_GPIO_B5INT;
4 Z) F% B  C! K; x. `4 M        hwiParams.priority = 4;
& O. ^+ U& ~5 m' V, B! X        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数! o8 J9 t2 A7 q
        if (myHwi == NULL) + I" m4 A% G, ~  ]6 U9 t& L2 W4 X
        LOG_FATAL("failed to create hwi");& q7 l) K" G6 C: j9 K/ g

5 l5 {! k( U& g3 b! K# B        /* enable both interrupts */; ?" m1 g2 I4 c, D: r4 Y$ R% N: {
        Hwi_enableInterrupt(ad->irq_event);
$ Z& m# K1 e* W. {) v- j}
% x. J/ a% W0 J+ g/ f
* w: k& r' Q9 i  d- {0 ^0 h
6 S& _. w5 Q1 S- P. ustatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {& o5 [6 j) ~* `7 a3 M# U$ N# I& B
        volatile unsigned int savePinMux = 0;
7 H6 e8 I4 b# S% ~" O- P/ q        //初始化5.11、5.9 、 5.5为GPIO口
# ]6 d% j& O* T/ A6 ^        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
3 c% a4 ^3 i  m4 N  h
6 o# S6 D4 {' X- @        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);# V+ e& ?# C5 W2 C# H) E+ H

& W" X0 {! ~5 c, ~0 k        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 O% y' y3 i. I5 p2 v
- a2 q1 h; x. R: l, ?; H, s. U
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
- s7 b. B6 x& f3 l. a9 ]. a! q
$ b" _/ S# C2 P  G}: U: h2 g. t+ F" d6 F0 P, R; I- c
( ~- [" F2 h5 z2 _  `7 }
/ H" Y5 z' ?  y+ o0 x# P6 R1 O
static void ad7606_gpio_setup(ad7606 *ad) {
2 k$ y: @1 s4 P5 c        /*Set the AD7606_PAR_BUSY to the input mode*/
  e5 a7 t& a. o4 L$ K. A5 Z8 I# j        //初始化5.11、5.9 、 5.5为中断口
( h# p0 ]& I$ R. t8 |        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);  _$ j! s: {0 g0 `: Q: j# C0 l
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);4 ^1 a4 Z3 N5 ?$ q3 x
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);$ R# F2 d' a' Z$ i% R
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
1 ?. g% N9 ~( W9 R) V* }3 N        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
  ]9 r" v; ^0 J3 U9 i        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
) M) _/ W$ [+ D$ a4 D2 t) K        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
, N* z9 z: q3 z. S# ~' z        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
% o4 c0 v* F& s) f0 A+ ]9 T& Z        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
+ J9 c: b+ q7 z2 `        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
- J! i! j: s6 ^. r1 {: {4 a* i! o        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);+ f  e& c5 e( ], G

" M4 m$ V: \( X2 G' I# ]        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
2 @1 f) ^' z% r8 C+ \7 L6 ?1 `        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
  _! m" N  ?2 x        Task_sleep(1000);
/ q8 c2 u6 O9 _+ D( ~        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
+ i+ P/ r& ^1 c( Q        Task_sleep(1000);  \' p0 E+ p' z3 n$ d8 k
3 G8 a' \+ l: H- Y3 v0 h
        /*Set the AD7606_PAR_CONVST to output mode*/; q5 b  q8 }" N8 I1 b8 M
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
, _7 l5 }2 w  \& D8 G        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);) M/ {7 G$ n. }, T# D5 s

& D4 q4 p$ l1 l! J8 C  N- n8 v        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);7 _9 @9 L) t- w$ |) r& h
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
) i" ]1 {5 c; ?# m6 [8 u" Z8 o! ?% m( z
}- l/ v7 N" F9 k7 I% w' z8 i0 n

9 v3 L" L- `! \8 k5 @
7 G- n: C& M( l$ Y9 K& Rstatic void ad7606_busy_hwi(UArg ad_addr) {$ m* B8 |; b- Y! C

# v2 e& N) R$ i2 e' y$ v! Y
3 P8 D" N% s+ ?        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/3 M' [( c9 q' Z& @+ d
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。" _0 V; T; b. C" A9 r5 s1 M" e

, V! u+ m) c5 k9 m6 v" A2 d        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)" N, R( R& X4 `# L: R- }) `# l9 ^
        {
$ p. k" e9 M! h+ m, C                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。1 R% s6 Q- n- O3 i3 m$ T$ r. j- l
                cs_addr = SOC_EMIFA_CS5_ADDR ;
# B( x( j! K# I0 c$ G+ L3 z                internal = 0 ;% t) {2 o& L2 l: B$ o/ ~- A
                int_flag[0] = 1 ;
5 l9 W2 c) `8 Q  Z+ `7 C        }
& p, R2 E" |( H0 ~0 c% s        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
9 |' d9 P6 B/ ]        {. r$ X  o, u$ t' M; A! I
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
( p+ v4 h2 w$ y* a2 M0 m7 H                cs_addr = SOC_EMIFA_CS4_ADDR ;# A: w) n+ P8 X9 L
                internal = 6 ;
4 k( B; k2 A; k  v" k                int_flag[1] = 1 ;& i( B( k/ _: J* D2 d& \2 s
        }* C- w! Q1 {& S) s
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)2 T( A5 {  p4 E& _& e! d# @
        {
8 g, ~( `# [, L. |0 w                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。
, O9 W; V' {4 i- C. n                cs_addr = SOC_EMIFA_CS2_ADDR ;
) b: ]# F3 B/ ]$ ]2 e                internal = 12 ;2 \1 d1 c: V4 e3 U! k) |
                int_flag[2] = 1 ;
0 S7 w& p$ ]4 F' k        }
9 Z9 R. F2 F1 p) C! V6 r+ P  & L* Q! e1 ?  y" k6 ^6 ^
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);' ^) q! B# T: k3 T4 W
       3 o2 g* d; m7 ^; V1 k
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
+ Q6 C: y, G- c$ v: o}
' D7 i1 ^( ]3 r) D0 q4 H6 L+ r+ U  [* p) H* K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图9 c5 f' T' f: C" y! Q( |
. h9 N7 a. H4 h" J" y

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-4 03:13 , Processed in 0.042318 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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