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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:1 S8 o& P1 D" n6 _
#define AD7606_PAR_BUSY_GPIO_BANK        5% K9 q" i4 L2 G* |- ?: k
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
0 o) B* T3 c) x2 I/ S/ j+ C
8 q. D* x& f5 n9 A$ j& R- z1 T#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
0 {+ N' E$ `2 E5 A: R9 y1 w#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9) B1 J# u5 @( z/ L
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5% m' ?* u7 {$ J8 @# t8 i( V
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)/ i% A1 R% Y) A! Y
) T8 x; v* X* K9 K, d/ @' f# L
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
& D4 k) h! y" |5 s+ x6 L' l#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
! F- |# f$ c3 H3 D4 P* g#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
* ^( w/ N( c( E2 l) ?) L4 y! I4 v- k! A

! L4 i" ^& E2 J1 [6 u' n8 `5 Q, r- F! P" I
static void ad7606_irq_setup(ad7606 *ad) {
( b' G' }5 \0 z" r7 r% _) M( J* d        Hwi_Params hwiParams;$ x6 X6 ?7 L# d. {( _' L1 [' N
        Hwi_Handle myHwi;8 x7 j3 r2 v# v
        Error_Block eb;
: f6 X; t6 L' |" U2 t- h
' t  A: B, D: h1 p+ G        Error_init(&eb);$ E; I% @/ x2 H# w6 ]" d5 y3 L1 J
        Hwi_Params_init(&hwiParams);
% o' G+ T+ D5 a9 @        hwiParams.arg = (unsigned int)ad;
8 P: I  v" J- v        hwiParams.enableInt = FALSE;7 d% k& p  z; I' r- s4 E
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
6 L: U  Q2 \7 T# t1 d        hwiParams.priority = 4;5 L+ t) S1 E4 u# s, y
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
6 M5 V. ~) T, l        if (myHwi == NULL) 8 f5 t6 {' J) b+ [
        LOG_FATAL("failed to create hwi");/ O  a: K: i  X
, i" N8 W0 Q- [
        /* enable both interrupts */" u3 d1 M6 J5 r, O1 A. E7 N9 m
        Hwi_enableInterrupt(ad->irq_event);
% j+ K$ G/ y* s: P}; `0 m6 b8 R# f1 v

; D# ?6 F0 n$ K( _5 g, ~; }4 {
/ r3 y" B5 ?7 o) o: dstatic void ad7606_gpio_pinmux_setup(ad7606 *ad) {/ h* V4 L/ [( y5 w# G
        volatile unsigned int savePinMux = 0;
  ?. I6 _' N( q( B8 `& I        //初始化5.11、5.9 、 5.5为GPIO口
  R& Z0 S9 c  l9 {' ^9 }2 e        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
/ |5 J* f- |4 {- d% M$ E* O9 T
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
- z5 @2 F5 g0 Z+ J) d- p6 Q/ K' {- M: a# R- q* }( 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));
4 p8 [) [6 S+ l. d( R: g9 c* o% v: X" O8 ~, p/ x% `
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
- [) p* c7 E* i! S" ]+ U
% H4 E! U) d- w( L0 Q$ t3 S4 S: X0 P}4 {( I, F" x- p
5 N$ T3 ~; `& c  `
3 ]# Y2 n0 C* G$ \0 @
static void ad7606_gpio_setup(ad7606 *ad) {% c+ O' F" ]* C
        /*Set the AD7606_PAR_BUSY to the input mode*/# h. D9 W6 s* a+ v$ v" `6 Z
        //初始化5.11、5.9 、 5.5为中断口
: i! m2 q! W1 V6 K( F$ Y/ r4 v! c        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);
* b0 s3 @1 k! y) _6 O! g* Y        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);6 B7 Z) Z. y2 x4 R) `& d
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);) i  F( t" ?; A0 W3 `9 f' K
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
/ l1 ~2 J3 h! X* @4 W5 A        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/' x7 y4 B8 H& D" y/ }! y* B
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
) k7 F' J" m+ x" {        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);! ?/ _# |. `% B* u5 G; c. R$ {+ c
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);3 v4 [* K6 Q7 Z  M) i# ^
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
. M) a4 Q. O$ E  X$ j1 m. d* O        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/
, L) i, W; R( u& h6 P* @( y6 x        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);; A) W5 D& k/ \2 R: W3 G& |
# l: P" I2 z) z- z2 q9 I* f" N
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);# M0 \1 P) o2 ~2 e- o- U
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);
9 ~% s) I; z, _" E        Task_sleep(1000);
5 X' K' Q- F- ~        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);& P$ N& x: Q9 H' f. ]. Z
        Task_sleep(1000);
/ I. H1 y! Q7 c& F% Y6 c
+ j2 s, m5 f/ ~# D        /*Set the AD7606_PAR_CONVST to output mode*/
( i) ^4 l2 Y. a+ [& e" B        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);9 ~0 r' R2 j1 V% F1 ]+ }" y( l6 a( r
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);# _! f& {6 P) p9 n5 c% w
* ?/ [$ P1 l* Y9 L1 y
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
1 P5 R( @6 [- b5 J        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);& J9 P, i0 T4 p' `$ ^
) `6 s; D- E( M) d& m5 g2 Q5 [* X
}' L/ \8 b3 t& Z4 Y# f) I

' t- n( Y9 f8 _6 V' h+ ^. ]8 L- x! b! ^. L7 Q$ P" c+ C
static void ad7606_busy_hwi(UArg ad_addr) {
2 R! R0 @% ~2 K. _% N. O6 \7 t) P; I7 O& ^

4 p  I' `' @# ^        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
; p' j7 M2 D, J' U' z' _% g        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
# Q) B) J  G- N# q0 U. R  m- q% x: h7 X5 x
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND): I: s" {% [! E: i$ S
        {# m0 P% {8 O2 j# ~5 d
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
5 w3 y2 l: k0 h9 ?) j3 Z                cs_addr = SOC_EMIFA_CS5_ADDR ;
. n/ C4 `% V3 m& H) e" a  d                internal = 0 ;5 T+ s' f3 q: w  q
                int_flag[0] = 1 ;
$ |5 J+ V  Q, ?! Q0 p" M        }
5 h/ N, Z* w/ O. C& |2 Q        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)1 i/ P+ j+ t9 P! c
        {$ o6 N0 C( K) p# T
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
9 E1 B/ @) ^$ }( Z! |( L) e                cs_addr = SOC_EMIFA_CS4_ADDR ;
7 q# p( A; D' N( P                internal = 6 ;
4 T5 q( D) p6 k! w                int_flag[1] = 1 ;
0 t/ N/ V5 _5 t- `6 X9 h0 p        }
$ I  Q( s7 i9 p/ M        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND)- F- J& s$ v8 w+ u. d# z1 }; |
        {
$ K# D( C; p/ N0 g                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。, v0 Y2 p# X5 y: f! h% ~& b
                cs_addr = SOC_EMIFA_CS2_ADDR ;
- ?/ O, E" _- }. @! Z8 R                internal = 12 ;
7 @' e$ @4 r- ~                int_flag[2] = 1 ;# M  Z$ e, H# [- n
        }
1 l" E3 C" ~, V4 w6 j5 B+ c  # n/ x% S0 p2 q% `; o
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);9 m$ X! e" j' Y& ?9 D" Z- c
      
% ?9 D/ `$ Z" d9 p" k& g. Y6 ^" P. A        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
: Z. A! p, N! A}
& [, a+ r; }* S& m+ H, ^2 a- G. C
& F9 Y; ?6 B! u( h" @9 ~; X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图
2 a2 c4 T- _4 P8 p4 _" u" C- j! |! y8 V, e' o

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-16 02:10 , Processed in 0.055300 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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