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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
0 ~  N4 G" S+ n7 _! ~: V" I#define AD7606_PAR_BUSY_GPIO_BANK        5+ c# p0 k! u" E
#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT9 R: c3 b! Y& q- W, X( B) Y

1 I$ W; b8 x1 `+ Y) k3 U#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.118 J4 f- g. a. }. m
#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9; q0 \; B5 d, D* R, i8 [
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.5! R3 ~  {+ M* D! Z. E6 N9 y! q( Y4 }. B
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
7 s; E: t5 M* V- ?, A3 W. o' V2 L+ r5 {8 `7 `! N1 Y# _
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
2 M5 q% c7 ?  @#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)
4 Z9 M6 h2 y+ a6 t- j#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)' i" N2 L# ~) J" V  U% }
0 u) |3 R& {6 o1 q! l2 X+ g: k2 W
" f* Y- u7 }! o8 ^

) h$ G) {% |; _; S' d6 A- M! E3 Vstatic void ad7606_irq_setup(ad7606 *ad) {. c8 Q2 H) {. |# h4 H2 J
        Hwi_Params hwiParams;4 G& L9 h" `5 `# v! c
        Hwi_Handle myHwi;5 T) F& b9 C' F" G0 E9 @( j
        Error_Block eb;
; y# K, x( ?8 E8 X$ V  E6 [; r) A8 F+ O+ n/ T
        Error_init(&eb);
. f: a: C" d  M9 F2 J4 g2 j# d        Hwi_Params_init(&hwiParams);
" {% ]+ F+ @7 D  ?4 w        hwiParams.arg = (unsigned int)ad;
) N7 n8 [2 [6 h1 y3 ?4 f9 r        hwiParams.enableInt = FALSE;4 _- a) P% A8 ^( U" Q: G. t
        hwiParams.eventId = SYS_INT_GPIO_B5INT;
; L+ ]4 @2 B' E$ t2 ?% V        hwiParams.priority = 4;6 E* x1 s& A8 t! i
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数
- Q! W. G' }3 z8 A" t        if (myHwi == NULL)
: i. E7 K* m1 F  w8 k9 q8 U2 w/ }        LOG_FATAL("failed to create hwi");
9 s% B- L0 A7 W; z, {
+ e; x4 s2 r( ]        /* enable both interrupts */
8 ~5 P: J0 K: D) w        Hwi_enableInterrupt(ad->irq_event);
. j0 F8 h' d+ q}9 n' m, Y! @& ^& U! F+ s& ?9 J

% s2 _6 a6 b. a+ O) J8 u$ _$ l+ y( T) r4 Q' b; s% H3 B! c
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {4 y, l' Z9 S9 V; ?6 z% V! P
        volatile unsigned int savePinMux = 0;
, }* o- k3 p: v# o) a" B( h: `        //初始化5.11、5.9 、 5.5为GPIO口; f9 L/ v' P' o3 L0 J
        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));! W6 Y* T4 h5 F1 L
' R3 C; ^* V6 g3 ^
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
! a& R2 H) W# @
; u6 }2 I! \/ 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));
" }( s4 i" [- Y0 t! }  P
/ H; h$ D) ^  ?; O# l        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
2 D8 Y9 o% E2 ?. e( a& d9 C6 A; ?( Z) h
}/ a' N# H3 y: S
6 l7 P# R) q' m
' _  [' p2 K" _) ~" N* x
static void ad7606_gpio_setup(ad7606 *ad) {
' v% s5 y6 K0 V        /*Set the AD7606_PAR_BUSY to the input mode*/
6 I# m4 N  C' V. U        //初始化5.11、5.9 、 5.5为中断口1 a/ j' B& m  t: s* C- Q5 k
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);; I+ p  `# J2 U* o. j  g7 D. A# E) e6 q
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
5 H$ }; ~, U: j- v        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
( d" \" |3 t. G+ c. ^( U, [" W        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);+ r! i4 K5 i7 p0 T5 \( ]. ~9 C
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/5 Q) a& ?) y7 K1 U; }
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);& |0 a( N7 E& e9 y
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);; C0 U4 u% a7 T
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);
7 ]& L/ z% t- X; O        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);2 q9 x$ h# r( i* ?* x
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/; E* B9 O; `2 H( o# i, |- i  S
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);+ Y" b" z: F* o

$ c3 ?- x4 J( h9 y        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);) `  }! P) g& J) v
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);8 f2 r, L7 ]+ N
        Task_sleep(1000);0 C  v* V) u4 g2 Z, Z
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);" y8 N9 K; q/ ?  n
        Task_sleep(1000);
  u/ d6 G; p/ i% a* c
5 q6 Q% {% w( o        /*Set the AD7606_PAR_CONVST to output mode*/
9 |3 X# [- w. Z5 F! ~        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
9 v+ g$ O) {0 Y+ Z! z  E0 x2 c        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
5 k+ Y' r7 x6 w% T9 |7 Y0 M% m6 C! o8 Q! Q& Z' \
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);2 j+ K* m1 K& s
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);7 B2 d7 L# _: v/ q/ A
4 G7 i! G) b7 k: o4 l( a, i8 Z
}
7 G# w( [5 E1 o* Z% ~
. g2 w# @- M! k0 ~# \# x$ M
6 M+ Z! ^+ C/ lstatic void ad7606_busy_hwi(UArg ad_addr) {* w3 H7 \: Q, S. i8 A) a% k
+ B9 H  d6 [9 K
8 _9 E; F* I+ M' V% P/ v0 n. S$ C& \
        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
% x  l: j: u+ N  _        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
" ]; p# F) G4 \7 V6 j; p$ X8 s" C* b
6 `: _% @' p0 O- w, U1 O4 I        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)
! D; F; `( g: g0 G' t2 u        {! p' \+ B+ z3 t2 M6 z
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。" {, a# R3 U8 x, u& B9 R2 z
                cs_addr = SOC_EMIFA_CS5_ADDR ;$ ^/ h5 z5 L( l/ j
                internal = 0 ;4 q9 w+ Z7 U6 \/ U6 V! ^/ j# S
                int_flag[0] = 1 ;
7 M$ q, P8 R$ e" u$ z        }
* M, i4 j: D3 O  Z0 t% Z0 o        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)2 ]5 u- P' |! B* }- |
        {# V  D% e! ]8 W0 t$ x- a/ C' Z+ Z
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
; {5 i1 {! M+ u; T                cs_addr = SOC_EMIFA_CS4_ADDR ;
$ o, |, X: E" R' k0 X6 C* Q                internal = 6 ;: u# X* a" f/ p! u, X0 Q$ b: I
                int_flag[1] = 1 ;* Q1 i8 m4 Y5 g$ d2 i( V
        }
' ]3 f" ]% l9 k* [        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND): w  v2 ^( }5 |7 S8 B
        {" {, g- U# X, r8 X, I! P
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。; n$ W( i) G0 t
                cs_addr = SOC_EMIFA_CS2_ADDR ;
, S0 d; j9 r9 G; E                internal = 12 ;
0 z/ r3 ^1 n- o- ~                int_flag[2] = 1 ;
8 p2 I0 O5 i; @        }
& ]3 i$ x2 U) h  * p; t) n+ S4 K, y' b3 X
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
( J$ r2 U7 G3 E1 X  f3 j) q      
) p" F" ~. K7 f7 d  u) Z5 ^6 R        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
. N. j& ?7 P7 ^2 H}
# E; p. H, U# {7 A& p7 l5 F" `! U$ U* K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图$ H7 n' Y/ d- R5 b! i

5 p5 r+ [! f# r4 ]/ X5 P8 R

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-16 18:01 , Processed in 0.040118 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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