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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
" ?8 Z0 G9 {4 L( L. j" J' a. t#define AD7606_PAR_BUSY_GPIO_BANK        5. ^" y! S4 `+ _  r% N- `+ Z
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
4 c  S6 `1 a  o) k+ Q0 o8 k
4 I& X% V1 A. \#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11( w$ o: [1 r) N% o
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
" x; k, J  b& `0 d0 `8 |#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
! Y$ i' d5 u7 P% D2 U; s. ^$ \: M#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
* G" V0 V. x3 I" H1 L; ~5 X
8 q, A4 F% O/ F# l- b1 p1 h#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
2 R: N  A; b0 u3 [#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)) M9 `8 d- y1 p+ o2 y
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)  F" @% ^3 W0 Q: [3 Y8 m) H; T
$ A' z5 K; i2 F9 [
, W1 H, j0 y; `
9 `5 I3 `$ a# R8 l0 j
static void ad7606_irq_setup(ad7606 *ad) {
( h, K% |: s3 C, n. h        Hwi_Params hwiParams;4 {. G: @* o# y! C1 Q  E, s, @
        Hwi_Handle myHwi;
( M/ c7 t% G, v. M8 E* ^2 [        Error_Block eb;
' c7 }2 p& O8 p, F  B0 k/ s
/ {# j4 E0 Z; x" B8 Y) w        Error_init(&eb);
: r  O7 e8 h; C! V9 [        Hwi_Params_init(&hwiParams);
4 m5 ~2 x! ], B$ G1 l        hwiParams.arg = (unsigned int)ad;
) u' ~7 F# F* e1 O! N        hwiParams.enableInt = FALSE;7 k. k1 @% i# G' w! H
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
) r0 i6 b$ y/ A        hwiParams.priority = 4;5 h6 j- q, _/ b; r  g/ L1 t+ m
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数9 K: K( w" G  O6 b+ l. q, ?
        if (myHwi == NULL) : `. z# w. b! I* Q* ]. I: V
        LOG_FATAL("failed to create hwi");8 Q- v+ }/ `* A7 [$ p/ p

0 s- U" L, v$ s2 y9 O+ E        /* enable both interrupts */
  g( K$ O! T# C" U6 k7 x' Z        Hwi_enableInterrupt(ad->irq_event);# o+ Y/ V; n7 D3 U" e- x
}
! r3 a6 _0 ~3 g5 S' U6 J$ i6 L, R3 O* c/ W( i4 {6 Y6 d

' T: A+ _# o7 \* ^% V$ ^static void ad7606_gpio_pinmux_setup(ad7606 *ad) {3 H: W% s$ [1 a) I3 A4 V, k) \
        volatile unsigned int savePinMux = 0;5 t+ e+ p4 h! k2 b  ^# D
        //初始化5.11、5.9 、 5.5为GPIO口
& o* r9 q: {7 x" B, m. U        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
( r0 [! v8 W- Z; E
* o$ ^7 b% ]6 [  q7 H- L9 K        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);! P' D1 v2 _1 J  p2 |2 f

- d  g7 h$ h; k/ E$ f        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));
/ ]! {$ M! ]% z1 H
! d, U5 f, H% S1 S        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
+ {; [6 z4 B. O+ `  M2 ^
- g% v6 G8 i( P2 j' o* \' [7 n6 T5 @5 r}8 P! Y) p  d9 r1 `8 G) B
0 f3 v$ f9 ^7 T% i+ w
* |3 B3 a$ u+ h) @/ x5 d
static void ad7606_gpio_setup(ad7606 *ad) {
+ K+ D1 c# y1 V( i        /*Set the AD7606_PAR_BUSY to the input mode*/% A; i. K$ J- k8 U, X2 Z3 o
        //初始化5.11、5.9 、 5.5为中断口* m) @! h. Z6 r0 T. h' ^
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);- ]2 \* v! U7 Z, d0 ]
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
) x9 S( \, K/ B7 m1 K        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);( ?3 n) ~% ^: C
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);1 U. V* e$ S* r* w3 U* P4 f
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/0 ]) h# ^/ ]. S+ j" K
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
* E" m( a0 D% j        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);
& B! a: D0 R- {; K' M3 g. L- d# _6 P        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);3 r( `+ V+ g4 U1 z. f' s4 O
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);  d' h* ]- H1 S2 Q, X$ R
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
6 a; A3 ]7 n* r. r4 n' b) j! ^3 b7 L. k        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
1 Y" p4 g6 p/ p/ N2 a8 p4 W) P" v) q% n& d3 ^2 B
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);! c4 T6 }5 D+ C! V
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);% m# j& ^3 f, s  I
        Task_sleep(1000);
; W# r4 }1 |( T0 B% p        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
7 S6 F' e7 f, ~4 t        Task_sleep(1000);$ O+ `5 X8 X' y% P8 z  g# d$ d1 ?
5 ?7 m: \0 @, m
        /*Set the AD7606_PAR_CONVST to output mode*/
* {$ _, V$ W+ c& Y) L        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
7 j8 s4 L9 n, i, _" l. e- i        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
) d& D1 u4 o3 i) L) [; F- B
" W, m/ u& C, r7 U3 ~8 K% z6 K        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
* l3 p: B; T* f6 Q% H3 ?- N        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
8 d" M2 Q4 X' K
7 _/ f' Z* [" x6 V, K}
2 K, y" W5 |7 |: t+ [/ g" T/ k
9 h8 i: u4 [9 D# d" J% }
& m! J6 Y) j6 @: l" j0 Q6 y: e) n. Rstatic void ad7606_busy_hwi(UArg ad_addr) {
9 T; d0 b1 K8 ~, Z. h# C% R, X
) y7 L6 |. [6 {0 D6 S. }& ~/ ?" W" m; N; H* s% O5 h
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/' i5 G) V1 Z% [- o! O! `$ O6 y
        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。. j6 A8 Q2 `3 j( a+ K3 ^

1 {: D; R) [) t1 F        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)3 C9 ]$ h5 V7 p* U( |- J+ t
        {
* j& f6 v- E' b. a6 P                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
6 S! ~/ K) J- y: ~* E( g( ~                cs_addr = SOC_EMIFA_CS5_ADDR ;# I# `3 p  e6 m! A
                internal = 0 ;2 {" y( u- X2 n  S
                int_flag[0] = 1 ;
2 j- c1 _6 |( i; s        }
$ P( F' X& z  K, H# N        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)' e9 M7 Y; ^% e
        {
3 o3 M$ F6 J, ]6 N                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
' z5 s1 D5 O3 }* m( G                cs_addr = SOC_EMIFA_CS4_ADDR ;. f- h; H& J- B& O1 D& _
                internal = 6 ;
4 e. B, t7 ]( C                int_flag[1] = 1 ;" ~- c" a) ?" |+ @/ |5 a
        }
$ k) L8 i. h& K! _' U        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)) b- U. H- u6 Q! r0 i
        {
$ z  T  T: C9 \. a: }# a9 T                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。& g. D; w" @0 r; l! p3 T$ S
                cs_addr = SOC_EMIFA_CS2_ADDR ;/ }9 b5 R6 e" w- Z$ o4 ]( z
                internal = 12 ;# O9 |. C3 y9 L- I- Q/ R; |! l& Q
                int_flag[2] = 1 ;  ~& J6 F0 y* h8 S' F8 U8 f  j/ m4 R
        }
6 e" g: t5 H/ n8 o6 ^  
" L% u5 w% A- K2 s        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
2 {/ f4 w9 A1 e) a& \' _       . d: V1 U9 p4 ~9 \% R0 l2 A* w
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);# v/ C0 z4 T/ d% k$ ^* A, O, X
}) z( T& i/ W. ^, a- a

7 m; I2 o, Z" U5 E) H
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图9 R7 J4 `9 A4 V9 B% {1 b
8 U. W7 F1 E6 U" s) p+ A

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-16 02:47 , Processed in 0.036572 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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