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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

sysbios hwi 问题

[复制链接]

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
跳转到指定楼层
楼主
发表于 2016-8-31 16:23:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
您好。使用GPIO中断时,中断能进入ISR,但是不能区分具体的GPIO端口。程序如下:
' K) D5 i! q4 {  N1 F+ \#define AD7606_PAR_BUSY_GPIO_BANK        5
/ Q  k8 b# U9 z" P1 `#define AD7606_PAR_BUSY_GPIO_BANK_INT        SYS_INT_GPIO_B5INT
- a3 l+ W) {. f1 g& M* C
; d4 |6 z# P  d; z#define AD7606_PAR_BUSY_V1                        GPIO_TO_PIN(5, 11)   //BANK5的中断口5.11
# \0 W* y* a5 ]. l3 }5 ]#define AD7606_PAR_BUSY_V2                        GPIO_TO_PIN(5, 9)    //BANK5的中断口5.9" w& e( o/ Q* I8 v/ z
#define AD7606_PAR_BUSY_C                        GPIO_TO_PIN(5, 5)    //BANK5的中断口5.52 X# t- U6 }: R
#define AD7606_PAR_BUSY                                GPIO_TO_PIN(5, 4)
3 \. s% ]; l" F; T( L9 q* B" C1 X3 z9 b
#define AD7606_PAR_CONVST                        GPIO_TO_PIN(5, 1)
3 U2 F5 i8 d5 P/ t- M, {# p  j#define AD7606_PAR_RD                                GPIO_TO_PIN(5, 2)* j) @& h5 v) p( f1 r# Z5 n
#define AD7606_PAR_RESET                        GPIO_TO_PIN(5, 0)" ?) H# y- m  U6 u0 L
7 [7 C* u2 i: t( \4 }" o) S
' @5 O+ m- T7 P( K( R0 F1 i# U$ {

6 s) d5 P0 m: D1 kstatic void ad7606_irq_setup(ad7606 *ad) {
% B# X$ C; i9 h# P        Hwi_Params hwiParams;8 w! ~( Z3 _. t+ |2 ]4 G8 }
        Hwi_Handle myHwi;
5 L% d) {' I* D% ?# ~1 L6 L        Error_Block eb;
9 s* o0 B5 g4 g
3 W. p6 d6 n0 P& b- c        Error_init(&eb);. v! }0 |6 w  q( M3 w
        Hwi_Params_init(&hwiParams);
5 V; ~; i' g/ P  }( |2 l        hwiParams.arg = (unsigned int)ad;
; x4 p1 w% V, j6 J( e        hwiParams.enableInt = FALSE;
, c" v( i) B/ X        hwiParams.eventId = SYS_INT_GPIO_B5INT;. K9 k4 T/ Z/ |
        hwiParams.priority = 4;7 P3 P% ^  d/ n
        myHwi = Hwi_create(8, ad7606_busy_hwi, &hwiParams, &eb);       //注册BANK5中断处理函数; ]' i0 s7 ~, N; u) I
        if (myHwi == NULL)
: z3 b* |8 R- Y- `5 h' u        LOG_FATAL("failed to create hwi");0 z4 h6 n" H5 Y3 L+ e5 L. Y
2 C; Z3 }$ O6 A( K% O. k0 {6 r5 ?9 g
        /* enable both interrupts */
+ k) K+ J4 q4 }7 f' H  ~% Z        Hwi_enableInterrupt(ad->irq_event);
  |/ Q% p$ U6 W+ M, e- W0 a  q- ?( M}
3 H, \5 I* ]. r
4 w( c% H" {# |+ m. W# U* C* R( N8 R, Z( I5 t3 S) C" F4 i" H
static void ad7606_gpio_pinmux_setup(ad7606 *ad) {
- ~" D9 W( G3 y! N% L        volatile unsigned int savePinMux = 0;
- A6 l! X0 {' h        //初始化5.11、5.9 、 5.5为GPIO口
/ m5 Y  T  V( g: Y3 F, L9 N        savePinMux = HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) & (~(SYSCFG_PINMUX11_PINMUX11_27_24 | SYSCFG_PINMUX11_PINMUX11_19_16));
! E: J9 V( A5 D3 |8 R, O; \/ Q) z' J1 w
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(11)) =        (PINMUX11_BUSY_V1_ENABLE | PINMUX11_BUSY_V2_ENABLE | savePinMux);
$ e$ x: `  T& a% A
# D; K  z) m  E0 X4 A        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));; Y; H4 h0 y1 T, {' Q
1 [0 T9 c2 [% @
        HWREG(SOC_SYSCFG_0_REGS + SYSCFG0_PINMUX(12)) =        (PINMUX12_RESET_ENABLE | PINMUX12_CONVST_ENABLE | PINMUX12_RD_ENABLE | PINMUX12_BUSY_C_ENABLE | savePinMux);
8 ^6 F- [" G9 r% [, I* G% A, ^' d2 _' D
}0 q! z4 {. G, @0 P, A; ~4 @
" z  P$ Q2 |' e* t
7 j7 J9 K& u; Z+ R2 M9 a
static void ad7606_gpio_setup(ad7606 *ad) {$ Y0 v5 o2 D: D% J: o
        /*Set the AD7606_PAR_BUSY to the input mode*/% A$ |) ?8 ?9 f' h5 J( ?7 q
        //初始化5.11、5.9 、 5.5为中断口
& P5 u, n/ t' _  K; g6 y        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_DIR_INPUT);" S, V' G$ g; }: }# C+ U
        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_DIR_INPUT);
0 G2 }) l, Z7 e9 n        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_DIR_INPUT);
5 y& `, ~# D, D! X& z# E" w        //GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_DIR_INPUT);9 b( ~# p: G5 C& K
        /*Set the AD7606_PAR_BUSY to the Falling Edge Interrupt*/
4 S; d- ~' L4 X2 T, [! Y( Z        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1, GPIO_INT_TYPE_FALLEDGE);1 H1 `6 X# g+ ]# f7 G
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2, GPIO_INT_TYPE_FALLEDGE);+ M% E: Y# o/ Y* ^' j) S* ~" Z
        GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C, GPIO_INT_TYPE_FALLEDGE);6 U% ]) B7 I8 h7 o8 D& `
        //GPIOIntTypeSet(SOC_GPIO_0_REGS, AD7606_PAR_BUSY, GPIO_INT_TYPE_FALLEDGE);4 K/ y# }" \1 ~" h
        /*The interrupt setting allows AD7606_PAR_BUSY_GPIO_BANK*/5 ~% r/ {  Z7 o' S
        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);/ I& e4 u: `9 n4 [& R

: P; ]" ^# U; V4 q        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_DIR_OUTPUT);" [7 |0 \6 t3 L" k
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_HIGH);% `! D) t7 J, ^- S% k7 ?% ~. ?+ h
        Task_sleep(1000);; P* u. G- M3 p
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RESET, GPIO_PIN_LOW);; G! I1 B7 G& E; x2 y* J3 s
        Task_sleep(1000);# s/ S  S; Z& @( _1 R# h* K  c% a
: k' P0 m- n  M- F) G
        /*Set the AD7606_PAR_CONVST to output mode*/
- |# ~4 H* \' B$ r( A) l        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_DIR_OUTPUT);
' {1 K" ~# k" C# q        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
1 G: r- r8 Y- a4 E( U5 X
- c4 Z9 ]$ K0 V7 E/ f, p: d        GPIODirModeSet(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_DIR_OUTPUT);
6 d: h( E4 x' |& a        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_RD, GPIO_PIN_HIGH);/ X  \5 m8 F4 \5 a& @
7 X/ w+ v/ M: Z9 c3 g7 b, R
}
$ q9 H+ L% a& z0 X/ y3 }
* w- f2 n3 Z1 j- V! Z$ ]. c6 X0 Y1 W3 M* F* k6 M
static void ad7606_busy_hwi(UArg ad_addr) {1 T& F2 W, _% Z, |
8 S  H6 `+ b2 u6 R6 w. S# S  ?

- z2 }7 {8 r* i' k1 g        /* Disable the interrupts for pins of bank AD7606_PAR_BUSY in GPIO.*/
& W/ y7 Q, G  T9 [, C0 F9 J        GPIOBankIntDisable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);      //用仿真器debug,发现程序能进入这里。
7 u/ g: R9 h; s3 k1 X' W
* B6 A1 _* y  t4 E# {- S' f$ N        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1) == GPIO_INT_PEND)& a" ~5 ~& g* {% O
        {1 F$ X" a% T+ U
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V1);                    //问题是:用仿真器debug,发现程序不能进入这里。/ O0 a; i7 n/ o
                cs_addr = SOC_EMIFA_CS5_ADDR ;
+ |! c$ R- c* F0 \, h5 ~                internal = 0 ;+ i- R$ N9 k3 i! l- L
                int_flag[0] = 1 ;
& ?) ~6 U' N( g3 O7 a0 A        }
7 v2 _; C; Z( `7 {7 a- d        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2) == GPIO_INT_PEND)
/ D/ j7 n7 k3 N" N" _        {5 q( x0 U9 H$ l. O' \  J
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_V2); //问题是:用仿真器debug,发现程序不能进入这里。
9 Z$ ]0 A/ U! t4 T( v& L# k                cs_addr = SOC_EMIFA_CS4_ADDR ;
, U7 O$ c' F& c) H& |# x                internal = 6 ;+ l( z" Z& N! o
                int_flag[1] = 1 ;+ F- y- [% D4 d. [/ m0 L2 W& W
        }
; T; Z% }8 q+ a        if(GPIOPinIntStatus(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C) == GPIO_INT_PEND). B8 a+ w6 D/ r7 A7 q
        {5 n5 p; y/ Q( |, p1 M( N/ e
                GPIOPinIntClear(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_C); //问题是:用仿真器debug,发现程序不能进入这里。* W1 {! x% A0 W+ s/ b+ g
                cs_addr = SOC_EMIFA_CS2_ADDR ;
' H( A) f1 n  e+ f                internal = 12 ;; V# V7 r( ^' y' ^
                int_flag[2] = 1 ;  L$ N- V) J; x2 [
        }+ r; ~/ J  U! Y% N
  2 U7 W2 \% D% F7 L; U
        GPIOPinWrite(SOC_GPIO_0_REGS, AD7606_PAR_CONVST, GPIO_PIN_LOW);
7 R. A: j, q: [' i; l) Z* n; _, ~      
6 o/ {5 b2 _6 s- X) r$ `1 Z/ B        GPIOBankIntEnable(SOC_GPIO_0_REGS, AD7606_PAR_BUSY_GPIO_BANK);
( j% _' J! i1 G4 p8 [8 d}
7 E9 Q9 f' F! f; g
/ Z$ v5 B/ r4 i- ~
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

32

主题

54

帖子

1263

积分

金牌会员

Rank: 6Rank: 6

积分
1263
沙发
 楼主| 发表于 2016-8-31 16:53:50 | 只看该作者
INTSTAT45状态如图
$ {8 U. w. `$ Q; e; z$ m" F4 a% t$ Q& v+ O) B' \& ?

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-16 22:24 , Processed in 0.036782 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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