sysbios hwi 问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
% z, S: D" }0 A$ G6 a* Y% b#define AD7606_PAR_BUSY_GPIO_BANK        5
- r7 e3 A7 X! i2 A#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT: j. T& V# R; L; c
% r. b) s4 \9 i  J$ D, u
#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
, F/ q2 H  V, M/ {$ }#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9
) N' }- P2 w- h# g0 g( Q( G. a9 o#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5
4 ~( V: r8 a4 V7 M#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4): E+ M" W9 G7 z8 _

1 \5 x' u& B3 ]$ @+ U4 L0 b#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)2 U. ]- ?9 b  n2 T$ I: C
#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)2 q5 l+ R) Q* p- @2 p$ B
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)
2 Z! @7 x, S5 }+ E4 @/ r& F5 w) @  b8 \1 S7 o. d
7 }; X% s; _( k1 J- v$ A

: Q5 p; Z) h3 c) Sstatic void ad7606_irq_setup(ad7606 *ad) {& L  a0 C& o; H) p+ Z) O4 M5 y
        Hwi_Params hwiParams;
- v5 K" g, {* u/ T) @7 C2 Y% B        Hwi_Handle myHwi;
& i; R4 ^* V7 P/ H! n  d        Error_Block eb;
/ E/ `* u. c$ F  h; m5 d* D! G
0 Z6 @4 _  [/ ?3 k* |# a6 ?; R+ O. ^, r! c        Error_init(&eb);' n. Z6 W! \* b7 Q
        Hwi_Params_init(&hwiParams);
$ c6 P4 y. R7 k2 g' f# F        hwiParams.arg = (unsigned int)ad;( \! E( y# O0 R. k$ K
        hwiParams.enableInt = FALSE;
$ T( S3 v. n( y! ?6 h; q        hwiParams.eventId = SYS_INT_GPIO_B5INT;0 w; k" l  o/ S- k+ s( X' F6 C
        hwiParams.priority = 4;5 E" ?9 y4 s  n1 R9 Y1 Y
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数" ]* G9 ^0 L: ?
        if (myHwi == NULL)
7 k2 s; M' v# q' L) F* L7 P        LOG_FATAL("failed to create hwi");
* O, j0 B; _% c5 c( R0 d) }. m7 ~" X8 e: i" x* o  N4 h
        /* enable both interrupts */
! i2 m# j+ w1 ~        Hwi_enableInterrupt(ad->irq_event);
* i; b# f) W& V4 k0 P}
7 D5 N0 w$ N8 ^+ S7 }, j. M/ d2 K
1 B* `* V4 y# Y5 M# L6 Z9 m6 G
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {
( a+ j8 O4 U  K; F$ g7 ~+ f, X        volatile unsigned int savePinMux = 0;! g3 @" I+ H* g4 \
        //初始化5.11、5.9 、 5.5为GPIO口4 t6 ?" K% A! d; t# o% ~  m% H
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
, y# |8 J) B6 o7 H
6 n- H, x! Y  R6 N        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);2 j9 G2 g( X, j# M/ O( ?3 X

/ ]! J( O6 K7 i9 s        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 Z9 S" r2 f8 U3 B

$ H5 c# y. E' m0 Y; _        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);' A9 R  L4 r  q! G* O$ n' q) n
, l- E! s( M- }# @
}; B) J4 v; i7 M

  Q3 U/ z4 H  ]3 j% B( A
; `' `& v  W' l2 ostatic void ad7606_gpio_setup(ad7606 *ad) {
9 `8 ]% P$ S3 i4 w        /*Set the AD7606_PAR_BUSY to the input mode*/
- M) `7 G4 L+ Y/ n4 n9 L# w* \        //初始化5.11、5.9 、 5.5为中断口
) d( T! T! u9 q5 T$ b        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);7 x: {0 Y2 ?9 [4 {) B+ T9 N
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
* A+ U8 b( c2 w" i9 C& U0 s) t        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);) W( N! t( s. b
        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);
  n) R0 b" @) `$ J. d) p        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
$ u( E  e% D, ?; f* u        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);
& g  B; g9 w7 Y, O        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);) g7 E$ ~4 v4 b( ]- ~
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
- ^$ i! ^# T. j1 G1 i8 b' {  ]" o$ A        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);
) b9 E0 H. ~3 R7 N8 V        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/, E4 {4 d* Z% z+ ^9 e
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);1 i$ `3 F5 N7 v" y) j2 t4 U  m/ R0 Y
( R7 b* o% X  U; B
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);
$ m% x. D) Y( L" |- G        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);4 K4 u: ^) d" T2 g6 D# J* s  B9 d6 x
        Task_sleep(1000);
, ?. [/ [. n0 z8 F        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);
: q9 f  \  C8 [        Task_sleep(1000);  F! X7 J. N  U% t9 S, }

9 @' O! t" B* W        /*Set the AD7606_PAR_CONVST to output mode*/
# w" n% C9 o0 E6 ^1 P, ?        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);9 e7 [, O7 Z, }6 u% T, P8 n
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
0 I1 J6 T- p" j* P8 \" L# c
6 D% U+ _2 i! A2 h. y7 S9 u        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
, n3 o' I5 H: N2 n/ [+ `5 n        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);
' c* b4 r) r: l. J+ Y# o" ]
7 q/ C$ ?/ O- ?8 j& K: T0 l$ n}- a. {5 B- N! M# v: C+ j* i
! t; E' j( \+ ]
; F+ Y; W+ @7 t% u/ f: V$ b7 [
static void ad7606_busy_hwi(UArg ad_addr) {
3 A' A, J( c* o! Y: j* ?5 R" e; n& b# k5 O& j$ F6 F

, ^' r; T2 @0 k$ v2 p% G4 Y# E$ K        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
7 B6 ?  D0 H1 M9 g8 Y' [        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
2 R3 d9 V8 q) L: C' w$ T% k* I5 g2 f6 T2 n8 O" u
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)/ ?! R5 g; }( p% s
        {
; h, n( ~& F2 ~* o/ X0 s                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。
1 p- s5 r2 P5 e1 T4 O8 l                cs_addr = SOC_EMIFA_CS5_ADDR ;
* @% ~5 @& ~: [4 T' M                internal = 0 ;# ~2 g2 b0 t* o$ A/ z8 S
                int_flag[0] = 1 ;% H; c& ], ~0 [. z
        }0 L$ X8 X6 h3 J& B- A( `
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)3 x% |7 R" o  N! u6 u" _% b
        {, H8 [$ K2 _* N
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。. K) o3 K/ t7 w
                cs_addr = SOC_EMIFA_CS4_ADDR ;/ t. U0 b% m2 g- W( ^) a5 V: \
                internal = 6 ;( ]+ Q2 S+ l. {
                int_flag[1] = 1 ;: J5 W0 D" Q7 u. {5 z" M
        }7 \# c  c/ l5 c) b. X* R
        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND): k% Z% ^  @: \' s1 N) J
        {! t8 n  P( }+ E) w
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。. u0 ^* V9 Z8 y
                cs_addr = SOC_EMIFA_CS2_ADDR ;$ M# ?8 m0 G+ p+ o( W- g/ f2 Z
                internal = 12 ;
& [7 ?- Y: u6 Y5 Y% q                int_flag[2] = 1 ;
" u7 N2 {) ?( s- g        }
9 X2 `7 V; [* a4 x* o) P  
: @/ m. \) u) ~* \& r  ~1 [        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);) b2 ?# ~6 g8 i  M
       ( C' O6 o3 f5 {+ b. L2 B0 d
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);0 i1 A; T2 [- Q
}$ _1 o: @9 C2 K& g1 j8 ~

- N2 I1 M! f* n
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图
) u3 J% n, Y% o$ F. ]4 y6 d8 p1 _/ s  Q* n' `6 K, s

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-1-31 07:55 , Processed in 0.044039 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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