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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:, Z4 X4 r8 C/ }3 d5 y% |3 Z2 a
#define AD7606_PAR_BUSY_GPIO_BANK        5
- g; t' w: o- i6 U#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
9 X  l8 A) U/ `) r% A. I1 K# H6 m0 r- V* p1 y' g8 g; H
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
( S' y0 N" S( A5 G/ ^4 M$ @#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
0 \& |# P- n  ^2 |' B7 J# ~#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
% j9 v* {7 a# _8 }! ^$ `6 W4 A5 j' ^#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4): D; P) `* f* b2 n3 `
9 k7 {$ g( \4 m. Q$ Q
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
  t, ^5 S1 h/ D+ [#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
* d- I7 o& D, G8 v9 K" l4 n( |0 s3 @#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
1 b5 P9 _/ D$ M: H  g* h
. U- H: z' P2 ]) |. {$ W) m9 e, w# k" U2 o2 O

- y- X8 k0 e! I. vstatic void ad7606_irq_setup(ad7606 *ad) {) V9 w! j0 }5 d0 p/ E$ R* q
        Hwi_Params hwiParams;
5 G7 K8 U, Q0 x2 m2 l3 }/ A& D        Hwi_Handle myHwi;, s" P) z+ C) t/ p  r, R
        Error_Block eb;
7 r$ {( D# r) A( G% r
0 `  m4 Z. V6 X9 T5 k% j$ U& i        Error_init(&eb);6 g6 _+ k+ o# ]4 c# [+ L
        Hwi_Params_init(&hwiParams);( n& U( y3 y: p  R
        hwiParams.arg = (unsigned int)ad;
: d) A$ x- B' v2 y3 h        hwiParams.enableInt = FALSE;
8 b% |# T/ g; ~2 J! P6 z6 s        hwiParams.eventId = SYS_INT_GPIO_B5INT;) y1 x  U; u$ _; }0 P
        hwiParams.priority = 4;
+ o( }' M! I  _' w1 s2 V9 _        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
# ~9 I* k' J- e6 W& t        if (myHwi == NULL)
" L+ U0 `; F6 n$ q* ^' S        LOG_FATAL("failed to create hwi");
3 Q" s- v1 }- X7 u9 _+ |& s2 O% f* h! e9 e  |4 C) j
        /* enable both interrupts */6 f2 ]8 w6 h, B$ t* f1 B. i
        Hwi_enableInterrupt(ad->irq_event);
& u* a. B" g3 ~. I}' x6 l1 m+ b- [  m7 ?
. ?( S+ A3 h! a6 n6 ]0 q4 ?& p0 M
0 O9 J* T& j) u+ p
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {
& B4 a, v0 Q" |# n2 F6 x! p7 `( c        volatile unsigned int savePinMux = 0;& ^3 O4 U) w: F7 Q- X& f
        //初始化5.11、5.9 、 5.5为GPIO口
, {# Y; k0 B: k; R4 T3 z, }        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));: R( q% D. K! Q, n" u

' {! M. z/ w2 |: {% p- p# G: F0 f        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);7 B& m: R! r) H! S  o- S
9 r2 Y0 R" o' |. ~% w- O
        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));1 V4 V8 R2 Z% n/ Y/ E3 V/ p

6 |+ o, C% i0 d9 ~        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);" q# q1 K+ U( ~9 `

' O- J9 ?( E; \1 g}$ Z" S/ x+ M/ s* }2 C

' N- m5 O- R# i0 W! y
) N5 \. H) x  D/ }- ?! cstatic void ad7606_gpio_setup(ad7606 *ad) {
5 D0 u$ Q4 C' C+ h        /*Set the AD7606_PAR_BUSY to the input mode*/
' M: M, i! U$ u        //初始化5.11、5.9 、 5.5为中断口+ Z7 W) F3 f3 a4 a
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
* @8 @% {: x' a- D# S& C2 e        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);# S' V7 t. b4 C* }/ {9 i7 F
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);, ]5 l7 r* A' N: \* M. X2 t
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);6 F; _* G& Z) n
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
: Y2 C- _6 \5 k6 j        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);! H6 H5 C; i9 L8 q! v# n+ K) m* Y( r
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
1 r% h* B; e! C( @! `9 y        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);4 |) b& E8 Y* J* L& x5 g5 f: t( {
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);  Z, O" G2 t( U& f2 }5 R
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/9 y8 t) \8 E' y, q
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);& k" E, r" r4 L0 W/ V' z
2 z9 t# F, v- w+ a& o
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
8 [: ^! @% \3 F; E        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);7 \! r! }: o3 e- r5 S
        Task_sleep(1000);
9 q2 b! ]- H0 S* L" u: z6 m/ y        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);$ p& d2 R# t/ g% o; G
        Task_sleep(1000);
; n9 g% _, D7 V( l! ~* C! c( h3 W* E" t3 \
        /*Set the AD7606_PAR_CONVST to output mode*/5 V0 E6 @# G/ q& [
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
2 r, S& [; I+ h  F1 d        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
" u+ H/ k5 s+ K4 D5 J' s, S' _1 b$ ]* ], U
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
, H& v+ i6 Z3 o) i        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);- s1 I0 y8 S9 d' M: L0 E

0 a2 ^  ~7 g" y$ d: f/ r}1 e) Y0 J5 |$ a8 B

/ |- P: _+ X  ^6 m* U0 ~4 H. R  m# R; b2 C9 t8 e+ i8 L4 r5 x
static void ad7606_busy_hwi(UArg ad_addr) {* V% L( H/ w4 j  Z+ I/ ~5 J+ ?9 D
& ]- K% i9 d5 i2 b& r
7 I, E% Z! P' p- ]: O
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/4 u% Z3 E8 b  _4 n
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
/ P- \5 D6 S! n0 `" J9 W6 `0 H: D6 L" |6 k: }1 Y/ M
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
; Z! J: D: O; p/ N; ?/ y* \        {
& s! H$ B  m1 S" P6 k  `: C                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。4 K3 S% v  a- [6 @
                cs_addr = SOC_EMIFA_CS5_ADDR ;- Y- P9 T& S: i# j
                internal = 0 ;  G3 Q. O4 k% j3 w9 z
                int_flag[0] = 1 ;3 @, _: A( V) ]2 L. }% x" C9 h
        }
) q0 f1 L: V: c/ }9 |        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)1 c; H4 x2 ?$ n& z, _8 K
        {
5 V# K  |& X) O) O) a* b, q                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。, B6 j4 e. y4 }5 z
                cs_addr = SOC_EMIFA_CS4_ADDR ;
. g7 U* h  N1 c4 G: r6 |( X, [                internal = 6 ;4 W5 |0 n& G% a. C
                int_flag[1] = 1 ;- l. ], r. h/ o; u$ B* M/ r4 N
        }+ J4 o+ S, D; r
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)
$ n' v( ~# a5 R; q        {6 @2 j- w9 B# C, I( c
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。# p4 T2 G7 s3 F! Q, ^  @0 ~
                cs_addr = SOC_EMIFA_CS2_ADDR ;1 B  V* ^% n' `1 |, \
                internal = 12 ;
" |- g. N$ @5 j" [. v( s; B, c+ C                int_flag[2] = 1 ;
2 a# W( b5 W. H# ^) l  q        }9 b' E0 c3 p0 W. D- e6 s4 p
  
/ w7 Z* _! U5 u% w4 ~8 a        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);! T1 U* }9 l5 G# D  e
      
0 o0 R4 X: J" o' U, ~/ H        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);+ J* {. u4 v  ~" M1 T& H
}0 f9 U; a) R' j* ^3 t  c

. T* ^9 l& \& d) I- s7 p1 z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图
9 I; H# v9 T# R8 E% P4 h. v- n# k& C  K: V& w4 f# s8 L

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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